Author: mprobst Date: Sun May 29 09:41:07 2016 New Revision: 271184 URL: http://llvm.org/viewvc/llvm-project?rev=271184&view=rev Log: clang-format: [JS] fix async parsing.
Summary: Only treat the sequence `async function` as the start of a function expression, as opposed to every occurrence of the token `async` (whoops). Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: http://reviews.llvm.org/D20737 Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp cfe/trunk/unittests/Format/FormatTestJS.cpp Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=271184&r1=271183&r2=271184&view=diff ============================================================================== --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original) +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Sun May 29 09:41:07 2016 @@ -1013,7 +1013,9 @@ void UnwrappedLineParser::parseStructura // Parse function literal unless 'function' is the first token in a line // in which case this should be treated as a free-standing function. if (Style.Language == FormatStyle::LK_JavaScript && - FormatTok->isOneOf(Keywords.kw_async, Keywords.kw_function) && + (FormatTok->is(Keywords.kw_function) || + FormatTok->startsSequence(Keywords.kw_async, + Keywords.kw_function)) && Line->Tokens.size() > 0) { tryToParseJSFunction(); break; @@ -1200,7 +1202,8 @@ bool UnwrappedLineParser::tryToParseLamb } void UnwrappedLineParser::tryToParseJSFunction() { - assert(FormatTok->isOneOf(Keywords.kw_async, Keywords.kw_function)); + assert(FormatTok->is(Keywords.kw_function) || + FormatTok->startsSequence(Keywords.kw_async, Keywords.kw_function)); if (FormatTok->is(Keywords.kw_async)) nextToken(); // Consume "function". @@ -1254,7 +1257,8 @@ bool UnwrappedLineParser::parseBracedLis // replace this by using parseAssigmentExpression() inside. do { if (Style.Language == FormatStyle::LK_JavaScript) { - if (FormatTok->isOneOf(Keywords.kw_async, Keywords.kw_function)) { + if (FormatTok->is(Keywords.kw_function) || + FormatTok->startsSequence(Keywords.kw_async, Keywords.kw_function)) { tryToParseJSFunction(); continue; } @@ -1352,7 +1356,8 @@ void UnwrappedLineParser::parseParens() break; case tok::identifier: if (Style.Language == FormatStyle::LK_JavaScript && - FormatTok->isOneOf(Keywords.kw_async, Keywords.kw_function)) + (FormatTok->is(Keywords.kw_function) || + FormatTok->startsSequence(Keywords.kw_async, Keywords.kw_function))) tryToParseJSFunction(); else nextToken(); Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=271184&r1=271183&r2=271184&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTestJS.cpp (original) +++ cfe/trunk/unittests/Format/FormatTestJS.cpp Sun May 29 09:41:07 2016 @@ -354,6 +354,10 @@ TEST_F(FormatTestJS, AsyncFunctions) { verifyFormat("class X {\n" " async asyncMethod() { return fetch(1); }\n" "}"); + verifyFormat("function initialize() {\n" + " // Comment.\n" + " return async.then();\n" + "}\n"); } TEST_F(FormatTestJS, ArrayLiterals) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits