forked from OSchip/llvm-project
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:
parent
1244ecbbd2
commit
409697ecb9
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue