JsModule {
bom_token: missing (optional),
interpreter_token: missing (optional),
directives: JsDirectiveList [],
items: JsModuleItemList [
JsExpressionStatement {
expression: JsArrowFunctionExpression {
async_token: ASYNC_KW@0..6 "async" [] [Whitespace(" ")],
type_parameters: missing (optional),
parameters: JsParameters {
l_paren_token: L_PAREN@6..7 "(" [] [],
items: JsParameterList [],
r_paren_token: R_PAREN@7..9 ")" [] [Whitespace(" ")],
},
return_type_annotation: missing (optional),
fat_arrow_token: FAT_ARROW@9..12 "=>" [] [Whitespace(" ")],
body: JsFunctionBody {
l_curly_token: L_CURLY@12..14 "{" [] [Whitespace(" ")],
directives: JsDirectiveList [],
statements: JsStatementList [
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: LET_KW@14..18 "let" [] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsBogusBinding {
items: [
IDENT@18..24 "await" [] [Whitespace(" ")],
],
},
variable_annotation: missing (optional),
initializer: JsInitializerClause {
eq_token: EQ@24..26 "=" [] [Whitespace(" ")],
expression: JsNumberLiteralExpression {
value_token: JS_NUMBER_LITERAL@26..27 "5" [] [],
},
},
},
],
},
semicolon_token: SEMICOLON@27..29 ";" [] [Whitespace(" ")],
},
],
r_curly_token: R_CURLY@29..30 "}" [] [],
},
},
semicolon_token: missing (optional),
},
JsFunctionDeclaration {
async_token: missing (optional),
function_token: FUNCTION_KW@30..40 "function" [Newline("\n")] [Whitespace(" ")],
star_token: STAR@40..41 "*" [] [],
id: JsIdentifierBinding {
name_token: IDENT@41..44 "foo" [] [],
},
type_parameters: missing (optional),
parameters: JsParameters {
l_paren_token: L_PAREN@44..45 "(" [] [],
items: JsParameterList [],
r_paren_token: R_PAREN@45..47 ")" [] [Whitespace(" ")],
},
return_type_annotation: missing (optional),
body: JsFunctionBody {
l_curly_token: L_CURLY@47..48 "{" [] [],
directives: JsDirectiveList [],
statements: JsStatementList [
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: LET_KW@48..56 "let" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsBogusBinding {
items: [
IDENT@56..62 "yield" [] [Whitespace(" ")],
],
},
variable_annotation: missing (optional),
initializer: JsInitializerClause {
eq_token: EQ@62..64 "=" [] [Whitespace(" ")],
expression: JsNumberLiteralExpression {
value_token: JS_NUMBER_LITERAL@64..65 "5" [] [],
},
},
},
],
},
semicolon_token: SEMICOLON@65..66 ";" [] [],
},
],
r_curly_token: R_CURLY@66..68 "}" [Newline("\n")] [],
},
},
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: LET_KW@68..73 "let" [Newline("\n")] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsBogusBinding {
items: [
IDENT@73..78 "eval" [] [Whitespace(" ")],
],
},
variable_annotation: missing (optional),
initializer: JsInitializerClause {
eq_token: EQ@78..80 "=" [] [Whitespace(" ")],
expression: JsNumberLiteralExpression {
value_token: JS_NUMBER_LITERAL@80..81 "5" [] [],
},
},
},
],
},
semicolon_token: SEMICOLON@81..82 ";" [] [],
},
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: LET_KW@82..87 "let" [Newline("\n")] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsBogusBinding {
items: [
IDENT@87..91 "let" [] [Whitespace(" ")],
],
},
variable_annotation: missing (optional),
initializer: JsInitializerClause {
eq_token: EQ@91..93 "=" [] [Whitespace(" ")],
expression: JsNumberLiteralExpression {
value_token: JS_NUMBER_LITERAL@93..94 "5" [] [],
},
},
},
],
},
semicolon_token: SEMICOLON@94..95 ";" [] [],
},
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: CONST_KW@95..102 "const" [Newline("\n")] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsBogusBinding {
items: [
IDENT@102..106 "let" [] [Whitespace(" ")],
],
},
variable_annotation: missing (optional),
initializer: JsInitializerClause {
eq_token: EQ@106..108 "=" [] [Whitespace(" ")],
expression: JsNumberLiteralExpression {
value_token: JS_NUMBER_LITERAL@108..109 "5" [] [],
},
},
},
],
},
semicolon_token: SEMICOLON@109..110 ";" [] [],
},
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: LET_KW@110..115 "let" [Newline("\n")] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsIdentifierBinding {
name_token: IDENT@115..116 "a" [] [],
},
variable_annotation: missing (optional),
initializer: missing (optional),
},
COMMA@116..118 "," [] [Whitespace(" ")],
JsVariableDeclarator {
id: JsBogusBinding {
items: [
IDENT@118..119 "a" [] [],
],
},
variable_annotation: missing (optional),
initializer: missing (optional),
},
],
},
semicolon_token: SEMICOLON@119..120 ";" [] [],
},
],
eof_token: EOF@120..121 "" [Newline("\n")] [],
}
0: JS_MODULE@0..121
0: (empty)
1: (empty)
2: JS_DIRECTIVE_LIST@0..0
3: JS_MODULE_ITEM_LIST@0..120
0: JS_EXPRESSION_STATEMENT@0..30
0: JS_ARROW_FUNCTION_EXPRESSION@0..30
0: ASYNC_KW@0..6 "async" [] [Whitespace(" ")]
1: (empty)
2: JS_PARAMETERS@6..9
0: L_PAREN@6..7 "(" [] []
1: JS_PARAMETER_LIST@7..7
2: R_PAREN@7..9 ")" [] [Whitespace(" ")]
3: (empty)
4: FAT_ARROW@9..12 "=>" [] [Whitespace(" ")]
5: JS_FUNCTION_BODY@12..30
0: L_CURLY@12..14 "{" [] [Whitespace(" ")]
1: JS_DIRECTIVE_LIST@14..14
2: JS_STATEMENT_LIST@14..29
0: JS_VARIABLE_STATEMENT@14..29
0: JS_VARIABLE_DECLARATION@14..27
0: (empty)
1: LET_KW@14..18 "let" [] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@18..27
0: JS_VARIABLE_DECLARATOR@18..27
0: JS_BOGUS_BINDING@18..24
0: IDENT@18..24 "await" [] [Whitespace(" ")]
1: (empty)
2: JS_INITIALIZER_CLAUSE@24..27
0: EQ@24..26 "=" [] [Whitespace(" ")]
1: JS_NUMBER_LITERAL_EXPRESSION@26..27
0: JS_NUMBER_LITERAL@26..27 "5" [] []
1: SEMICOLON@27..29 ";" [] [Whitespace(" ")]
3: R_CURLY@29..30 "}" [] []
1: (empty)
1: JS_FUNCTION_DECLARATION@30..68
0: (empty)
1: FUNCTION_KW@30..40 "function" [Newline("\n")] [Whitespace(" ")]
2: STAR@40..41 "*" [] []
3: JS_IDENTIFIER_BINDING@41..44
0: IDENT@41..44 "foo" [] []
4: (empty)
5: JS_PARAMETERS@44..47
0: L_PAREN@44..45 "(" [] []
1: JS_PARAMETER_LIST@45..45
2: R_PAREN@45..47 ")" [] [Whitespace(" ")]
6: (empty)
7: JS_FUNCTION_BODY@47..68
0: L_CURLY@47..48 "{" [] []
1: JS_DIRECTIVE_LIST@48..48
2: JS_STATEMENT_LIST@48..66
0: JS_VARIABLE_STATEMENT@48..66
0: JS_VARIABLE_DECLARATION@48..65
0: (empty)
1: LET_KW@48..56 "let" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@56..65
0: JS_VARIABLE_DECLARATOR@56..65
0: JS_BOGUS_BINDING@56..62
0: IDENT@56..62 "yield" [] [Whitespace(" ")]
1: (empty)
2: JS_INITIALIZER_CLAUSE@62..65
0: EQ@62..64 "=" [] [Whitespace(" ")]
1: JS_NUMBER_LITERAL_EXPRESSION@64..65
0: JS_NUMBER_LITERAL@64..65 "5" [] []
1: SEMICOLON@65..66 ";" [] []
3: R_CURLY@66..68 "}" [Newline("\n")] []
2: JS_VARIABLE_STATEMENT@68..82
0: JS_VARIABLE_DECLARATION@68..81
0: (empty)
1: LET_KW@68..73 "let" [Newline("\n")] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@73..81
0: JS_VARIABLE_DECLARATOR@73..81
0: JS_BOGUS_BINDING@73..78
0: IDENT@73..78 "eval" [] [Whitespace(" ")]
1: (empty)
2: JS_INITIALIZER_CLAUSE@78..81
0: EQ@78..80 "=" [] [Whitespace(" ")]
1: JS_NUMBER_LITERAL_EXPRESSION@80..81
0: JS_NUMBER_LITERAL@80..81 "5" [] []
1: SEMICOLON@81..82 ";" [] []
3: JS_VARIABLE_STATEMENT@82..95
0: JS_VARIABLE_DECLARATION@82..94
0: (empty)
1: LET_KW@82..87 "let" [Newline("\n")] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@87..94
0: JS_VARIABLE_DECLARATOR@87..94
0: JS_BOGUS_BINDING@87..91
0: IDENT@87..91 "let" [] [Whitespace(" ")]
1: (empty)
2: JS_INITIALIZER_CLAUSE@91..94
0: EQ@91..93 "=" [] [Whitespace(" ")]
1: JS_NUMBER_LITERAL_EXPRESSION@93..94
0: JS_NUMBER_LITERAL@93..94 "5" [] []
1: SEMICOLON@94..95 ";" [] []
4: JS_VARIABLE_STATEMENT@95..110
0: JS_VARIABLE_DECLARATION@95..109
0: (empty)
1: CONST_KW@95..102 "const" [Newline("\n")] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@102..109
0: JS_VARIABLE_DECLARATOR@102..109
0: JS_BOGUS_BINDING@102..106
0: IDENT@102..106 "let" [] [Whitespace(" ")]
1: (empty)
2: JS_INITIALIZER_CLAUSE@106..109
0: EQ@106..108 "=" [] [Whitespace(" ")]
1: JS_NUMBER_LITERAL_EXPRESSION@108..109
0: JS_NUMBER_LITERAL@108..109 "5" [] []
1: SEMICOLON@109..110 ";" [] []
5: JS_VARIABLE_STATEMENT@110..120
0: JS_VARIABLE_DECLARATION@110..119
0: (empty)
1: LET_KW@110..115 "let" [Newline("\n")] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@115..119
0: JS_VARIABLE_DECLARATOR@115..116
0: JS_IDENTIFIER_BINDING@115..116
0: IDENT@115..116 "a" [] []
1: (empty)
2: (empty)
1: COMMA@116..118 "," [] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR@118..119
0: JS_BOGUS_BINDING@118..119
0: IDENT@118..119 "a" [] []
1: (empty)
2: (empty)
1: SEMICOLON@119..120 ";" [] []
4: EOF@120..121 "" [Newline("\n")] []
--
binding_identifier_invalid.js:1:19 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Illegal use of `await` as an identifier in an async context
> 1 │ async () => { let await = 5; }
│ ^^^^^
2 │ function *foo() {
3 │ let yield = 5;
--
binding_identifier_invalid.js:3:8 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Illegal use of `yield` as an identifier in generator function
1 │ async () => { let await = 5; }
2 │ function *foo() {
> 3 │ let yield = 5;
│ ^^^^^
4 │ }
5 │ let eval = 5;
--
binding_identifier_invalid.js:5:5 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Illegal use of `eval` as an identifier in strict mode
3 │ let yield = 5;
4 │ }
> 5 │ let eval = 5;
│ ^^^^
6 │ let let = 5;
7 │ const let = 5;
--
binding_identifier_invalid.js:6:5 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Illegal use of reserved keyword `let` as an identifier in strict mode
4 │ }
5 │ let eval = 5;
> 6 │ let let = 5;
│ ^^^
7 │ const let = 5;
8 │ let a, a;
--
binding_identifier_invalid.js:7:7 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Illegal use of reserved keyword `let` as an identifier in strict mode
5 │ let eval = 5;
6 │ let let = 5;
> 7 │ const let = 5;
│ ^^^
8 │ let a, a;
9 │
--
binding_identifier_invalid.js:8:8 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Declarations inside of a `let` declaration may not have duplicates
6 │ let let = 5;
7 │ const let = 5;
> 8 │ let a, a;
│ ^
9 │
i a second declaration of `a` is not allowed
6 │ let let = 5;
7 │ const let = 5;
> 8 │ let a, a;
│ ^
9 │
i `a` is first declared here
6 │ let let = 5;
7 │ const let = 5;
> 8 │ let a, a;
│ ^
9 │
--
async () => { let await = 5; }
function *foo() {
let yield = 5;
}
let eval = 5;
let let = 5;
const let = 5;
let a, a;