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
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsVariableStatement {
            declaration: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@0..4 "let" [] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsObjectBindingPattern {
                            l_curly_token: L_CURLY@4..6 "{" [] [Whitespace(" ")],
                            properties: JsObjectBindingPatternPropertyList [
                                JsObjectBindingPatternRest {
                                    dotdotdot_token: DOT3@6..10 "..." [] [Whitespace(" ")],
                                    binding: missing (required),
                                },
                            ],
                            r_curly_token: R_CURLY@10..12 "}" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@12..14 "=" [] [Whitespace(" ")],
                            expression: JsIdentifierExpression {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@14..15 "a" [] [],
                                },
                            },
                        },
                    },
                ],
            },
            semicolon_token: SEMICOLON@15..16 ";" [] [],
        },
        JsBogusStatement {
            items: [
                JsBogus {
                    items: [
                        LET_KW@16..21 "let" [Newline("\n")] [Whitespace(" ")],
                        JsBogus {
                            items: [
                                JsBogus {
                                    items: [
                                        JsBogus {
                                            items: [
                                                L_CURLY@21..23 "{" [] [Whitespace(" ")],
                                                JsBogus {
                                                    items: [
                                                        JsBogus {
                                                            items: [
                                                                DOT3@23..26 "..." [] [],
                                                                JsIdentifierBinding {
                                                                    name_token: IDENT@26..28 "c" [] [Whitespace(" ")],
                                                                },
                                                                EQ@28..30 "=" [] [Whitespace(" ")],
                                                                JS_STRING_LITERAL@30..40 "\"default\"" [] [Whitespace(" ")],
                                                            ],
                                                        },
                                                    ],
                                                },
                                                R_CURLY@40..42 "}" [] [Whitespace(" ")],
                                            ],
                                        },
                                        JsInitializerClause {
                                            eq_token: EQ@42..44 "=" [] [Whitespace(" ")],
                                            expression: JsIdentifierExpression {
                                                name: JsReferenceIdentifier {
                                                    value_token: IDENT@44..45 "a" [] [],
                                                },
                                            },
                                        },
                                    ],
                                },
                            ],
                        },
                    ],
                },
                SEMICOLON@45..46 ";" [] [],
            ],
        },
        JsVariableStatement {
            declaration: JsVariableDeclaration {
                await_token: missing (optional),
                kind: LET_KW@46..51 "let" [Newline("\n")] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsObjectBindingPattern {
                            l_curly_token: L_CURLY@51..53 "{" [] [Whitespace(" ")],
                            properties: JsObjectBindingPatternPropertyList [
                                JsObjectBindingPatternRest {
                                    dotdotdot_token: DOT3@53..56 "..." [] [],
                                    binding: JsBogusBinding {
                                        items: [
                                            L_CURLY@56..57 "{" [] [],
                                            JsObjectBindingPatternPropertyList [
                                                JsObjectBindingPatternShorthandProperty {
                                                    identifier: JsIdentifierBinding {
                                                        name_token: IDENT@57..58 "a" [] [],
                                                    },
                                                    init: missing (optional),
                                                },
                                            ],
                                            R_CURLY@58..60 "}" [] [Whitespace(" ")],
                                        ],
                                    },
                                },
                            ],
                            r_curly_token: R_CURLY@60..62 "}" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@62..64 "=" [] [Whitespace(" ")],
                            expression: JsIdentifierExpression {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@64..65 "b" [] [],
                                },
                            },
                        },
                    },
                ],
            },
            semicolon_token: SEMICOLON@65..66 ";" [] [],
        },
        JsBogusStatement {
            items: [
                JsBogus {
                    items: [
                        LET_KW@66..71 "let" [Newline("\n")] [Whitespace(" ")],
                        JsBogus {
                            items: [
                                JsBogus {
                                    items: [
                                        JsBogus {
                                            items: [
                                                L_CURLY@71..73 "{" [] [Whitespace(" ")],
                                                JsBogus {
                                                    items: [
                                                        JsBogus {
                                                            items: [
                                                                DOT3@73..76 "..." [] [],
                                                                JsIdentifierBinding {
                                                                    name_token: IDENT@76..80 "rest" [] [],
                                                                },
                                                            ],
                                                        },
                                                        COMMA@80..82 "," [] [Whitespace(" ")],
                                                        JsObjectBindingPatternShorthandProperty {
                                                            identifier: JsIdentifierBinding {
                                                                name_token: IDENT@82..99 "other_assignment" [] [Whitespace(" ")],
                                                            },
                                                            init: missing (optional),
                                                        },
                                                    ],
                                                },
                                                R_CURLY@99..101 "}" [] [Whitespace(" ")],
                                            ],
                                        },
                                        JsInitializerClause {
                                            eq_token: EQ@101..103 "=" [] [Whitespace(" ")],
                                            expression: JsIdentifierExpression {
                                                name: JsReferenceIdentifier {
                                                    value_token: IDENT@103..104 "a" [] [],
                                                },
                                            },
                                        },
                                    ],
                                },
                            ],
                        },
                    ],
                },
                SEMICOLON@104..105 ";" [] [],
            ],
        },
        JsBogusStatement {
            items: [
                JsBogus {
                    items: [
                        LET_KW@105..110 "let" [Newline("\n")] [Whitespace(" ")],
                        JsBogus {
                            items: [
                                JsBogus {
                                    items: [
                                        JsBogus {
                                            items: [
                                                L_CURLY@110..112 "{" [] [Whitespace(" ")],
                                                JsBogus {
                                                    items: [
                                                        JsBogus {
                                                            items: [
                                                                DOT3@112..115 "..." [] [],
                                                                JsIdentifierBinding {
                                                                    name_token: IDENT@115..120 "rest2" [] [],
                                                                },
                                                            ],
                                                        },
                                                        COMMA@120..122 "," [] [Whitespace(" ")],
                                                    ],
                                                },
                                                R_CURLY@122..124 "}" [] [Whitespace(" ")],
                                            ],
                                        },
                                        JsInitializerClause {
                                            eq_token: EQ@124..126 "=" [] [Whitespace(" ")],
                                            expression: JsIdentifierExpression {
                                                name: JsReferenceIdentifier {
                                                    value_token: IDENT@126..127 "a" [] [],
                                                },
                                            },
                                        },
                                    ],
                                },
                            ],
                        },
                    ],
                },
                SEMICOLON@127..128 ";" [] [],
            ],
        },
        JsFunctionDeclaration {
            async_token: ASYNC_KW@128..135 "async" [Newline("\n")] [Whitespace(" ")],
            function_token: FUNCTION_KW@135..144 "function" [] [Whitespace(" ")],
            star_token: missing (optional),
            id: JsIdentifierBinding {
                name_token: IDENT@144..148 "test" [] [],
            },
            type_parameters: missing (optional),
            parameters: JsParameters {
                l_paren_token: L_PAREN@148..149 "(" [] [],
                items: JsParameterList [],
                r_paren_token: R_PAREN@149..151 ")" [] [Whitespace(" ")],
            },
            return_type_annotation: missing (optional),
            body: JsFunctionBody {
                l_curly_token: L_CURLY@151..152 "{" [] [],
                directives: JsDirectiveList [],
                statements: JsStatementList [
                    JsVariableStatement {
                        declaration: JsVariableDeclaration {
                            await_token: missing (optional),
                            kind: LET_KW@152..159 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")],
                            declarators: JsVariableDeclaratorList [
                                JsVariableDeclarator {
                                    id: JsObjectBindingPattern {
                                        l_curly_token: L_CURLY@159..161 "{" [] [Whitespace(" ")],
                                        properties: JsObjectBindingPatternPropertyList [
                                            JsObjectBindingPatternRest {
                                                dotdotdot_token: DOT3@161..164 "..." [] [],
                                                binding: JsBogusBinding {
                                                    items: [
                                                        IDENT@164..170 "await" [] [Whitespace(" ")],
                                                    ],
                                                },
                                            },
                                        ],
                                        r_curly_token: R_CURLY@170..172 "}" [] [Whitespace(" ")],
                                    },
                                    variable_annotation: missing (optional),
                                    initializer: JsInitializerClause {
                                        eq_token: EQ@172..174 "=" [] [Whitespace(" ")],
                                        expression: JsIdentifierExpression {
                                            name: JsReferenceIdentifier {
                                                value_token: IDENT@174..175 "a" [] [],
                                            },
                                        },
                                    },
                                },
                            ],
                        },
                        semicolon_token: SEMICOLON@175..176 ";" [] [],
                    },
                ],
                r_curly_token: R_CURLY@176..178 "}" [Newline("\n")] [],
            },
        },
    ],
    eof_token: EOF@178..179 "" [Newline("\n")] [],
}

