From: Martin Probst Date: Thu, 30 Nov 2017 10:25:17 +0000 (+0000) Subject: clang-format: [JS] do not wrap after async/await. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f64fbddb87285b85fcc88b0455e0e731ff14032f;p=clang clang-format: [JS] do not wrap after async/await. Summary: Otherwise automatic semicolon insertion can trigger, i.e. wrapping produces invalid syntax. Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D40642 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@319415 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 4463f89755..c394fa03b2 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -2701,12 +2701,12 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line, } else if (Style.Language == FormatStyle::LK_JavaScript) { const FormatToken *NonComment = Right.getPreviousNonComment(); if (NonComment && - NonComment->isOneOf(tok::kw_return, Keywords.kw_yield, tok::kw_continue, - tok::kw_break, tok::kw_throw, Keywords.kw_interface, - Keywords.kw_type, tok::kw_static, tok::kw_public, - tok::kw_private, tok::kw_protected, - Keywords.kw_readonly, Keywords.kw_abstract, - Keywords.kw_get, Keywords.kw_set)) + NonComment->isOneOf( + tok::kw_return, Keywords.kw_yield, tok::kw_continue, tok::kw_break, + tok::kw_throw, Keywords.kw_interface, Keywords.kw_type, + tok::kw_static, tok::kw_public, tok::kw_private, tok::kw_protected, + Keywords.kw_readonly, Keywords.kw_abstract, Keywords.kw_get, + Keywords.kw_set, Keywords.kw_async, Keywords.kw_await)) return false; // Otherwise automatic semicolon insertion would trigger. if (Left.Tok.getIdentifierInfo() && Right.startsSequence(tok::l_square, tok::r_square)) diff --git a/unittests/Format/FormatTestJS.cpp b/unittests/Format/FormatTestJS.cpp index 390772db8b..2a929563f7 100644 --- a/unittests/Format/FormatTestJS.cpp +++ b/unittests/Format/FormatTestJS.cpp @@ -1152,6 +1152,11 @@ TEST_F(FormatTestJS, WrapRespectsAutomaticSemicolonInsertion) { "const y = 3\n", "const x = ( 5 + 9)\n" "const y = 3\n"); + // Ideally the foo() bit should be indented relative to the async function(). + verifyFormat("async function\n" + "foo() {}", + getGoogleJSStyleWithColumns(10)); + verifyFormat("await theReckoning;", getGoogleJSStyleWithColumns(10)); } TEST_F(FormatTestJS, AutomaticSemicolonInsertionHeuristic) {