forked from OSchip/llvm-project
clang-format: precedence-based indentation when breaking before operators.
Before: bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa > ccccccccccccccccccccccccccccccccccccccccc; After: bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa > ccccccccccccccccccccccccccccccccccccccccc; Not particularly pretty, but can probably help to uncover bugs. And if this bugs somebody, parentheses can help. llvm-svn: 223111
This commit is contained in:
parent
15f91c5240
commit
8c6e9ef676
|
@ -168,7 +168,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) {
|
||||||
|
|
||||||
if (State.Column < getNewLineColumn(State))
|
if (State.Column < getNewLineColumn(State))
|
||||||
return false;
|
return false;
|
||||||
if (!Style.BreakBeforeBinaryOperators) {
|
if (Style.BreakBeforeBinaryOperators == FormatStyle::BOS_None) {
|
||||||
// If we need to break somewhere inside the LHS of a binary expression, we
|
// If we need to break somewhere inside the LHS of a binary expression, we
|
||||||
// should also break after the operator. Otherwise, the formatting would
|
// should also break after the operator. Otherwise, the formatting would
|
||||||
// hide the operator precedence, e.g. in:
|
// hide the operator precedence, e.g. in:
|
||||||
|
@ -740,11 +740,12 @@ void ContinuationIndenter::moveStatePastFakeLParens(LineState &State,
|
||||||
if (Previous && Previous->getPrecedence() > prec::Assignment &&
|
if (Previous && Previous->getPrecedence() > prec::Assignment &&
|
||||||
Previous->isOneOf(TT_BinaryOperator, TT_ConditionalExpr) &&
|
Previous->isOneOf(TT_BinaryOperator, TT_ConditionalExpr) &&
|
||||||
Previous->getPrecedence() != prec::Relational) {
|
Previous->getPrecedence() != prec::Relational) {
|
||||||
bool BreakBeforeOperator = Previous->is(tok::lessless) ||
|
bool BreakBeforeOperator =
|
||||||
(Previous->is(TT_BinaryOperator) &&
|
Previous->is(tok::lessless) ||
|
||||||
Style.BreakBeforeBinaryOperators) ||
|
(Previous->is(TT_BinaryOperator) &&
|
||||||
(Previous->is(TT_ConditionalExpr) &&
|
Style.BreakBeforeBinaryOperators != FormatStyle::BOS_None) ||
|
||||||
Style.BreakBeforeTernaryOperators);
|
(Previous->is(TT_ConditionalExpr) &&
|
||||||
|
Style.BreakBeforeTernaryOperators);
|
||||||
if ((!Newline && !BreakBeforeOperator) ||
|
if ((!Newline && !BreakBeforeOperator) ||
|
||||||
(!State.Stack.back().LastOperatorWrapped && BreakBeforeOperator))
|
(!State.Stack.back().LastOperatorWrapped && BreakBeforeOperator))
|
||||||
NewParenState.NoLineBreak = true;
|
NewParenState.NoLineBreak = true;
|
||||||
|
@ -766,7 +767,7 @@ void ContinuationIndenter::moveStatePastFakeLParens(LineState &State,
|
||||||
// other expression, unless the indentation needs to be skipped.
|
// other expression, unless the indentation needs to be skipped.
|
||||||
if (*I == prec::Conditional ||
|
if (*I == prec::Conditional ||
|
||||||
(!SkipFirstExtraIndent && *I > prec::Assignment &&
|
(!SkipFirstExtraIndent && *I > prec::Assignment &&
|
||||||
!Current.isTrailingComment() && !Style.BreakBeforeBinaryOperators))
|
!Current.isTrailingComment()))
|
||||||
NewParenState.Indent += Style.ContinuationIndentWidth;
|
NewParenState.Indent += Style.ContinuationIndentWidth;
|
||||||
if ((Previous && !Previous->opensScope()) || *I > prec::Comma)
|
if ((Previous && !Previous->opensScope()) || *I > prec::Comma)
|
||||||
NewParenState.BreakBeforeParameter = false;
|
NewParenState.BreakBeforeParameter = false;
|
||||||
|
|
|
@ -3255,34 +3255,34 @@ TEST_F(FormatTest, ExpressionIndentationBreakingBeforeOperators) {
|
||||||
Style.BreakBeforeBinaryOperators = FormatStyle::BOS_All;
|
Style.BreakBeforeBinaryOperators = FormatStyle::BOS_All;
|
||||||
verifyFormat(
|
verifyFormat(
|
||||||
"bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
"bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
|
" * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
|
||||||
" + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
|
" + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
|
||||||
" && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" > ccccccccccccccccccccccccccccccccccccccccc;",
|
" > ccccccccccccccccccccccccccccccccccccccccc;",
|
||||||
Style);
|
Style);
|
||||||
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" == bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
|
" == bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
|
||||||
Style);
|
Style);
|
||||||
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" == bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
|
" == bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
|
||||||
Style);
|
Style);
|
||||||
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
" * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
|
||||||
" + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
|
" + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
|
||||||
Style);
|
Style);
|
||||||
verifyFormat("if () {\n"
|
verifyFormat("if () {\n"
|
||||||
"} else if (aaaaa\n"
|
"} else if (aaaaa\n"
|
||||||
" && bbbbb // break\n"
|
" && bbbbb // break\n"
|
||||||
" > ccccc) {\n"
|
" > ccccc) {\n"
|
||||||
"}",
|
"}",
|
||||||
Style);
|
Style);
|
||||||
verifyFormat("return (a)\n"
|
verifyFormat("return (a)\n"
|
||||||
|
|
Loading…
Reference in New Issue