ksyx created this revision.
ksyx added reviewers: HazardyKnusperkeks, MyDeveloperDay, curdeius.
ksyx requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This commit changes the condition of requiring comment to start with
alphabet characters to make no change only for a certain set of
characters, currently horizontal whitespace and punctuation characters.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118869

Files:
  clang/lib/Format/BreakableToken.cpp
  clang/unittests/Format/FormatTestComments.cpp

Index: clang/unittests/Format/FormatTestComments.cpp
===================================================================
--- clang/unittests/Format/FormatTestComments.cpp
+++ clang/unittests/Format/FormatTestComments.cpp
@@ -3322,6 +3322,18 @@
       "\n"
       "///   Free Doxygen with 3 spaces\n"
       "\n"
+      "//🐉 A nice dragon\n"
+      "\n"
+      "//\t abccba\n"
+      "\n"
+      "//\\t deffed\n"
+      "\n"
+      "//   🐉 Another nice dragon\n"
+      "\n"
+      "//   \t Three leading spaces following tab\n"
+      "\n"
+      "//   \\t Three leading spaces following backslash\n"
+      "\n"
       "/// A Doxygen Comment with a nested list:\n"
       "/// - Foo\n"
       "/// - Bar\n"
@@ -3381,6 +3393,18 @@
             "\n"
             "///   Free Doxygen with 3 spaces\n"
             "\n"
+            "// 🐉 A nice dragon\n"
+            "\n"
+            "//\t abccba\n"
+            "\n"
+            "//\\t deffed\n"
+            "\n"
+            "//   🐉 Another nice dragon\n"
+            "\n"
+            "//   \t Three leading spaces following tab\n"
+            "\n"
+            "//   \\t Three leading spaces following backslash\n"
+            "\n"
             "/// A Doxygen Comment with a nested list:\n"
             "/// - Foo\n"
             "/// - Bar\n"
@@ -3442,6 +3466,18 @@
             "\n"
             "///Free Doxygen with 3 spaces\n"
             "\n"
+            "//🐉 A nice dragon\n"
+            "\n"
+            "//\t abccba\n"
+            "\n"
+            "//\\t deffed\n"
+            "\n"
+            "//🐉 Another nice dragon\n"
+            "\n"
+            "//\t Three leading spaces following tab\n"
+            "\n"
+            "//\\t Three leading spaces following backslash\n"
+            "\n"
             "///A Doxygen Comment with a nested list:\n"
             "///- Foo\n"
             "///- Bar\n"
@@ -3503,6 +3539,18 @@
             "\n"
             "///   Free Doxygen with 3 spaces\n"
             "\n"
+            "//  🐉 A nice dragon\n"
+            "\n"
+            "//\t abccba\n"
+            "\n"
+            "//\\t deffed\n"
+            "\n"
+            "//   🐉 Another nice dragon\n"
+            "\n"
+            "//   \t Three leading spaces following tab\n"
+            "\n"
+            "//   \\t Three leading spaces following backslash\n"
+            "\n"
             "///  A Doxygen Comment with a nested list:\n"
             "///  - Foo\n"
             "///  - Bar\n"
@@ -3809,6 +3857,18 @@
             "\n"
             "///   Free Doxygen with 3 spaces\n"
             "\n"
+            "// 🐉 A nice dragon\n"
+            "\n"
+            "//\t abccba\n"
+            "\n"
+            "//\\t deffed\n"
+            "\n"
+            "//   🐉 Another nice dragon\n"
+            "\n"
+            "//   \t Three leading spaces following tab\n"
+            "\n"
+            "//   \\t Three leading spaces following backslash\n"
+            "\n"
             "/// A Doxygen Comment with a nested list:\n"
             "/// - Foo\n"
             "/// - Bar\n"
@@ -3870,6 +3930,18 @@
             "\n"
             "///Free Doxygen with 3 spaces\n"
             "\n"
+            "//🐉 A nice dragon\n"
+            "\n"
+            "//\t abccba\n"
+            "\n"
+            "//\\t deffed\n"
+            "\n"
+            "//🐉 Another nice dragon\n"
+            "\n"
+            "//\t Three leading spaces following tab\n"
+            "\n"
+            "//\\t Three leading spaces following backslash\n"
+            "\n"
             "///A Doxygen Comment with a nested list:\n"
             "///- Foo\n"
             "///- Bar\n"
@@ -3931,6 +4003,18 @@
             "\n"
             "///   Free Doxygen with 3 spaces\n"
             "\n"
+            "//  🐉 A nice dragon\n"
+            "\n"
+            "//\t abccba\n"
+            "\n"
+            "//\\t deffed\n"
+            "\n"
+            "//   🐉 Another nice dragon\n"
+            "\n"
+            "//   \t Three leading spaces following tab\n"
+            "\n"
+            "//   \\t Three leading spaces following backslash\n"
+            "\n"
             "///  A Doxygen Comment with a nested list:\n"
             "///  - Foo\n"
             "///  - Bar\n"
Index: clang/lib/Format/BreakableToken.cpp
===================================================================
--- clang/lib/Format/BreakableToken.cpp
+++ clang/lib/Format/BreakableToken.cpp
@@ -771,6 +771,20 @@
       OriginalPrefix[i] = IndentPrefix;
       const unsigned SpacesInPrefix = llvm::count(IndentPrefix, ' ');
 
+      // This lambda also considers multibyte character that is not handled in
+      // functions like isPunctuation provided by CharInfo.
+      const auto NoSpaceBeforeFirstCommentChar = [&]() {
+        assert(Lines[i].size() > IndentPrefix.size());
+        const char FirstCommentChar = Lines[i][IndentPrefix.size()];
+        const unsigned FirstCharByteSize =
+            encoding::getCodePointNumBytes(FirstCommentChar, Encoding);
+        return encoding::columnWidth(
+                   Lines[i].substr(IndentPrefix.size(), FirstCharByteSize),
+                   Encoding) == 1 &&
+               (FirstCommentChar == '\\' || isPunctuation(FirstCommentChar) ||
+                isHorizontalWhitespace(FirstCommentChar));
+      };
+
       // On the first line of the comment section we calculate how many spaces
       // are to be added or removed, all lines after that just get only the
       // change and we will not look at the maximum anymore. Additionally to the
@@ -780,7 +794,7 @@
                         OriginalPrefix[i - 1].rtrim(Blanks)) {
         if (SpacesInPrefix < Style.SpacesInLineCommentPrefix.Minimum &&
             Lines[i].size() > IndentPrefix.size() &&
-            isAlphanumeric(Lines[i][IndentPrefix.size()])) {
+            !NoSpaceBeforeFirstCommentChar()) {
           FirstLineSpaceChange =
               Style.SpacesInLineCommentPrefix.Minimum - SpacesInPrefix;
         } else if (SpacesInPrefix > Style.SpacesInLineCommentPrefix.Maximum) {
@@ -804,7 +818,7 @@
         const auto FirstNonSpace = Lines[i][IndentPrefix.size()];
         const auto AllowsSpaceChange =
             SpacesInPrefix != 0 ||
-            (isAlphanumeric(FirstNonSpace) ||
+            (!NoSpaceBeforeFirstCommentChar() ||
              (FirstNonSpace == '}' && FirstLineSpaceChange != 0));
 
         if (PrefixSpaceChange[i] > 0 && AllowsSpaceChange) {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to