sh-ast 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +165 -133
  2. package/dist/analyze/ansi-c-escapes.d.ts +1 -1
  3. package/dist/analyze/ansi-c-escapes.js +1 -1
  4. package/dist/analyze/enumerate-commands.d.ts +11 -16
  5. package/dist/analyze/enumerate-commands.d.ts.map +1 -1
  6. package/dist/analyze/enumerate-commands.js +82 -92
  7. package/dist/analyze/enumerate-commands.js.map +1 -1
  8. package/dist/analyze/index.d.ts +3 -2
  9. package/dist/analyze/index.d.ts.map +1 -1
  10. package/dist/analyze/index.js +1 -1
  11. package/dist/analyze/node-helpers.d.ts +10 -21
  12. package/dist/analyze/node-helpers.d.ts.map +1 -1
  13. package/dist/analyze/node-helpers.js +16 -27
  14. package/dist/analyze/node-helpers.js.map +1 -1
  15. package/dist/analyze/resolve-argv0.d.ts +6 -6
  16. package/dist/analyze/resolve-argv0.js +6 -6
  17. package/dist/analyze/resolve-word.d.ts +7 -10
  18. package/dist/analyze/resolve-word.d.ts.map +1 -1
  19. package/dist/analyze/resolve-word.js +39 -22
  20. package/dist/analyze/resolve-word.js.map +1 -1
  21. package/dist/analyze.d.ts +3780 -397
  22. package/dist/errors.d.ts +6 -79
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/errors.js +5 -64
  25. package/dist/errors.js.map +1 -1
  26. package/dist/index.d.ts +16 -14
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +23 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/sh-ast.d.ts +3503 -1027
  31. package/dist/syntax-errors.d.ts +56 -0
  32. package/dist/syntax-errors.d.ts.map +1 -0
  33. package/dist/syntax-errors.js +80 -0
  34. package/dist/syntax-errors.js.map +1 -0
  35. package/dist/syntax-snapshot.d.ts +47 -0
  36. package/dist/syntax-snapshot.d.ts.map +1 -0
  37. package/dist/syntax-snapshot.js +121 -0
  38. package/dist/syntax-snapshot.js.map +1 -0
  39. package/dist/syntax-wire.d.ts +31 -0
  40. package/dist/syntax-wire.d.ts.map +1 -0
  41. package/dist/syntax-wire.js +202 -0
  42. package/dist/syntax-wire.js.map +1 -0
  43. package/dist/syntax.d.ts +65 -0
  44. package/dist/syntax.d.ts.map +1 -0
  45. package/dist/syntax.js +152 -0
  46. package/dist/syntax.js.map +1 -0
  47. package/dist/wasm-instance.d.ts +5 -8
  48. package/dist/wasm-instance.d.ts.map +1 -1
  49. package/dist/wasm-instance.js +44 -47
  50. package/dist/wasm-instance.js.map +1 -1
  51. package/generated/syntax-constants.d.ts +1652 -0
  52. package/generated/syntax-constants.js +1384 -0
  53. package/generated/syntax-schema.d.ts +60 -0
  54. package/generated/syntax-schema.js +1740 -0
  55. package/generated/syntax-types.d.ts +1977 -0
  56. package/package.json +2 -2
  57. package/shim/sh-ast.wasm +0 -0
  58. package/dist/normalize.d.ts +0 -52
  59. package/dist/normalize.d.ts.map +0 -1
  60. package/dist/normalize.js +0 -260
  61. package/dist/normalize.js.map +0 -1
  62. package/dist/parse.d.ts +0 -50
  63. package/dist/parse.d.ts.map +0 -1
  64. package/dist/parse.js +0 -125
  65. package/dist/parse.js.map +0 -1
  66. package/dist/types.d.ts +0 -74
  67. package/dist/types.d.ts.map +0 -1
  68. package/dist/types.js +0 -2
  69. package/dist/types.js.map +0 -1
  70. package/dist/visitor-keys.d.ts +0 -21
  71. package/dist/visitor-keys.d.ts.map +0 -1
  72. package/dist/visitor-keys.js +0 -23
  73. package/dist/visitor-keys.js.map +0 -1
  74. package/dist/walk.d.ts +0 -18
  75. package/dist/walk.d.ts.map +0 -1
  76. package/dist/walk.js +0 -40
  77. package/dist/walk.js.map +0 -1
  78. package/generated/child-type-schema.d.ts +0 -14
  79. package/generated/child-type-schema.js +0 -188
  80. package/generated/node-types.d.ts +0 -1002
  81. package/generated/position-fields.d.ts +0 -21
  82. package/generated/position-fields.js +0 -50
  83. package/generated/visitor-keys.d.ts +0 -11
  84. package/generated/visitor-keys.js +0 -50
