forked from OSchip/llvm-project
clang-format: [JS] don't break comments before any '{'
Summary: Previously, clang-format would avoid breaking before the first `{` found, but then happily break before subsequent '{'s on the line. This change fixes that by looking for the first location that has no opening curly, if any. Reviewers: krasimir Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D50230 llvm-svn: 338837
This commit is contained in:
parent
e60866a4e0
commit
ec45bc2fea
|
@ -90,19 +90,19 @@ static BreakableToken::Split getCommentSplit(StringRef Text,
|
|||
|
||||
StringRef::size_type SpaceOffset = Text.find_last_of(Blanks, MaxSplitBytes);
|
||||
|
||||
// Do not split before a number followed by a dot: this would be interpreted
|
||||
// as a numbered list, which would prevent re-flowing in subsequent passes.
|
||||
static auto *const kNumberedListRegexp = new llvm::Regex("^[1-9][0-9]?\\.");
|
||||
if (SpaceOffset != StringRef::npos &&
|
||||
kNumberedListRegexp->match(Text.substr(SpaceOffset).ltrim(Blanks)))
|
||||
SpaceOffset = Text.find_last_of(Blanks, SpaceOffset);
|
||||
// In JavaScript, some @tags can be followed by {, and machinery that parses
|
||||
// these comments will fail to understand the comment if followed by a line
|
||||
// break. So avoid ever breaking before a {.
|
||||
if (Style.Language == FormatStyle::LK_JavaScript &&
|
||||
SpaceOffset != StringRef::npos && SpaceOffset + 1 < Text.size() &&
|
||||
Text[SpaceOffset + 1] == '{')
|
||||
SpaceOffset = Text.find_last_of(Blanks, SpaceOffset);
|
||||
while (SpaceOffset != StringRef::npos) {
|
||||
// Do not split before a number followed by a dot: this would be interpreted
|
||||
// as a numbered list, which would prevent re-flowing in subsequent passes.
|
||||
if (kNumberedListRegexp->match(Text.substr(SpaceOffset).ltrim(Blanks)))
|
||||
SpaceOffset = Text.find_last_of(Blanks, SpaceOffset);
|
||||
// In JavaScript, some @tags can be followed by {, and machinery that parses
|
||||
// these comments will fail to understand the comment if followed by a line
|
||||
// break. So avoid ever breaking before a {.
|
||||
else if (Style.Language == FormatStyle::LK_JavaScript &&
|
||||
SpaceOffset + 1 < Text.size() && Text[SpaceOffset + 1] == '{')
|
||||
SpaceOffset = Text.find_last_of(Blanks, SpaceOffset);
|
||||
}
|
||||
|
||||
if (SpaceOffset == StringRef::npos ||
|
||||
// Don't break at leading whitespace.
|
||||
|
|
|
@ -2067,6 +2067,14 @@ TEST_F(FormatTestJS, JSDocAnnotations) {
|
|||
" * @param {canWrap onSpace}\n"
|
||||
" */",
|
||||
getGoogleJSStyleWithColumns(20));
|
||||
// make sure clang-format doesn't break before *any* '{'
|
||||
verifyFormat("/**\n"
|
||||
" * @lala {lala {lalala\n"
|
||||
" */\n",
|
||||
"/**\n"
|
||||
" * @lala {lala {lalala\n"
|
||||
" */\n",
|
||||
getGoogleJSStyleWithColumns(20));
|
||||
verifyFormat("/**\n"
|
||||
" * @see http://very/very/long/url/is/long\n"
|
||||
" */",
|
||||
|
|
Loading…
Reference in New Issue