]> granicus.if.org Git - clang/commitdiff
Simplify fix proposed in r195240.
authorDaniel Jasper <djasper@google.com>
Wed, 20 Nov 2013 14:54:39 +0000 (14:54 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 20 Nov 2013 14:54:39 +0000 (14:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195253 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/ContinuationIndenter.cpp
lib/Format/ContinuationIndenter.h

index bbc1ac5382465a9703c8a116ab191d5a0f8abd3c..c8b8b7e8f3c9673240e5d70dda5c12d54a0e2407 100644 (file)
@@ -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) {
index b675b0a0c55283c94455943970195071be0041e8..b31756583389e484adf4c52352b53a0b478c2cd4 100644 (file)
@@ -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.