From f9dcc4e4bbf159a2658dcad8d329f38214f8d749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 5 Aug 2021 21:47:30 +0200 Subject: [PATCH] Fix array destructuring elision parsing in TS arrow functions (#13641) --- packages/babel-parser/src/parser/lval.js | 4 +- .../input.ts | 1 + .../output.json | 56 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/input.ts create mode 100644 packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/output.json diff --git a/packages/babel-parser/src/parser/lval.js b/packages/babel-parser/src/parser/lval.js index c6a87facf3..440e8396fa 100644 --- a/packages/babel-parser/src/parser/lval.js +++ b/packages/babel-parser/src/parser/lval.js @@ -257,7 +257,9 @@ export default class LValParser extends NodeUtils { return this.isAssignable(node.argument); case "ArrayExpression": - return node.elements.every(element => this.isAssignable(element)); + return node.elements.every( + element => element === null || this.isAssignable(element), + ); case "AssignmentExpression": return node.operator === "="; diff --git a/packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/input.ts b/packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/input.ts new file mode 100644 index 0000000000..a7878618ab --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/input.ts @@ -0,0 +1 @@ +([, a]): b => c; diff --git a/packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/output.json b/packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/output.json new file mode 100644 index 0000000000..5a87bda59b --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/regression/elision-arrow-destructuring-13636/output.json @@ -0,0 +1,56 @@ +{ + "type": "File", + "start":0,"end":16,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":16}}, + "program": { + "type": "Program", + "start":0,"end":16,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":16}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ExpressionStatement", + "start":0,"end":16,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":16}}, + "expression": { + "type": "ArrowFunctionExpression", + "start":0,"end":15,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":15}}, + "returnType": { + "type": "TSTypeAnnotation", + "start":7,"end":10,"loc":{"start":{"line":1,"column":7},"end":{"line":1,"column":10}}, + "typeAnnotation": { + "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":"b"}, + "name": "b" + } + } + }, + "id": null, + "generator": false, + "async": false, + "params": [ + { + "type": "ArrayPattern", + "start":1,"end":6,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":6}}, + "elements": [ + null, + { + "type": "Identifier", + "start":4,"end":5,"loc":{"start":{"line":1,"column":4},"end":{"line":1,"column":5},"identifierName":"a"}, + "name": "a" + } + ] + } + ], + "body": { + "type": "Identifier", + "start":14,"end":15,"loc":{"start":{"line":1,"column":14},"end":{"line":1,"column":15},"identifierName":"c"}, + "name": "c" + } + } + } + ], + "directives": [] + } +} \ No newline at end of file