]> granicus.if.org Git - clang/commitdiff
clang-format: Fix selective indentaiton in nested blocks.
authorDaniel Jasper <djasper@google.com>
Wed, 29 Apr 2015 08:29:26 +0000 (08:29 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 29 Apr 2015 08:29:26 +0000 (08:29 +0000)
Buggy case:
  someFunction(
      [] {
        // comment
        int i; // invoke formatting here.
      },       // force line break
      aaa);

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

lib/Format/UnwrappedLineFormatter.cpp
unittests/Format/FormatTest.cpp

index f5120b9f2f3c78de4fdfb71b150b48621c853793..dd65230cc4060213e00b5ec06b4cbc24842d0eb5 100644 (file)
@@ -461,7 +461,9 @@ UnwrappedLineFormatter::format(const SmallVectorImpl<AnnotatedLine *> &Lines,
 
           if (static_cast<int>(LevelIndent) - Offset >= 0)
             LevelIndent -= Offset;
-          if (Tok->isNot(tok::comment) && !TheLine.InPPDirective)
+          if ((Tok->isNot(tok::comment) ||
+               IndentForLevel[TheLine.Level] == -1) &&
+              !TheLine.InPPDirective)
             IndentForLevel[TheLine.Level] = LevelIndent;
         } else if (!DryRun) {
           Whitespaces->addUntouchableToken(*Tok, TheLine.InPPDirective);
index b23778aaba8f3d9692267295a2d49a1bdaa8d522..46266adcac727bc5923150f042a53b88087b4685 100644 (file)
@@ -3262,6 +3262,19 @@ TEST_F(FormatTest, IndividualStatementsOfNestedBlocks) {
                    "    int a; //\n"
                    "});",
                    0, 0, getLLVMStyle()));
+  EXPECT_EQ("someFunction(\n"
+            "    [] {\n"
+            "      // Only with this comment.\n"
+            "      int i; // invoke formatting here.\n"
+            "    }, // force line break\n"
+            "    aaa);",
+            format("someFunction(\n"
+                   "    [] {\n"
+                   "      // Only with this comment.\n"
+                   "      int   i; // invoke formatting here.\n"
+                   "    }, // force line break\n"
+                   "    aaa);",
+                   63, 1, getLLVMStyle()));
 }
 
 TEST_F(FormatTest, PutEmptyBlocksIntoOneLine) {