diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1348,16 +1348,20 @@ 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 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -11259,6 +11259,23 @@ "\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) {