r310458 - [clang-format] Put '/**' and '*/' on own lines in jsdocs ending in comment pragmas
Krasimir Georgiev via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 9 02:42:32 PDT 2017
Author: krasimir
Date: Wed Aug 9 02:42:32 2017
New Revision: 310458
URL: http://llvm.org/viewvc/llvm-project?rev=310458&view=rev
Log:
[clang-format] Put '/**' and '*/' on own lines in jsdocs ending in comment pragmas
Summary:
This handles a case where the trailing '*/' of a multiline jsdoc eding in a
comment pragma wouldn't be put on a new line.
Reviewers: mprobst
Reviewed By: mprobst
Subscribers: cfe-commits, klimek
Differential Revision: https://reviews.llvm.org/D36359
Modified:
cfe/trunk/lib/Format/BreakableToken.cpp
cfe/trunk/lib/Format/BreakableToken.h
cfe/trunk/lib/Format/ContinuationIndenter.cpp
cfe/trunk/unittests/Format/FormatTestJS.cpp
Modified: cfe/trunk/lib/Format/BreakableToken.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/BreakableToken.cpp?rev=310458&r1=310457&r2=310458&view=diff
==============================================================================
--- cfe/trunk/lib/Format/BreakableToken.cpp (original)
+++ cfe/trunk/lib/Format/BreakableToken.cpp Wed Aug 9 02:42:32 2017
@@ -681,12 +681,18 @@ void BreakableBlockComment::replaceWhite
InPPDirective, /*Newlines=*/1, ContentColumn[LineIndex] - Prefix.size());
}
-BreakableToken::Split BreakableBlockComment::getSplitAfterLastLine(
- unsigned TailOffset, unsigned ColumnLimit,
- llvm::Regex &CommentPragmasRegex) const {
- if (DelimitersOnNewline)
- return getSplit(Lines.size() - 1, TailOffset, ColumnLimit,
- CommentPragmasRegex);
+BreakableToken::Split
+BreakableBlockComment::getSplitAfterLastLine(unsigned TailOffset,
+ unsigned ColumnLimit) const {
+ if (DelimitersOnNewline) {
+ // Replace the trailing whitespace of the last line with a newline.
+ // In case the last line is empty, the ending '*/' is already on its own
+ // line.
+ StringRef Line = Content.back().substr(TailOffset);
+ StringRef TrimmedLine = Line.rtrim(Blanks);
+ if (!TrimmedLine.empty())
+ return Split(TrimmedLine.size(), Line.size() - TrimmedLine.size());
+ }
return Split(StringRef::npos, 0);
}
Modified: cfe/trunk/lib/Format/BreakableToken.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/BreakableToken.h?rev=310458&r1=310457&r2=310458&view=diff
==============================================================================
--- cfe/trunk/lib/Format/BreakableToken.h (original)
+++ cfe/trunk/lib/Format/BreakableToken.h Wed Aug 9 02:42:32 2017
@@ -161,8 +161,8 @@ public:
///
/// A result having offset == StringRef::npos means that no reformat is
/// necessary.
- virtual Split getSplitAfterLastLine(unsigned TailOffset, unsigned ColumnLimit,
- llvm::Regex &CommentPragmasRegex) const {
+ virtual Split getSplitAfterLastLine(unsigned TailOffset,
+ unsigned ColumnLimit) const {
return Split(StringRef::npos, 0);
}
@@ -347,8 +347,8 @@ public:
void replaceWhitespaceBefore(unsigned LineIndex, unsigned PreviousEndColumn,
unsigned ColumnLimit, Split SplitBefore,
WhitespaceManager &Whitespaces) override;
- Split getSplitAfterLastLine(unsigned TailOffset, unsigned ColumnLimit,
- llvm::Regex &CommentPragmasRegex) const override;
+ Split getSplitAfterLastLine(unsigned TailOffset,
+ unsigned ColumnLimit) const override;
bool mayReflow(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const override;
Modified: cfe/trunk/lib/Format/ContinuationIndenter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp?rev=310458&r1=310457&r2=310458&view=diff
==============================================================================
--- cfe/trunk/lib/Format/ContinuationIndenter.cpp (original)
+++ cfe/trunk/lib/Format/ContinuationIndenter.cpp Wed Aug 9 02:42:32 2017
@@ -1383,8 +1383,8 @@ unsigned ContinuationIndenter::breakProt
}
}
- BreakableToken::Split SplitAfterLastLine = Token->getSplitAfterLastLine(
- TailOffset, ColumnLimit, CommentPragmasRegex);
+ BreakableToken::Split SplitAfterLastLine =
+ Token->getSplitAfterLastLine(TailOffset, ColumnLimit);
if (SplitAfterLastLine.first != StringRef::npos) {
if (!DryRun)
Token->replaceWhitespaceAfterLastLine(TailOffset, SplitAfterLastLine,
Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=310458&r1=310457&r2=310458&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTestJS.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTestJS.cpp Wed Aug 9 02:42:32 2017
@@ -158,6 +158,53 @@ TEST_F(FormatTestJS, JSDocComments) {
"var x = 1;\n"
"}",
getGoogleJSStyleWithColumns(20)));
+
+ // Don't break the first line of a single line short jsdoc comment pragma.
+ EXPECT_EQ("/** @returns j */",
+ 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} jsdoc line 12\n"
+ " */",
+ format("/** @returns {string} jsdoc line 12 */",
+ getGoogleJSStyleWithColumns(20)));
+
+ EXPECT_EQ("/**\n"
+ " * @returns {string} jsdoc line 12\n"
+ " */",
+ format("/** @returns {string} jsdoc line 12*/",
+ getGoogleJSStyleWithColumns(20)));
+
+ // Fix a multiline jsdoc comment ending in a comment pragma.
+ EXPECT_EQ("/**\n"
+ " * line 1\n"
+ " * line 2\n"
+ " * @returns {string} jsdoc line 12\n"
+ " */",
+ format("/** line 1\n"
+ " * line 2\n"
+ " * @returns {string} jsdoc line 12 */",
+ getGoogleJSStyleWithColumns(20)));
+
+ EXPECT_EQ("/**\n"
+ " * line 1\n"
+ " * line 2\n"
+ " *\n"
+ " * @returns j\n"
+ " */",
+ format("/** line 1\n"
+ " * line 2\n"
+ " *\n"
+ " * @returns j */",
+ getGoogleJSStyleWithColumns(20)));
}
TEST_F(FormatTestJS, UnderstandsJavaScriptOperators) {
More information about the cfe-commits
mailing list