forked from OSchip/llvm-project
clang-format: [JS] avoid line breaks before unindented r_parens.
The change that enabled wrapping at the previous scope's indentation had unintended side-effects in that clang-format would prefer to wrap closing parentheses to the next line if it avoided a wrap on the next line (assuming very narrow lines): fooObject .someCall(barbazbam) .then(bam); Would get formatted as: fooObject.someCall(barbazbam ).then(bam); Because the ')' is now indented at the parent level (fooObject). Normally formatting a builder pattern style call sequence like that is outlawed in clang-format anyway. However for JavaScript this is special cased to support trailing .bind calls. This change disallows this special case when following a closing ')' to avoid the problem. Included are some random comment fixes. Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D33399 llvm-svn: 303557
This commit is contained in:
parent
a881be87ca
commit
ab60acb698
|
@ -207,7 +207,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) {
|
|||
// ...
|
||||
// }.bind(...));
|
||||
// FIXME: We should find a more generic solution to this problem.
|
||||
!(State.Column <= NewLineColumn &&
|
||||
!(State.Column <= NewLineColumn && Previous.isNot(tok::r_paren) &&
|
||||
Style.Language == FormatStyle::LK_JavaScript))
|
||||
return true;
|
||||
|
||||
|
|
|
@ -2570,7 +2570,7 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
|
|||
Keywords.kw_interface, Keywords.kw_type, tok::kw_static,
|
||||
tok::kw_public, tok::kw_private, tok::kw_protected,
|
||||
Keywords.kw_abstract, Keywords.kw_get, Keywords.kw_set))
|
||||
return false; // Otherwise a semicolon is inserted.
|
||||
return false; // Otherwise automatic semicolon insertion would trigger.
|
||||
if (Left.is(TT_JsFatArrow) && Right.is(tok::l_brace))
|
||||
return false;
|
||||
if (Left.is(TT_JsTypeColon))
|
||||
|
|
|
@ -1823,6 +1823,11 @@ TEST_F(FormatTestJS, NonNullAssertionOperator) {
|
|||
verifyFormat("let x = !foo;\n");
|
||||
verifyFormat("let x = foo[0]!;\n");
|
||||
verifyFormat("let x = (foo)!;\n");
|
||||
verifyFormat("let x = x(foo!);\n");
|
||||
verifyFormat(
|
||||
"a.aaaaaa(a.a!).then(\n"
|
||||
" x => x(x));\n",
|
||||
getGoogleJSStyleWithColumns(20));
|
||||
verifyFormat("let x = foo! - 1;\n");
|
||||
verifyFormat("let x = {foo: 1}!;\n");
|
||||
verifyFormat(
|
||||
|
|
Loading…
Reference in New Issue