From: Daniel Jasper Date: Mon, 25 Aug 2014 08:48:17 +0000 (+0000) Subject: clang-format: Improve formatting of nested builder-type calls. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ec9028d00b726e48785995554038a850ac3d708;p=clang clang-format: Improve formatting of nested builder-type calls. Before: f(FirstToken->WhitespaceRange.getBegin().getLocWithOffset( First->LastNewlineOffset)); After: f(FirstToken->WhitespaceRange.getBegin() .getLocWithOffset(First->LastNewlineOffset)); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216377 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/ContinuationIndenter.cpp b/lib/Format/ContinuationIndenter.cpp index 9088de2357..828e750762 100644 --- a/lib/Format/ContinuationIndenter.cpp +++ b/lib/Format/ContinuationIndenter.cpp @@ -854,9 +854,10 @@ void ContinuationIndenter::moveStatePastScopeOpener(LineState &State, getColumnLimit(State)) BreakBeforeParameter = true; } - bool NoLineBreak = State.Stack.back().NoLineBreak || - (Current.Type == TT_TemplateOpener && - State.Stack.back().ContainsUnwrappedBuilder); + bool NoLineBreak = + State.Stack.back().NoLineBreak || + ((Current.NestingLevel != 0 || Current.Type == TT_TemplateOpener) && + State.Stack.back().ContainsUnwrappedBuilder); State.Stack.push_back(ParenState(NewIndent, NewIndentLevel, State.Stack.back().LastSpace, AvoidBinPacking, NoLineBreak)); diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 73d17d3910..70b02ebc80 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -3765,9 +3765,12 @@ TEST_F(FormatTest, FormatsBuilderPattern) { " .aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>();"); - // Prefer not to break after empty parentheses. + // Prefer not to break after empty parentheses ... verifyFormat("FirstToken->WhitespaceRange.getBegin().getLocWithOffset(\n" " First->LastNewlineOffset);"); + // ... unless nested. + verifyFormat("f(FirstToken->WhitespaceRange.getBegin()\n" + " .getLocWithOffset(First->LastNewlineOffset));"); } TEST_F(FormatTest, BreaksAccordingToOperatorPrecedence) {