fickert created this revision. fickert added reviewers: clang-format, MyDeveloperDay. fickert added projects: clang-format, clang-tools-extra. Herald added a project: clang. Herald added a subscriber: cfe-commits. fickert requested review of this revision.
Use spaces to align binary and ternary expressions when using AlignOperands and UT_AlignWithSpaces. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D85600 Files: clang/lib/Format/ContinuationIndenter.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ 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) { Index: clang/lib/Format/ContinuationIndenter.cpp =================================================================== --- clang/lib/Format/ContinuationIndenter.cpp +++ clang/lib/Format/ContinuationIndenter.cpp @@ -1359,6 +1359,14 @@ !Newline) NewParenState.UnindentOperator = true; + if (Style.AlignOperands != FormatStyle::OAS_DontAlign && Previous && + (Previous->getPrecedence() == prec::Assignment || + Previous->is(tok::kw_return) || + (*I == prec::Conditional && Previous->is(tok::question) && + Previous->is(TT_ConditionalExpr))) && + !Newline) + 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: // OuterFunction(InnerFunctionCall( // break
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ 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) { Index: clang/lib/Format/ContinuationIndenter.cpp =================================================================== --- clang/lib/Format/ContinuationIndenter.cpp +++ clang/lib/Format/ContinuationIndenter.cpp @@ -1359,6 +1359,14 @@ !Newline) NewParenState.UnindentOperator = true; + if (Style.AlignOperands != FormatStyle::OAS_DontAlign && Previous && + (Previous->getPrecedence() == prec::Assignment || + Previous->is(tok::kw_return) || + (*I == prec::Conditional && Previous->is(tok::question) && + Previous->is(TT_ConditionalExpr))) && + !Newline) + 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: // OuterFunction(InnerFunctionCall( // break
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits