rymiel created this revision. rymiel added reviewers: HazardyKnusperkeks, owenpan, MyDeveloperDay. rymiel added a project: clang-format. Herald added a project: All. rymiel requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
D119599 <https://reviews.llvm.org/D119599> added the ability to align compound assignments, right aligning them in order to line up at the equals sign. However, that patch didn't account for AlignTokens being called recursively across scopes, which reset the right justification to be false in any scope besides the top scope. This meant the compound assignments were aligned, just not at the right place. (No tests also ever introduced any scopes) This patch makes sure to inherit the right justification value, just as every other parameter is passed on. Fixes https://github.com/llvm/llvm-project/issues/58029 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D141288 Files: clang/lib/Format/WhitespaceManager.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -17693,6 +17693,20 @@ "dvsdsv <<= 5;\n" "int dsvvdvsdvvv = 123;", Alignment); + verifyFormat("int xxx = 5;\n" + "xxx = 5;\n" + "{\n" + " int yyy = 6;\n" + " yyy = 6;\n" + "}", + Alignment); + verifyFormat("int xxx = 5;\n" + "xxx += 5;\n" + "{\n" + " int yyy = 6;\n" + " yyy += 6;\n" + "}", + Alignment); // Test that `<=` is not treated as a compound assignment. verifyFormat("aa &= 5;\n" "b <= 10;\n" Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -609,7 +609,8 @@ ++CommasBeforeMatch; } else if (Changes[i].indentAndNestingLevel() > IndentAndNestingLevel) { // Call AlignTokens recursively, skipping over this scope block. - unsigned StoppedAt = AlignTokens(Style, Matches, Changes, i, ACS); + unsigned StoppedAt = + AlignTokens(Style, Matches, Changes, i, ACS, RightJustify); i = StoppedAt - 1; continue; }
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -17693,6 +17693,20 @@ "dvsdsv <<= 5;\n" "int dsvvdvsdvvv = 123;", Alignment); + verifyFormat("int xxx = 5;\n" + "xxx = 5;\n" + "{\n" + " int yyy = 6;\n" + " yyy = 6;\n" + "}", + Alignment); + verifyFormat("int xxx = 5;\n" + "xxx += 5;\n" + "{\n" + " int yyy = 6;\n" + " yyy += 6;\n" + "}", + Alignment); // Test that `<=` is not treated as a compound assignment. verifyFormat("aa &= 5;\n" "b <= 10;\n" Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -609,7 +609,8 @@ ++CommasBeforeMatch; } else if (Changes[i].indentAndNestingLevel() > IndentAndNestingLevel) { // Call AlignTokens recursively, skipping over this scope block. - unsigned StoppedAt = AlignTokens(Style, Matches, Changes, i, ACS); + unsigned StoppedAt = + AlignTokens(Style, Matches, Changes, i, ACS, RightJustify); i = StoppedAt - 1; continue; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits