r293878 - [clang-format] Don't reflow lines starting with TODO, FIXME or XXX.

Krasimir Georgiev via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 2 02:52:09 PST 2017


Author: krasimir
Date: Thu Feb  2 04:52:08 2017
New Revision: 293878

URL: http://llvm.org/viewvc/llvm-project?rev=293878&view=rev
Log:
[clang-format] Don't reflow lines starting with TODO, FIXME or XXX.

Summary: These lines commonly carry a special meaning.

Reviewers: djasper

Reviewed By: djasper

Subscribers: cfe-commits, klimek

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

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

Modified: cfe/trunk/lib/Format/BreakableToken.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/BreakableToken.cpp?rev=293878&r1=293877&r2=293878&view=diff
==============================================================================
--- cfe/trunk/lib/Format/BreakableToken.cpp (original)
+++ cfe/trunk/lib/Format/BreakableToken.cpp Thu Feb  2 04:52:08 2017
@@ -301,12 +301,21 @@ const FormatToken &BreakableComment::tok
 
 static bool mayReflowContent(StringRef Content) {
   Content = Content.trim(Blanks);
+  // Lines starting with '@' commonly have special meaning.
+  static const SmallVector<StringRef, 4> kSpecialMeaningPrefixes = {
+      "@", "TODO", "FIXME", "XXX"};
+  bool hasSpecialMeaningPrefix = false;
+  for (StringRef Prefix : kSpecialMeaningPrefixes) {
+    if (Content.startswith(Prefix)) {
+      hasSpecialMeaningPrefix = true;
+      break;
+    }
+  }
   // Simple heuristic for what to reflow: content should contain at least two
   // characters and either the first or second character must be
   // non-punctuation.
-  return Content.size() >= 2 &&
-         // Lines starting with '@' commonly have special meaning.
-         !Content.startswith("@") && !Content.endswith("\\") &&
+  return Content.size() >= 2 && !hasSpecialMeaningPrefix &&
+         !Content.endswith("\\") &&
          // Note that this is UTF-8 safe, since if isPunctuation(Content[0]) is
          // true, then the first code point must be 1 byte long.
          (!isPunctuation(Content[0]) || !isPunctuation(Content[1]));

Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=293878&r1=293877&r2=293878&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Thu Feb  2 04:52:08 2017
@@ -2306,6 +2306,30 @@ TEST_F(FormatTest, ReflowsComments) {
             format("// long long long long\n"
                    "// @param arg",
                    getLLVMStyleWithColumns(20)));
+  
+  // Don't reflow lines starting with 'TODO'.
+  EXPECT_EQ("// long long long\n"
+            "// long\n"
+            "// TODO: long",
+            format("// long long long long\n"
+                   "// TODO: long",
+                   getLLVMStyleWithColumns(20)));
+
+  // Don't reflow lines starting with 'FIXME'.
+  EXPECT_EQ("// long long long\n"
+            "// long\n"
+            "// FIXME: long",
+            format("// long long long long\n"
+                   "// FIXME: long",
+                   getLLVMStyleWithColumns(20)));
+
+  // Don't reflow lines starting with 'XXX'.
+  EXPECT_EQ("// long long long\n"
+            "// long\n"
+            "// XXX: long",
+            format("// long long long long\n"
+                   "// XXX: long",
+                   getLLVMStyleWithColumns(20)));
 
   // Reflow lines that have a non-punctuation character among their first 2
   // characters.




More information about the cfe-commits mailing list