0: JS_MODULE@0..179
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..178
    0: JS_VARIABLE_STATEMENT@0..16
      0: JS_VARIABLE_DECLARATION@0..15
        0: (empty)
        1: LET_KW@0..4 "let" [] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@4..15
          0: JS_VARIABLE_DECLARATOR@4..15
            0: JS_OBJECT_BINDING_PATTERN@4..12
              0: L_CURLY@4..6 "{" [] [Whitespace(" ")]
              1: JS_OBJECT_BINDING_PATTERN_PROPERTY_LIST@6..10
                0: JS_OBJECT_BINDING_PATTERN_REST@6..10
                  0: DOT3@6..10 "..." [] [Whitespace(" ")]
                  1: (empty)
              2: R_CURLY@10..12 "}" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@12..15
              0: EQ@12..14 "=" [] [Whitespace(" ")]
              1: JS_IDENTIFIER_EXPRESSION@14..15
                0: JS_REFERENCE_IDENTIFIER@14..15
                  0: IDENT@14..15 "a" [] []
      1: SEMICOLON@15..16 ";" [] []
    1: JS_BOGUS_STATEMENT@16..46
      0: JS_BOGUS@16..45
        0: LET_KW@16..21 "let" [Newline("\n")] [Whitespace(" ")]
        1: JS_BOGUS@21..45
          0: JS_BOGUS@21..45
            0: JS_BOGUS@21..42
              0: L_CURLY@21..23 "{" [] [Whitespace(" ")]
              1: JS_BOGUS@23..40
                0: JS_BOGUS@23..40
                  0: DOT3@23..26 "..." [] []
                  1: JS_IDENTIFIER_BINDING@26..28
                    0: IDENT@26..28 "c" [] [Whitespace(" ")]
                  2: EQ@28..30 "=" [] [Whitespace(" ")]
                  3: JS_STRING_LITERAL@30..40 "\"default\"" [] [Whitespace(" ")]
              2: R_CURLY@40..42 "}" [] [Whitespace(" ")]
            1: JS_INITIALIZER_CLAUSE@42..45
              0: EQ@42..44 "=" [] [Whitespace(" ")]
              1: JS_IDENTIFIER_EXPRESSION@44..45
                0: JS_REFERENCE_IDENTIFIER@44..45
                  0: IDENT@44..45 "a" [] []
      1: SEMICOLON@45..46 ";" [] []
    2: JS_VARIABLE_STATEMENT@46..66
      0: JS_VARIABLE_DECLARATION@46..65
        0: (empty)
        1: LET_KW@46..51 "let" [Newline("\n")] [Whitespace(" ")]
        2: JS_VARIABLE_DECLARATOR_LIST@51..65
          0: JS_VARIABLE_DECLARATOR@51..65
            0: JS_OBJECT_BINDING_PATTERN@51..62
              0: L_CURLY@51..53 "{" [] [Whitespace(" ")]
              1: JS_OBJECT_BINDING_PATTERN_PROPERTY_LIST@53..60
                0: JS_OBJECT_BINDING_PATTERN_REST@53..60
                  0: DOT3@53..56 "..." [] []
                  1: JS_BOGUS_BINDING@56..60
                    0: L_CURLY@56..57 "{" [] []
                    1: JS_OBJECT_BINDING_PATTERN_PROPERTY_LIST@57..58
                      0: JS_OBJECT_BINDING_PATTERN_SHORTHAND_PROPERTY@57..58
                        0: JS_IDENTIFIER_BINDING@57..58
                          0: IDENT@57..58 "a" [] []
                        1: (empty)
                    2: R_CURLY@58..60 "}" [] [Whitespace(" ")]
              2: R_CURLY@60..62 "}" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@62..65
              0: EQ@62..64 "=" [] [Whitespace(" ")]
              1: JS_IDENTIFIER_EXPRESSION@64..65
                0: JS_REFERENCE_IDENTIFIER@64..65
                  0: IDENT@64..65 "b" [] []
      1: SEMICOLON@65..66 ";" [] []
    3: JS_BOGUS_STATEMENT@66..105
      0: JS_BOGUS@66..104
        0: LET_KW@66..71 "let" [Newline("\n")] [Whitespace(" ")]
        1: JS_BOGUS@71..104
          0: JS_BOGUS@71..104
            0: JS_BOGUS@71..101
              0: L_CURLY@71..73 "{" [] [Whitespace(" ")]
              1: JS_BOGUS@73..99
                0: JS_BOGUS@73..80
                  0: DOT3@73..76 "..." [] []
                  1: JS_IDENTIFIER_BINDING@76..80
                    0: IDENT@76..80 "rest" [] []
                1: COMMA@80..82 "," [] [Whitespace(" ")]
                2: JS_OBJECT_BINDING_PATTERN_SHORTHAND_PROPERTY@82..99
                  0: JS_IDENTIFIER_BINDING@82..99
                    0: IDENT@82..99 "other_assignment" [] [Whitespace(" ")]
                  1: (empty)
              2: R_CURLY@99..101 "}" [] [Whitespace(" ")]
            1: JS_INITIALIZER_CLAUSE@101..104
              0: EQ@101..103 "=" [] [Whitespace(" ")]
              1: JS_IDENTIFIER_EXPRESSION@103..104
                0: JS_REFERENCE_IDENTIFIER@103..104
                  0: IDENT@103..104 "a" [] []
      1: SEMICOLON@104..105 ";" [] []
    4: JS_BOGUS_STATEMENT@105..128
      0: JS_BOGUS@105..127
        0: LET_KW@105..110 "let" [Newline("\n")] [Whitespace(" ")]
        1: JS_BOGUS@110..127
          0: JS_BOGUS@110..127
            0: JS_BOGUS@110..124
              0: L_CURLY@110..112 "{" [] [Whitespace(" ")]
              1: JS_BOGUS@112..122
                0: JS_BOGUS@112..120
                  0: DOT3@112..115 "..." [] []
                  1: JS_IDENTIFIER_BINDING@115..120
                    0: IDENT@115..120 "rest2" [] []
                1: COMMA@120..122 "," [] [Whitespace(" ")]
              2: R_CURLY@122..124 "}" [] [Whitespace(" ")]
            1: JS_INITIALIZER_CLAUSE@124..127
              0: EQ@124..126 "=" [] [Whitespace(" ")]
              1: JS_IDENTIFIER_EXPRESSION@126..127
                0: JS_REFERENCE_IDENTIFIER@126..127
                  0: IDENT@126..127 "a" [] []
      1: SEMICOLON@127..128 ";" [] []
    5: JS_FUNCTION_DECLARATION@128..178
      0: ASYNC_KW@128..135 "async" [Newline("\n")] [Whitespace(" ")]
      1: FUNCTION_KW@135..144 "function" [] [Whitespace(" ")]
      2: (empty)
      3: JS_IDENTIFIER_BINDING@144..148
        0: IDENT@144..148 "test" [] []
      4: (empty)
      5: JS_PARAMETERS@148..151
        0: L_PAREN@148..149 "(" [] []
        1: JS_PARAMETER_LIST@149..149
        2: R_PAREN@149..151 ")" [] [Whitespace(" ")]
      6: (empty)
      7: JS_FUNCTION_BODY@151..178
        0: L_CURLY@151..152 "{" [] []
        1: JS_DIRECTIVE_LIST@152..152
        2: JS_STATEMENT_LIST@152..176
          0: JS_VARIABLE_STATEMENT@152..176
            0: JS_VARIABLE_DECLARATION@152..175
              0: (empty)
              1: LET_KW@152..159 "let" [Newline("\n"), Whitespace("  ")] [Whitespace(" ")]
              2: JS_VARIABLE_DECLARATOR_LIST@159..175
                0: JS_VARIABLE_DECLARATOR@159..175
                  0: JS_OBJECT_BINDING_PATTERN@159..172
                    0: L_CURLY@159..161 "{" [] [Whitespace(" ")]
                    1: JS_OBJECT_BINDING_PATTERN_PROPERTY_LIST@161..170
                      0: JS_OBJECT_BINDING_PATTERN_REST@161..170
                        0: DOT3@161..164 "..." [] []
                        1: JS_BOGUS_BINDING@164..170
                          0: IDENT@164..170 "await" [] [Whitespace(" ")]
                    2: R_CURLY@170..172 "}" [] [Whitespace(" ")]
                  1: (empty)
                  2: JS_INITIALIZER_CLAUSE@172..175
                    0: EQ@172..174 "=" [] [Whitespace(" ")]
                    1: JS_IDENTIFIER_EXPRESSION@174..175
                      0: JS_REFERENCE_IDENTIFIER@174..175
                        0: IDENT@174..175 "a" [] []
            1: SEMICOLON@175..176 ";" [] []
        3: R_CURLY@176..178 "}" [Newline("\n")] []
  4: EOF@178..179 "" [Newline("\n")] []
