biome_js_parser 0.5.7

Biome's JavaScript parser
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsForStatement {
            for_token: FOR_KW@0..4 "for" [] [Whitespace(" ")],
            l_paren_token: L_PAREN@4..5 "(" [] [],
            initializer: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@5..9 "let" [] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@9..11 "i" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@11..13 "=" [] [Whitespace(" ")],
                            expression: JsNumberLiteralExpression {
                                value_token: JS_NUMBER_LITERAL@13..14 "5" [] [],
                            },
                        },
                    },
                ],
            },
            first_semi_token: SEMICOLON@14..16 ";" [] [Whitespace(" ")],
            test: JsBinaryExpression {
                left: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@16..18 "i" [] [Whitespace(" ")],
                    },
                },
                operator_token: L_ANGLE@18..20 "<" [] [Whitespace(" ")],
                right: JsNumberLiteralExpression {
                    value_token: JS_NUMBER_LITERAL@20..22 "10" [] [],
                },
            },
            second_semi_token: SEMICOLON@22..24 ";" [] [Whitespace(" ")],
            update: JsPostUpdateExpression {
                operand: JsIdentifierAssignment {
                    name_token: IDENT@24..25 "i" [] [],
                },
                operator_token: PLUS2@25..27 "++" [] [],
            },
            r_paren_token: R_PAREN@27..29 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@29..30 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@30..31 "}" [] [],
            },
        },
        JsForOfStatement {
            for_token: FOR_KW@31..36 "for" [Newline("\n")] [Whitespace(" ")],
            await_token: missing (optional),
            l_paren_token: L_PAREN@36..37 "(" [] [],
            initializer: JsForVariableDeclaration {
                await_token: missing (optional),
                kind_token: LET_KW@37..41 "let" [] [Whitespace(" ")],
                declarator: JsVariableDeclarator {
                    id: JsObjectBindingPattern {
                        l_curly_token: L_CURLY@41..43 "{" [] [Whitespace(" ")],
                        properties: JsObjectBindingPatternPropertyList [
                            JsObjectBindingPatternShorthandProperty {
                                identifier: JsIdentifierBinding {
                                    name_token: IDENT@43..46 "foo" [] [],
                                },
                                init: missing (optional),
                            },
                            COMMA@46..48 "," [] [Whitespace(" ")],
                            JsObjectBindingPatternShorthandProperty {
                                identifier: JsIdentifierBinding {
                                    name_token: IDENT@48..52 "bar" [] [Whitespace(" ")],
                                },
                                init: missing (optional),
                            },
                        ],
                        r_curly_token: R_CURLY@52..54 "}" [] [Whitespace(" ")],
                    },
                    variable_annotation: missing (optional),
                    initializer: missing (optional),
                },
            },
            of_token: OF_KW@54..57 "of" [] [Whitespace(" ")],
            expression: JsObjectExpression {
                l_curly_token: L_CURLY@57..58 "{" [] [],
                members: JsObjectMemberList [],
                r_curly_token: R_CURLY@58..59 "}" [] [],
            },
            r_paren_token: R_PAREN@59..61 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@61..62 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@62..63 "}" [] [],
            },
        },
        JsForInStatement {
            for_token: FOR_KW@63..68 "for" [Newline("\n")] [Whitespace(" ")],
            l_paren_token: L_PAREN@68..69 "(" [] [],
            initializer: JsIdentifierAssignment {
                name_token: IDENT@69..73 "foo" [] [Whitespace(" ")],
            },
            in_token: IN_KW@73..76 "in" [] [Whitespace(" ")],
            expression: JsObjectExpression {
                l_curly_token: L_CURLY@76..77 "{" [] [],
                members: JsObjectMemberList [],
                r_curly_token: R_CURLY@77..78 "}" [] [],
            },
            r_paren_token: R_PAREN@78..80 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@80..81 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@81..82 "}" [] [],
            },
        },
        JsForStatement {
            for_token: FOR_KW@82..87 "for" [Newline("\n")] [Whitespace(" ")],
            l_paren_token: L_PAREN@87..88 "(" [] [],
            initializer: missing (optional),
            first_semi_token: SEMICOLON@88..89 ";" [] [],
            test: missing (optional),
            second_semi_token: SEMICOLON@89..90 ";" [] [],
            update: missing (optional),
            r_paren_token: R_PAREN@90..92 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@92..93 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@93..94 "}" [] [],
            },
        },
        JsForOfStatement {
            for_token: FOR_KW@94..99 "for" [Newline("\n")] [Whitespace(" ")],
            await_token: missing (optional),
            l_paren_token: L_PAREN@99..100 "(" [] [],
            initializer: JsForVariableDeclaration {
                await_token: missing (optional),
                kind_token: LET_KW@100..104 "let" [] [Whitespace(" ")],
                declarator: JsVariableDeclarator {
                    id: JsIdentifierBinding {
                        name_token: IDENT@104..108 "foo" [] [Whitespace(" ")],
                    },
                    variable_annotation: missing (optional),
                    initializer: missing (optional),
                },
            },
            of_token: OF_KW@108..111 "of" [] [Whitespace(" ")],
            expression: JsArrayExpression {
                l_brack_token: L_BRACK@111..112 "[" [] [],
                elements: JsArrayElementList [],
                r_brack_token: R_BRACK@112..113 "]" [] [],
            },
            r_paren_token: R_PAREN@113..115 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@115..116 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@116..117 "}" [] [],
            },
        },
        JsForStatement {
            for_token: FOR_KW@117..122 "for" [Newline("\n")] [Whitespace(" ")],
            l_paren_token: L_PAREN@122..123 "(" [] [],
            initializer: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@123..127 "let" [] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@127..129 "i" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@129..131 "=" [] [Whitespace(" ")],
                            expression: JsNumberLiteralExpression {
                                value_token: JS_NUMBER_LITERAL@131..132 "5" [] [],
                            },
                        },
                    },
                    COMMA@132..134 "," [] [Whitespace(" ")],
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@134..136 "j" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@136..138 "=" [] [Whitespace(" ")],
                            expression: JsNumberLiteralExpression {
                                value_token: JS_NUMBER_LITERAL@138..139 "6" [] [],
                            },
                        },
                    },
                ],
            },
            first_semi_token: SEMICOLON@139..141 ";" [] [Whitespace(" ")],
            test: JsBinaryExpression {
                left: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@141..143 "i" [] [Whitespace(" ")],
                    },
                },
                operator_token: L_ANGLE@143..145 "<" [] [Whitespace(" ")],
                right: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@145..146 "j" [] [],
                    },
                },
            },
            second_semi_token: SEMICOLON@146..148 ";" [] [Whitespace(" ")],
            update: JsPreUpdateExpression {
                operator_token: PLUS2@148..150 "++" [] [],
                operand: JsIdentifierAssignment {
                    name_token: IDENT@150..151 "j" [] [],
                },
            },
            r_paren_token: R_PAREN@151..153 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@153..154 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@154..155 "}" [] [],
            },
        },
        JsForOfStatement {
            for_token: FOR_KW@155..160 "for" [Newline("\n")] [Whitespace(" ")],
            await_token: AWAIT_KW@160..166 "await" [] [Whitespace(" ")],
            l_paren_token: L_PAREN@166..167 "(" [] [],
            initializer: JsForVariableDeclaration {
                await_token: missing (optional),
                kind_token: LET_KW@167..171 "let" [] [Whitespace(" ")],
                declarator: JsVariableDeclarator {
                    id: JsIdentifierBinding {
                        name_token: IDENT@171..173 "a" [] [Whitespace(" ")],
                    },
                    variable_annotation: missing (optional),
                    initializer: missing (optional),
                },
            },
            of_token: OF_KW@173..176 "of" [] [Whitespace(" ")],
            expression: JsArrayExpression {
                l_brack_token: L_BRACK@176..177 "[" [] [],
                elements: JsArrayElementList [],
                r_brack_token: R_BRACK@177..178 "]" [] [],
            },
            r_paren_token: R_PAREN@178..180 ")" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@180..181 "{" [] [],
                statements: JsStatementList [],
                r_curly_token: R_CURLY@181..182 "}" [] [],
            },
        },
    ],
    eof_token: EOF@182..183 "" [Newline("\n")] [],
}

