From 03da596591b62ddccc43ebf9a48f3d9bc65415e6 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Wed, 20 Nov 2013 14:54:39 +0000 Subject: [PATCH] Simplify fix proposed in r195240. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195253 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/ContinuationIndenter.cpp | 24 ++++++++---------------- lib/Format/ContinuationIndenter.h | 4 ++-- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/lib/Format/ContinuationIndenter.cpp b/lib/Format/ContinuationIndenter.cpp index bbc1ac5382..c8b8b7e8f3 100644 --- a/lib/Format/ContinuationIndenter.cpp +++ b/lib/Format/ContinuationIndenter.cpp @@ -224,14 +224,13 @@ unsigned ContinuationIndenter::addTokenToState(LineState &State, bool Newline, if (Newline) Penalty = addTokenOnNewLine(State, DryRun); else - Penalty = addTokenOnCurrentLine(State, DryRun, ExtraSpaces); + addTokenOnCurrentLine(State, DryRun, ExtraSpaces); return moveStateToNextToken(State, DryRun, Newline) + Penalty; } -unsigned ContinuationIndenter::addTokenOnCurrentLine(LineState &State, - bool DryRun, - unsigned ExtraSpaces) { +void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, + unsigned ExtraSpaces) { FormatToken &Current = *State.NextToken; const FormatToken &Previous = *State.NextToken->Previous; if (Current.is(tok::equal) && @@ -250,15 +249,6 @@ unsigned ContinuationIndenter::addTokenOnCurrentLine(LineState &State, State.Stack.back().LastSpace = State.Stack.back().VariablePos; } - unsigned Penalty = 0; - // A break before a "<<" will get Style.PenaltyBreakFirstLessLess, so a - // continuation with "<<" has a smaller penalty in general. - // If the LHS is long, we don't want to penalize the break though, so we - // also add Style.PenaltyBreakFirstLessLess. - if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0 && - State.Column > Style.ColumnLimit / 2) - Penalty += Style.PenaltyBreakFirstLessLess; - unsigned Spaces = Current.SpacesRequiredBefore + ExtraSpaces; if (!DryRun) @@ -317,7 +307,6 @@ unsigned ContinuationIndenter::addTokenOnCurrentLine(LineState &State, State.Stack[State.Stack.size() - 2].CallContinuation == 0) State.Stack.back().LastSpace = State.Column; } - return Penalty; } unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, @@ -343,8 +332,11 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, Penalty += State.NextToken->SplitPenalty; // Breaking before the first "<<" is generally not desirable if the LHS is - // short (not breaking with a long LHS is penalized in addTokenOnCurrentLine). - if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0) + // short. Also always add the penalty if the LHS is split over mutliple lines + // to avoid unncessary line breaks that just work around this penalty. + if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0 && + (State.Column <= Style.ColumnLimit / 2 || + State.Stack.back().BreakBeforeParameter)) Penalty += Style.PenaltyBreakFirstLessLess; if (Current.is(tok::l_brace) && Current.BlockKind == BK_Block) { diff --git a/lib/Format/ContinuationIndenter.h b/lib/Format/ContinuationIndenter.h index b675b0a0c5..b317565833 100644 --- a/lib/Format/ContinuationIndenter.h +++ b/lib/Format/ContinuationIndenter.h @@ -91,8 +91,8 @@ private: /// /// If \p DryRun is \c false, also creates and stores the required /// \c Replacement. - unsigned addTokenOnCurrentLine(LineState &State, bool DryRun, - unsigned ExtraSpaces); + void addTokenOnCurrentLine(LineState &State, bool DryRun, + unsigned ExtraSpaces); /// \brief Appends the next token to \p State and updates information /// necessary for indentation. -- 2.40.0