--
rest_property_binding_err.js:1:11 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Expected an identifier but instead found '}'.
  
  > 1 │ let { ... } = a;
      │           ^
    2 │ let { ...c = "default" } = a;
    3 │ let { ...{a} } = b;
  
  i Expected an identifier here.
  
  > 1 │ let { ... } = a;
      │           ^
    2 │ let { ...c = "default" } = a;
    3 │ let { ...{a} } = b;
  
--
rest_property_binding_err.js:2:12 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × rest element cannot have a default
  
    1 │ let { ... } = a;
  > 2 │ let { ...c = "default" } = a;
      │            ^^^^^^^^^^^^
    3 │ let { ...{a} } = b;
    4 │ let { ...rest, other_assignment } = a;
  
  i Remove the default value here
  
    1 │ let { ... } = a;
  > 2 │ let { ...c = "default" } = a;
      │            ^^^^^^^^^^^^
    3 │ let { ...{a} } = b;
    4 │ let { ...rest, other_assignment } = a;
  
  i Rest element
  
    1 │ let { ... } = a;
  > 2 │ let { ...c = "default" } = a;
      │       ^^^^
    3 │ let { ...{a} } = b;
    4 │ let { ...rest, other_assignment } = a;
  
--
rest_property_binding_err.js:3:10 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Expected identifier binding
  
    1 │ let { ... } = a;
    2 │ let { ...c = "default" } = a;
  > 3 │ let { ...{a} } = b;
      │          ^^^
    4 │ let { ...rest, other_assignment } = a;
    5 │ let { ...rest2, } = a;
  
  i Object rest patterns must bind to an identifier, other patterns are not allowed.
  
