From: Daniel Jasper Date: Tue, 5 Feb 2013 09:41:21 +0000 (+0000) Subject: Fix some linebreak decisions in Google format. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d399bfff5a57325d8e63116c70aa727b1fb43232;p=clang Fix some linebreak decisions in Google format. Before: f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaa); aaaaaaa(aaaaaaaaaaaaa, aaaaaaaaaaaaa, aaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)); After: f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaa); aaaaaaa(aaaaaaaaaaaaa, aaaaaaaaaaaaa, aaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174363 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 47d6340cfd..06ebc7808c 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -229,8 +229,9 @@ public: LineState State; State.Column = FirstIndent; State.NextToken = &RootToken; - State.Stack.push_back(ParenState(FirstIndent + 4, FirstIndent, - !Style.BinPackParameters)); + State.Stack.push_back( + ParenState(FirstIndent + 4, FirstIndent, !Style.BinPackParameters, + /*HasMultiParameterLine=*/ false)); State.VariablePos = 0; State.LineContainsContinuedForLoopSection = false; @@ -262,11 +263,12 @@ private: } struct ParenState { - ParenState(unsigned Indent, unsigned LastSpace, bool AvoidBinPacking) + ParenState(unsigned Indent, unsigned LastSpace, bool AvoidBinPacking, + bool HasMultiParameterLine) : Indent(Indent), LastSpace(LastSpace), AssignmentColumn(0), FirstLessLess(0), BreakBeforeClosingBrace(false), QuestionColumn(0), AvoidBinPacking(AvoidBinPacking), BreakAfterComma(false), - HasMultiParameterLine(false) { + HasMultiParameterLine(HasMultiParameterLine) { } /// \brief The position to which a specific parenthesis level needs to be @@ -554,8 +556,9 @@ private: NewIndent = 4 + State.Stack.back().LastSpace; AvoidBinPacking = !Style.BinPackParameters; } - State.Stack.push_back(ParenState(NewIndent, State.Stack.back().LastSpace, - AvoidBinPacking)); + State.Stack.push_back( + ParenState(NewIndent, State.Stack.back().LastSpace, AvoidBinPacking, + State.Stack.back().HasMultiParameterLine)); } // If we encounter a closing ), ], } or >, we can remove a level from our @@ -676,8 +679,7 @@ private: return false; // Trying to insert a parameter on a new line if there are already more than // one parameter on the current line is bin packing. - if (State.NextToken->Parent->is(tok::comma) && - State.Stack.back().HasMultiParameterLine && + if (State.Stack.back().HasMultiParameterLine && State.Stack.back().AvoidBinPacking) return false; return true; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index f5606cb529..d1894e1e42 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1093,6 +1093,13 @@ TEST_F(FormatTest, BreaksDesireably) { } TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) { + verifyGoogleFormat("f(aaaaaaaaaaaaaaaaaaaa,\n" + " aaaaaaaaaaaaaaaaaaaa,\n" + " aaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaa);"); + verifyGoogleFormat( + "aaaaaaa(aaaaaaaaaaaaa,\n" + " aaaaaaaaaaaaa,\n" + " aaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa));"); verifyGoogleFormat( "aaaaaaaa(aaaaaaaaaaaaa,\n" " aaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"