diff --git a/src/parser/statement.js b/src/parser/statement.js index ea0b0fa343..cb61499172 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -947,6 +947,8 @@ pp.checkDeclaration = function(node) { } } else if (node.type === "ObjectProperty") { this.checkDeclaration(node.value); + } else if (node.type === "RestElement" || node.type === "RestProperty") { + this.checkDeclaration(node.argument); } else if (node.type === "Identifier") { this.checkDuplicateExports(node, node.name); } diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring16/actual.js b/test/fixtures/es2015/modules/duplicate-named-export-destructuring16/actual.js new file mode 100644 index 0000000000..c3d0c8635d --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring16/actual.js @@ -0,0 +1,3 @@ +export const foo = 1; +export const [bar, ...foo] = baz; + diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring16/options.json b/test/fixtures/es2015/modules/duplicate-named-export-destructuring16/options.json new file mode 100644 index 0000000000..4f3ba9d9d2 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring16/options.json @@ -0,0 +1,3 @@ +{ + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:22)" +} diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring17/actual.js b/test/fixtures/es2015/modules/duplicate-named-export-destructuring17/actual.js new file mode 100644 index 0000000000..35ad1dde35 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring17/actual.js @@ -0,0 +1,3 @@ +export const [foo, ...bar] = baz; +export const bar = 1; + diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring17/options.json b/test/fixtures/es2015/modules/duplicate-named-export-destructuring17/options.json new file mode 100644 index 0000000000..dab0e075b0 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring17/options.json @@ -0,0 +1,3 @@ +{ + "throws": "`bar` has already been exported. Exported identifiers must be unique. (2:13)" +} diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring18/actual.js b/test/fixtures/es2015/modules/duplicate-named-export-destructuring18/actual.js new file mode 100644 index 0000000000..34a0ee3262 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring18/actual.js @@ -0,0 +1,3 @@ +export const foo = 1; +export const [bar, [baz, ...foo]] = qux; + diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring18/options.json b/test/fixtures/es2015/modules/duplicate-named-export-destructuring18/options.json new file mode 100644 index 0000000000..7ee0cc4341 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring18/options.json @@ -0,0 +1,3 @@ +{ + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:28)" +} diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring19/actual.js b/test/fixtures/es2015/modules/duplicate-named-export-destructuring19/actual.js new file mode 100644 index 0000000000..5bf5aeab69 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring19/actual.js @@ -0,0 +1,3 @@ +export const foo = 1; +export const { bar: [baz, ...foo] } = qux; + diff --git a/test/fixtures/es2015/modules/duplicate-named-export-destructuring19/options.json b/test/fixtures/es2015/modules/duplicate-named-export-destructuring19/options.json new file mode 100644 index 0000000000..72b54a0a77 --- /dev/null +++ b/test/fixtures/es2015/modules/duplicate-named-export-destructuring19/options.json @@ -0,0 +1,3 @@ +{ + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:29)" +} diff --git a/test/fixtures/experimental/object-rest-spread/11/actual.js b/test/fixtures/experimental/object-rest-spread/11/actual.js new file mode 100644 index 0000000000..9ab5279bcc --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/11/actual.js @@ -0,0 +1,2 @@ +export const foo = 1; +export const { bar, ...foo } = baz; diff --git a/test/fixtures/experimental/object-rest-spread/11/options.json b/test/fixtures/experimental/object-rest-spread/11/options.json new file mode 100644 index 0000000000..b70f9f128f --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/11/options.json @@ -0,0 +1,5 @@ +{ + "sourceType": "module", + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:23)" +} + diff --git a/test/fixtures/experimental/object-rest-spread/12/actual.js b/test/fixtures/experimental/object-rest-spread/12/actual.js new file mode 100644 index 0000000000..21995bf917 --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/12/actual.js @@ -0,0 +1,2 @@ +export const { foo, ...bar } = baz; +export const bar = 1; diff --git a/test/fixtures/experimental/object-rest-spread/12/options.json b/test/fixtures/experimental/object-rest-spread/12/options.json new file mode 100644 index 0000000000..21dc6a7cc6 --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/12/options.json @@ -0,0 +1,5 @@ +{ + "sourceType": "module", + "throws": "`bar` has already been exported. Exported identifiers must be unique. (2:13)" +} + diff --git a/test/fixtures/experimental/object-rest-spread/13/actual.js b/test/fixtures/experimental/object-rest-spread/13/actual.js new file mode 100644 index 0000000000..0262fd367c --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/13/actual.js @@ -0,0 +1,2 @@ +export const foo = 1; +export const { bar: { baz, ...foo } } = qux; diff --git a/test/fixtures/experimental/object-rest-spread/13/options.json b/test/fixtures/experimental/object-rest-spread/13/options.json new file mode 100644 index 0000000000..4c8f1eb7bd --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/13/options.json @@ -0,0 +1,5 @@ +{ + "sourceType": "module", + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:30)" +} + diff --git a/test/fixtures/experimental/object-rest-spread/14/actual.js b/test/fixtures/experimental/object-rest-spread/14/actual.js new file mode 100644 index 0000000000..81a496727b --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/14/actual.js @@ -0,0 +1,2 @@ +export const foo = 1; +export const [bar, { baz, ...foo }] = qux; diff --git a/test/fixtures/experimental/object-rest-spread/14/options.json b/test/fixtures/experimental/object-rest-spread/14/options.json new file mode 100644 index 0000000000..4a117168dc --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/14/options.json @@ -0,0 +1,5 @@ +{ + "sourceType": "module", + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:29)" +} + diff --git a/test/fixtures/experimental/object-rest-spread/15/actual.js b/test/fixtures/experimental/object-rest-spread/15/actual.js new file mode 100644 index 0000000000..a4ecdbe7a2 --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/15/actual.js @@ -0,0 +1,2 @@ +export const foo = 1; +export const [bar, [{ baz, ...foo }]] = qux; diff --git a/test/fixtures/experimental/object-rest-spread/15/options.json b/test/fixtures/experimental/object-rest-spread/15/options.json new file mode 100644 index 0000000000..4c8f1eb7bd --- /dev/null +++ b/test/fixtures/experimental/object-rest-spread/15/options.json @@ -0,0 +1,5 @@ +{ + "sourceType": "module", + "throws": "`foo` has already been exported. Exported identifiers must be unique. (2:30)" +} +