From: Daniel Jasper Date: Fri, 12 Sep 2014 16:35:28 +0000 (+0000) Subject: clang-format: Improve line breaks at function calls. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=18920bfdd009572c8be488e13c16262ca7c5a4f9;p=clang clang-format: Improve line breaks at function calls. Before: EXPECT_CALL(SomeObject, SomeFunction(Parameter)).Times(2).WillRepeatedly( Return(SomeValue)); After: EXPECT_CALL(SomeObject, SomeFunction(Parameter)) .Times(2) .WillRepeatedly(Return(SomeValue)); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@217687 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/ContinuationIndenter.cpp b/lib/Format/ContinuationIndenter.cpp index afd20b22e3..0dc65ba28e 100644 --- a/lib/Format/ContinuationIndenter.cpp +++ b/lib/Format/ContinuationIndenter.cpp @@ -302,6 +302,18 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, if (startsSegmentOfBuilderTypeCall(Current)) State.Stack.back().ContainsUnwrappedBuilder = true; + if (Current.isMemberAccess() && Previous.is(tok::r_paren) && + (Previous.MatchingParen && + (Previous.TotalLength - Previous.MatchingParen->TotalLength > 10))) { + // If there is a function call with long parameters, break before trailing + // calls. This prevents things like: + // EXPECT_CALL(SomeLongParameter).Times( + // 2); + // We don't want to do this for short parameters as they can just be + // indexes. + State.Stack.back().NoLineBreak = true; + } + State.Column += Spaces; if (Current.isNot(tok::comment) && Previous.is(tok::l_paren) && Previous.Previous && Previous.Previous->isOneOf(tok::kw_if, tok::kw_for)) diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index f8e318365b..dfa31085a9 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -4452,6 +4452,11 @@ TEST_F(FormatTest, WrapsAtFunctionCallsIfNecessary) { verifyFormat("EXPECT_CALL(SomeObject, SomeFunction(Parameter))\n" " .WillRepeatedly(Return(SomeValue));"); + verifyFormat("void f() {\n" + " EXPECT_CALL(SomeObject, SomeFunction(Parameter))\n" + " .Times(2)\n" + " .WillRepeatedly(Return(SomeValue));\n" + "}"); verifyFormat("SomeMap[std::pair(aaaaaaaaaaaa, bbbbbbbbbbbbbbb)].insert(\n" " ccccccccccccccccccccccc);"); verifyFormat("aaaaa(aaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"