From c1473e30b2baa57945d914f33ebc9c99016f705b Mon Sep 17 00:00:00 2001 From: Sosuke Suzuki Date: Wed, 6 Jan 2021 23:41:45 +0900 Subject: [PATCH] [ts]Add optional property to OptionalCallExpression node that has type arguments (#12562) --- .../src/plugins/typescript/index.js | 4 ++ .../typescript/optional-chaining/input.js | 1 + .../typescript/optional-chaining/output.json | 57 +++++++++++++++++++ .../type-arguments/output.json | 9 +-- 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/input.js create mode 100644 packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/output.json diff --git a/packages/babel-parser/src/plugins/typescript/index.js b/packages/babel-parser/src/plugins/typescript/index.js index 4126a0f1908b..8e2bcf0f5801 100644 --- a/packages/babel-parser/src/plugins/typescript/index.js +++ b/packages/babel-parser/src/plugins/typescript/index.js @@ -1889,6 +1889,10 @@ export default (superClass: Class): Class => this.tsCheckForInvalidTypeCasts(node.arguments); node.typeParameters = typeArguments; + if (state.optionalChainMember) { + // $FlowIgnore + node.optional = false; + } return this.finishCallExpression(node, state.optionalChainMember); } else if (this.match(tt.backQuote)) { const result = this.parseTaggedTemplateExpression( diff --git a/packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/input.js b/packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/input.js new file mode 100644 index 000000000000..666a0756abcc --- /dev/null +++ b/packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/input.js @@ -0,0 +1 @@ +foo?.foo(); diff --git a/packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/output.json b/packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/output.json new file mode 100644 index 000000000000..9d340ceeccb2 --- /dev/null +++ b/packages/babel-parser/test/fixtures/estree/typescript/optional-chaining/output.json @@ -0,0 +1,57 @@ +{ + "type": "File", + "start":0,"end":14,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":14}}, + "program": { + "type": "Program", + "start":0,"end":14,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":14}}, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start":0,"end":14,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":14}}, + "expression": { + "type": "ChainExpression", + "start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}}, + "expression": { + "type": "CallExpression", + "start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}}, + "callee": { + "type": "MemberExpression", + "start":0,"end":8,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":8}}, + "object": { + "type": "Identifier", + "start":0,"end":3,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":3},"identifierName":"foo"}, + "name": "foo" + }, + "computed": false, + "property": { + "type": "Identifier", + "start":5,"end":8,"loc":{"start":{"line":1,"column":5},"end":{"line":1,"column":8},"identifierName":"foo"}, + "name": "foo" + }, + "optional": true + }, + "arguments": [], + "typeParameters": { + "type": "TSTypeParameterInstantiation", + "start":8,"end":11,"loc":{"start":{"line":1,"column":8},"end":{"line":1,"column":11}}, + "params": [ + { + "type": "TSTypeReference", + "start":9,"end":10,"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":10}}, + "typeName": { + "type": "Identifier", + "start":9,"end":10,"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":10},"identifierName":"T"}, + "name": "T" + } + } + ] + }, + "optional": false + } + } + } + ] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/typescript/optional-chaining/type-arguments/output.json b/packages/babel-parser/test/fixtures/typescript/optional-chaining/type-arguments/output.json index 0a92626ffd24..12841c67d112 100644 --- a/packages/babel-parser/test/fixtures/typescript/optional-chaining/type-arguments/output.json +++ b/packages/babel-parser/test/fixtures/typescript/optional-chaining/type-arguments/output.json @@ -24,19 +24,19 @@ "start":0,"end":7,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":7},"identifierName":"example"}, "name": "example" }, + "computed": false, "property": { "type": "Identifier", "start":8,"end":13,"loc":{"start":{"line":1,"column":8},"end":{"line":1,"column":13},"identifierName":"inner"}, "name": "inner" - }, - "computed": false + } }, + "computed": false, "property": { "type": "Identifier", "start":15,"end":20,"loc":{"start":{"line":1,"column":15},"end":{"line":1,"column":20},"identifierName":"greet"}, "name": "greet" }, - "computed": false, "optional": true }, "arguments": [], @@ -49,7 +49,8 @@ "start":21,"end":27,"loc":{"start":{"line":1,"column":21},"end":{"line":1,"column":27}} } ] - } + }, + "optional": false } } ],