From 0e8e53bc16e589b64f9263c0fb8d574f28b64260 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Thu, 3 Apr 2014 12:00:33 +0000 Subject: [PATCH] clang-format: Prefer an additional line-break over hanging indent. Don't allow the RHS of an operator to be split over multiple lines unless there is a line-break right after the operator. Before: if (aaaa && bbbbb || // break cccc) { } After: if (aaaa && bbbbb || // break cccc) { } In most cases, this seems to increase readability. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205527 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/ContinuationIndenter.cpp | 12 ++++++++++++ unittests/Format/FormatTest.cpp | 5 +++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/Format/ContinuationIndenter.cpp b/lib/Format/ContinuationIndenter.cpp index 38086379fe..5a3dee6387 100644 --- a/lib/Format/ContinuationIndenter.cpp +++ b/lib/Format/ContinuationIndenter.cpp @@ -609,6 +609,18 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State, std::max(std::max(State.Column, NewParenState.Indent), State.Stack.back().LastSpace); + // Don't allow the RHS of an operator to be split over multiple lines unless + // there is a line-break right after the operator. + // Exclude relational operators, as there, it is always more desirable to + // have the LHS 'left' of the RHS. + // FIXME: Implement this for '<<' and BreakBeforeBinaryOperators. + if (!Newline && Previous && Previous->Type == TT_BinaryOperator && + !Previous->isOneOf(tok::lessless, tok::question, tok::colon) && + Previous->getPrecedence() > prec::Assignment && + Previous->getPrecedence() != prec::Relational && + !Style.BreakBeforeBinaryOperators) + NewParenState.NoLineBreak = 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 diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 5395fd9892..76062605f7 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -2889,8 +2889,9 @@ TEST_F(FormatTest, ExpressionIndentation) { " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n" " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}"); verifyFormat("if () {\n" - "} else if (aaaaa && bbbbb > // break\n" - " ccccc) {\n" + "} else if (aaaaa &&\n" + " bbbbb > // break\n" + " ccccc) {\n" "}"); // Presence of a trailing comment used to change indentation of b. -- 2.40.0