diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index e1ea1aa55d..dae74bf3d6 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -794,7 +794,12 @@ export default class ExpressionParser extends LValParser { ) { this.next(); return this.parseFunction(node, false, false, true); - } else if (canBeArrow && id.name === "async" && this.match(tt.name)) { + } else if ( + canBeArrow && + !this.canInsertSemicolon() && + id.name === "async" && + this.match(tt.name) + ) { const oldYield = this.state.yieldInPossibleArrowParameters; this.state.yieldInPossibleArrowParameters = null; const params = [this.parseIdentifier()]; diff --git a/packages/babel-parser/test/fixtures/es2017/async-functions/newline-arrow/input.js b/packages/babel-parser/test/fixtures/es2017/async-functions/newline-arrow/input.js new file mode 100644 index 0000000000..200a144766 --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2017/async-functions/newline-arrow/input.js @@ -0,0 +1,2 @@ +async +x => x diff --git a/packages/babel-parser/test/fixtures/es2017/async-functions/newline-arrow/output.json b/packages/babel-parser/test/fixtures/es2017/async-functions/newline-arrow/output.json new file mode 100644 index 0000000000..4c44c11863 --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2017/async-functions/newline-arrow/output.json @@ -0,0 +1,136 @@ +{ + "type": "File", + "start": 0, + "end": 12, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 12, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 5, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + }, + "expression": { + "type": "Identifier", + "start": 0, + "end": 5, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + }, + "identifierName": "async" + }, + "name": "async" + } + }, + { + "type": "ExpressionStatement", + "start": 6, + "end": 12, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "expression": { + "type": "ArrowFunctionExpression", + "start": 6, + "end": 12, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "id": null, + "generator": false, + "async": false, + "params": [ + { + "type": "Identifier", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 1 + }, + "identifierName": "x" + }, + "name": "x" + } + ], + "body": { + "type": "Identifier", + "start": 11, + "end": 12, + "loc": { + "start": { + "line": 2, + "column": 5 + }, + "end": { + "line": 2, + "column": 6 + }, + "identifierName": "x" + }, + "name": "x" + } + } + } + ], + "directives": [] + } +} \ No newline at end of file