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
JsScript {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [
        JsDirective {
            value_token: JS_STRING_LITERAL@0..19 "\"use new\"" [Comments("// SCRIPT"), Newline("\n")] [],
            semicolon_token: missing (optional),
        },
    ],
    statements: JsStatementList [
        JsVariableStatement {
            declaration: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@19..24 "let" [Newline("\n")] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@24..26 "a" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@26..28 "=" [] [Whitespace(" ")],
                            expression: JsNumberLiteralExpression {
                                value_token: JS_NUMBER_LITERAL@28..30 "10" [] [],
                            },
                        },
                    },
                ],
            },
            semicolon_token: SEMICOLON@30..31 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsStringLiteralExpression {
                value_token: JS_STRING_LITERAL@31..44 "\"use strict\"" [Newline("\n")] [],
            },
            semicolon_token: SEMICOLON@44..64 ";" [] [Whitespace(" "), Comments("// not a directive")],
        },
        JsFunctionDeclaration {
            async_token: missing (optional),
            function_token: FUNCTION_KW@64..74 "function" [Newline("\n")] [Whitespace(" ")],
            star_token: missing (optional),
            id: JsIdentifierBinding {
                name_token: IDENT@74..78 "test" [] [],
            },
            type_parameters: missing (optional),
            parameters: JsParameters {
                l_paren_token: L_PAREN@78..79 "(" [] [],
                items: JsParameterList [],
                r_paren_token: R_PAREN@79..81 ")" [] [Whitespace(" ")],
            },
            return_type_annotation: missing (optional),
            body: JsFunctionBody {
                l_curly_token: L_CURLY@81..82 "{" [] [],
                directives: JsDirectiveList [
                    JsDirective {
                        value_token: JS_STRING_LITERAL@82..97 "'use strict'" [Newline("\n"), Whitespace("  ")] [],
                        semicolon_token: SEMICOLON@97..98 ";" [] [],
                    },
                ],
                statements: JsStatementList [
                    JsVariableStatement {
                        declaration: JsVariableDeclaration {
                            await_token: missing (optional),
                            kind: LET_KW@98..105 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")],
                            declarators: JsVariableDeclaratorList [
                                JsVariableDeclarator {
                                    id: JsIdentifierBinding {
                                        name_token: IDENT@105..107 "b" [] [Whitespace(" ")],
                                    },
                                    variable_annotation: missing (optional),
                                    initializer: JsInitializerClause {
                                        eq_token: EQ@107..109 "=" [] [Whitespace(" ")],
                                        expression: JsNumberLiteralExpression {
                                            value_token: JS_NUMBER_LITERAL@109..111 "10" [] [],
                                        },
                                    },
                                },
                            ],
                        },
                        semicolon_token: SEMICOLON@111..112 ";" [] [],
                    },
                    JsExpressionStatement {
                        expression: JsStringLiteralExpression {
                            value_token: JS_STRING_LITERAL@112..127 "'use strict'" [Newline("\n"), Whitespace("  ")] [],
                        },
                        semicolon_token: SEMICOLON@127..147 ";" [] [Whitespace(" "), Comments("// not a directive")],
                    },
                ],
                r_curly_token: R_CURLY@147..149 "}" [Newline("\n")] [],
            },
        },
        JsExpressionStatement {
            expression: JsParenthesizedExpression {
                l_paren_token: L_PAREN@149..151 "(" [Newline("\n")] [],
                expression: JsFunctionExpression {
                    async_token: missing (optional),
                    function_token: FUNCTION_KW@151..160 "function" [] [Whitespace(" ")],
                    star_token: missing (optional),
                    id: missing (optional),
                    type_parameters: missing (optional),
                    parameters: JsParameters {
                        l_paren_token: L_PAREN@160..161 "(" [] [],
                        items: JsParameterList [],
                        r_paren_token: R_PAREN@161..163 ")" [] [Whitespace(" ")],
                    },
                    return_type_annotation: missing (optional),
                    body: JsFunctionBody {
                        l_curly_token: L_CURLY@163..164 "{" [] [],
                        directives: JsDirectiveList [
                            JsDirective {
                                value_token: JS_STRING_LITERAL@164..179 "\"use strict\"" [Newline("\n"), Whitespace("  ")] [],
                                semicolon_token: SEMICOLON@179..180 ";" [] [],
                            },
                        ],
                        statements: JsStatementList [
                            JsExpressionStatement {
                                expression: JsStaticMemberExpression {
                                    object: JsStringLiteralExpression {
                                        value_token: JS_STRING_LITERAL@180..195 "\"use strict\"" [Newline("\n"), Whitespace("  ")] [],
                                    },
                                    operator_token: DOT@195..201 "." [Newline("\n"), Whitespace("    ")] [],
                                    member: JsName {
                                        value_token: IDENT@201..207 "length" [] [],
                                    },
                                },
                                semicolon_token: missing (optional),
                            },
                            JsEmptyStatement {
                                semicolon_token: SEMICOLON@207..227 ";" [] [Whitespace(" "), Comments("// not a directive")],
                            },
                            JsVariableStatement {
                                declaration: JsVariableDeclaration {
                                    await_token: missing (optional),
                                    kind: LET_KW@227..234 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")],
                                    declarators: JsVariableDeclaratorList [
                                        JsVariableDeclarator {
                                            id: JsIdentifierBinding {
                                                name_token: IDENT@234..236 "c" [] [Whitespace(" ")],
                                            },
                                            variable_annotation: missing (optional),
                                            initializer: JsInitializerClause {
                                                eq_token: EQ@236..238 "=" [] [Whitespace(" ")],
                                                expression: JsNumberLiteralExpression {
                                                    value_token: JS_NUMBER_LITERAL@238..240 "10" [] [],
                                                },
                                            },
                                        },
                                    ],
                                },
                                semicolon_token: SEMICOLON@240..241 ";" [] [],
                            },
                            JsExpressionStatement {
                                expression: JsStringLiteralExpression {
                                    value_token: JS_STRING_LITERAL@241..256 "\"use strict\"" [Newline("\n"), Whitespace("  ")] [],
                                },
                                semicolon_token: SEMICOLON@256..276 ";" [] [Whitespace(" "), Comments("// not a directive")],
                            },
                        ],
                        r_curly_token: R_CURLY@276..278 "}" [Newline("\n")] [],
                    },
                },
                r_paren_token: R_PAREN@278..279 ")" [] [],
            },
            semicolon_token: SEMICOLON@279..280 ";" [] [],
        },
        JsVariableStatement {
            declaration: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@280..285 "let" [Newline("\n")] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@285..287 "b" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@287..289 "=" [] [Whitespace(" ")],
                            expression: JsArrowFunctionExpression {
                                async_token: missing (optional),
                                type_parameters: missing (optional),
                                parameters: JsParameters {
                                    l_paren_token: L_PAREN@289..290 "(" [] [],
                                    items: JsParameterList [],
                                    r_paren_token: R_PAREN@290..292 ")" [] [Whitespace(" ")],
                                },
                                return_type_annotation: missing (optional),
                                fat_arrow_token: FAT_ARROW@292..295 "=>" [] [Whitespace(" ")],
                                body: JsFunctionBody {
                                    l_curly_token: L_CURLY@295..296 "{" [] [],
                                    directives: JsDirectiveList [
                                        JsDirective {
                                            value_token: JS_STRING_LITERAL@296..311 "\"use strict\"" [Newline("\n"), Whitespace("  ")] [],
                                            semicolon_token: SEMICOLON@311..312 ";" [] [],
                                        },
                                    ],
                                    statements: JsStatementList [
                                        JsVariableStatement {
                                            declaration: JsVariableDeclaration {
                                                await_token: missing (optional),
                                                kind: LET_KW@312..319 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")],
                                                declarators: JsVariableDeclaratorList [
                                                    JsVariableDeclarator {
                                                        id: JsIdentifierBinding {
                                                            name_token: IDENT@319..321 "e" [] [Whitespace(" ")],
                                                        },
                                                        variable_annotation: missing (optional),
                                                        initializer: JsInitializerClause {
                                                            eq_token: EQ@321..323 "=" [] [Whitespace(" ")],
                                                            expression: JsNumberLiteralExpression {
                                                                value_token: JS_NUMBER_LITERAL@323..325 "10" [] [],
                                                            },
                                                        },
                                                    },
                                                ],
                                            },
                                            semicolon_token: SEMICOLON@325..326 ";" [] [],
                                        },
                                        JsExpressionStatement {
                                            expression: JsStringLiteralExpression {
                                                value_token: JS_STRING_LITERAL@326..341 "\"use strict\"" [Newline("\n"), Whitespace("  ")] [],
                                            },
                                            semicolon_token: SEMICOLON@341..362 ";" [] [Whitespace("  "), Comments("// not a directive")],
                                        },
                                    ],
                                    r_curly_token: R_CURLY@362..364 "}" [Newline("\n")] [],
                                },
                            },
                        },
                    },
                ],
            },
            semicolon_token: missing (optional),
        },
        JsBlockStatement {
            l_curly_token: L_CURLY@364..366 "{" [Newline("\n")] [],
            statements: JsStatementList [
                JsExpressionStatement {
                    expression: JsStringLiteralExpression {
                        value_token: JS_STRING_LITERAL@366..381 "\"use strict\"" [Newline("\n"), Whitespace("  ")] [],
                    },
                    semicolon_token: SEMICOLON@381..401 ";" [] [Whitespace(" "), Comments("// not a directive")],
                },
            ],
            r_curly_token: R_CURLY@401..403 "}" [Newline("\n")] [],
        },
    ],
    eof_token: EOF@403..404 "" [Newline("\n")] [],
}

