r175620 - Don't remove blank lines within unwrapped lines.

Daniel Jasper djasper at google.com
Wed Feb 20 04:56:40 PST 2013


Author: djasper
Date: Wed Feb 20 06:56:39 2013
New Revision: 175620

URL: http://llvm.org/viewvc/llvm-project?rev=175620&view=rev
Log:
Don't remove blank lines within unwrapped lines.

If the code author decides to put empty lines anywhere into the code we
should treat them equally, i.e. reduce them to the configured
MaxEmptyLinesToKeep.

With this change, we e.g. keep the newline in:
SomeType ST = {
  // First value
  a,

  // Second value
  b
};

Modified:
    cfe/trunk/lib/Format/Format.cpp
    cfe/trunk/lib/Format/TokenAnnotator.cpp
    cfe/trunk/unittests/Format/FormatTest.cpp

Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=175620&r1=175619&r2=175620&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Wed Feb 20 06:56:39 2013
@@ -278,9 +278,9 @@ public:
     LineState State;
     State.Column = FirstIndent;
     State.NextToken = &RootToken;
-    State.Stack.push_back(
-        ParenState(FirstIndent + 4, FirstIndent, !Style.BinPackParameters,
-                   /*HasMultiParameterLine=*/ false));
+    State.Stack.push_back(ParenState(FirstIndent + 4, FirstIndent,
+                                     !Style.BinPackParameters,
+                                     /*HasMultiParameterLine=*/ false));
     State.VariablePos = 0;
     State.LineContainsContinuedForLoopSection = false;
     State.ParenLevel = 0;
@@ -368,7 +368,7 @@ private:
 
     /// \brief The position of the colon in an ObjC method declaration/call.
     unsigned ColonPos;
-    
+
     /// \brief Break before third operand in ternary expression.
     bool BreakBeforeThirdOperand;
 
@@ -520,11 +520,14 @@ private:
         State.LineContainsContinuedForLoopSection = Previous.isNot(tok::semi);
 
       if (!DryRun) {
+        unsigned NewLines =
+            std::max(1u, std::min(Current.FormatTok.NewlinesBefore,
+                                  Style.MaxEmptyLinesToKeep + 1));
         if (!Line.InPPDirective)
-          Whitespaces.replaceWhitespace(Current, 1, State.Column,
+          Whitespaces.replaceWhitespace(Current, NewLines, State.Column,
                                         WhitespaceStartColumn, Style);
         else
-          Whitespaces.replacePPWhitespace(Current, 1, State.Column,
+          Whitespaces.replacePPWhitespace(Current, NewLines, State.Column,
                                           WhitespaceStartColumn, Style);
       }
 

Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=175620&r1=175619&r2=175620&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Feb 20 06:56:39 2013
@@ -266,7 +266,7 @@ private:
     }
     return true;
   }
-  
+
   void updateParameterCount(AnnotatedToken *Left, AnnotatedToken *Current) {
     if (Current->is(tok::comma))
       ++Left->ParameterCount;
@@ -835,6 +835,8 @@ void TokenAnnotator::calculateFormatting
                Current->Parent->is(tok::string_literal) &&
                Current->Children[0].is(tok::string_literal)) {
       Current->MustBreakBefore = true;
+    } else if (Current->FormatTok.NewlinesBefore > 1) {
+      Current->MustBreakBefore = true;
     } else {
       Current->MustBreakBefore = false;
     }

Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=175620&r1=175619&r2=175620&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Feb 20 06:56:39 2013
@@ -576,6 +576,20 @@ TEST_F(FormatTest, CommentsInStaticIniti
                "          d, e, f },\n"
                "        { // Group #3\n"
                "          g, h, i } };");
+
+  EXPECT_EQ("S s = {\n"
+            "  // Some comment\n"
+            "  a\n"
+            "\n"
+            "  // Comment after empty line\n"
+            "  b\n"
+            "}", format("S s =    {\n"
+                        "      // Some comment\n"
+                        "  a\n"
+                        "  \n"
+                        "     // Comment after empty line\n"
+                        "      b\n"
+                        "}"));
 }
 
 //===----------------------------------------------------------------------===//





More information about the cfe-commits mailing list