Author: Emilia Kond Date: 2024-01-22T14:57:37+02:00 New Revision: fa6025e25b5754e8cf39169e3a7085b57ea35de5
URL: https://github.com/llvm/llvm-project/commit/fa6025e25b5754e8cf39169e3a7085b57ea35de5 DIFF: https://github.com/llvm/llvm-project/commit/fa6025e25b5754e8cf39169e3a7085b57ea35de5.diff LOG: [clang-format] Don't confuse initializer equal signs in for loops (#77712) clang-format has logic to align declarations of multiple variables of the same type, aligning them at the equals sign. This logic is applied in for loops as well. However, this alignment logic also erroneously affected the equals signs of designated initializers. This patch forbids alignment if the token 2 tokens back from the equals sign is a designated initializer period. Fixes https://github.com/llvm/llvm-project/issues/73902 Added: Modified: clang/lib/Format/ContinuationIndenter.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index e6eaaa9ab45706..ddbee15cb159f6 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -703,7 +703,9 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, if (Current.is(tok::equal) && (State.Line->First->is(tok::kw_for) || Current.NestingLevel == 0) && - CurrentState.VariablePos == 0) { + CurrentState.VariablePos == 0 && + (!Previous.Previous || + Previous.Previous->isNot(TT_DesignatedInitializerPeriod))) { CurrentState.VariablePos = State.Column; // Move over * and & if they are bound to the variable name. const FormatToken *Tok = &Previous; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 3fb55ae2c1f413..a0825dc2ad4ef1 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -5008,6 +5008,18 @@ TEST_F(FormatTest, DesignatedInitializers) { " [3] = cccccccccccccccccccccccccccccccccccccc,\n" " [4] = dddddddddddddddddddddddddddddddddddddd,\n" " [5] = eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee};"); + + verifyFormat("for (const TestCase &test_case : {\n" + " TestCase{\n" + " .a = 1,\n" + " .b = 1,\n" + " },\n" + " TestCase{\n" + " .a = 2,\n" + " .b = 2,\n" + " },\n" + " }) {\n" + "}\n"); } TEST_F(FormatTest, BracedInitializerIndentWidth) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits