Author: Maximilian Fickert Date: 2020-08-11T14:56:26+02:00 New Revision: b18c63e85aa8191e583cd1014757904c344b45d7
URL: https://github.com/llvm/llvm-project/commit/b18c63e85aa8191e583cd1014757904c344b45d7 DIFF: https://github.com/llvm/llvm-project/commit/b18c63e85aa8191e583cd1014757904c344b45d7.diff LOG: [clang-format] use spaces for alignment of binary/ternary expressions with UT_AlignWithSpaces Use spaces to align binary and ternary expressions when using AlignOperands and UT_AlignWithSpaces. This fixes an oversight in the new UT_AlignWithSpaces option (see D75034), which did not correctly identify the alignment of binary/ternary expressions. Reviewed By: curdeius Patch by: fickert Differential Revision: https://reviews.llvm.org/D85600 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 f3202bcb5bc1..d99107cb8b2c 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1348,16 +1348,20 @@ void ContinuationIndenter::moveStatePastFakeLParens(LineState &State, State.Stack.back().LastSpace); } - // If BreakBeforeBinaryOperators is set, un-indent a bit to account for - // the operator and keep the operands aligned - if (Style.AlignOperands == FormatStyle::OAS_AlignAfterOperator && - Previous && + if (Previous && (Previous->getPrecedence() == prec::Assignment || Previous->is(tok::kw_return) || (*I == prec::Conditional && Previous->is(tok::question) && Previous->is(TT_ConditionalExpr))) && - !Newline) - NewParenState.UnindentOperator = true; + !Newline) { + // If BreakBeforeBinaryOperators is set, un-indent a bit to account for + // the operator and keep the operands aligned + if (Style.AlignOperands == FormatStyle::OAS_AlignAfterOperator) + NewParenState.UnindentOperator = true; + // Mark indentation as alignment if the expression is aligned. + if (Style.AlignOperands != FormatStyle::OAS_DontAlign) + NewParenState.IsAligned = true; + } // Do not indent relative to the fake parentheses inserted for "." or "->". // This is a special case to make the following to statements consistent: diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index d8642062fb6f..dcd9da77a390 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -11259,6 +11259,23 @@ TEST_F(FormatTest, ConfigurableUseOfTab) { "\t}\n" "};", Tab); + Tab.AlignOperands = FormatStyle::OAS_Align; + verifyFormat("int aaaaaaaaaa = bbbbbbbbbbbbbbbbbbbb +\n" + " cccccccccccccccccccc;", + Tab); + // no alignment + verifyFormat("int aaaaaaaaaa =\n" + "\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;", + Tab); + verifyFormat("return aaaaaaaaaaaaaaaa ? 111111111111111\n" + " : bbbbbbbbbbbbbb ? 222222222222222\n" + " : 333333333333333;", + Tab); + Tab.BreakBeforeBinaryOperators = FormatStyle::BOS_All; + Tab.AlignOperands = FormatStyle::OAS_AlignAfterOperator; + verifyFormat("int aaaaaaaaaa = bbbbbbbbbbbbbbbbbbbb\n" + " + cccccccccccccccccccc;", + Tab); } TEST_F(FormatTest, ZeroTabWidth) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits