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