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

llvm-svn: 271184
This commit is contained in:
Martin Probst 2016-05-29 14:41:07 +00:00
parent 1244ecbbd2
commit 409697ecb9
2 changed files with 13 additions and 4 deletions

View File

@ -1013,7 +1013,9 @@ void UnwrappedLineParser::parseStructuralElement() {
// 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::tryToParseLambdaIntroducer() {
}
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::parseBracedList(bool ContinueOnSemicolons) {
// 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();

View File

@ -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) {