From 27b6603f90cd56fbc110e8f14c642aa4dab052d7 Mon Sep 17 00:00:00 2001 From: Martin Probst Date: Thu, 30 Nov 2017 10:25:17 +0000 Subject: [PATCH] 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 llvm-svn: 319415 --- clang/lib/Format/TokenAnnotator.cpp | 12 ++++++------ clang/unittests/Format/FormatTestJS.cpp | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 4463f89755fb..c394fa03b266 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/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/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp index 390772db8bad..2a929563f754 100644 --- a/clang/unittests/Format/FormatTestJS.cpp +++ b/clang/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) {