0: JS_SCRIPT@0..404
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..19
    0: JS_DIRECTIVE@0..19
      0: JS_STRING_LITERAL@0..19 "\"use new\"" [Comments("// SCRIPT"), Newline("\n")] []
      1: (empty)
  3: JS_STATEMENT_LIST@19..403
    0: JS_VARIABLE_STATEMENT@19..31
      0: JS_VARIABLE_DECLARATION@19..30
        0: (empty)
        1: LET_KW@19..24 "let" [Newline("\n")] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@24..30
          0: JS_VARIABLE_DECLARATOR@24..30
            0: JS_IDENTIFIER_BINDING@24..26
              0: IDENT@24..26 "a" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@26..30
              0: EQ@26..28 "=" [] [Whitespace(" ")]
              1: JS_NUMBER_LITERAL_EXPRESSION@28..30
                0: JS_NUMBER_LITERAL@28..30 "10" [] []
      1: SEMICOLON@30..31 ";" [] []
    1: JS_EXPRESSION_STATEMENT@31..64
      0: JS_STRING_LITERAL_EXPRESSION@31..44
        0: JS_STRING_LITERAL@31..44 "\"use strict\"" [Newline("\n")] []
      1: SEMICOLON@44..64 ";" [] [Whitespace(" "), Comments("// not a directive")]
    2: JS_FUNCTION_DECLARATION@64..149
      0: (empty)
      1: FUNCTION_KW@64..74 "function" [Newline("\n")] [Whitespace(" ")]
      2: (empty)
      3: JS_IDENTIFIER_BINDING@74..78
        0: IDENT@74..78 "test" [] []
      4: (empty)
      5: JS_PARAMETERS@78..81
        0: L_PAREN@78..79 "(" [] []
        1: JS_PARAMETER_LIST@79..79
        2: R_PAREN@79..81 ")" [] [Whitespace(" ")]
      6: (empty)
      7: JS_FUNCTION_BODY@81..149
        0: L_CURLY@81..82 "{" [] []
        1: JS_DIRECTIVE_LIST@82..98
          0: JS_DIRECTIVE@82..98
            0: JS_STRING_LITERAL@82..97 "'use strict'" [Newline("\n"), Whitespace("  ")] []
            1: SEMICOLON@97..98 ";" [] []
        2: JS_STATEMENT_LIST@98..147
          0: JS_VARIABLE_STATEMENT@98..112
            0: JS_VARIABLE_DECLARATION@98..111
              0: (empty)
              1: LET_KW@98..105 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")]
              2: JS_VARIABLE_DECLARATOR_LIST@105..111
                0: JS_VARIABLE_DECLARATOR@105..111
                  0: JS_IDENTIFIER_BINDING@105..107
                    0: IDENT@105..107 "b" [] [Whitespace(" ")]
                  1: (empty)
                  2: JS_INITIALIZER_CLAUSE@107..111
                    0: EQ@107..109 "=" [] [Whitespace(" ")]
                    1: JS_NUMBER_LITERAL_EXPRESSION@109..111
                      0: JS_NUMBER_LITERAL@109..111 "10" [] []
            1: SEMICOLON@111..112 ";" [] []
          1: JS_EXPRESSION_STATEMENT@112..147
            0: JS_STRING_LITERAL_EXPRESSION@112..127
              0: JS_STRING_LITERAL@112..127 "'use strict'" [Newline("\n"), Whitespace("  ")] []
            1: SEMICOLON@127..147 ";" [] [Whitespace(" "), Comments("// not a directive")]
        3: R_CURLY@147..149 "}" [Newline("\n")] []
    3: JS_EXPRESSION_STATEMENT@149..280
      0: JS_PARENTHESIZED_EXPRESSION@149..279
        0: L_PAREN@149..151 "(" [Newline("\n")] []
        1: JS_FUNCTION_EXPRESSION@151..278
          0: (empty)
          1: FUNCTION_KW@151..160 "function" [] [Whitespace(" ")]
          2: (empty)
          3: (empty)
          4: (empty)
          5: JS_PARAMETERS@160..163
            0: L_PAREN@160..161 "(" [] []
            1: JS_PARAMETER_LIST@161..161
            2: R_PAREN@161..163 ")" [] [Whitespace(" ")]
          6: (empty)
          7: JS_FUNCTION_BODY@163..278
            0: L_CURLY@163..164 "{" [] []
            1: JS_DIRECTIVE_LIST@164..180
              0: JS_DIRECTIVE@164..180
                0: JS_STRING_LITERAL@164..179 "\"use strict\"" [Newline("\n"), Whitespace("  ")] []
                1: SEMICOLON@179..180 ";" [] []
            2: JS_STATEMENT_LIST@180..276
              0: JS_EXPRESSION_STATEMENT@180..207
                0: JS_STATIC_MEMBER_EXPRESSION@180..207
                  0: JS_STRING_LITERAL_EXPRESSION@180..195
                    0: JS_STRING_LITERAL@180..195 "\"use strict\"" [Newline("\n"), Whitespace("  ")] []
                  1: DOT@195..201 "." [Newline("\n"), Whitespace("    ")] []
                  2: JS_NAME@201..207
                    0: IDENT@201..207 "length" [] []
                1: (empty)
              1: JS_EMPTY_STATEMENT@207..227
                0: SEMICOLON@207..227 ";" [] [Whitespace(" "), Comments("// not a directive")]
              2: JS_VARIABLE_STATEMENT@227..241
                0: JS_VARIABLE_DECLARATION@227..240
                  0: (empty)
                  1: LET_KW@227..234 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")]
                  2: JS_VARIABLE_DECLARATOR_LIST@234..240
                    0: JS_VARIABLE_DECLARATOR@234..240
                      0: JS_IDENTIFIER_BINDING@234..236
                        0: IDENT@234..236 "c" [] [Whitespace(" ")]
                      1: (empty)
                      2: JS_INITIALIZER_CLAUSE@236..240
                        0: EQ@236..238 "=" [] [Whitespace(" ")]
                        1: JS_NUMBER_LITERAL_EXPRESSION@238..240
                          0: JS_NUMBER_LITERAL@238..240 "10" [] []
                1: SEMICOLON@240..241 ";" [] []
              3: JS_EXPRESSION_STATEMENT@241..276
                0: JS_STRING_LITERAL_EXPRESSION@241..256
                  0: JS_STRING_LITERAL@241..256 "\"use strict\"" [Newline("\n"), Whitespace("  ")] []
                1: SEMICOLON@256..276 ";" [] [Whitespace(" "), Comments("// not a directive")]
            3: R_CURLY@276..278 "}" [Newline("\n")] []
        2: R_PAREN@278..279 ")" [] []
      1: SEMICOLON@279..280 ";" [] []
    4: JS_VARIABLE_STATEMENT@280..364
      0: JS_VARIABLE_DECLARATION@280..364
        0: (empty)
        1: LET_KW@280..285 "let" [Newline("\n")] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@285..364
          0: JS_VARIABLE_DECLARATOR@285..364
            0: JS_IDENTIFIER_BINDING@285..287
              0: IDENT@285..287 "b" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@287..364
              0: EQ@287..289 "=" [] [Whitespace(" ")]
              1: JS_ARROW_FUNCTION_EXPRESSION@289..364
                0: (empty)
                1: (empty)
                2: JS_PARAMETERS@289..292
                  0: L_PAREN@289..290 "(" [] []
                  1: JS_PARAMETER_LIST@290..290
                  2: R_PAREN@290..292 ")" [] [Whitespace(" ")]
                3: (empty)
                4: FAT_ARROW@292..295 "=>" [] [Whitespace(" ")]
                5: JS_FUNCTION_BODY@295..364
                  0: L_CURLY@295..296 "{" [] []
                  1: JS_DIRECTIVE_LIST@296..312
                    0: JS_DIRECTIVE@296..312
                      0: JS_STRING_LITERAL@296..311 "\"use strict\"" [Newline("\n"), Whitespace("  ")] []
                      1: SEMICOLON@311..312 ";" [] []
                  2: JS_STATEMENT_LIST@312..362
                    0: JS_VARIABLE_STATEMENT@312..326
                      0: JS_VARIABLE_DECLARATION@312..325
                        0: (empty)
                        1: LET_KW@312..319 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")]
                        2: JS_VARIABLE_DECLARATOR_LIST@319..325
                          0: JS_VARIABLE_DECLARATOR@319..325
                            0: JS_IDENTIFIER_BINDING@319..321
                              0: IDENT@319..321 "e" [] [Whitespace(" ")]
                            1: (empty)
                            2: JS_INITIALIZER_CLAUSE@321..325
                              0: EQ@321..323 "=" [] [Whitespace(" ")]
                              1: JS_NUMBER_LITERAL_EXPRESSION@323..325
                                0: JS_NUMBER_LITERAL@323..325 "10" [] []
                      1: SEMICOLON@325..326 ";" [] []
                    1: JS_EXPRESSION_STATEMENT@326..362
                      0: JS_STRING_LITERAL_EXPRESSION@326..341
                        0: JS_STRING_LITERAL@326..341 "\"use strict\"" [Newline("\n"), Whitespace("  ")] []
                      1: SEMICOLON@341..362 ";" [] [Whitespace("  "), Comments("// not a directive")]
                  3: R_CURLY@362..364 "}" [Newline("\n")] []
      1: (empty)
    5: JS_BLOCK_STATEMENT@364..403
      0: L_CURLY@364..366 "{" [Newline("\n")] []
      1: JS_STATEMENT_LIST@366..401
        0: JS_EXPRESSION_STATEMENT@366..401
          0: JS_STRING_LITERAL_EXPRESSION@366..381
            0: JS_STRING_LITERAL@366..381 "\"use strict\"" [Newline("\n"), Whitespace("  ")] []
          1: SEMICOLON@381..401 ";" [] [Whitespace(" "), Comments("// not a directive")]
      2: R_CURLY@401..403 "}" [Newline("\n")] []
  4: EOF@403..404 "" [Newline("\n")] []