https://github.com/owenca created https://github.com/llvm/llvm-project/pull/66354:
See https://reviews.llvm.org/D136154#3890747 for context. Fixes part of #58592. >From 9a15ec3256e2d380d5eb70f0751ea1bb457895dd Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Thu, 14 Sep 2023 02:59:43 -0700 Subject: [PATCH] [clang-format] Fix a bug in ContinuationIndenter See https://reviews.llvm.org/D136154#3890747 for context. Fixes part of #58592. --- clang/lib/Format/ContinuationIndenter.cpp | 5 +++-- clang/unittests/Format/FormatTest.cpp | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 75ab08de42ea0e8..8f14105751daefa 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -876,8 +876,9 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, FormatStyle::BCIS_AfterColon) { CurrentState.Indent = State.Column; CurrentState.LastSpace = State.Column; - } else if ((Previous.isOneOf(TT_BinaryOperator, TT_ConditionalExpr, - TT_CtorInitializerColon)) && + } else if (Previous.isOneOf(TT_ConditionalExpr, TT_CtorInitializerColon)) { + State.Stack.back().LastSpace = State.Column; + } else if (Previous.is(TT_BinaryOperator) && ((Previous.getPrecedence() != prec::Assignment && (Previous.isNot(tok::lessless) || Previous.OperatorIndex != 0 || Previous.NextOperator)) || diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 4f72166bdce2d73..0d0fbdb84e3271b 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7108,6 +7108,29 @@ TEST_F(FormatTest, ExpressionIndentationBreakingBeforeOperators) { "(someOtherLongishConditionPart1 || " "someOtherEvenLongerNestedConditionPart2);", Style); + + Style = getLLVMStyleWithColumns(20); + Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak; + Style.BinPackParameters = false; + Style.BreakBeforeBinaryOperators = FormatStyle::BOS_NonAssignment; + Style.ContinuationIndentWidth = 2; + verifyFormat("struct Foo {\n" + " Foo(\n" + " int arg1,\n" + " int arg2)\n" + " : Base(\n" + " arg1,\n" + " arg2) {}\n" + "};", + Style); + verifyFormat("return abc\n" + " ? foo(\n" + " a,\n" + " b,\n" + " bar(\n" + " abc))\n" + " : g(abc);", + Style); } TEST_F(FormatTest, ExpressionIndentationStrictAlign) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits