From 058f057426e6e7738f4dc015549996c01127a13d Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Fri, 15 Feb 2019 22:55:03 -0800 Subject: [PATCH] Also check AssignmentPatterns for export name (#9521) --- packages/babel-parser/src/parser/statement.js | 8 +++++--- .../input.js | 2 ++ .../options.json | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/input.js create mode 100644 packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/options.json diff --git a/packages/babel-parser/src/parser/statement.js b/packages/babel-parser/src/parser/statement.js index 369d1424b7..88d6555d5f 100644 --- a/packages/babel-parser/src/parser/statement.js +++ b/packages/babel-parser/src/parser/statement.js @@ -1816,7 +1816,9 @@ export default class StatementParser extends ExpressionParser { } checkDeclaration(node: N.Pattern | N.ObjectProperty): void { - if (node.type === "ObjectPattern") { + if (node.type === "Identifier") { + this.checkDuplicateExports(node, node.name); + } else if (node.type === "ObjectPattern") { for (const prop of node.properties) { this.checkDeclaration(prop); } @@ -1830,8 +1832,8 @@ export default class StatementParser extends ExpressionParser { this.checkDeclaration(node.value); } else if (node.type === "RestElement") { this.checkDeclaration(node.argument); - } else if (node.type === "Identifier") { - this.checkDuplicateExports(node, node.name); + } else if (node.type === "AssignmentPattern") { + this.checkDeclaration(node.left); } } diff --git a/packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/input.js b/packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/input.js new file mode 100644 index 0000000000..9e0ccdcfd3 --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/input.js @@ -0,0 +1,2 @@ +export { foo }; +export const { foo = 1 } = bar; diff --git a/packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/options.json b/packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/options.json new file mode 100644 index 0000000000..d3d3a199e6 --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2015/modules/duplicate-named-export-destructuring-assignment/options.json @@ -0,0 +1,4 @@ +{ + "sourceType": "module", + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:15)" +} \ No newline at end of file