Should not allow duplicate exported names
Open
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 7.1k
- Forks
- 773
- PR merge metrics
- No merged PRs in 30d
Description
Steps to reproduce
esprima.parse(`
export let a = '1';
export let a = '2';
`)
Expected output
Syntax error.
Actual output
{
"type": "Program",
"body": [
{
"type": "ExportNamedDeclaration",
"declaration": {
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "a"
},
"init": {
"type": "Literal",
"value": "1",
"raw": "'1'"
}
}
],
"kind": "let"
},
"specifiers": [],
"source": null
},
{
"type": "ExportNamedDeclaration",
"declaration": {
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "a"
},
"init": {
"type": "Literal",
"value": "2",
"raw": "'2'"
}
}
],
"kind": "let"
},
"specifiers": [],
"source": null
}
],
"sourceType": "module"
}
Relevant references
The spec: https://tc39.es/ecma262/#sec-module-semantics-static-semantics-early-errors
It is a Syntax Error if the ExportedNames of ModuleItemList contains any duplicate entries.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the esprima.parse reproduction and read the cited ECMAScript module-semantics early-errors section. Trace how exported names are handled and add regression coverage showing duplicate exported names produce a SyntaxError; done when the example is rejected while valid exports continue to parse.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 35/100