Author: Krasimir Georgiev Date: 2020-11-11T12:27:15+01:00 New Revision: 77b484116971337c9584fe101cdf1bca7f07f4dd
URL: https://github.com/llvm/llvm-project/commit/77b484116971337c9584fe101cdf1bca7f07f4dd DIFF: https://github.com/llvm/llvm-project/commit/77b484116971337c9584fe101cdf1bca7f07f4dd.diff LOG: [clang-format] do not break before @tags in JS comments In JavaScript breaking before a `@tag` in a comment puts it on a new line, and machinery that parses these comments will fail to understand such comments. This adapts clang-format to not break before `@`. Similar functionality exists for not breaking before `{`. Reviewed By: mprobst Differential Revision: https://reviews.llvm.org/D91078 Added: Modified: clang/lib/Format/BreakableToken.cpp clang/unittests/Format/FormatTestJS.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/BreakableToken.cpp b/clang/lib/Format/BreakableToken.cpp index c3853687c228..4975c89164a4 100644 --- a/clang/lib/Format/BreakableToken.cpp +++ b/clang/lib/Format/BreakableToken.cpp @@ -124,9 +124,10 @@ getCommentSplit(StringRef Text, unsigned ContentStartColumn, continue; } - // Avoid ever breaking before a { in JavaScript. + // Avoid ever breaking before a @tag or a { in JavaScript. if (Style.Language == FormatStyle::LK_JavaScript && - SpaceOffset + 1 < Text.size() && Text[SpaceOffset + 1] == '{') { + SpaceOffset + 1 < Text.size() && + (Text[SpaceOffset + 1] == '{' || Text[SpaceOffset + 1] == '@')) { SpaceOffset = Text.find_last_of(Blanks, SpaceOffset); continue; } diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp index 84d76c67764a..8963c9f19024 100644 --- a/clang/unittests/Format/FormatTestJS.cpp +++ b/clang/unittests/Format/FormatTestJS.cpp @@ -187,22 +187,11 @@ TEST_F(FormatTestJS, JSDocComments) { format("/** @returns j */", getGoogleJSStyleWithColumns(20))); // Break a single line long jsdoc comment pragma. - EXPECT_EQ("/**\n" - " * @returns {string} jsdoc line 12\n" - " */", - format("/** @returns {string} jsdoc line 12 */", - getGoogleJSStyleWithColumns(20))); EXPECT_EQ("/**\n" " * @returns {string}\n" " * jsdoc line 12\n" " */", format("/** @returns {string} jsdoc line 12 */", - getGoogleJSStyleWithColumns(25))); - - EXPECT_EQ("/**\n" - " * @returns {string} jsdoc line 12\n" - " */", - format("/** @returns {string} jsdoc line 12 */", getGoogleJSStyleWithColumns(20))); // FIXME: this overcounts the */ as a continuation of the 12 when breaking. @@ -2194,6 +2183,16 @@ TEST_F(FormatTestJS, JSDocAnnotations) { " */", getGoogleJSStyleWithColumns(ColumnLimit)); } + // don't break before @tags + verifyFormat("/**\n" + " * This\n" + " * tag @param\n" + " * stays.\n" + " */", + "/**\n" + " * This tag @param stays.\n" + " */", + getGoogleJSStyleWithColumns(13)); verifyFormat("/**\n" " * @see http://very/very/long/url/is/long\n" " */", _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits