forked from OSchip/llvm-project
Take operator precedence into account when splitting lines.
With this patch, splitting after binary operators has a panelty corresponding to the operator's precedence. We used to ignore this and eagerly format like: if (aaaaaaaaaaaaaaaaaaaaaaaaa || bbbbbbbbbbbbbbbbbbbbbbbbb && ccccccccccccccccccccccccc) { .. } With this patch, this becomes: if (aaaaaaaaaaaaaaaaaaaaaaaaa || bbbbbbbbbbbbbbbbbbbbbbbbb && ccccccccccccccccccccccccc) { .. } llvm-svn: 171007
This commit is contained in:
parent
32e0aa3a50
commit
de5c20792d
|
@ -90,7 +90,7 @@ public:
|
|||
: Style(Style), SourceMgr(SourceMgr), Line(Line),
|
||||
Annotations(Annotations), Replaces(Replaces),
|
||||
StructuralError(StructuralError) {
|
||||
Parameters.PenaltyIndentLevel = 5;
|
||||
Parameters.PenaltyIndentLevel = 15;
|
||||
}
|
||||
|
||||
void format() {
|
||||
|
@ -325,10 +325,14 @@ private:
|
|||
|
||||
if (Left.Tok.is(tok::semi) || Left.Tok.is(tok::comma))
|
||||
return 0;
|
||||
if (Left.Tok.is(tok::equal) || Left.Tok.is(tok::l_paren) ||
|
||||
Left.Tok.is(tok::pipepipe) || Left.Tok.is(tok::ampamp))
|
||||
if (Left.Tok.is(tok::l_paren))
|
||||
return 2;
|
||||
|
||||
prec::Level Level =
|
||||
getBinOpPrecedence(Line.Tokens[Index].Tok.getKind(), true, true);
|
||||
if (Level != prec::Unknown)
|
||||
return Level;
|
||||
|
||||
if (Right.Tok.is(tok::arrow) || Right.Tok.is(tok::period))
|
||||
return 200;
|
||||
|
||||
|
|
|
@ -456,6 +456,21 @@ TEST_F(FormatTest, BreaksDesireably) {
|
|||
" (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, BreaksAccordingToOperatorPrecedence) {
|
||||
verifyFormat(
|
||||
"if (aaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
|
||||
" bbbbbbbbbbbbbbbbbbbbbbbbb && ccccccccccccccccccccccccc) {\n}");
|
||||
verifyFormat(
|
||||
"if (aaaaaaaaaaaaaaaaaaaaaaaaa && bbbbbbbbbbbbbbbbbbbbbbbbb ||\n"
|
||||
" ccccccccccccccccccccccccc) {\n}");
|
||||
verifyFormat(
|
||||
"if (aaaaaaaaaaaaaaaaaaaaaaaaa || bbbbbbbbbbbbbbbbbbbbbbbbb ||\n"
|
||||
" ccccccccccccccccccccccccc) {\n}");
|
||||
verifyFormat(
|
||||
"if ((aaaaaaaaaaaaaaaaaaaaaaaaa || bbbbbbbbbbbbbbbbbbbbbbbbb) &&\n"
|
||||
" ccccccccccccccccccccccccc) {\n}");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, AlignsStringLiterals) {
|
||||
verifyFormat("loooooooooooooooooooooooooongFunction(\"short literal \"\n"
|
||||
" \"short literal\");");
|
||||
|
|
Loading…
Reference in New Issue