Forráskód Böngészése

[clang-format] Remove empty lines before }[;] // comment

Summary:
This addresses bug 36766 and a FIXME in tests about empty lines before
`}[;] // comment` lines.

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D44631

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327861 91177308-0d34-0410-b5e6-96231b3b80d8
Krasimir Georgiev 7 éve
szülő
commit
1d55d15d7f
2 módosított fájl, 19 hozzáadás és 3 törlés
  1. 5 1
      lib/Format/UnwrappedLineFormatter.cpp
  2. 14 2
      unittests/Format/FormatTest.cpp

+ 5 - 1
lib/Format/UnwrappedLineFormatter.cpp

@@ -1133,8 +1133,12 @@ void UnwrappedLineFormatter::formatFirstToken(const AnnotatedLine &Line,
       std::min(RootToken.NewlinesBefore, Style.MaxEmptyLinesToKeep + 1);
   // Remove empty lines before "}" where applicable.
   if (RootToken.is(tok::r_brace) &&
+      // Look for "}", "} // comment", "};" or "}; // comment".
       (!RootToken.Next ||
-       (RootToken.Next->is(tok::semi) && !RootToken.Next->Next)))
+       (RootToken.Next->is(tok::comment) && !RootToken.Next->Next) ||
+       (RootToken.Next->is(tok::semi) &&
+        (!RootToken.Next->Next || (RootToken.Next->Next->is(tok::comment) &&
+                                   !RootToken.Next->Next->Next)))))
     Newlines = std::min(Newlines, 1u);
   // Remove empty lines at the start of nested blocks (lambdas/arrow functions)
   if (PreviousLine == nullptr && Line.Level > 0)

+ 14 - 2
unittests/Format/FormatTest.cpp

@@ -276,7 +276,6 @@ TEST_F(FormatTest, RemovesEmptyLines) {
                    "\n"
                    "}"));
 
-  // FIXME: This is slightly inconsistent.
   FormatStyle LLVMWithNoNamespaceFix = getLLVMStyle();
   LLVMWithNoNamespaceFix.FixNamespaceComments = false;
   EXPECT_EQ("namespace {\n"
@@ -295,12 +294,25 @@ TEST_F(FormatTest, RemovesEmptyLines) {
                    "}"));
   EXPECT_EQ("namespace {\n"
             "int i;\n"
-            "\n"
+            "};",
+            format("namespace {\n"
+                   "int i;\n"
+                   "\n"
+                   "};"));
+  EXPECT_EQ("namespace {\n"
+            "int i;\n"
             "} // namespace",
             format("namespace {\n"
                    "int i;\n"
                    "\n"
                    "}  // namespace"));
+  EXPECT_EQ("namespace {\n"
+            "int i;\n"
+            "}; // namespace",
+            format("namespace {\n"
+                   "int i;\n"
+                   "\n"
+                   "};  // namespace"));
 
   FormatStyle Style = getLLVMStyle();
   Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_All;