0: JS_MODULE@0..183
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..182
    0: JS_FOR_STATEMENT@0..31
      0: FOR_KW@0..4 "for" [] [Whitespace(" ")]
      1: L_PAREN@4..5 "(" [] []
      2: JS_VARIABLE_DECLARATION@5..14
        0: (empty)
        1: LET_KW@5..9 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@9..14
          0: JS_VARIABLE_DECLARATOR@9..14
            0: JS_IDENTIFIER_BINDING@9..11
              0: IDENT@9..11 "i" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@11..14
              0: EQ@11..13 "=" [] [Whitespace(" ")]
              1: JS_NUMBER_LITERAL_EXPRESSION@13..14
                0: JS_NUMBER_LITERAL@13..14 "5" [] []
      3: SEMICOLON@14..16 ";" [] [Whitespace(" ")]
      4: JS_BINARY_EXPRESSION@16..22
        0: JS_IDENTIFIER_EXPRESSION@16..18
          0: JS_REFERENCE_IDENTIFIER@16..18
            0: IDENT@16..18 "i" [] [Whitespace(" ")]
        1: L_ANGLE@18..20 "<" [] [Whitespace(" ")]
        2: JS_NUMBER_LITERAL_EXPRESSION@20..22
          0: JS_NUMBER_LITERAL@20..22 "10" [] []
      5: SEMICOLON@22..24 ";" [] [Whitespace(" ")]
      6: JS_POST_UPDATE_EXPRESSION@24..27
        0: JS_IDENTIFIER_ASSIGNMENT@24..25
          0: IDENT@24..25 "i" [] []
        1: PLUS2@25..27 "++" [] []
      7: R_PAREN@27..29 ")" [] [Whitespace(" ")]
      8: JS_BLOCK_STATEMENT@29..31
        0: L_CURLY@29..30 "{" [] []
        1: JS_STATEMENT_LIST@30..30
        2: R_CURLY@30..31 "}" [] []
    1: JS_FOR_OF_STATEMENT@31..63
      0: FOR_KW@31..36 "for" [Newline("\n")] [Whitespace(" ")]
      1: (empty)
      2: L_PAREN@36..37 "(" [] []
      3: JS_FOR_VARIABLE_DECLARATION@37..54
        0: (empty)
        1: LET_KW@37..41 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR@41..54
          0: JS_OBJECT_BINDING_PATTERN@41..54
            0: L_CURLY@41..43 "{" [] [Whitespace(" ")]
            1: JS_OBJECT_BINDING_PATTERN_PROPERTY_LIST@43..52
              0: JS_OBJECT_BINDING_PATTERN_SHORTHAND_PROPERTY@43..46
                0: JS_IDENTIFIER_BINDING@43..46
                  0: IDENT@43..46 "foo" [] []
                1: (empty)
              1: COMMA@46..48 "," [] [Whitespace(" ")]
              2: JS_OBJECT_BINDING_PATTERN_SHORTHAND_PROPERTY@48..52
                0: JS_IDENTIFIER_BINDING@48..52
                  0: IDENT@48..52 "bar" [] [Whitespace(" ")]
                1: (empty)
            2: R_CURLY@52..54 "}" [] [Whitespace(" ")]
          1: (empty)
          2: (empty)
      4: OF_KW@54..57 "of" [] [Whitespace(" ")]
      5: JS_OBJECT_EXPRESSION@57..59
        0: L_CURLY@57..58 "{" [] []
        1: JS_OBJECT_MEMBER_LIST@58..58
        2: R_CURLY@58..59 "}" [] []
      6: R_PAREN@59..61 ")" [] [Whitespace(" ")]
      7: JS_BLOCK_STATEMENT@61..63
        0: L_CURLY@61..62 "{" [] []
        1: JS_STATEMENT_LIST@62..62
        2: R_CURLY@62..63 "}" [] []
    2: JS_FOR_IN_STATEMENT@63..82
      0: FOR_KW@63..68 "for" [Newline("\n")] [Whitespace(" ")]
      1: L_PAREN@68..69 "(" [] []
      2: JS_IDENTIFIER_ASSIGNMENT@69..73
        0: IDENT@69..73 "foo" [] [Whitespace(" ")]
      3: IN_KW@73..76 "in" [] [Whitespace(" ")]
      4: JS_OBJECT_EXPRESSION@76..78
        0: L_CURLY@76..77 "{" [] []
        1: JS_OBJECT_MEMBER_LIST@77..77
        2: R_CURLY@77..78 "}" [] []
      5: R_PAREN@78..80 ")" [] [Whitespace(" ")]
      6: JS_BLOCK_STATEMENT@80..82
        0: L_CURLY@80..81 "{" [] []
        1: JS_STATEMENT_LIST@81..81
        2: R_CURLY@81..82 "}" [] []
    3: JS_FOR_STATEMENT@82..94
      0: FOR_KW@82..87 "for" [Newline("\n")] [Whitespace(" ")]
      1: L_PAREN@87..88 "(" [] []
      2: (empty)
      3: SEMICOLON@88..89 ";" [] []
      4: (empty)
      5: SEMICOLON@89..90 ";" [] []
      6: (empty)
      7: R_PAREN@90..92 ")" [] [Whitespace(" ")]
      8: JS_BLOCK_STATEMENT@92..94
        0: L_CURLY@92..93 "{" [] []
        1: JS_STATEMENT_LIST@93..93
        2: R_CURLY@93..94 "}" [] []
    4: JS_FOR_OF_STATEMENT@94..117
      0: FOR_KW@94..99 "for" [Newline("\n")] [Whitespace(" ")]
      1: (empty)
      2: L_PAREN@99..100 "(" [] []
      3: JS_FOR_VARIABLE_DECLARATION@100..108
        0: (empty)
        1: LET_KW@100..104 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR@104..108
          0: JS_IDENTIFIER_BINDING@104..108
            0: IDENT@104..108 "foo" [] [Whitespace(" ")]
          1: (empty)
          2: (empty)
      4: OF_KW@108..111 "of" [] [Whitespace(" ")]
      5: JS_ARRAY_EXPRESSION@111..113
        0: L_BRACK@111..112 "[" [] []
        1: JS_ARRAY_ELEMENT_LIST@112..112
        2: R_BRACK@112..113 "]" [] []
      6: R_PAREN@113..115 ")" [] [Whitespace(" ")]
      7: JS_BLOCK_STATEMENT@115..117
        0: L_CURLY@115..116 "{" [] []
        1: JS_STATEMENT_LIST@116..116
        2: R_CURLY@116..117 "}" [] []
    5: JS_FOR_STATEMENT@117..155
      0: FOR_KW@117..122 "for" [Newline("\n")] [Whitespace(" ")]
      1: L_PAREN@122..123 "(" [] []
      2: JS_VARIABLE_DECLARATION@123..139
        0: (empty)
        1: LET_KW@123..127 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@127..139
          0: JS_VARIABLE_DECLARATOR@127..132
            0: JS_IDENTIFIER_BINDING@127..129
              0: IDENT@127..129 "i" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@129..132
              0: EQ@129..131 "=" [] [Whitespace(" ")]
              1: JS_NUMBER_LITERAL_EXPRESSION@131..132
                0: JS_NUMBER_LITERAL@131..132 "5" [] []
          1: COMMA@132..134 "," [] [Whitespace(" ")]
          2: JS_VARIABLE_DECLARATOR@134..139
            0: JS_IDENTIFIER_BINDING@134..136
              0: IDENT@134..136 "j" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@136..139
              0: EQ@136..138 "=" [] [Whitespace(" ")]
              1: JS_NUMBER_LITERAL_EXPRESSION@138..139
                0: JS_NUMBER_LITERAL@138..139 "6" [] []
      3: SEMICOLON@139..141 ";" [] [Whitespace(" ")]
      4: JS_BINARY_EXPRESSION@141..146
        0: JS_IDENTIFIER_EXPRESSION@141..143
          0: JS_REFERENCE_IDENTIFIER@141..143
            0: IDENT@141..143 "i" [] [Whitespace(" ")]
        1: L_ANGLE@143..145 "<" [] [Whitespace(" ")]
        2: JS_IDENTIFIER_EXPRESSION@145..146
          0: JS_REFERENCE_IDENTIFIER@145..146
            0: IDENT@145..146 "j" [] []
      5: SEMICOLON@146..148 ";" [] [Whitespace(" ")]
      6: JS_PRE_UPDATE_EXPRESSION@148..151
        0: PLUS2@148..150 "++" [] []
        1: JS_IDENTIFIER_ASSIGNMENT@150..151
          0: IDENT@150..151 "j" [] []
      7: R_PAREN@151..153 ")" [] [Whitespace(" ")]
      8: JS_BLOCK_STATEMENT@153..155
        0: L_CURLY@153..154 "{" [] []
        1: JS_STATEMENT_LIST@154..154
        2: R_CURLY@154..155 "}" [] []
    6: JS_FOR_OF_STATEMENT@155..182
      0: FOR_KW@155..160 "for" [Newline("\n")] [Whitespace(" ")]
      1: AWAIT_KW@160..166 "await" [] [Whitespace(" ")]
      2: L_PAREN@166..167 "(" [] []
      3: JS_FOR_VARIABLE_DECLARATION@167..173
        0: (empty)
        1: LET_KW@167..171 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR@171..173
          0: JS_IDENTIFIER_BINDING@171..173
            0: IDENT@171..173 "a" [] [Whitespace(" ")]
          1: (empty)
          2: (empty)
      4: OF_KW@173..176 "of" [] [Whitespace(" ")]
      5: JS_ARRAY_EXPRESSION@176..178
        0: L_BRACK@176..177 "[" [] []
        1: JS_ARRAY_ELEMENT_LIST@177..177
        2: R_BRACK@177..178 "]" [] []
      6: R_PAREN@178..180 ")" [] [Whitespace(" ")]
      7: JS_BLOCK_STATEMENT@180..182
        0: L_CURLY@180..181 "{" [] []
        1: JS_STATEMENT_LIST@181..181
        2: R_CURLY@181..182 "}" [] []
  4: EOF@182..183 "" [Newline("\n")] []