--
rest_property_binding_err.js:4:7 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × rest element must be the last element
  
    2 │ let { ...c = "default" } = a;
    3 │ let { ...{a} } = b;
  > 4 │ let { ...rest, other_assignment } = a;
      │       ^^^^^^^
    5 │ let { ...rest2, } = a;
    6 │ async function test() {
  
  i Move the rest element to the end of the pattern, right before the closing '}'
  
--
rest_property_binding_err.js:5:15 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × rest element may not have a trailing comma
  
    3 │ let { ...{a} } = b;
    4 │ let { ...rest, other_assignment } = a;
  > 5 │ let { ...rest2, } = a;
      │               ^
    6 │ async function test() {
    7 │   let { ...await } = a;
  
  i Remove the trailing comma here
  
    3 │ let { ...{a} } = b;
    4 │ let { ...rest, other_assignment } = a;
  > 5 │ let { ...rest2, } = a;
      │               ^
    6 │ async function test() {
    7 │   let { ...await } = a;
  
  i Rest element
  
    3 │ let { ...{a} } = b;
    4 │ let { ...rest, other_assignment } = a;
  > 5 │ let { ...rest2, } = a;
      │       ^^^^^^^^
    6 │ async function test() {
    7 │   let { ...await } = a;
  
--
rest_property_binding_err.js:7:12 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Illegal use of `await` as an identifier in an async context
  
    5 │ let { ...rest2, } = a;
    6 │ async function test() {
  > 7 │   let { ...await } = a;
      │            ^^^^^
    8 │ }
    9 │ 
  
--
let { ... } = a;
let { ...c = "default" } = a;
let { ...{a} } = b;
let { ...rest, other_assignment } = a;
let { ...rest2, } = a;
async function test() {
  let { ...await } = a;
}