https://github.com/ichaer updated https://github.com/llvm/llvm-project/pull/96804
>From 4c6b2fb52dcfe2ca5ace822ecaf6d0e8ac60f0d7 Mon Sep 17 00:00:00 2001 From: Iuri Chaer <ich...@splunk.com> Date: Wed, 13 Dec 2023 21:33:05 +0000 Subject: [PATCH 1/6] [clang-format] Introduce "ReflowComments: IndentOnly" to re-indent comments without breaking internal structure (think Doxygen). * Convert `ReflowComments` from boolean into a new `enum` which can take on the value `RCS_Never`, `RCS_IndentOnly`, or `RCS_Always`. The first one is equivalent to the old `false`, the third one is `true`, and the middle one means that multiline comments should only have their indentation corrected, which is what Doxygen users will want. * Preserve backward compatibility while parsing `ReflowComments`. --- clang/include/clang/Format/Format.h | 17 +++++++++++--- clang/lib/Format/BreakableToken.cpp | 14 ++++++++---- clang/lib/Format/ContinuationIndenter.cpp | 4 ++-- clang/lib/Format/Format.cpp | 12 +++++++++- clang/lib/Format/UnwrappedLineParser.cpp | 18 +++++++-------- clang/unittests/Format/ConfigParseTest.cpp | 11 +++++++++- clang/unittests/Format/FormatTest.cpp | 6 ++--- clang/unittests/Format/FormatTestComments.cpp | 22 ++++++++++++++++--- 8 files changed, 78 insertions(+), 26 deletions(-) diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index 7d257be10af42c..971e9347df1279 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -3749,23 +3749,34 @@ struct FormatStyle { /// \version 13 ReferenceAlignmentStyle ReferenceAlignment; + enum ReflowCommentsStyle : int8_t { RCS_Never, RCS_IndentOnly, RCS_Always }; // clang-format off /// If ``true``, clang-format will attempt to re-flow comments. That is it /// will touch a comment and *reflow* long comments into new lines, trying to /// obey the ``ColumnLimit``. /// \code - /// false: + /// RCS_Never: /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ + /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// * and a misaligned second line */ /// - /// true: + /// RCS_IndentOnly: + /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ + /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// * and a misaligned second line */ + /// + /// RCS_Always: /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of /// // information /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of /// * information */ + /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + /// * information and a misaligned second line */ /// \endcode /// \version 3.8 - bool ReflowComments; + ReflowCommentsStyle ReflowComments; // clang-format on /// Remove optional braces of control statements (``if``, ``else``, ``for``, diff --git a/clang/lib/Format/BreakableToken.cpp b/clang/lib/Format/BreakableToken.cpp index 75304908dc6506..0ccc8a690c2087 100644 --- a/clang/lib/Format/BreakableToken.cpp +++ b/clang/lib/Format/BreakableToken.cpp @@ -420,8 +420,10 @@ BreakableComment::getSplit(unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit, unsigned ContentStartColumn, const llvm::Regex &CommentPragmasRegex) const { // Don't break lines matching the comment pragmas regex. - if (CommentPragmasRegex.match(Content[LineIndex])) + if (Style.ReflowComments != FormatStyle::RCS_Always || + CommentPragmasRegex.match(Content[LineIndex])) { return Split(StringRef::npos, 0); + } return getCommentSplit(Content[LineIndex].substr(TailOffset), ContentStartColumn, ColumnLimit, Style.TabWidth, Encoding, Style); @@ -608,8 +610,10 @@ BreakableToken::Split BreakableBlockComment::getSplit( unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit, unsigned ContentStartColumn, const llvm::Regex &CommentPragmasRegex) const { // Don't break lines matching the comment pragmas regex. - if (CommentPragmasRegex.match(Content[LineIndex])) + if (Style.ReflowComments != FormatStyle::RCS_Always || + CommentPragmasRegex.match(Content[LineIndex])) { return Split(StringRef::npos, 0); + } return getCommentSplit(Content[LineIndex].substr(TailOffset), ContentStartColumn, ColumnLimit, Style.TabWidth, Encoding, Style, Decoration.ends_with("*")); @@ -855,7 +859,8 @@ bool BreakableBlockComment::mayReflow( StringRef IndentContent = Content[LineIndex]; if (Lines[LineIndex].ltrim(Blanks).starts_with("*")) IndentContent = Lines[LineIndex].ltrim(Blanks).substr(1); - return LineIndex > 0 && !CommentPragmasRegex.match(IndentContent) && + return LineIndex > 0 && Style.ReflowComments == FormatStyle::RCS_Always && + !CommentPragmasRegex.match(IndentContent) && mayReflowContent(Content[LineIndex]) && !Tok.Finalized && !switchesFormatting(tokenAt(LineIndex)); } @@ -1160,7 +1165,8 @@ bool BreakableLineCommentSection::mayReflow( // // text that protrudes // // into text with different indent // We do reflow in that case in block comments. - return LineIndex > 0 && !CommentPragmasRegex.match(IndentContent) && + return LineIndex > 0 && Style.ReflowComments == FormatStyle::RCS_Always && + !CommentPragmasRegex.match(IndentContent) && mayReflowContent(Content[LineIndex]) && !Tok.Finalized && !switchesFormatting(tokenAt(LineIndex)) && OriginalPrefix[LineIndex] == OriginalPrefix[LineIndex - 1]; diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index b07360425ca6e1..7d592a31bc0eb6 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -2400,7 +2400,7 @@ ContinuationIndenter::createBreakableToken(const FormatToken &Current, State.Line->InPPDirective, Encoding, Style); } } else if (Current.is(TT_BlockComment)) { - if (!Style.ReflowComments || + if (Style.ReflowComments == FormatStyle::RCS_Never || // If a comment token switches formatting, like // /* clang-format on */, we don't want to break it further, // but we may still want to adjust its indentation. @@ -2421,7 +2421,7 @@ ContinuationIndenter::createBreakableToken(const FormatToken &Current, } return true; }(); - if (!Style.ReflowComments || + if (Style.ReflowComments == FormatStyle::RCS_Never || CommentPragmasRegex.match(Current.TokenText.substr(2)) || switchesFormatting(Current) || !RegularComments) { return nullptr; diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index cd21fbb2221ac6..ee1f5651b4f986 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -497,6 +497,16 @@ template <> struct MappingTraits<FormatStyle::RawStringFormat> { } }; +template <> struct ScalarEnumerationTraits<FormatStyle::ReflowCommentsStyle> { + static void enumeration(IO &IO, FormatStyle::ReflowCommentsStyle &Value) { + IO.enumCase(Value, "Never", FormatStyle::RCS_Never); + IO.enumCase(Value, "IndentOnly", FormatStyle::RCS_IndentOnly); + IO.enumCase(Value, "Always", FormatStyle::RCS_Always); + IO.enumCase(Value, "false", FormatStyle::RCS_Never); + IO.enumCase(Value, "true", FormatStyle::RCS_Always); + } +}; + template <> struct ScalarEnumerationTraits<FormatStyle::ReferenceAlignmentStyle> { static void enumeration(IO &IO, FormatStyle::ReferenceAlignmentStyle &Value) { @@ -1534,7 +1544,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) { LLVMStyle.PPIndentWidth = -1; LLVMStyle.QualifierAlignment = FormatStyle::QAS_Leave; LLVMStyle.ReferenceAlignment = FormatStyle::RAS_Pointer; - LLVMStyle.ReflowComments = true; + LLVMStyle.ReflowComments = FormatStyle::RCS_Always; LLVMStyle.RemoveBracesLLVM = false; LLVMStyle.RemoveParentheses = FormatStyle::RPS_Leave; LLVMStyle.RemoveSemicolon = false; diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index d406a531a5c0c2..0e239c93620277 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -4588,11 +4588,11 @@ bool UnwrappedLineParser::isOnNewLine(const FormatToken &FormatTok) { // Checks if \p FormatTok is a line comment that continues the line comment // section on \p Line. -static bool -continuesLineCommentSection(const FormatToken &FormatTok, - const UnwrappedLine &Line, - const llvm::Regex &CommentPragmasRegex) { - if (Line.Tokens.empty()) +static bool continuesLineCommentSection( + const FormatToken &FormatTok, const UnwrappedLine &Line, + const FormatStyle::ReflowCommentsStyle ReflowCommentsStyle, + const llvm::Regex &CommentPragmasRegex) { + if (Line.Tokens.empty() || ReflowCommentsStyle != FormatStyle::RCS_Always) return false; StringRef IndentContent = FormatTok.TokenText; @@ -4704,8 +4704,8 @@ void UnwrappedLineParser::flushComments(bool NewlineBeforeNext) { // // FIXME: Consider putting separate line comment sections as children to the // unwrapped line instead. - Tok->ContinuesLineCommentSection = - continuesLineCommentSection(*Tok, *Line, CommentPragmasRegex); + Tok->ContinuesLineCommentSection = continuesLineCommentSection( + *Tok, *Line, Style.ReflowComments, CommentPragmasRegex); if (isOnNewLine(*Tok) && JustComments && !Tok->ContinuesLineCommentSection) addUnwrappedLine(); pushToken(Tok); @@ -4778,8 +4778,8 @@ void UnwrappedLineParser::distributeComments( if (HasTrailAlignedWithNextToken && i == StartOfTrailAlignedWithNextToken) { FormatTok->ContinuesLineCommentSection = false; } else { - FormatTok->ContinuesLineCommentSection = - continuesLineCommentSection(*FormatTok, *Line, CommentPragmasRegex); + FormatTok->ContinuesLineCommentSection = continuesLineCommentSection( + *FormatTok, *Line, Style.ReflowComments, CommentPragmasRegex); } if (!FormatTok->ContinuesLineCommentSection && (isOnNewLine(*FormatTok) || FormatTok->IsFirst)) { diff --git a/clang/unittests/Format/ConfigParseTest.cpp b/clang/unittests/Format/ConfigParseTest.cpp index aded3ed2a6596e..a8a985f8fa94bc 100644 --- a/clang/unittests/Format/ConfigParseTest.cpp +++ b/clang/unittests/Format/ConfigParseTest.cpp @@ -183,7 +183,6 @@ TEST(ConfigParseTest, ParsesConfigurationBools) { CHECK_PARSE_BOOL(ObjCSpaceAfterProperty); CHECK_PARSE_BOOL(ObjCSpaceBeforeProtocolList); CHECK_PARSE_BOOL(Cpp11BracedListStyle); - CHECK_PARSE_BOOL(ReflowComments); CHECK_PARSE_BOOL(RemoveBracesLLVM); CHECK_PARSE_BOOL(RemoveSemicolon); CHECK_PARSE_BOOL(SkipMacroDefinitionBody); @@ -372,6 +371,16 @@ TEST(ConfigParseTest, ParsesConfiguration) { CHECK_PARSE("PointerBindsToType: Middle", PointerAlignment, FormatStyle::PAS_Middle); + Style.ReflowComments = FormatStyle::RCS_Always; + CHECK_PARSE("ReflowComments: Never", ReflowComments, FormatStyle::RCS_Never); + CHECK_PARSE("ReflowComments: IndentOnly", ReflowComments, + FormatStyle::RCS_IndentOnly); + CHECK_PARSE("ReflowComments: Always", ReflowComments, + FormatStyle::RCS_Always); + // For backward compatibility: + CHECK_PARSE("ReflowComments: false", ReflowComments, FormatStyle::RCS_Never); + CHECK_PARSE("ReflowComments: true", ReflowComments, FormatStyle::RCS_Always); + Style.Standard = FormatStyle::LS_Auto; CHECK_PARSE("Standard: c++03", Standard, FormatStyle::LS_Cpp03); CHECK_PARSE("Standard: c++11", Standard, FormatStyle::LS_Cpp11); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index db1decb20d626b..80d4958806f191 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -17851,7 +17851,7 @@ TEST_F(FormatTest, AlignConsecutiveMacros) { // Test across comments Style.MaxEmptyLinesToKeep = 10; - Style.ReflowComments = false; + Style.ReflowComments = FormatStyle::RCS_Never; Style.AlignConsecutiveMacros.AcrossComments = true; verifyFormat("#define a 3\n" "// line comment\n" @@ -18598,7 +18598,7 @@ TEST_F(FormatTest, AlignConsecutiveAssignmentsAcrossEmptyLinesAndComments) { "y = 1;", Alignment); - Alignment.ReflowComments = true; + Alignment.ReflowComments = FormatStyle::RCS_Always; Alignment.ColumnLimit = 50; verifyFormat("int x = 0;\n" "int yy = 1; /// specificlennospace\n" @@ -18996,7 +18996,7 @@ TEST_F(FormatTest, AlignConsecutiveAssignments) { "y = 1;", Alignment); - EXPECT_EQ(Alignment.ReflowComments, true); + EXPECT_EQ(Alignment.ReflowComments, FormatStyle::RCS_Always); Alignment.ColumnLimit = 50; verifyFormat("int x = 0;\n" "int yy = 1; /// specificlennospace\n" diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp index 3e75707a9faecc..a89016758719c5 100644 --- a/clang/unittests/Format/FormatTestComments.cpp +++ b/clang/unittests/Format/FormatTestComments.cpp @@ -493,9 +493,25 @@ TEST_F(FormatTestComments, AlignsBlockComments) { TEST_F(FormatTestComments, CommentReflowingCanBeTurnedOff) { FormatStyle Style = getLLVMStyleWithColumns(20); - Style.ReflowComments = false; - verifyFormat("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style); - verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style); + Style.ReflowComments = FormatStyle::RCS_Never; + verifyNoChange("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\naaaaaaaaa*/", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n aaaaaaaaa*/", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n * aaaaaaaaa*/", + Style); +} + +TEST_F(FormatTestComments, CommentReflowingCanApplyOnlyToIndents) { + FormatStyle Style = getLLVMStyleWithColumns(20); + Style.ReflowComments = FormatStyle::RCS_IndentOnly; + verifyNoChange("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\naaaaaaaaa*/", Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n aaaaaaaaa*/", Style); + verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n * aaaaaaaaa*/", + "/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n * aaaaaaaaa*/", + Style); } TEST_F(FormatTestComments, CorrectlyHandlesLengthOfBlockComments) { >From 48ed2cf336a7cff73e3fbc36d1e0ffc0c5d5b7fa Mon Sep 17 00:00:00 2001 From: Iuri Chaer <ich...@splunk.com> Date: Thu, 27 Jun 2024 13:45:57 +0100 Subject: [PATCH 2/6] Fix docs. --- clang/docs/ClangFormatStyleOptions.rst | 50 ++++++++++++++----- clang/include/clang/Format/Format.h | 68 +++++++++++++++----------- 2 files changed, 77 insertions(+), 41 deletions(-) diff --git a/clang/docs/ClangFormatStyleOptions.rst b/clang/docs/ClangFormatStyleOptions.rst index bb00c20922d361..6b6d8a93579e44 100644 --- a/clang/docs/ClangFormatStyleOptions.rst +++ b/clang/docs/ClangFormatStyleOptions.rst @@ -5204,22 +5204,46 @@ the configuration (without a prefix: ``Auto``). .. _ReflowComments: -**ReflowComments** (``Boolean``) :versionbadge:`clang-format 3.8` :ref:`¶ <ReflowComments>` - If ``true``, clang-format will attempt to re-flow comments. That is it - will touch a comment and *reflow* long comments into new lines, trying to - obey the ``ColumnLimit``. +**ReflowComments** (``ReflowCommentsStyle``) :versionbadge:`clang-format 20` :ref:`¶ <ReflowComments>` + Comment reformatting style. - .. code-block:: c++ + Possible values: + + * ``// clang-format on`` (in configuration: ``// clang-format on``) + Leave comments untouched. + + .. code-block:: c++ + + // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ + /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + * and a misaligned second line */ + + * ``// clang-format on`` (in configuration: ``// clang-format on``) + Only apply indentation rules, moving comments left or right, without + changing formatting inside the comments. + + .. code-block:: c++ + + // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ + /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + * and a misaligned second line */ + + * ``// clang-format on`` (in configuration: ``// clang-format on``) + Apply indentation rules and re-flow long comments into new lines, trying + to obey the ``ColumnLimit``. + + .. code-block:: c++ + + // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + // information + /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + * information */ + /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + * information and a misaligned second line */ - false: - // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information - /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ - true: - // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of - // information - /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of - * information */ .. _RemoveBracesLLVM: diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index 971e9347df1279..edb52bb02ee59a 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -3749,35 +3749,47 @@ struct FormatStyle { /// \version 13 ReferenceAlignmentStyle ReferenceAlignment; - enum ReflowCommentsStyle : int8_t { RCS_Never, RCS_IndentOnly, RCS_Always }; - // clang-format off - /// If ``true``, clang-format will attempt to re-flow comments. That is it - /// will touch a comment and *reflow* long comments into new lines, trying to - /// obey the ``ColumnLimit``. - /// \code - /// RCS_Never: - /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information - /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ - /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information - /// * and a misaligned second line */ - /// - /// RCS_IndentOnly: - /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information - /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ - /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information - /// * and a misaligned second line */ - /// - /// RCS_Always: - /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of - /// // information - /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of - /// * information */ - /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of - /// * information and a misaligned second line */ - /// \endcode - /// \version 3.8 + /// \brief Types of comment re-flow style. + enum ReflowCommentsStyle : int8_t { + // clang-format off + /// Leave comments untouched. + /// \code + /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ + /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// * and a misaligned second line */ + /// \endcode + // clang-format on + RCS_Never, + // clang-format off + /// Only apply indentation rules, moving comments left or right, without + /// changing formatting inside the comments. + /// \code + /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ + /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information + /// * and a misaligned second line */ + /// \endcode + // clang-format on + RCS_IndentOnly, + // clang-format off + /// Apply indentation rules and re-flow long comments into new lines, trying + /// to obey the ``ColumnLimit``. + /// \code + /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + /// // information + /// /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + /// * information */ + /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of + /// * information and a misaligned second line */ + /// \endcode + // clang-format on + RCS_Always + }; + + /// \brief Comment reformatting style. + /// \version 20 ReflowCommentsStyle ReflowComments; - // clang-format on /// Remove optional braces of control statements (``if``, ``else``, ``for``, /// and ``while``) in C++ according to the LLVM coding style. >From 1c816f50b5041f6c748e494b90fa68fc46ac0a0d Mon Sep 17 00:00:00 2001 From: Iuri Chaer <ich...@splunk.com> Date: Thu, 27 Jun 2024 22:02:24 +0100 Subject: [PATCH 3/6] Revert bad version number change in docs, break lines in test string literals. --- clang/include/clang/Format/Format.h | 2 +- clang/unittests/Format/FormatTestComments.cpp | 25 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index edb52bb02ee59a..2fd512acb3956a 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -3788,7 +3788,7 @@ struct FormatStyle { }; /// \brief Comment reformatting style. - /// \version 20 + /// \version 3.8 ReflowCommentsStyle ReflowComments; /// Remove optional braces of control statements (``if``, ``else``, ``for``, diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp index a89016758719c5..77519b4baa5122 100644 --- a/clang/unittests/Format/FormatTestComments.cpp +++ b/clang/unittests/Format/FormatTestComments.cpp @@ -496,9 +496,14 @@ TEST_F(FormatTestComments, CommentReflowingCanBeTurnedOff) { Style.ReflowComments = FormatStyle::RCS_Never; verifyNoChange("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style); verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style); - verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\naaaaaaaaa*/", Style); - verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n aaaaaaaaa*/", Style); - verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n * aaaaaaaaa*/", + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + "aaaaaaaaa*/", + Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + " aaaaaaaaa*/", + Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + " * aaaaaaaaa*/", Style); } @@ -507,10 +512,16 @@ TEST_F(FormatTestComments, CommentReflowingCanApplyOnlyToIndents) { Style.ReflowComments = FormatStyle::RCS_IndentOnly; verifyNoChange("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style); verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style); - verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\naaaaaaaaa*/", Style); - verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n aaaaaaaaa*/", Style); - verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n * aaaaaaaaa*/", - "/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n * aaaaaaaaa*/", + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa" + "\naaaaaaaaa*/", + Style); + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + " aaaaaaaaa*/", + Style); + verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + " * aaaaaaaaa*/", + "/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + " * aaaaaaaaa*/", Style); } >From 3b3c762c9589f89c1281a0fed5c70b6777af73eb Mon Sep 17 00:00:00 2001 From: Iuri Chaer <ich...@splunk.com> Date: Thu, 27 Jun 2024 22:07:52 +0100 Subject: [PATCH 4/6] Oops --- clang/unittests/Format/FormatTestComments.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp index 77519b4baa5122..0355ed0bacd3da 100644 --- a/clang/unittests/Format/FormatTestComments.cpp +++ b/clang/unittests/Format/FormatTestComments.cpp @@ -512,8 +512,8 @@ TEST_F(FormatTestComments, CommentReflowingCanApplyOnlyToIndents) { Style.ReflowComments = FormatStyle::RCS_IndentOnly; verifyNoChange("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style); verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style); - verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa" - "\naaaaaaaaa*/", + verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" + "aaaaaaaaa*/", Style); verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n" " aaaaaaaaa*/", >From 159281a325841575b519dbf93bf0f981c319157e Mon Sep 17 00:00:00 2001 From: Iuri Chaer <ich...@splunk.com> Date: Mon, 8 Jul 2024 18:56:36 +0100 Subject: [PATCH 5/6] Oh no, I regenerated the docs before I made the version change :(. Sorry! --- clang/docs/ClangFormatStyleOptions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/docs/ClangFormatStyleOptions.rst b/clang/docs/ClangFormatStyleOptions.rst index 6b6d8a93579e44..6958d5a3472b20 100644 --- a/clang/docs/ClangFormatStyleOptions.rst +++ b/clang/docs/ClangFormatStyleOptions.rst @@ -5204,7 +5204,7 @@ the configuration (without a prefix: ``Auto``). .. _ReflowComments: -**ReflowComments** (``ReflowCommentsStyle``) :versionbadge:`clang-format 20` :ref:`¶ <ReflowComments>` +**ReflowComments** (``ReflowCommentsStyle``) :versionbadge:`clang-format 3.8` :ref:`¶ <ReflowComments>` Comment reformatting style. Possible values: >From 1d653048fc9084be2f52fbd7aeb4bf3e0f9e7326 Mon Sep 17 00:00:00 2001 From: Iuri Chaer <ich...@splunk.com> Date: Wed, 7 Aug 2024 18:09:29 +0100 Subject: [PATCH 6/6] Move `clang-format off` and `clang-format on` comments outside of the `enum` and re-generate documentation. --- clang/docs/ClangFormatStyleOptions.rst | 6 +++--- clang/include/clang/Format/Format.h | 8 ++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/clang/docs/ClangFormatStyleOptions.rst b/clang/docs/ClangFormatStyleOptions.rst index 6958d5a3472b20..d82e8deab29cdc 100644 --- a/clang/docs/ClangFormatStyleOptions.rst +++ b/clang/docs/ClangFormatStyleOptions.rst @@ -5209,7 +5209,7 @@ the configuration (without a prefix: ``Auto``). Possible values: - * ``// clang-format on`` (in configuration: ``// clang-format on``) + * ``RCS_Never`` (in configuration: ``Never``) Leave comments untouched. .. code-block:: c++ @@ -5219,7 +5219,7 @@ the configuration (without a prefix: ``Auto``). /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information * and a misaligned second line */ - * ``// clang-format on`` (in configuration: ``// clang-format on``) + * ``RCS_IndentOnly`` (in configuration: ``IndentOnly``) Only apply indentation rules, moving comments left or right, without changing formatting inside the comments. @@ -5230,7 +5230,7 @@ the configuration (without a prefix: ``Auto``). /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information * and a misaligned second line */ - * ``// clang-format on`` (in configuration: ``// clang-format on``) + * ``RCS_Always`` (in configuration: ``Always``) Apply indentation rules and re-flow long comments into new lines, trying to obey the ``ColumnLimit``. diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index 2fd512acb3956a..f783236443119e 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -3749,9 +3749,9 @@ struct FormatStyle { /// \version 13 ReferenceAlignmentStyle ReferenceAlignment; + // clang-format off /// \brief Types of comment re-flow style. enum ReflowCommentsStyle : int8_t { - // clang-format off /// Leave comments untouched. /// \code /// // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information @@ -3759,9 +3759,7 @@ struct FormatStyle { /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information /// * and a misaligned second line */ /// \endcode - // clang-format on RCS_Never, - // clang-format off /// Only apply indentation rules, moving comments left or right, without /// changing formatting inside the comments. /// \code @@ -3770,9 +3768,7 @@ struct FormatStyle { /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information /// * and a misaligned second line */ /// \endcode - // clang-format on RCS_IndentOnly, - // clang-format off /// Apply indentation rules and re-flow long comments into new lines, trying /// to obey the ``ColumnLimit``. /// \code @@ -3783,9 +3779,9 @@ struct FormatStyle { /// /* third veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of /// * information and a misaligned second line */ /// \endcode - // clang-format on RCS_Always }; + // clang-format on /// \brief Comment reformatting style. /// \version 3.8 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits