[clang] e2b6e21 - [clang-format] Fix incorrect formatting of lambdas inside brace initialisation
Marek Kurdej via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 3 23:28:16 PST 2022
Author: Marek Kurdej
Date: 2022-01-04T08:28:12+01:00
New Revision: e2b6e21f19da6fe0da9349264e43286f0441b4ca
URL: https://github.com/llvm/llvm-project/commit/e2b6e21f19da6fe0da9349264e43286f0441b4ca
DIFF: https://github.com/llvm/llvm-project/commit/e2b6e21f19da6fe0da9349264e43286f0441b4ca.diff
LOG: [clang-format] Fix incorrect formatting of lambdas inside brace initialisation
Fixes https://github.com/llvm/llvm-project/issues/27146.
Fixes https://github.com/llvm/llvm-project/issues/52943.
Before:
```
namespace ns {
void foo() {
std::variant<int, double> v;
std::visit(overloaded{[](auto &&) -> int (*)[] { return nullptr; }}, v);
}
} // namespace ns
int break_me() {
int x = 42;
return int{[x = x]() {
return x;
}()};
}
```
got formatted as:
```
namespace ns {
void foo() {
std::variant<int, double> v;
std::visit(overloaded{[](auto &&) -> int (*)[] { return nullptr;
}
} // namespace ns
, v);
}
} // namespace ns
int break_me() {
int x = 42;
return int{[x = x](){return x;
}
()
}
;
}
```
Reviewed By: HazardyKnusperkeks, owenpan
Differential Revision: https://reviews.llvm.org/D116553
Added:
Modified:
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 0579acf36391c..17187b7996aae 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -1786,6 +1786,9 @@ bool UnwrappedLineParser::tryToParseLambda() {
case tok::l_paren:
parseParens();
break;
+ case tok::l_square:
+ parseSquare();
+ break;
case tok::amp:
case tok::star:
case tok::kw_const:
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 49635f3f15eae..71f07412a3b69 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -20232,6 +20232,11 @@ TEST_F(FormatTest, FormatsLambdas) {
"};");
verifyFormat("[]() -> Void<T...> {};");
verifyFormat("[a, b]() -> Tuple<T...> { return {}; };");
+ verifyFormat("SomeFunction({[]() -> int[] { return {}; }});");
+ verifyFormat("SomeFunction({[]() -> int *[] { return {}; }});");
+ verifyFormat("SomeFunction({[]() -> int (*)[] { return {}; }});");
+ verifyFormat("SomeFunction({[]() -> ns::type<int (*)[]> { return {}; }});");
+ verifyFormat("return int{[x = x]() { return x; }()};");
// Lambdas with explicit template argument lists.
verifyFormat(
More information about the cfe-commits
mailing list