llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-format <details> <summary>Changes</summary> By default, OuterScope aligns lambdas to the beginning of the current line. This makes sense for most types of statements within code blocks but leads to unappealing and misleading indentation for lambdas within constructor initializers. --- Full diff: https://github.com/llvm/llvm-project/pull/66755.diff 2 Files Affected: - (modified) clang/lib/Format/ContinuationIndenter.cpp (+2-1) - (modified) clang/unittests/Format/FormatTest.cpp (+23-7) ``````````diff diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index deb3e554fdc124b..0fa70eace90f416 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1955,7 +1955,8 @@ void ContinuationIndenter::moveStatePastScopeCloser(LineState &State) { void ContinuationIndenter::moveStateToNewBlock(LineState &State) { if (Style.LambdaBodyIndentation == FormatStyle::LBI_OuterScope && - State.NextToken->is(TT_LambdaLBrace)) { + State.NextToken->is(TT_LambdaLBrace) && State.Line && + !State.Line->MightBeFunctionDecl) { State.Stack.back().NestedBlockIndent = State.FirstIndent; } unsigned NestedBlockIndent = State.Stack.back().NestedBlockIndent; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 0d0fbdb84e3271b..cb6b22b32e63350 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -22537,10 +22537,12 @@ TEST_F(FormatTest, FormatsLambdas) { " }\n" "}", Style); - verifyFormat("std::sort(v.begin(), v.end(),\n" - " [](const auto &foo, const auto &bar) {\n" - " return foo.baz < bar.baz;\n" - "});", + verifyFormat("void test() {\n" + " std::sort(v.begin(), v.end(),\n" + " [](const auto &foo, const auto &bar) {\n" + " return foo.baz < bar.baz;\n" + " });\n" + "};", Style); verifyFormat("void test() {\n" " (\n" @@ -22589,9 +22591,23 @@ TEST_F(FormatTest, FormatsLambdas) { verifyFormat("Namespace::Foo::Foo(LongClassName bar,\n" " AnotherLongClassName baz)\n" " : baz{baz}, func{[&] {\n" - " auto qux = bar;\n" - " return aFunkyFunctionCall(qux);\n" - "}} {}", + " auto qux = bar;\n" + " return aFunkyFunctionCall(qux);\n" + " }} {}", + Style); + verifyFormat("void foo() {\n" + " class Foo {\n" + " public:\n" + " Foo()\n" + " : qux{[](int quux) {\n" + " auto tmp = quux;\n" + " return tmp;\n" + " }} {}\n" + "\n" + " private:\n" + " std::function<void(int quux)> qux;\n" + " };\n" + "}\n", Style); Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak; // FIXME: The following test should pass, but fails at the time of writing. `````````` </details> https://github.com/llvm/llvm-project/pull/66755 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits