]> granicus.if.org Git - clang/commitdiff
Fix an error in formatting of for-loops.
authorDaniel Jasper <djasper@google.com>
Mon, 4 Feb 2013 07:30:30 +0000 (07:30 +0000)
committerDaniel Jasper <djasper@google.com>
Mon, 4 Feb 2013 07:30:30 +0000 (07:30 +0000)
Two minor changes:
* Slight penalty for breaking at "," as opposed to ";".
* Don't apply bin-packing rules to for-loops.

Before:
for (int aaaaaa = aaaaaaaaaa; aaaaaa < bbbbbbbb; ++aaaaaa,
         ++ccccccccccccccc) {}

After:
for (int aaaaaa = aaaaaaaaaa; aaaaaa < bbbbbbbb;
     ++aaaaaa, ++ccccccccccccccc) {}

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174308 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/Format.cpp
lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTest.cpp

index 6d227cca627540ab5fd24aa30e1cfae5b42b3678..2f14fc0ce15bdedce9d70748bde47139d5900d8b 100644 (file)
@@ -493,7 +493,8 @@ private:
     if (Newline && Previous.is(tok::l_brace))
       State.Stack.back().BreakBeforeClosingBrace = true;
 
-    if (State.Stack.back().AvoidBinPacking && Newline) {
+    if (State.Stack.back().AvoidBinPacking && Newline &&
+        (Line.First.isNot(tok::kw_for) || ParenLevel != 1)) {
       // If we are breaking after '(', '{', '<', this is not bin packing unless
       // AllowAllParametersOfDeclarationOnNextLine is false.
       if ((Previous.isNot(tok::l_paren) && Previous.isNot(tok::l_brace) &&
@@ -505,7 +506,8 @@ private:
       // Any break on this level means that the parent level has been broken
       // and we need to avoid bin packing there.
       for (unsigned i = 0, e = State.Stack.size() - 1; i != e; ++i) {
-        State.Stack[i].BreakAfterComma = true;
+        if (Line.First.isNot(tok::kw_for) || i != 1)
+          State.Stack[i].BreakAfterComma = true;
       }
     }
 
index 1eb7021ac698dd2b6e28c057c4eb25ff82b5b022..0676df6c0e3922e900f22cf754a2fb2130617e92 100644 (file)
@@ -714,8 +714,10 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedToken &Tok) {
       (Left.isNot(tok::comma) && Left.isNot(tok::semi)))
     return 20;
 
-  if (Left.is(tok::semi) || Left.is(tok::comma))
+  if (Left.is(tok::semi))
     return 0;
+  if (Left.is(tok::comma))
+    return 1;
 
   // In Objective-C method expressions, prefer breaking before "param:" over
   // breaking after it.
index 7b0f1d61d3dad97442e5fffd3b3e094dbbb44936..28d19d5ac51708bb76f046dfe8f9908d4f2dacde 100644 (file)
@@ -267,6 +267,19 @@ TEST_F(FormatTest, FormatsForLoop) {
       "     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
       "         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);\n"
       "     ++aaaaaaaaaaa) {\n}");
+
+  verifyGoogleFormat(
+      "for (int aaaaaaaaaaa = 1; aaaaaaaaaaa <= bbbbbbbbbbbbbbb;\n"
+      "     aaaaaaaaaaa++, bbbbbbbbbbbbbbbbb++) {\n"
+      "}");
+  verifyGoogleFormat(
+      "for (int aaaaaaaaaaa = 1;\n"
+      "     aaaaaaaaaaa <= aaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa,\n"
+      "                                           aaaaaaaaaaaaaaaa,\n"
+      "                                           aaaaaaaaaaaaaaaa,\n"
+      "                                           aaaaaaaaaaaaaaaa);\n"
+      "     aaaaaaaaaaa++, bbbbbbbbbbbbbbbbb++) {\n"
+      "}");
 }
 
 TEST_F(FormatTest, RangeBasedForLoops) {
@@ -1357,8 +1370,8 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) {
       "    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);");
 
   verifyFormat(
-      "a<aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaa>(a(aaaaaaaaaaaaaaaaaa,\n"
-      "                                                aaaaaaaaaaaaaaaa));");
+      "a<aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaa>(\n"
+      "    a(aaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa));");
 }
 
 TEST_F(FormatTest, WrapsAtNestedNameSpecifiers) {