@@ -0,0 +1,1740 @@
1
+ // Code generated by tools/gen-visitor-keys from mvdan.cc/sh/v3 v3.13.1. DO NOT EDIT.
2
+ // Faithful syntax values; see design/ARCHITECTURE.md.
3
+ /*
4
+ Copyright (c) 2016, Daniel Martí. All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ * Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+ * Redistributions in binary form must reproduce the above
13
+ copyright notice, this list of conditions and the following disclaimer
14
+ in the documentation and/or other materials provided with the
15
+ distribution.
16
+ * Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ */
32
+
33
+ /**
34
+ * Complete upstream field shapes for reflection and consumer adaptation. Ordering is deterministic for review, not the upstream Walk order. The public binding freezes this shared metadata; represented syntax records remain mutable.
35
+ *
36
+ * @public
37
+ */
38
+ export const SYNTAX_SCHEMA = {
39
+ ArithmCmd: {
40
+ node: true,
41
+ fields: {
42
+ Left: {
43
+ kind: 'position',
44
+ nullable: false,
45
+ slice: false,
46
+ elementNullable: false,
47
+ type: null,
48
+ },
49
+ Right: {
50
+ kind: 'position',
51
+ nullable: false,
52
+ slice: false,
53
+ elementNullable: false,
54
+ type: null,
55
+ },
56
+ Unsigned: {
57
+ kind: 'boolean',
58
+ nullable: false,
59
+ slice: false,
60
+ elementNullable: false,
61
+ type: null,
62
+ },
63
+ X: {
64
+ kind: 'interface',
65
+ nullable: true,
66
+ slice: false,
67
+ elementNullable: false,
68
+ type: 'ArithmExpr',
69
+ },
70
+ },
71
+ },
72
+ ArithmExp: {
73
+ node: true,
74
+ fields: {
75
+ Bracket: {
76
+ kind: 'boolean',
77
+ nullable: false,
78
+ slice: false,
79
+ elementNullable: false,
80
+ type: null,
81
+ },
82
+ Left: {
83
+ kind: 'position',
84
+ nullable: false,
85
+ slice: false,
86
+ elementNullable: false,
87
+ type: null,
88
+ },
89
+ Right: {
90
+ kind: 'position',
91
+ nullable: false,
92
+ slice: false,
93
+ elementNullable: false,
94
+ type: null,
95
+ },
96
+ Unsigned: {
97
+ kind: 'boolean',
98
+ nullable: false,
99
+ slice: false,
100
+ elementNullable: false,
101
+ type: null,
102
+ },
103
+ X: {
104
+ kind: 'interface',
105
+ nullable: true,
106
+ slice: false,
107
+ elementNullable: false,
108
+ type: 'ArithmExpr',
109
+ },
110
+ },
111
+ },
112
+ ArrayElem: {
113
+ node: true,
114
+ fields: {
115
+ Comments: {
116
+ kind: 'struct',
117
+ nullable: true,
118
+ slice: true,
119
+ elementNullable: false,
120
+ type: 'Comment',
121
+ },
122
+ Index: {
123
+ kind: 'interface',
124
+ nullable: true,
125
+ slice: false,
126
+ elementNullable: false,
127
+ type: 'ArithmExpr',
128
+ },
129
+ Value: {
130
+ kind: 'struct',
131
+ nullable: true,
132
+ slice: false,
133
+ elementNullable: false,
134
+ type: 'Word',
135
+ },
136
+ },
137
+ },
138
+ ArrayExpr: {
139
+ node: true,
140
+ fields: {
141
+ Elems: {
142
+ kind: 'struct',
143
+ nullable: true,
144
+ slice: true,
145
+ elementNullable: true,
146
+ type: 'ArrayElem',
147
+ },
148
+ Last: {
149
+ kind: 'struct',
150
+ nullable: true,
151
+ slice: true,
152
+ elementNullable: false,
153
+ type: 'Comment',
154
+ },
155
+ Lparen: {
156
+ kind: 'position',
157
+ nullable: false,
158
+ slice: false,
159
+ elementNullable: false,
160
+ type: null,
161
+ },
162
+ Rparen: {
163
+ kind: 'position',
164
+ nullable: false,
165
+ slice: false,
166
+ elementNullable: false,
167
+ type: null,
168
+ },
169
+ },
170
+ },
171
+ Assign: {
172
+ node: true,
173
+ fields: {
174
+ Append: {
175
+ kind: 'boolean',
176
+ nullable: false,
177
+ slice: false,
178
+ elementNullable: false,
179
+ type: null,
180
+ },
181
+ Array: {
182
+ kind: 'struct',
183
+ nullable: true,
184
+ slice: false,
185
+ elementNullable: false,
186
+ type: 'ArrayExpr',
187
+ },
188
+ Index: {
189
+ kind: 'interface',
190
+ nullable: true,
191
+ slice: false,
192
+ elementNullable: false,
193
+ type: 'ArithmExpr',
194
+ },
195
+ Naked: {
196
+ kind: 'boolean',
197
+ nullable: false,
198
+ slice: false,
199
+ elementNullable: false,
200
+ type: null,
201
+ },
202
+ Name: {
203
+ kind: 'struct',
204
+ nullable: true,
205
+ slice: false,
206
+ elementNullable: false,
207
+ type: 'Lit',
208
+ },
209
+ Value: {
210
+ kind: 'struct',
211
+ nullable: true,
212
+ slice: false,
213
+ elementNullable: false,
214
+ type: 'Word',
215
+ },
216
+ },
217
+ },
218
+ BinaryArithm: {
219
+ node: true,
220
+ fields: {
221
+ Op: {
222
+ kind: 'operator',
223
+ nullable: false,
224
+ slice: false,
225
+ elementNullable: false,
226
+ type: 'BinAritOperator',
227
+ },
228
+ OpPos: {
229
+ kind: 'position',
230
+ nullable: false,
231
+ slice: false,
232
+ elementNullable: false,
233
+ type: null,
234
+ },
235
+ X: {
236
+ kind: 'interface',
237
+ nullable: true,
238
+ slice: false,
239
+ elementNullable: false,
240
+ type: 'ArithmExpr',
241
+ },
242
+ Y: {
243
+ kind: 'interface',
244
+ nullable: true,
245
+ slice: false,
246
+ elementNullable: false,
247
+ type: 'ArithmExpr',
248
+ },
249
+ },
250
+ },
251
+ BinaryCmd: {
252
+ node: true,
253
+ fields: {
254
+ Op: {
255
+ kind: 'operator',
256
+ nullable: false,
257
+ slice: false,
258
+ elementNullable: false,
259
+ type: 'BinCmdOperator',
260
+ },
261
+ OpPos: {
262
+ kind: 'position',
263
+ nullable: false,
264
+ slice: false,
265
+ elementNullable: false,
266
+ type: null,
267
+ },
268
+ X: {
269
+ kind: 'struct',
270
+ nullable: true,
271
+ slice: false,
272
+ elementNullable: false,
273
+ type: 'Stmt',
274
+ },
275
+ Y: {
276
+ kind: 'struct',
277
+ nullable: true,
278
+ slice: false,
279
+ elementNullable: false,
280
+ type: 'Stmt',
281
+ },
282
+ },
283
+ },
284
+ BinaryTest: {
285
+ node: true,
286
+ fields: {
287
+ Op: {
288
+ kind: 'operator',
289
+ nullable: false,
290
+ slice: false,
291
+ elementNullable: false,
292
+ type: 'BinTestOperator',
293
+ },
294
+ OpPos: {
295
+ kind: 'position',
296
+ nullable: false,
297
+ slice: false,
298
+ elementNullable: false,
299
+ type: null,
300
+ },
301
+ X: {
302
+ kind: 'interface',
303
+ nullable: true,
304
+ slice: false,
305
+ elementNullable: false,
306
+ type: 'TestExpr',
307
+ },
308
+ Y: {
309
+ kind: 'interface',
310
+ nullable: true,
311
+ slice: false,
312
+ elementNullable: false,
313
+ type: 'TestExpr',
314
+ },
315
+ },
316
+ },
317
+ Block: {
318
+ node: true,
319
+ fields: {
320
+ Last: {
321
+ kind: 'struct',
322
+ nullable: true,
323
+ slice: true,
324
+ elementNullable: false,
325
+ type: 'Comment',
326
+ },
327
+ Lbrace: {
328
+ kind: 'position',
329
+ nullable: false,
330
+ slice: false,
331
+ elementNullable: false,
332
+ type: null,
333
+ },
334
+ Rbrace: {
335
+ kind: 'position',
336
+ nullable: false,
337
+ slice: false,
338
+ elementNullable: false,
339
+ type: null,
340
+ },
341
+ Stmts: {
342
+ kind: 'struct',
343
+ nullable: true,
344
+ slice: true,
345
+ elementNullable: true,
346
+ type: 'Stmt',
347
+ },
348
+ },
349
+ },
350
+ BraceExp: {
351
+ node: true,
352
+ fields: {
353
+ Elems: {
354
+ kind: 'struct',
355
+ nullable: true,
356
+ slice: true,
357
+ elementNullable: true,
358
+ type: 'Word',
359
+ },
360
+ Sequence: {
361
+ kind: 'boolean',
362
+ nullable: false,
363
+ slice: false,
364
+ elementNullable: false,
365
+ type: null,
366
+ },
367
+ },
368
+ },
369
+ CStyleLoop: {
370
+ node: true,
371
+ fields: {
372
+ Cond: {
373
+ kind: 'interface',
374
+ nullable: true,
375
+ slice: false,
376
+ elementNullable: false,
377
+ type: 'ArithmExpr',
378
+ },
379
+ Init: {
380
+ kind: 'interface',
381
+ nullable: true,
382
+ slice: false,
383
+ elementNullable: false,
384
+ type: 'ArithmExpr',
385
+ },
386
+ Lparen: {
387
+ kind: 'position',
388
+ nullable: false,
389
+ slice: false,
390
+ elementNullable: false,
391
+ type: null,
392
+ },
393
+ Post: {
394
+ kind: 'interface',
395
+ nullable: true,
396
+ slice: false,
397
+ elementNullable: false,
398
+ type: 'ArithmExpr',
399
+ },
400
+ Rparen: {
401
+ kind: 'position',
402
+ nullable: false,
403
+ slice: false,
404
+ elementNullable: false,
405
+ type: null,
406
+ },
407
+ },
408
+ },
409
+ CallExpr: {
410
+ node: true,
411
+ fields: {
412
+ Args: {
413
+ kind: 'struct',
414
+ nullable: true,
415
+ slice: true,
416
+ elementNullable: true,
417
+ type: 'Word',
418
+ },
419
+ Assigns: {
420
+ kind: 'struct',
421
+ nullable: true,
422
+ slice: true,
423
+ elementNullable: true,
424
+ type: 'Assign',
425
+ },
426
+ },
427
+ },
428
+ CaseClause: {
429
+ node: true,
430
+ fields: {
431
+ Braces: {
432
+ kind: 'boolean',
433
+ nullable: false,
434
+ slice: false,
435
+ elementNullable: false,
436
+ type: null,
437
+ },
438
+ Case: {
439
+ kind: 'position',
440
+ nullable: false,
441
+ slice: false,
442
+ elementNullable: false,
443
+ type: null,
444
+ },
445
+ Esac: {
446
+ kind: 'position',
447
+ nullable: false,
448
+ slice: false,
449
+ elementNullable: false,
450
+ type: null,
451
+ },
452
+ In: {
453
+ kind: 'position',
454
+ nullable: false,
455
+ slice: false,
456
+ elementNullable: false,
457
+ type: null,
458
+ },
459
+ Items: {
460
+ kind: 'struct',
461
+ nullable: true,
462
+ slice: true,
463
+ elementNullable: true,
464
+ type: 'CaseItem',
465
+ },
466
+ Last: {
467
+ kind: 'struct',
468
+ nullable: true,
469
+ slice: true,
470
+ elementNullable: false,
471
+ type: 'Comment',
472
+ },
473
+ Word: {
474
+ kind: 'struct',
475
+ nullable: true,
476
+ slice: false,
477
+ elementNullable: false,
478
+ type: 'Word',
479
+ },
480
+ },
481
+ },
482
+ CaseItem: {
483
+ node: true,
484
+ fields: {
485
+ Comments: {
486
+ kind: 'struct',
487
+ nullable: true,
488
+ slice: true,
489
+ elementNullable: false,
490
+ type: 'Comment',
491
+ },
492
+ Last: {
493
+ kind: 'struct',
494
+ nullable: true,
495
+ slice: true,
496
+ elementNullable: false,
497
+ type: 'Comment',
498
+ },
499
+ Op: {
500
+ kind: 'operator',
501
+ nullable: false,
502
+ slice: false,
503
+ elementNullable: false,
504
+ type: 'CaseOperator',
505
+ },
506
+ OpPos: {
507
+ kind: 'position',
508
+ nullable: false,
509
+ slice: false,
510
+ elementNullable: false,
511
+ type: null,
512
+ },
513
+ Patterns: {
514
+ kind: 'struct',
515
+ nullable: true,
516
+ slice: true,
517
+ elementNullable: true,
518
+ type: 'Word',
519
+ },
520
+ Stmts: {
521
+ kind: 'struct',
522
+ nullable: true,
523
+ slice: true,
524
+ elementNullable: true,
525
+ type: 'Stmt',
526
+ },
527
+ },
528
+ },
529
+ CmdSubst: {
530
+ node: true,
531
+ fields: {
532
+ Backquotes: {
533
+ kind: 'boolean',
534
+ nullable: false,
535
+ slice: false,
536
+ elementNullable: false,
537
+ type: null,
538
+ },
539
+ Last: {
540
+ kind: 'struct',
541
+ nullable: true,
542
+ slice: true,
543
+ elementNullable: false,
544
+ type: 'Comment',
545
+ },
546
+ Left: {
547
+ kind: 'position',
548
+ nullable: false,
549
+ slice: false,
550
+ elementNullable: false,
551
+ type: null,
552
+ },
553
+ ReplyVar: {
554
+ kind: 'boolean',
555
+ nullable: false,
556
+ slice: false,
557
+ elementNullable: false,
558
+ type: null,
559
+ },
560
+ Right: {
561
+ kind: 'position',
562
+ nullable: false,
563
+ slice: false,
564
+ elementNullable: false,
565
+ type: null,
566
+ },
567
+ Stmts: {
568
+ kind: 'struct',
569
+ nullable: true,
570
+ slice: true,
571
+ elementNullable: true,
572
+ type: 'Stmt',
573
+ },
574
+ TempFile: {
575
+ kind: 'boolean',
576
+ nullable: false,
577
+ slice: false,
578
+ elementNullable: false,
579
+ type: null,
580
+ },
581
+ },
582
+ },
583
+ Comment: {
584
+ node: true,
585
+ fields: {
586
+ Hash: {
587
+ kind: 'position',
588
+ nullable: false,
589
+ slice: false,
590
+ elementNullable: false,
591
+ type: null,
592
+ },
593
+ Text: {
594
+ kind: 'string',
595
+ nullable: false,
596
+ slice: false,
597
+ elementNullable: false,
598
+ type: null,
599
+ },
600
+ },
601
+ },
602
+ CoprocClause: {
603
+ node: true,
604
+ fields: {
605
+ Coproc: {
606
+ kind: 'position',
607
+ nullable: false,
608
+ slice: false,
609
+ elementNullable: false,
610
+ type: null,
611
+ },
612
+ Name: {
613
+ kind: 'struct',
614
+ nullable: true,
615
+ slice: false,
616
+ elementNullable: false,
617
+ type: 'Word',
618
+ },
619
+ Stmt: {
620
+ kind: 'struct',
621
+ nullable: true,
622
+ slice: false,
623
+ elementNullable: false,
624
+ type: 'Stmt',
625
+ },
626
+ },
627
+ },
628
+ DblQuoted: {
629
+ node: true,
630
+ fields: {
631
+ Dollar: {
632
+ kind: 'boolean',
633
+ nullable: false,
634
+ slice: false,
635
+ elementNullable: false,
636
+ type: null,
637
+ },
638
+ Left: {
639
+ kind: 'position',
640
+ nullable: false,
641
+ slice: false,
642
+ elementNullable: false,
643
+ type: null,
644
+ },
645
+ Parts: {
646
+ kind: 'interface',
647
+ nullable: true,
648
+ slice: true,
649
+ elementNullable: true,
650
+ type: 'WordPart',
651
+ },
652
+ Right: {
653
+ kind: 'position',
654
+ nullable: false,
655
+ slice: false,
656
+ elementNullable: false,
657
+ type: null,
658
+ },
659
+ },
660
+ },
661
+ DeclClause: {
662
+ node: true,
663
+ fields: {
664
+ Args: {
665
+ kind: 'struct',
666
+ nullable: true,
667
+ slice: true,
668
+ elementNullable: true,
669
+ type: 'Assign',
670
+ },
671
+ Variant: {
672
+ kind: 'struct',
673
+ nullable: true,
674
+ slice: false,
675
+ elementNullable: false,
676
+ type: 'Lit',
677
+ },
678
+ },
679
+ },
680
+ Expansion: {
681
+ node: false,
682
+ fields: {
683
+ Op: {
684
+ kind: 'operator',
685
+ nullable: false,
686
+ slice: false,
687
+ elementNullable: false,
688
+ type: 'ParExpOperator',
689
+ },
690
+ Word: {
691
+ kind: 'struct',
692
+ nullable: true,
693
+ slice: false,
694
+ elementNullable: false,
695
+ type: 'Word',
696
+ },
697
+ },
698
+ },
699
+ ExtGlob: {
700
+ node: true,
701
+ fields: {
702
+ Op: {
703
+ kind: 'operator',
704
+ nullable: false,
705
+ slice: false,
706
+ elementNullable: false,
707
+ type: 'GlobOperator',
708
+ },
709
+ OpPos: {
710
+ kind: 'position',
711
+ nullable: false,
712
+ slice: false,
713
+ elementNullable: false,
714
+ type: null,
715
+ },
716
+ Pattern: {
717
+ kind: 'struct',
718
+ nullable: true,
719
+ slice: false,
720
+ elementNullable: false,
721
+ type: 'Lit',
722
+ },
723
+ },
724
+ },
725
+ File: {
726
+ node: true,
727
+ fields: {
728
+ Last: {
729
+ kind: 'struct',
730
+ nullable: true,
731
+ slice: true,
732
+ elementNullable: false,
733
+ type: 'Comment',
734
+ },
735
+ Name: {
736
+ kind: 'string',
737
+ nullable: false,
738
+ slice: false,
739
+ elementNullable: false,
740
+ type: null,
741
+ },
742
+ Stmts: {
743
+ kind: 'struct',
744
+ nullable: true,
745
+ slice: true,
746
+ elementNullable: true,
747
+ type: 'Stmt',
748
+ },
749
+ },
750
+ },
751
+ FlagsArithm: {
752
+ node: true,
753
+ fields: {
754
+ Flags: {
755
+ kind: 'struct',
756
+ nullable: true,
757
+ slice: false,
758
+ elementNullable: false,
759
+ type: 'Lit',
760
+ },
761
+ X: {
762
+ kind: 'interface',
763
+ nullable: true,
764
+ slice: false,
765
+ elementNullable: false,
766
+ type: 'ArithmExpr',
767
+ },
768
+ },
769
+ },
770
+ ForClause: {
771
+ node: true,
772
+ fields: {
773
+ Braces: {
774
+ kind: 'boolean',
775
+ nullable: false,
776
+ slice: false,
777
+ elementNullable: false,
778
+ type: null,
779
+ },
780
+ Do: {
781
+ kind: 'struct',
782
+ nullable: true,
783
+ slice: true,
784
+ elementNullable: true,
785
+ type: 'Stmt',
786
+ },
787
+ DoLast: {
788
+ kind: 'struct',
789
+ nullable: true,
790
+ slice: true,
791
+ elementNullable: false,
792
+ type: 'Comment',
793
+ },
794
+ DoPos: {
795
+ kind: 'position',
796
+ nullable: false,
797
+ slice: false,
798
+ elementNullable: false,
799
+ type: null,
800
+ },
801
+ DonePos: {
802
+ kind: 'position',
803
+ nullable: false,
804
+ slice: false,
805
+ elementNullable: false,
806
+ type: null,
807
+ },
808
+ ForPos: {
809
+ kind: 'position',
810
+ nullable: false,
811
+ slice: false,
812
+ elementNullable: false,
813
+ type: null,
814
+ },
815
+ Loop: {
816
+ kind: 'interface',
817
+ nullable: true,
818
+ slice: false,
819
+ elementNullable: false,
820
+ type: 'Loop',
821
+ },
822
+ Select: {
823
+ kind: 'boolean',
824
+ nullable: false,
825
+ slice: false,
826
+ elementNullable: false,
827
+ type: null,
828
+ },
829
+ },
830
+ },
831
+ FuncDecl: {
832
+ node: true,
833
+ fields: {
834
+ Body: {
835
+ kind: 'struct',
836
+ nullable: true,
837
+ slice: false,
838
+ elementNullable: false,
839
+ type: 'Stmt',
840
+ },
841
+ Name: {
842
+ kind: 'struct',
843
+ nullable: true,
844
+ slice: false,
845
+ elementNullable: false,
846
+ type: 'Lit',
847
+ },
848
+ Names: {
849
+ kind: 'struct',
850
+ nullable: true,
851
+ slice: true,
852
+ elementNullable: true,
853
+ type: 'Lit',
854
+ },
855
+ Parens: {
856
+ kind: 'boolean',
857
+ nullable: false,
858
+ slice: false,
859
+ elementNullable: false,
860
+ type: null,
861
+ },
862
+ Position: {
863
+ kind: 'position',
864
+ nullable: false,
865
+ slice: false,
866
+ elementNullable: false,
867
+ type: null,
868
+ },
869
+ RsrvWord: {
870
+ kind: 'boolean',
871
+ nullable: false,
872
+ slice: false,
873
+ elementNullable: false,
874
+ type: null,
875
+ },
876
+ },
877
+ },
878
+ IfClause: {
879
+ node: true,
880
+ fields: {
881
+ Cond: {
882
+ kind: 'struct',
883
+ nullable: true,
884
+ slice: true,
885
+ elementNullable: true,
886
+ type: 'Stmt',
887
+ },
888
+ CondLast: {
889
+ kind: 'struct',
890
+ nullable: true,
891
+ slice: true,
892
+ elementNullable: false,
893
+ type: 'Comment',
894
+ },
895
+ Else: {
896
+ kind: 'struct',
897
+ nullable: true,
898
+ slice: false,
899
+ elementNullable: false,
900
+ type: 'IfClause',
901
+ },
902
+ FiPos: {
903
+ kind: 'position',
904
+ nullable: false,
905
+ slice: false,
906
+ elementNullable: false,
907
+ type: null,
908
+ },
909
+ Last: {
910
+ kind: 'struct',
911
+ nullable: true,
912
+ slice: true,
913
+ elementNullable: false,
914
+ type: 'Comment',
915
+ },
916
+ Position: {
917
+ kind: 'position',
918
+ nullable: false,
919
+ slice: false,
920
+ elementNullable: false,
921
+ type: null,
922
+ },
923
+ Then: {
924
+ kind: 'struct',
925
+ nullable: true,
926
+ slice: true,
927
+ elementNullable: true,
928
+ type: 'Stmt',
929
+ },
930
+ ThenLast: {
931
+ kind: 'struct',
932
+ nullable: true,
933
+ slice: true,
934
+ elementNullable: false,
935
+ type: 'Comment',
936
+ },
937
+ ThenPos: {
938
+ kind: 'position',
939
+ nullable: false,
940
+ slice: false,
941
+ elementNullable: false,
942
+ type: null,
943
+ },
944
+ },
945
+ },
946
+ LetClause: {
947
+ node: true,
948
+ fields: {
949
+ Exprs: {
950
+ kind: 'interface',
951
+ nullable: true,
952
+ slice: true,
953
+ elementNullable: true,
954
+ type: 'ArithmExpr',
955
+ },
956
+ Let: {
957
+ kind: 'position',
958
+ nullable: false,
959
+ slice: false,
960
+ elementNullable: false,
961
+ type: null,
962
+ },
963
+ },
964
+ },
965
+ Lit: {
966
+ node: true,
967
+ fields: {
968
+ Value: {
969
+ kind: 'string',
970
+ nullable: false,
971
+ slice: false,
972
+ elementNullable: false,
973
+ type: null,
974
+ },
975
+ ValueEnd: {
976
+ kind: 'position',
977
+ nullable: false,
978
+ slice: false,
979
+ elementNullable: false,
980
+ type: null,
981
+ },
982
+ ValuePos: {
983
+ kind: 'position',
984
+ nullable: false,
985
+ slice: false,
986
+ elementNullable: false,
987
+ type: null,
988
+ },
989
+ },
990
+ },
991
+ ParamExp: {
992
+ node: true,
993
+ fields: {
994
+ Dollar: {
995
+ kind: 'position',
996
+ nullable: false,
997
+ slice: false,
998
+ elementNullable: false,
999
+ type: null,
1000
+ },
1001
+ Excl: {
1002
+ kind: 'boolean',
1003
+ nullable: false,
1004
+ slice: false,
1005
+ elementNullable: false,
1006
+ type: null,
1007
+ },
1008
+ Exp: {
1009
+ kind: 'struct',
1010
+ nullable: true,
1011
+ slice: false,
1012
+ elementNullable: false,
1013
+ type: 'Expansion',
1014
+ },
1015
+ Flags: {
1016
+ kind: 'struct',
1017
+ nullable: true,
1018
+ slice: false,
1019
+ elementNullable: false,
1020
+ type: 'Lit',
1021
+ },
1022
+ Index: {
1023
+ kind: 'interface',
1024
+ nullable: true,
1025
+ slice: false,
1026
+ elementNullable: false,
1027
+ type: 'ArithmExpr',
1028
+ },
1029
+ IsSet: {
1030
+ kind: 'boolean',
1031
+ nullable: false,
1032
+ slice: false,
1033
+ elementNullable: false,
1034
+ type: null,
1035
+ },
1036
+ Length: {
1037
+ kind: 'boolean',
1038
+ nullable: false,
1039
+ slice: false,
1040
+ elementNullable: false,
1041
+ type: null,
1042
+ },
1043
+ Modifiers: {
1044
+ kind: 'struct',
1045
+ nullable: true,
1046
+ slice: true,
1047
+ elementNullable: true,
1048
+ type: 'Lit',
1049
+ },
1050
+ Names: {
1051
+ kind: 'operator',
1052
+ nullable: false,
1053
+ slice: false,
1054
+ elementNullable: false,
1055
+ type: 'ParNamesOperator',
1056
+ },
1057
+ NestedParam: {
1058
+ kind: 'interface',
1059
+ nullable: true,
1060
+ slice: false,
1061
+ elementNullable: false,
1062
+ type: 'WordPart',
1063
+ },
1064
+ Param: {
1065
+ kind: 'struct',
1066
+ nullable: true,
1067
+ slice: false,
1068
+ elementNullable: false,
1069
+ type: 'Lit',
1070
+ },
1071
+ Rbrace: {
1072
+ kind: 'position',
1073
+ nullable: false,
1074
+ slice: false,
1075
+ elementNullable: false,
1076
+ type: null,
1077
+ },
1078
+ Repl: {
1079
+ kind: 'struct',
1080
+ nullable: true,
1081
+ slice: false,
1082
+ elementNullable: false,
1083
+ type: 'Replace',
1084
+ },
1085
+ Short: {
1086
+ kind: 'boolean',
1087
+ nullable: false,
1088
+ slice: false,
1089
+ elementNullable: false,
1090
+ type: null,
1091
+ },
1092
+ Slice: {
1093
+ kind: 'struct',
1094
+ nullable: true,
1095
+ slice: false,
1096
+ elementNullable: false,
1097
+ type: 'Slice',
1098
+ },
1099
+ Width: {
1100
+ kind: 'boolean',
1101
+ nullable: false,
1102
+ slice: false,
1103
+ elementNullable: false,
1104
+ type: null,
1105
+ },
1106
+ },
1107
+ },
1108
+ ParenArithm: {
1109
+ node: true,
1110
+ fields: {
1111
+ Lparen: {
1112
+ kind: 'position',
1113
+ nullable: false,
1114
+ slice: false,
1115
+ elementNullable: false,
1116
+ type: null,
1117
+ },
1118
+ Rparen: {
1119
+ kind: 'position',
1120
+ nullable: false,
1121
+ slice: false,
1122
+ elementNullable: false,
1123
+ type: null,
1124
+ },
1125
+ X: {
1126
+ kind: 'interface',
1127
+ nullable: true,
1128
+ slice: false,
1129
+ elementNullable: false,
1130
+ type: 'ArithmExpr',
1131
+ },
1132
+ },
1133
+ },
1134
+ ParenTest: {
1135
+ node: true,
1136
+ fields: {
1137
+ Lparen: {
1138
+ kind: 'position',
1139
+ nullable: false,
1140
+ slice: false,
1141
+ elementNullable: false,
1142
+ type: null,
1143
+ },
1144
+ Rparen: {
1145
+ kind: 'position',
1146
+ nullable: false,
1147
+ slice: false,
1148
+ elementNullable: false,
1149
+ type: null,
1150
+ },
1151
+ X: {
1152
+ kind: 'interface',
1153
+ nullable: true,
1154
+ slice: false,
1155
+ elementNullable: false,
1156
+ type: 'TestExpr',
1157
+ },
1158
+ },
1159
+ },
1160
+ ProcSubst: {
1161
+ node: true,
1162
+ fields: {
1163
+ Last: {
1164
+ kind: 'struct',
1165
+ nullable: true,
1166
+ slice: true,
1167
+ elementNullable: false,
1168
+ type: 'Comment',
1169
+ },
1170
+ Op: {
1171
+ kind: 'operator',
1172
+ nullable: false,
1173
+ slice: false,
1174
+ elementNullable: false,
1175
+ type: 'ProcOperator',
1176
+ },
1177
+ OpPos: {
1178
+ kind: 'position',
1179
+ nullable: false,
1180
+ slice: false,
1181
+ elementNullable: false,
1182
+ type: null,
1183
+ },
1184
+ Rparen: {
1185
+ kind: 'position',
1186
+ nullable: false,
1187
+ slice: false,
1188
+ elementNullable: false,
1189
+ type: null,
1190
+ },
1191
+ Stmts: {
1192
+ kind: 'struct',
1193
+ nullable: true,
1194
+ slice: true,
1195
+ elementNullable: true,
1196
+ type: 'Stmt',
1197
+ },
1198
+ },
1199
+ },
1200
+ Redirect: {
1201
+ node: true,
1202
+ fields: {
1203
+ Hdoc: {
1204
+ kind: 'struct',
1205
+ nullable: true,
1206
+ slice: false,
1207
+ elementNullable: false,
1208
+ type: 'Word',
1209
+ },
1210
+ N: {
1211
+ kind: 'struct',
1212
+ nullable: true,
1213
+ slice: false,
1214
+ elementNullable: false,
1215
+ type: 'Lit',
1216
+ },
1217
+ Op: {
1218
+ kind: 'operator',
1219
+ nullable: false,
1220
+ slice: false,
1221
+ elementNullable: false,
1222
+ type: 'RedirOperator',
1223
+ },
1224
+ OpPos: {
1225
+ kind: 'position',
1226
+ nullable: false,
1227
+ slice: false,
1228
+ elementNullable: false,
1229
+ type: null,
1230
+ },
1231
+ Word: {
1232
+ kind: 'struct',
1233
+ nullable: true,
1234
+ slice: false,
1235
+ elementNullable: false,
1236
+ type: 'Word',
1237
+ },
1238
+ },
1239
+ },
1240
+ Replace: {
1241
+ node: false,
1242
+ fields: {
1243
+ All: {
1244
+ kind: 'boolean',
1245
+ nullable: false,
1246
+ slice: false,
1247
+ elementNullable: false,
1248
+ type: null,
1249
+ },
1250
+ Orig: {
1251
+ kind: 'struct',
1252
+ nullable: true,
1253
+ slice: false,
1254
+ elementNullable: false,
1255
+ type: 'Word',
1256
+ },
1257
+ With: {
1258
+ kind: 'struct',
1259
+ nullable: true,
1260
+ slice: false,
1261
+ elementNullable: false,
1262
+ type: 'Word',
1263
+ },
1264
+ },
1265
+ },
1266
+ SglQuoted: {
1267
+ node: true,
1268
+ fields: {
1269
+ Dollar: {
1270
+ kind: 'boolean',
1271
+ nullable: false,
1272
+ slice: false,
1273
+ elementNullable: false,
1274
+ type: null,
1275
+ },
1276
+ Left: {
1277
+ kind: 'position',
1278
+ nullable: false,
1279
+ slice: false,
1280
+ elementNullable: false,
1281
+ type: null,
1282
+ },
1283
+ Right: {
1284
+ kind: 'position',
1285
+ nullable: false,
1286
+ slice: false,
1287
+ elementNullable: false,
1288
+ type: null,
1289
+ },
1290
+ Value: {
1291
+ kind: 'string',
1292
+ nullable: false,
1293
+ slice: false,
1294
+ elementNullable: false,
1295
+ type: null,
1296
+ },
1297
+ },
1298
+ },
1299
+ Slice: {
1300
+ node: false,
1301
+ fields: {
1302
+ Length: {
1303
+ kind: 'interface',
1304
+ nullable: true,
1305
+ slice: false,
1306
+ elementNullable: false,
1307
+ type: 'ArithmExpr',
1308
+ },
1309
+ Offset: {
1310
+ kind: 'interface',
1311
+ nullable: true,
1312
+ slice: false,
1313
+ elementNullable: false,
1314
+ type: 'ArithmExpr',
1315
+ },
1316
+ },
1317
+ },
1318
+ Stmt: {
1319
+ node: true,
1320
+ fields: {
1321
+ Background: {
1322
+ kind: 'boolean',
1323
+ nullable: false,
1324
+ slice: false,
1325
+ elementNullable: false,
1326
+ type: null,
1327
+ },
1328
+ Cmd: {
1329
+ kind: 'interface',
1330
+ nullable: true,
1331
+ slice: false,
1332
+ elementNullable: false,
1333
+ type: 'Command',
1334
+ },
1335
+ Comments: {
1336
+ kind: 'struct',
1337
+ nullable: true,
1338
+ slice: true,
1339
+ elementNullable: false,
1340
+ type: 'Comment',
1341
+ },
1342
+ Coprocess: {
1343
+ kind: 'boolean',
1344
+ nullable: false,
1345
+ slice: false,
1346
+ elementNullable: false,
1347
+ type: null,
1348
+ },
1349
+ Disown: {
1350
+ kind: 'boolean',
1351
+ nullable: false,
1352
+ slice: false,
1353
+ elementNullable: false,
1354
+ type: null,
1355
+ },
1356
+ Negated: {
1357
+ kind: 'boolean',
1358
+ nullable: false,
1359
+ slice: false,
1360
+ elementNullable: false,
1361
+ type: null,
1362
+ },
1363
+ Position: {
1364
+ kind: 'position',
1365
+ nullable: false,
1366
+ slice: false,
1367
+ elementNullable: false,
1368
+ type: null,
1369
+ },
1370
+ Redirs: {
1371
+ kind: 'struct',
1372
+ nullable: true,
1373
+ slice: true,
1374
+ elementNullable: true,
1375
+ type: 'Redirect',
1376
+ },
1377
+ Semicolon: {
1378
+ kind: 'position',
1379
+ nullable: false,
1380
+ slice: false,
1381
+ elementNullable: false,
1382
+ type: null,
1383
+ },
1384
+ },
1385
+ },
1386
+ Subshell: {
1387
+ node: true,
1388
+ fields: {
1389
+ Last: {
1390
+ kind: 'struct',
1391
+ nullable: true,
1392
+ slice: true,
1393
+ elementNullable: false,
1394
+ type: 'Comment',
1395
+ },
1396
+ Lparen: {
1397
+ kind: 'position',
1398
+ nullable: false,
1399
+ slice: false,
1400
+ elementNullable: false,
1401
+ type: null,
1402
+ },
1403
+ Rparen: {
1404
+ kind: 'position',
1405
+ nullable: false,
1406
+ slice: false,
1407
+ elementNullable: false,
1408
+ type: null,
1409
+ },
1410
+ Stmts: {
1411
+ kind: 'struct',
1412
+ nullable: true,
1413
+ slice: true,
1414
+ elementNullable: true,
1415
+ type: 'Stmt',
1416
+ },
1417
+ },
1418
+ },
1419
+ TestClause: {
1420
+ node: true,
1421
+ fields: {
1422
+ Left: {
1423
+ kind: 'position',
1424
+ nullable: false,
1425
+ slice: false,
1426
+ elementNullable: false,
1427
+ type: null,
1428
+ },
1429
+ Right: {
1430
+ kind: 'position',
1431
+ nullable: false,
1432
+ slice: false,
1433
+ elementNullable: false,
1434
+ type: null,
1435
+ },
1436
+ X: {
1437
+ kind: 'interface',
1438
+ nullable: true,
1439
+ slice: false,
1440
+ elementNullable: false,
1441
+ type: 'TestExpr',
1442
+ },
1443
+ },
1444
+ },
1445
+ TestDecl: {
1446
+ node: true,
1447
+ fields: {
1448
+ Body: {
1449
+ kind: 'struct',
1450
+ nullable: true,
1451
+ slice: false,
1452
+ elementNullable: false,
1453
+ type: 'Stmt',
1454
+ },
1455
+ Description: {
1456
+ kind: 'struct',
1457
+ nullable: true,
1458
+ slice: false,
1459
+ elementNullable: false,
1460
+ type: 'Word',
1461
+ },
1462
+ Position: {
1463
+ kind: 'position',
1464
+ nullable: false,
1465
+ slice: false,
1466
+ elementNullable: false,
1467
+ type: null,
1468
+ },
1469
+ },
1470
+ },
1471
+ TimeClause: {
1472
+ node: true,
1473
+ fields: {
1474
+ PosixFormat: {
1475
+ kind: 'boolean',
1476
+ nullable: false,
1477
+ slice: false,
1478
+ elementNullable: false,
1479
+ type: null,
1480
+ },
1481
+ Stmt: {
1482
+ kind: 'struct',
1483
+ nullable: true,
1484
+ slice: false,
1485
+ elementNullable: false,
1486
+ type: 'Stmt',
1487
+ },
1488
+ Time: {
1489
+ kind: 'position',
1490
+ nullable: false,
1491
+ slice: false,
1492
+ elementNullable: false,
1493
+ type: null,
1494
+ },
1495
+ },
1496
+ },
1497
+ UnaryArithm: {
1498
+ node: true,
1499
+ fields: {
1500
+ Op: {
1501
+ kind: 'operator',
1502
+ nullable: false,
1503
+ slice: false,
1504
+ elementNullable: false,
1505
+ type: 'UnAritOperator',
1506
+ },
1507
+ OpPos: {
1508
+ kind: 'position',
1509
+ nullable: false,
1510
+ slice: false,
1511
+ elementNullable: false,
1512
+ type: null,
1513
+ },
1514
+ Post: {
1515
+ kind: 'boolean',
1516
+ nullable: false,
1517
+ slice: false,
1518
+ elementNullable: false,
1519
+ type: null,
1520
+ },
1521
+ X: {
1522
+ kind: 'interface',
1523
+ nullable: true,
1524
+ slice: false,
1525
+ elementNullable: false,
1526
+ type: 'ArithmExpr',
1527
+ },
1528
+ },
1529
+ },
1530
+ UnaryTest: {
1531
+ node: true,
1532
+ fields: {
1533
+ Op: {
1534
+ kind: 'operator',
1535
+ nullable: false,
1536
+ slice: false,
1537
+ elementNullable: false,
1538
+ type: 'UnTestOperator',
1539
+ },
1540
+ OpPos: {
1541
+ kind: 'position',
1542
+ nullable: false,
1543
+ slice: false,
1544
+ elementNullable: false,
1545
+ type: null,
1546
+ },
1547
+ X: {
1548
+ kind: 'interface',
1549
+ nullable: true,
1550
+ slice: false,
1551
+ elementNullable: false,
1552
+ type: 'TestExpr',
1553
+ },
1554
+ },
1555
+ },
1556
+ WhileClause: {
1557
+ node: true,
1558
+ fields: {
1559
+ Cond: {
1560
+ kind: 'struct',
1561
+ nullable: true,
1562
+ slice: true,
1563
+ elementNullable: true,
1564
+ type: 'Stmt',
1565
+ },
1566
+ CondLast: {
1567
+ kind: 'struct',
1568
+ nullable: true,
1569
+ slice: true,
1570
+ elementNullable: false,
1571
+ type: 'Comment',
1572
+ },
1573
+ Do: {
1574
+ kind: 'struct',
1575
+ nullable: true,
1576
+ slice: true,
1577
+ elementNullable: true,
1578
+ type: 'Stmt',
1579
+ },
1580
+ DoLast: {
1581
+ kind: 'struct',
1582
+ nullable: true,
1583
+ slice: true,
1584
+ elementNullable: false,
1585
+ type: 'Comment',
1586
+ },
1587
+ DoPos: {
1588
+ kind: 'position',
1589
+ nullable: false,
1590
+ slice: false,
1591
+ elementNullable: false,
1592
+ type: null,
1593
+ },
1594
+ DonePos: {
1595
+ kind: 'position',
1596
+ nullable: false,
1597
+ slice: false,
1598
+ elementNullable: false,
1599
+ type: null,
1600
+ },
1601
+ Until: {
1602
+ kind: 'boolean',
1603
+ nullable: false,
1604
+ slice: false,
1605
+ elementNullable: false,
1606
+ type: null,
1607
+ },
1608
+ WhilePos: {
1609
+ kind: 'position',
1610
+ nullable: false,
1611
+ slice: false,
1612
+ elementNullable: false,
1613
+ type: null,
1614
+ },
1615
+ },
1616
+ },
1617
+ Word: {
1618
+ node: true,
1619
+ fields: {
1620
+ Parts: {
1621
+ kind: 'interface',
1622
+ nullable: true,
1623
+ slice: true,
1624
+ elementNullable: true,
1625
+ type: 'WordPart',
1626
+ },
1627
+ },
1628
+ },
1629
+ WordIter: {
1630
+ node: true,
1631
+ fields: {
1632
+ InPos: {
1633
+ kind: 'position',
1634
+ nullable: false,
1635
+ slice: false,
1636
+ elementNullable: false,
1637
+ type: null,
1638
+ },
1639
+ Items: {
1640
+ kind: 'struct',
1641
+ nullable: true,
1642
+ slice: true,
1643
+ elementNullable: true,
1644
+ type: 'Word',
1645
+ },
1646
+ Name: {
1647
+ kind: 'struct',
1648
+ nullable: true,
1649
+ slice: false,
1650
+ elementNullable: false,
1651
+ type: 'Lit',
1652
+ },
1653
+ },
1654
+ },
1655
+ };
1656
+
1657
+ /**
1658
+ * Concrete alternatives for upstream interfaces; syntax.Node deliberately excludes auxiliary structs. This is reflection metadata, not a traversal implementation.
1659
+ *
1660
+ * @public
1661
+ */
1662
+ export const SYNTAX_INTERFACES = {
1663
+ ArithmExpr: ['BinaryArithm', 'FlagsArithm', 'ParenArithm', 'UnaryArithm', 'Word'],
1664
+ Command: [
1665
+ 'ArithmCmd',
1666
+ 'BinaryCmd',
1667
+ 'Block',
1668
+ 'CallExpr',
1669
+ 'CaseClause',
1670
+ 'CoprocClause',
1671
+ 'DeclClause',
1672
+ 'ForClause',
1673
+ 'FuncDecl',
1674
+ 'IfClause',
1675
+ 'LetClause',
1676
+ 'Subshell',
1677
+ 'TestClause',
1678
+ 'TestDecl',
1679
+ 'TimeClause',
1680
+ 'WhileClause',
1681
+ ],
1682
+ Loop: ['CStyleLoop', 'WordIter'],
1683
+ Node: [
1684
+ 'ArithmCmd',
1685
+ 'ArithmExp',
1686
+ 'ArrayElem',
1687
+ 'ArrayExpr',
1688
+ 'Assign',
1689
+ 'BinaryArithm',
1690
+ 'BinaryCmd',
1691
+ 'BinaryTest',
1692
+ 'Block',
1693
+ 'BraceExp',
1694
+ 'CStyleLoop',
1695
+ 'CallExpr',
1696
+ 'CaseClause',
1697
+ 'CaseItem',
1698
+ 'CmdSubst',
1699
+ 'Comment',
1700
+ 'CoprocClause',
1701
+ 'DblQuoted',
1702
+ 'DeclClause',
1703
+ 'ExtGlob',
1704
+ 'File',
1705
+ 'FlagsArithm',
1706
+ 'ForClause',
1707
+ 'FuncDecl',
1708
+ 'IfClause',
1709
+ 'LetClause',
1710
+ 'Lit',
1711
+ 'ParamExp',
1712
+ 'ParenArithm',
1713
+ 'ParenTest',
1714
+ 'ProcSubst',
1715
+ 'Redirect',
1716
+ 'SglQuoted',
1717
+ 'Stmt',
1718
+ 'Subshell',
1719
+ 'TestClause',
1720
+ 'TestDecl',
1721
+ 'TimeClause',
1722
+ 'UnaryArithm',
1723
+ 'UnaryTest',
1724
+ 'WhileClause',
1725
+ 'Word',
1726
+ 'WordIter',
1727
+ ],
1728
+ TestExpr: ['BinaryTest', 'ParenTest', 'UnaryTest', 'Word'],
1729
+ WordPart: [
1730
+ 'ArithmExp',
1731
+ 'BraceExp',
1732
+ 'CmdSubst',
1733
+ 'DblQuoted',
1734
+ 'ExtGlob',
1735
+ 'Lit',
1736
+ 'ParamExp',
1737
+ 'ProcSubst',
1738
+ 'SglQuoted',
1739
+ ],
1740
+ };