From 6bb4adca43e609c1822a0f45b634d1ea3502dc6f Mon Sep 17 00:00:00 2001 From: gonza Date: Mon, 21 Oct 2019 00:55:15 -0300 Subject: [PATCH 1/2] Add parsePostMemberNameModifiers to aync method --- packages/babel-parser/src/parser/statement.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/babel-parser/src/parser/statement.js b/packages/babel-parser/src/parser/statement.js index 81e310debd7b..27e5cd161b69 100644 --- a/packages/babel-parser/src/parser/statement.js +++ b/packages/babel-parser/src/parser/statement.js @@ -1406,6 +1406,7 @@ export default class StatementParser extends ExpressionParser { method.kind = "method"; // The so-called parsed name would have been "async": get the real name. this.parseClassPropertyName(method); + this.parsePostMemberNameModifiers(publicMember); if (method.key.type === "PrivateName") { // private async method From 4bf2d973dc2e609b08f7e41cef53e9daad2737d9 Mon Sep 17 00:00:00 2001 From: gonza Date: Mon, 21 Oct 2019 00:55:24 -0300 Subject: [PATCH 2/2] Add test --- .../class/async-optional-method/input.js | 3 + .../class/async-optional-method/output.json | 268 ++++++++++++++++++ 2 files changed, 271 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/typescript/class/async-optional-method/input.js create mode 100644 packages/babel-parser/test/fixtures/typescript/class/async-optional-method/output.json diff --git a/packages/babel-parser/test/fixtures/typescript/class/async-optional-method/input.js b/packages/babel-parser/test/fixtures/typescript/class/async-optional-method/input.js new file mode 100644 index 000000000000..8081fad6e8f2 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/class/async-optional-method/input.js @@ -0,0 +1,3 @@ +class A extends B { + async method?(val: string): Promise; +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/class/async-optional-method/output.json b/packages/babel-parser/test/fixtures/typescript/class/async-optional-method/output.json new file mode 100644 index 000000000000..b2a7262f0397 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/class/async-optional-method/output.json @@ -0,0 +1,268 @@ +{ + "type": "File", + "start": 0, + "end": 66, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 66, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ClassDeclaration", + "start": 0, + "end": 66, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "id": { + "type": "Identifier", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + }, + "identifierName": "A" + }, + "name": "A" + }, + "superClass": { + "type": "Identifier", + "start": 16, + "end": 17, + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 17 + }, + "identifierName": "B" + }, + "name": "B" + }, + "body": { + "type": "ClassBody", + "start": 18, + "end": 66, + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "body": [ + { + "type": "TSDeclareMethod", + "start": 22, + "end": 64, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 44 + } + }, + "static": false, + "key": { + "type": "Identifier", + "start": 28, + "end": 34, + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 14 + }, + "identifierName": "method" + }, + "name": "method" + }, + "computed": false, + "kind": "method", + "optional": true, + "id": null, + "generator": false, + "async": true, + "params": [ + { + "type": "Identifier", + "start": 36, + "end": 47, + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 27 + }, + "identifierName": "val" + }, + "name": "val", + "typeAnnotation": { + "type": "TSTypeAnnotation", + "start": 39, + "end": 47, + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 27 + } + }, + "typeAnnotation": { + "type": "TSStringKeyword", + "start": 41, + "end": 47, + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 27 + } + } + } + } + } + ], + "returnType": { + "type": "TSTypeAnnotation", + "start": 48, + "end": 63, + "loc": { + "start": { + "line": 2, + "column": 28 + }, + "end": { + "line": 2, + "column": 43 + } + }, + "typeAnnotation": { + "type": "TSTypeReference", + "start": 50, + "end": 63, + "loc": { + "start": { + "line": 2, + "column": 30 + }, + "end": { + "line": 2, + "column": 43 + } + }, + "typeName": { + "type": "Identifier", + "start": 50, + "end": 57, + "loc": { + "start": { + "line": 2, + "column": 30 + }, + "end": { + "line": 2, + "column": 37 + }, + "identifierName": "Promise" + }, + "name": "Promise" + }, + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start": 57, + "end": 63, + "loc": { + "start": { + "line": 2, + "column": 37 + }, + "end": { + "line": 2, + "column": 43 + } + }, + "params": [ + { + "type": "TSVoidKeyword", + "start": 58, + "end": 62, + "loc": { + "start": { + "line": 2, + "column": 38 + }, + "end": { + "line": 2, + "column": 42 + } + } + } + ] + } + } + } + } + ] + } + } + ], + "directives": [] + } +} \ No newline at end of file