curdeius updated this revision to Diff 408289.
curdeius marked an inline comment as done.
curdeius added a comment.
Rebased.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119648/new/
https://reviews.llvm.org/D119648
Files:
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -2031,6 +2031,10 @@
verifyFormat("for (int x = 0; int &c : {1, 2, 3})", Style);
verifyFormat("for (f(); auto &c : {1, 2, 3})", Style);
verifyFormat("for (f(); int &c : {1, 2, 3})", Style);
+ verifyFormat(
+ "function<int(int &)> res1 = [](int &a) { return 0000000000000; },\n"
+ " res2 = [](int &a) { return 0000000000000; };",
+ Style);
Style.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive;
verifyFormat("Const unsigned int *c;\n"
@@ -2068,6 +2072,10 @@
verifyFormat("for (int x = 0; int& c : {1, 2, 3})", Style);
verifyFormat("for (f(); auto& c : {1, 2, 3})", Style);
verifyFormat("for (f(); int& c : {1, 2, 3})", Style);
+ verifyFormat(
+ "function<int(int&)> res1 = [](int& a) { return 0000000000000; },\n"
+ " res2 = [](int& a) { return 0000000000000; };",
+ Style);
Style.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive;
verifyFormat("Const unsigned int* c;\n"
@@ -2121,6 +2129,10 @@
verifyFormat("for (int x = 0; int & c : {1, 2, 3})", Style);
verifyFormat("for (f(); auto & c : {1, 2, 3})", Style);
verifyFormat("for (f(); int & c : {1, 2, 3})", Style);
+ verifyFormat(
+ "function<int(int &)> res1 = [](int & a) { return 0000000000000; },\n"
+ " res2 = [](int & a) { return 0000000000000; };",
+ Style);
Style.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive;
verifyFormat("Const unsigned int* c;\n"
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -3134,7 +3134,15 @@
return false;
if (getTokenPointerOrReferenceAlignment(Left) == FormatStyle::PAS_Right)
return false;
- if (Line.IsMultiVariableDeclStmt)
+ // FIXME: Setting IsMultiVariableDeclStmt for the whole line is
error-prone,
+ // because it does not take into account nested scopes like lambdas.
+ // In multi-variable declaration statements, attach */& to the variable
+ // independently of the style. However, avoid doing it if we are in a
nested
+ // scope, e.g. lambda. We still need to special-case statements with
+ // initializers.
+ if (Line.IsMultiVariableDeclStmt &&
+ (Left.NestingLevel == Line.First->NestingLevel ||
+ startsWithInitStatement(Line)))
return false;
return Left.Previous && !Left.Previous->isOneOf(
tok::l_paren, tok::coloncolon, tok::l_square);
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -2031,6 +2031,10 @@
verifyFormat("for (int x = 0; int &c : {1, 2, 3})", Style);
verifyFormat("for (f(); auto &c : {1, 2, 3})", Style);
verifyFormat("for (f(); int &c : {1, 2, 3})", Style);
+ verifyFormat(
+ "function<int(int &)> res1 = [](int &a) { return 0000000000000; },\n"
+ " res2 = [](int &a) { return 0000000000000; };",
+ Style);
Style.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive;
verifyFormat("Const unsigned int *c;\n"
@@ -2068,6 +2072,10 @@
verifyFormat("for (int x = 0; int& c : {1, 2, 3})", Style);
verifyFormat("for (f(); auto& c : {1, 2, 3})", Style);
verifyFormat("for (f(); int& c : {1, 2, 3})", Style);
+ verifyFormat(
+ "function<int(int&)> res1 = [](int& a) { return 0000000000000; },\n"
+ " res2 = [](int& a) { return 0000000000000; };",
+ Style);
Style.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive;
verifyFormat("Const unsigned int* c;\n"
@@ -2121,6 +2129,10 @@
verifyFormat("for (int x = 0; int & c : {1, 2, 3})", Style);
verifyFormat("for (f(); auto & c : {1, 2, 3})", Style);
verifyFormat("for (f(); int & c : {1, 2, 3})", Style);
+ verifyFormat(
+ "function<int(int &)> res1 = [](int & a) { return 0000000000000; },\n"
+ " res2 = [](int & a) { return 0000000000000; };",
+ Style);
Style.AlignConsecutiveDeclarations = FormatStyle::ACS_Consecutive;
verifyFormat("Const unsigned int* c;\n"
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -3134,7 +3134,15 @@
return false;
if (getTokenPointerOrReferenceAlignment(Left) == FormatStyle::PAS_Right)
return false;
- if (Line.IsMultiVariableDeclStmt)
+ // FIXME: Setting IsMultiVariableDeclStmt for the whole line is error-prone,
+ // because it does not take into account nested scopes like lambdas.
+ // In multi-variable declaration statements, attach */& to the variable
+ // independently of the style. However, avoid doing it if we are in a nested
+ // scope, e.g. lambda. We still need to special-case statements with
+ // initializers.
+ if (Line.IsMultiVariableDeclStmt &&
+ (Left.NestingLevel == Line.First->NestingLevel ||
+ startsWithInitStatement(Line)))
return false;
return Left.Previous && !Left.Previous->isOneOf(
tok::l_paren, tok::coloncolon, tok::l_square);
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits