@codingame/monaco-vscode-shellscript-default-extension 1.81.8-next.1

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.
@@ -0,0 +1,2009 @@
1
+ {
2
+ "information_for_contributors": [
3
+ "This file has been converted from https://github.com/jeff-hykin/better-shell-syntax/blob/master/autogenerated/shell.tmLanguage.json",
4
+ "If you want to provide a fix or improvement, please create a pull request against the original repository.",
5
+ "Once accepted there, we are happy to receive an update request."
6
+ ],
7
+ "version": "https://github.com/jeff-hykin/better-shell-syntax/commit/ce62ea59e8e522f8a07d8d8a2d1f992c6c600b91",
8
+ "name": "Shell Script",
9
+ "scopeName": "source.shell",
10
+ "patterns": [
11
+ {
12
+ "include": "#initial_context"
13
+ }
14
+ ],
15
+ "repository": {
16
+ "alias_statement": {
17
+ "begin": "(alias)[ \\t]*+[ \\t]*+(?:((?<=^|;|&|[ \\t])(?:readonly|declare|typeset|export|local)(?=[ \\t]|;|&|$))[ \\t]*+)?((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?:(\\[)((?:(?:(?:\\$)?(?<!\\w)[a-zA-Z_0-9-]+(?!\\w)|@)|\\*))(\\]))?(?:(?:(\\=)|(\\+\\=))|(\\-\\=))",
18
+ "end": "(?:(?= |\\t|$)|(?:(?:(?:(?:(;)|(&&))|(\\|\\|))|(&))|\\n))",
19
+ "beginCaptures": {
20
+ "1": {
21
+ "name": "storage.type.alias.shell"
22
+ },
23
+ "2": {
24
+ "name": "storage.modifier.$2.shell"
25
+ },
26
+ "3": {
27
+ "name": "variable.other.assignment.shell"
28
+ },
29
+ "4": {
30
+ "name": "punctuation.definition.array.access.shell"
31
+ },
32
+ "5": {
33
+ "name": "variable.other.assignment.shell"
34
+ },
35
+ "6": {
36
+ "name": "punctuation.definition.array.access.shell"
37
+ },
38
+ "7": {
39
+ "name": "keyword.operator.assignment.shell"
40
+ },
41
+ "8": {
42
+ "name": "keyword.operator.assignment.compound.shell"
43
+ },
44
+ "9": {
45
+ "name": "keyword.operator.assignment.compound.shell"
46
+ }
47
+ },
48
+ "endCaptures": {
49
+ "1": {
50
+ "name": "punctuation.terminator.statement.semicolon.shell"
51
+ },
52
+ "2": {
53
+ "name": "punctuation.separator.statement.and.shell"
54
+ },
55
+ "3": {
56
+ "name": "punctuation.separator.statement.or.shell"
57
+ },
58
+ "4": {
59
+ "name": "punctuation.separator.statement.background.shell"
60
+ }
61
+ },
62
+ "name": "meta.expression.assignment.shell",
63
+ "patterns": [
64
+ {
65
+ "include": "#normal_statement_context"
66
+ }
67
+ ]
68
+ },
69
+ "argument": {
70
+ "begin": "[ \\t]++(?!(?:&|\\||\\(|\\[|#|\\n|$|;))",
71
+ "end": "(?= |\\t|;|\\||&|$|\\n|\\)|\\`)",
72
+ "beginCaptures": {},
73
+ "endCaptures": {},
74
+ "name": "meta.argument.shell",
75
+ "patterns": [
76
+ {
77
+ "include": "#argument_context"
78
+ },
79
+ {
80
+ "include": "#line_continuation"
81
+ }
82
+ ]
83
+ },
84
+ "argument_context": {
85
+ "patterns": [
86
+ {
87
+ "match": "[ \\t]*+([^ \t\n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>))",
88
+ "captures": {
89
+ "1": {
90
+ "name": "string.unquoted.argument.shell",
91
+ "patterns": [
92
+ {
93
+ "match": "\\*",
94
+ "name": "variable.language.special.wildcard.shell"
95
+ },
96
+ {
97
+ "include": "#variable"
98
+ },
99
+ {
100
+ "include": "#numeric_literal"
101
+ },
102
+ {
103
+ "match": "(?<!\\w)(\\b(?:true|false)\\b)(?!\\w)",
104
+ "captures": {
105
+ "1": {
106
+ "name": "constant.language.$1.shell"
107
+ }
108
+ }
109
+ }
110
+ ]
111
+ }
112
+ }
113
+ },
114
+ {
115
+ "include": "#normal_statement_context"
116
+ }
117
+ ]
118
+ },
119
+ "assignment": {
120
+ "patterns": [
121
+ {
122
+ "begin": "[ \\t]*+(?:((?<=^|;|&|[ \\t])(?:readonly|declare|typeset|export|local)(?=[ \\t]|;|&|$))[ \\t]*+)?((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?:(\\[)((?:(?:(?:\\$)?(?<!\\w)[a-zA-Z_0-9-]+(?!\\w)|@)|\\*))(\\]))?(?:(?:(\\=)|(\\+\\=))|(\\-\\=))[ \\t]*+(\\()",
123
+ "end": "\\)",
124
+ "beginCaptures": {
125
+ "1": {
126
+ "name": "storage.modifier.$1.shell"
127
+ },
128
+ "2": {
129
+ "name": "variable.other.assignment.shell"
130
+ },
131
+ "3": {
132
+ "name": "punctuation.definition.array.access.shell"
133
+ },
134
+ "4": {
135
+ "name": "variable.other.assignment.shell"
136
+ },
137
+ "5": {
138
+ "name": "punctuation.definition.array.access.shell"
139
+ },
140
+ "6": {
141
+ "name": "keyword.operator.assignment.shell"
142
+ },
143
+ "7": {
144
+ "name": "keyword.operator.assignment.compound.shell"
145
+ },
146
+ "8": {
147
+ "name": "keyword.operator.assignment.compound.shell"
148
+ },
149
+ "9": {
150
+ "name": "punctuation.shell"
151
+ }
152
+ },
153
+ "endCaptures": {
154
+ "0": {
155
+ "name": "punctuation.shell"
156
+ }
157
+ },
158
+ "name": "meta.expression.assignment.shell",
159
+ "patterns": [
160
+ {
161
+ "include": "#comment"
162
+ },
163
+ {
164
+ "include": "#argument_context"
165
+ }
166
+ ]
167
+ },
168
+ {
169
+ "begin": "[ \\t]*+(?:((?<=^|;|&|[ \\t])(?:readonly|declare|typeset|export|local)(?=[ \\t]|;|&|$))[ \\t]*+)?((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?:(\\[)((?:(?:(?:\\$)?(?<!\\w)[a-zA-Z_0-9-]+(?!\\w)|@)|\\*))(\\]))?(?:(?:(\\=)|(\\+\\=))|(\\-\\=))",
170
+ "end": "(?:(?= |\\t|$)|(?:(?:(?:(?:(;)|(&&))|(\\|\\|))|(&))|\\n))",
171
+ "beginCaptures": {
172
+ "1": {
173
+ "name": "storage.modifier.$1.shell"
174
+ },
175
+ "2": {
176
+ "name": "variable.other.assignment.shell"
177
+ },
178
+ "3": {
179
+ "name": "punctuation.definition.array.access.shell"
180
+ },
181
+ "4": {
182
+ "name": "variable.other.assignment.shell"
183
+ },
184
+ "5": {
185
+ "name": "punctuation.definition.array.access.shell"
186
+ },
187
+ "6": {
188
+ "name": "keyword.operator.assignment.shell"
189
+ },
190
+ "7": {
191
+ "name": "keyword.operator.assignment.compound.shell"
192
+ },
193
+ "8": {
194
+ "name": "keyword.operator.assignment.compound.shell"
195
+ }
196
+ },
197
+ "endCaptures": {
198
+ "1": {
199
+ "name": "punctuation.terminator.statement.semicolon.shell"
200
+ },
201
+ "2": {
202
+ "name": "punctuation.separator.statement.and.shell"
203
+ },
204
+ "3": {
205
+ "name": "punctuation.separator.statement.or.shell"
206
+ },
207
+ "4": {
208
+ "name": "punctuation.separator.statement.background.shell"
209
+ }
210
+ },
211
+ "name": "meta.expression.assignment.shell",
212
+ "patterns": [
213
+ {
214
+ "include": "#comment"
215
+ },
216
+ {
217
+ "include": "#argument_context"
218
+ }
219
+ ]
220
+ }
221
+ ]
222
+ },
223
+ "basic_command_name": {
224
+ "match": "(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?!foreach\\b(?!\\/)|select\\b(?!\\/)|repeat\\b(?!\\/)|until\\b(?!\\/)|while\\b(?!\\/)|case\\b(?!\\/)|done\\b(?!\\/)|elif\\b(?!\\/)|else\\b(?!\\/)|esac\\b(?!\\/)|then\\b(?!\\/)|for\\b(?!\\/)|end\\b(?!\\/)|in\\b(?!\\/)|fi\\b(?!\\/)|do\\b(?!\\/)|if\\b(?!\\/))(?:((?<=^|;|&|[ \\t])(?:readonly|declare|typeset|export|local)(?=[ \\t]|;|&|$))|((?!\"|'|\\\\\\n?$)[^!'\" \\t\\n\\r]+?))(?:(?= |\\t)|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?<!\\\\))",
225
+ "captures": {
226
+ "1": {
227
+ "name": "storage.modifier.$1.shell"
228
+ },
229
+ "2": {
230
+ "name": "entity.name.function.call.shell entity.name.command.shell",
231
+ "patterns": [
232
+ {
233
+ "match": "(?<!\\w)(?:continue|return|break)(?!\\w)",
234
+ "name": "keyword.control.$0.shell"
235
+ },
236
+ {
237
+ "match": "(?<!\\w)(?:unfunction|continue|autoload|unsetopt|bindkey|builtin|getopts|command|declare|unalias|history|unlimit|typeset|suspend|source|printf|unhash|disown|ulimit|return|which|alias|break|false|print|shift|times|umask|umask|unset|read|type|exec|eval|wait|echo|dirs|jobs|kill|hash|stat|exit|test|trap|true|let|set|pwd|cd|fg|bg|fc|:|\\.)(?!\\/)(?!\\w)",
238
+ "name": "support.function.builtin.shell"
239
+ },
240
+ {
241
+ "include": "#variable"
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ "name": "meta.statement.command.name.basic.shell"
247
+ },
248
+ "block_comment": {
249
+ "begin": "\\s*+(\\/\\*)",
250
+ "end": "\\*\\/",
251
+ "beginCaptures": {
252
+ "1": {
253
+ "name": "punctuation.definition.comment.begin.shell"
254
+ }
255
+ },
256
+ "endCaptures": {
257
+ "0": {
258
+ "name": "punctuation.definition.comment.end.shell"
259
+ }
260
+ },
261
+ "name": "comment.block.shell"
262
+ },
263
+ "boolean": {
264
+ "match": "\\b(?:true|false)\\b",
265
+ "name": "constant.language.$0.shell"
266
+ },
267
+ "case-clause": {
268
+ "patterns": [
269
+ {
270
+ "begin": "(?=\\S)",
271
+ "end": ";;",
272
+ "endCaptures": {
273
+ "0": {
274
+ "name": "punctuation.terminator.case-clause.shell"
275
+ }
276
+ },
277
+ "name": "meta.scope.case-clause.shell",
278
+ "patterns": [
279
+ {
280
+ "begin": "\\(|(?=\\S)",
281
+ "beginCaptures": {
282
+ "0": {
283
+ "name": "punctuation.definition.case-pattern.shell"
284
+ }
285
+ },
286
+ "end": "\\)",
287
+ "endCaptures": {
288
+ "0": {
289
+ "name": "punctuation.definition.case-pattern.shell"
290
+ }
291
+ },
292
+ "name": "meta.scope.case-pattern.shell",
293
+ "patterns": [
294
+ {
295
+ "match": "\\|",
296
+ "name": "punctuation.separator.pipe-sign.shell"
297
+ },
298
+ {
299
+ "include": "#string"
300
+ },
301
+ {
302
+ "include": "#variable"
303
+ },
304
+ {
305
+ "include": "#interpolation"
306
+ },
307
+ {
308
+ "include": "#pathname"
309
+ }
310
+ ]
311
+ },
312
+ {
313
+ "begin": "(?<=\\))",
314
+ "end": "(?=;;)",
315
+ "name": "meta.scope.case-clause-body.shell",
316
+ "patterns": [
317
+ {
318
+ "include": "#initial_context"
319
+ }
320
+ ]
321
+ }
322
+ ]
323
+ }
324
+ ]
325
+ },
326
+ "comment": {
327
+ "match": "(?:^|[ \\t]++)(?:((#!).*)|((#).*))",
328
+ "captures": {
329
+ "1": {
330
+ "name": "comment.line.number-sign.shell meta.shebang.shell"
331
+ },
332
+ "2": {
333
+ "name": "punctuation.definition.comment.shebang.shell"
334
+ },
335
+ "3": {
336
+ "name": "comment.line.number-sign.shell"
337
+ },
338
+ "4": {
339
+ "name": "punctuation.definition.comment.shell"
340
+ }
341
+ }
342
+ },
343
+ "comments": {
344
+ "patterns": [
345
+ {
346
+ "include": "#block_comment"
347
+ },
348
+ {
349
+ "include": "#line_comment"
350
+ }
351
+ ]
352
+ },
353
+ "compound-command": {
354
+ "patterns": [
355
+ {
356
+ "begin": "\\[{1,2}",
357
+ "beginCaptures": {
358
+ "0": {
359
+ "name": "punctuation.definition.logical-expression.shell"
360
+ }
361
+ },
362
+ "end": "\\]{1,2}",
363
+ "endCaptures": {
364
+ "0": {
365
+ "name": "punctuation.definition.logical-expression.shell"
366
+ }
367
+ },
368
+ "name": "meta.scope.logical-expression.shell",
369
+ "patterns": [
370
+ {
371
+ "include": "#logical-expression"
372
+ },
373
+ {
374
+ "include": "#initial_context"
375
+ }
376
+ ]
377
+ },
378
+ {
379
+ "begin": "\\({2}",
380
+ "beginCaptures": {
381
+ "0": {
382
+ "name": "punctuation.definition.string.begin.shell"
383
+ }
384
+ },
385
+ "end": "\\){2}",
386
+ "endCaptures": {
387
+ "0": {
388
+ "name": "punctuation.definition.string.end.shell"
389
+ }
390
+ },
391
+ "name": "string.other.math.shell",
392
+ "patterns": [
393
+ {
394
+ "include": "#math"
395
+ }
396
+ ]
397
+ },
398
+ {
399
+ "begin": "\\(",
400
+ "beginCaptures": {
401
+ "0": {
402
+ "name": "punctuation.definition.subshell.shell"
403
+ }
404
+ },
405
+ "end": "\\)",
406
+ "endCaptures": {
407
+ "0": {
408
+ "name": "punctuation.definition.subshell.shell"
409
+ }
410
+ },
411
+ "name": "meta.scope.subshell.shell",
412
+ "patterns": [
413
+ {
414
+ "include": "#initial_context"
415
+ }
416
+ ]
417
+ },
418
+ {
419
+ "begin": "(?<=\\s|^){(?=\\s|$)",
420
+ "beginCaptures": {
421
+ "0": {
422
+ "name": "punctuation.definition.group.shell"
423
+ }
424
+ },
425
+ "end": "(?<=^|;)\\s*(})",
426
+ "endCaptures": {
427
+ "1": {
428
+ "name": "punctuation.definition.group.shell"
429
+ }
430
+ },
431
+ "name": "meta.scope.group.shell",
432
+ "patterns": [
433
+ {
434
+ "include": "#initial_context"
435
+ }
436
+ ]
437
+ }
438
+ ]
439
+ },
440
+ "continuation_of_double_quoted_command_name": {
441
+ "begin": "\\G(?<=\")",
442
+ "end": "\"",
443
+ "beginCaptures": {},
444
+ "endCaptures": {
445
+ "0": {
446
+ "name": "string.quoted.double.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell"
447
+ }
448
+ },
449
+ "contentName": "meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command",
450
+ "patterns": [
451
+ {
452
+ "match": "\\\\[\\$\\n`\"\\\\]",
453
+ "name": "constant.character.escape.shell"
454
+ },
455
+ {
456
+ "include": "#variable"
457
+ },
458
+ {
459
+ "include": "#interpolation"
460
+ }
461
+ ]
462
+ },
463
+ "continuation_of_single_quoted_command_name": {
464
+ "begin": "\\G(?<=')",
465
+ "end": "'",
466
+ "beginCaptures": {},
467
+ "endCaptures": {
468
+ "0": {
469
+ "name": "string.quoted.single.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell"
470
+ }
471
+ },
472
+ "contentName": "meta.statement.command.name.continuation string.quoted.single entity.name.function.call entity.name.command"
473
+ },
474
+ "custom_command_names": {
475
+ "patterns": []
476
+ },
477
+ "custom_commands": {
478
+ "patterns": []
479
+ },
480
+ "double_quote_context": {
481
+ "patterns": [
482
+ {
483
+ "match": "\\\\[\\$`\"\\\\\\n]",
484
+ "name": "constant.character.escape.shell"
485
+ },
486
+ {
487
+ "include": "#variable"
488
+ },
489
+ {
490
+ "include": "#interpolation"
491
+ }
492
+ ]
493
+ },
494
+ "double_quote_escape_char": {
495
+ "match": "\\\\[\\$`\"\\\\\\n]",
496
+ "name": "constant.character.escape.shell"
497
+ },
498
+ "function_definition": {
499
+ "begin": "[ \\t]*+(?:(\\bfunction\\b)[ \\t]*+([^ \\t\\n\\r\\(\\)=]+)(?:(\\()[ \\t]*+(\\)))?|([^ \\t\\n\\r\\(\\)=]+)[ \\t]*+(\\()[ \\t]*+(\\)))",
500
+ "end": "(?<=\\}|\\))",
501
+ "beginCaptures": {
502
+ "1": {
503
+ "name": "storage.type.function.shell"
504
+ },
505
+ "2": {
506
+ "name": "entity.name.function.shell"
507
+ },
508
+ "3": {
509
+ "name": "punctuation.definition.arguments.shell"
510
+ },
511
+ "4": {
512
+ "name": "punctuation.definition.arguments.shell"
513
+ },
514
+ "5": {
515
+ "name": "entity.name.function.shell"
516
+ },
517
+ "6": {
518
+ "name": "punctuation.definition.arguments.shell"
519
+ },
520
+ "7": {
521
+ "name": "punctuation.definition.arguments.shell"
522
+ }
523
+ },
524
+ "endCaptures": {},
525
+ "name": "meta.function.shell",
526
+ "patterns": [
527
+ {
528
+ "match": "\\G(?:\\t| |\\n)"
529
+ },
530
+ {
531
+ "begin": "\\{",
532
+ "end": "\\}",
533
+ "beginCaptures": {
534
+ "0": {
535
+ "name": "punctuation.definition.group.shell punctuation.section.function.definition.shell"
536
+ }
537
+ },
538
+ "endCaptures": {
539
+ "0": {
540
+ "name": "punctuation.definition.group.shell punctuation.section.function.definition.shell"
541
+ }
542
+ },
543
+ "name": "meta.function.body.shell",
544
+ "patterns": [
545
+ {
546
+ "include": "#initial_context"
547
+ }
548
+ ]
549
+ },
550
+ {
551
+ "begin": "\\(",
552
+ "end": "\\)",
553
+ "beginCaptures": {
554
+ "0": {
555
+ "name": "punctuation.definition.group.shell punctuation.section.function.definition.shell"
556
+ }
557
+ },
558
+ "endCaptures": {
559
+ "0": {
560
+ "name": "punctuation.definition.group.shell punctuation.section.function.definition.shell"
561
+ }
562
+ },
563
+ "name": "meta.function.body.shell",
564
+ "patterns": [
565
+ {
566
+ "include": "#initial_context"
567
+ }
568
+ ]
569
+ }
570
+ ],
571
+ "applyEndPatternLast": 1
572
+ },
573
+ "heredoc": {
574
+ "patterns": [
575
+ {
576
+ "begin": "((?<!<)<<-)[ \\t]*+(\"|')[ \\t]*+((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?=\\s|;|&|<|\"|')(?:\\2)(.*)",
577
+ "end": "^\\t*(?:\\3)(?=\\s|;|&|$)",
578
+ "beginCaptures": {
579
+ "1": {
580
+ "name": "keyword.operator.heredoc.shell"
581
+ },
582
+ "2": {},
583
+ "3": {
584
+ "name": "punctuation.definition.string.heredoc.shell"
585
+ },
586
+ "4": {
587
+ "patterns": [
588
+ {
589
+ "include": "#normal_statement_context"
590
+ }
591
+ ]
592
+ }
593
+ },
594
+ "endCaptures": {
595
+ "0": {
596
+ "name": "punctuation.definition.string.heredoc.shell"
597
+ }
598
+ },
599
+ "contentName": "string.quoted.heredoc.indent",
600
+ "patterns": []
601
+ },
602
+ {
603
+ "begin": "((?<!<)<<(?!<))[ \\t]*+(\"|')[ \\t]*+((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?=\\s|;|&|<|\"|')(?:\\2)(.*)",
604
+ "end": "^(?:\\3)(?=\\s|;|&|$)",
605
+ "beginCaptures": {
606
+ "1": {
607
+ "name": "keyword.operator.heredoc.shell"
608
+ },
609
+ "2": {},
610
+ "3": {
611
+ "name": "punctuation.definition.string.heredoc.shell"
612
+ },
613
+ "4": {
614
+ "patterns": [
615
+ {
616
+ "include": "#normal_statement_context"
617
+ }
618
+ ]
619
+ }
620
+ },
621
+ "endCaptures": {
622
+ "0": {
623
+ "name": "punctuation.definition.string.heredoc.shell"
624
+ }
625
+ },
626
+ "contentName": "string.quoted.heredoc.no-indent",
627
+ "patterns": []
628
+ },
629
+ {
630
+ "begin": "((?<!<)<<-)[ \\t]*+((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?=\\s|;|&|<|\"|')(.*)",
631
+ "end": "^\\t*(?:\\2)(?=\\s|;|&|$)",
632
+ "beginCaptures": {
633
+ "1": {
634
+ "name": "keyword.operator.heredoc.shell"
635
+ },
636
+ "2": {
637
+ "name": "punctuation.definition.string.heredoc.shell"
638
+ },
639
+ "3": {
640
+ "patterns": [
641
+ {
642
+ "include": "#normal_statement_context"
643
+ }
644
+ ]
645
+ }
646
+ },
647
+ "endCaptures": {
648
+ "0": {
649
+ "name": "punctuation.definition.string.heredoc.shell"
650
+ }
651
+ },
652
+ "contentName": "string.unquoted.heredoc.indent",
653
+ "patterns": [
654
+ {
655
+ "include": "#double_quote_escape_char"
656
+ },
657
+ {
658
+ "include": "#variable"
659
+ },
660
+ {
661
+ "include": "#interpolation"
662
+ }
663
+ ]
664
+ },
665
+ {
666
+ "begin": "((?<!<)<<(?!<))[ \\t]*+((?<!\\w)[a-zA-Z_0-9-]+(?!\\w))(?=\\s|;|&|<|\"|')(.*)",
667
+ "end": "^(?:\\2)(?=\\s|;|&|$)",
668
+ "beginCaptures": {
669
+ "1": {
670
+ "name": "keyword.operator.heredoc.shell"
671
+ },
672
+ "2": {
673
+ "name": "punctuation.definition.string.heredoc.shell"
674
+ },
675
+ "3": {
676
+ "patterns": [
677
+ {
678
+ "include": "#normal_statement_context"
679
+ }
680
+ ]
681
+ }
682
+ },
683
+ "endCaptures": {
684
+ "0": {
685
+ "name": "punctuation.definition.string.heredoc.shell"
686
+ }
687
+ },
688
+ "contentName": "string.unquoted.heredoc.no-indent",
689
+ "patterns": [
690
+ {
691
+ "include": "#double_quote_escape_char"
692
+ },
693
+ {
694
+ "include": "#variable"
695
+ },
696
+ {
697
+ "include": "#interpolation"
698
+ }
699
+ ]
700
+ }
701
+ ]
702
+ },
703
+ "herestring": {
704
+ "patterns": [
705
+ {
706
+ "begin": "(<<<)\\s*(('))",
707
+ "beginCaptures": {
708
+ "1": {
709
+ "name": "keyword.operator.herestring.shell"
710
+ },
711
+ "2": {
712
+ "name": "string.quoted.single.shell"
713
+ },
714
+ "3": {
715
+ "name": "punctuation.definition.string.begin.shell"
716
+ }
717
+ },
718
+ "end": "(')",
719
+ "endCaptures": {
720
+ "0": {
721
+ "name": "string.quoted.single.shell"
722
+ },
723
+ "1": {
724
+ "name": "punctuation.definition.string.end.shell"
725
+ }
726
+ },
727
+ "name": "meta.herestring.shell",
728
+ "contentName": "string.quoted.single.shell"
729
+ },
730
+ {
731
+ "begin": "(<<<)\\s*((\"))",
732
+ "beginCaptures": {
733
+ "1": {
734
+ "name": "keyword.operator.herestring.shell"
735
+ },
736
+ "2": {
737
+ "name": "string.quoted.double.shell"
738
+ },
739
+ "3": {
740
+ "name": "punctuation.definition.string.begin.shell"
741
+ }
742
+ },
743
+ "end": "(\")",
744
+ "endCaptures": {
745
+ "0": {
746
+ "name": "string.quoted.double.shell"
747
+ },
748
+ "1": {
749
+ "name": "punctuation.definition.string.end.shell"
750
+ }
751
+ },
752
+ "name": "meta.herestring.shell",
753
+ "contentName": "string.quoted.double.shell",
754
+ "patterns": [
755
+ {
756
+ "include": "#double_quote_context"
757
+ }
758
+ ]
759
+ },
760
+ {
761
+ "captures": {
762
+ "1": {
763
+ "name": "keyword.operator.herestring.shell"
764
+ },
765
+ "2": {
766
+ "name": "string.unquoted.herestring.shell",
767
+ "patterns": [
768
+ {
769
+ "include": "#initial_context"
770
+ }
771
+ ]
772
+ }
773
+ },
774
+ "match": "(<<<)\\s*(([^\\s)\\\\]|\\\\.)+)",
775
+ "name": "meta.herestring.shell"
776
+ }
777
+ ]
778
+ },
779
+ "initial_context": {
780
+ "patterns": [
781
+ {
782
+ "include": "#comment"
783
+ },
784
+ {
785
+ "include": "#pipeline"
786
+ },
787
+ {
788
+ "include": "#normal_statement_seperator"
789
+ },
790
+ {
791
+ "include": "#logical_expression_double"
792
+ },
793
+ {
794
+ "include": "#logical_expression_single"
795
+ },
796
+ {
797
+ "include": "#misc_ranges"
798
+ },
799
+ {
800
+ "include": "#loop"
801
+ },
802
+ {
803
+ "include": "#function_definition"
804
+ },
805
+ {
806
+ "include": "#variable"
807
+ },
808
+ {
809
+ "include": "#interpolation"
810
+ },
811
+ {
812
+ "include": "#heredoc"
813
+ },
814
+ {
815
+ "include": "#herestring"
816
+ },
817
+ {
818
+ "include": "#redirection"
819
+ },
820
+ {
821
+ "include": "#pathname"
822
+ },
823
+ {
824
+ "include": "#keyword"
825
+ },
826
+ {
827
+ "include": "#alias_statement"
828
+ },
829
+ {
830
+ "include": "#normal_statement"
831
+ },
832
+ {
833
+ "include": "#string"
834
+ },
835
+ {
836
+ "include": "#support"
837
+ }
838
+ ]
839
+ },
840
+ "inline_comment": {
841
+ "match": "(\\/\\*)((?:[^\\*]|(?:\\*)++[^\\/])*+((?:\\*)++\\/))",
842
+ "captures": {
843
+ "1": {
844
+ "name": "comment.block.shell punctuation.definition.comment.begin.shell"
845
+ },
846
+ "2": {
847
+ "name": "comment.block.shell"
848
+ },
849
+ "3": {
850
+ "patterns": [
851
+ {
852
+ "match": "\\*\\/",
853
+ "name": "comment.block.shell punctuation.definition.comment.end.shell"
854
+ },
855
+ {
856
+ "match": "\\*",
857
+ "name": "comment.block.shell"
858
+ }
859
+ ]
860
+ }
861
+ }
862
+ },
863
+ "interpolation": {
864
+ "patterns": [
865
+ {
866
+ "begin": "\\$\\({2}",
867
+ "beginCaptures": {
868
+ "0": {
869
+ "name": "punctuation.definition.evaluation.arithmetic.begin.shell"
870
+ }
871
+ },
872
+ "end": "\\)\\s*\\)",
873
+ "endCaptures": {
874
+ "0": {
875
+ "name": "punctuation.definition.evaluation.arithmetic.end.shell"
876
+ }
877
+ },
878
+ "name": "string.other.math.shell",
879
+ "patterns": [
880
+ {
881
+ "include": "#math"
882
+ }
883
+ ]
884
+ },
885
+ {
886
+ "begin": "`",
887
+ "beginCaptures": {
888
+ "0": {
889
+ "name": "punctuation.definition.evaluation.backticks.shell"
890
+ }
891
+ },
892
+ "end": "`",
893
+ "endCaptures": {
894
+ "0": {
895
+ "name": "punctuation.definition.evaluation.backticks.shell"
896
+ }
897
+ },
898
+ "name": "string.interpolated.backtick.shell",
899
+ "patterns": [
900
+ {
901
+ "match": "\\\\[`\\\\$]",
902
+ "name": "constant.character.escape.shell"
903
+ },
904
+ {
905
+ "begin": "(?<=\\W)(?=#)(?!#{)",
906
+ "beginCaptures": {
907
+ "1": {
908
+ "name": "punctuation.whitespace.comment.leading.shell"
909
+ }
910
+ },
911
+ "end": "(?!\\G)",
912
+ "patterns": [
913
+ {
914
+ "begin": "#",
915
+ "beginCaptures": {
916
+ "0": {
917
+ "name": "punctuation.definition.comment.shell"
918
+ }
919
+ },
920
+ "end": "(?=`)",
921
+ "name": "comment.line.number-sign.shell"
922
+ }
923
+ ]
924
+ },
925
+ {
926
+ "include": "#initial_context"
927
+ }
928
+ ]
929
+ },
930
+ {
931
+ "begin": "\\$\\(",
932
+ "beginCaptures": {
933
+ "0": {
934
+ "name": "punctuation.definition.evaluation.parens.begin.shell"
935
+ }
936
+ },
937
+ "end": "\\)",
938
+ "endCaptures": {
939
+ "0": {
940
+ "name": "punctuation.definition.evaluation.parens.end.shell"
941
+ }
942
+ },
943
+ "name": "string.interpolated.dollar.shell",
944
+ "patterns": [
945
+ {
946
+ "include": "#initial_context"
947
+ }
948
+ ]
949
+ }
950
+ ]
951
+ },
952
+ "keyword": {
953
+ "patterns": [
954
+ {
955
+ "match": "(?<=^|;|&| |\\t)(?:continue|foreach|return|select|repeat|break|until|while|case|done|elif|else|esac|then|for|end|do|if|fi|in)(?= |\\t|;|&|$)",
956
+ "name": "keyword.control.$0.shell"
957
+ }
958
+ ]
959
+ },
960
+ "line_comment": {
961
+ "begin": "\\s*+(\\/\\/)",
962
+ "end": "(?<=\\n)(?<!\\\\\\n)",
963
+ "beginCaptures": {
964
+ "1": {
965
+ "name": "punctuation.definition.comment.shell"
966
+ }
967
+ },
968
+ "endCaptures": {},
969
+ "name": "comment.line.double-slash.shell",
970
+ "patterns": [
971
+ {
972
+ "include": "#line_continuation_character"
973
+ }
974
+ ]
975
+ },
976
+ "line_continuation": {
977
+ "match": "\\\\(?=\\n)",
978
+ "name": "constant.character.escape.line-continuation.shell"
979
+ },
980
+ "logical-expression": {
981
+ "patterns": [
982
+ {
983
+ "comment": "do we want a special rule for ( expr )?",
984
+ "match": "=[=~]?|!=?|<|>|&&|\\|\\|",
985
+ "name": "keyword.operator.logical.shell"
986
+ },
987
+ {
988
+ "match": "(?<!\\S)-(nt|ot|ef|eq|ne|l[te]|g[te]|[a-hknoprstuwxzOGLSN])\\b",
989
+ "name": "keyword.operator.logical.shell"
990
+ }
991
+ ]
992
+ },
993
+ "logical_expression_context": {
994
+ "patterns": [
995
+ {
996
+ "include": "#regex_comparison"
997
+ },
998
+ {
999
+ "include": "#logical-expression"
1000
+ },
1001
+ {
1002
+ "include": "#logical_expression_single"
1003
+ },
1004
+ {
1005
+ "include": "#logical_expression_double"
1006
+ },
1007
+ {
1008
+ "include": "#comment"
1009
+ },
1010
+ {
1011
+ "include": "#boolean"
1012
+ },
1013
+ {
1014
+ "include": "#redirect_number"
1015
+ },
1016
+ {
1017
+ "include": "#numeric_literal"
1018
+ },
1019
+ {
1020
+ "include": "#pipeline"
1021
+ },
1022
+ {
1023
+ "include": "#normal_statement_seperator"
1024
+ },
1025
+ {
1026
+ "include": "#string"
1027
+ },
1028
+ {
1029
+ "include": "#variable"
1030
+ },
1031
+ {
1032
+ "include": "#interpolation"
1033
+ },
1034
+ {
1035
+ "include": "#heredoc"
1036
+ },
1037
+ {
1038
+ "include": "#herestring"
1039
+ },
1040
+ {
1041
+ "include": "#pathname"
1042
+ },
1043
+ {
1044
+ "include": "#keyword"
1045
+ },
1046
+ {
1047
+ "include": "#support"
1048
+ }
1049
+ ]
1050
+ },
1051
+ "logical_expression_double": {
1052
+ "begin": "\\[\\[",
1053
+ "end": "\\]\\]",
1054
+ "beginCaptures": {
1055
+ "0": {
1056
+ "name": "punctuation.definition.logical-expression.shell"
1057
+ }
1058
+ },
1059
+ "endCaptures": {
1060
+ "0": {
1061
+ "name": "punctuation.definition.logical-expression.shell"
1062
+ }
1063
+ },
1064
+ "name": "meta.scope.logical-expression.shell",
1065
+ "patterns": [
1066
+ {
1067
+ "include": "#logical_expression_context"
1068
+ }
1069
+ ]
1070
+ },
1071
+ "logical_expression_single": {
1072
+ "begin": "\\[",
1073
+ "end": "\\]",
1074
+ "beginCaptures": {
1075
+ "0": {
1076
+ "name": "punctuation.definition.logical-expression.shell"
1077
+ }
1078
+ },
1079
+ "endCaptures": {
1080
+ "0": {
1081
+ "name": "punctuation.definition.logical-expression.shell"
1082
+ }
1083
+ },
1084
+ "name": "meta.scope.logical-expression.shell",
1085
+ "patterns": [
1086
+ {
1087
+ "include": "#logical_expression_context"
1088
+ }
1089
+ ]
1090
+ },
1091
+ "loop": {
1092
+ "patterns": [
1093
+ {
1094
+ "begin": "(?<=^|;|&|\\s)(for)\\s+(?=\\({2})",
1095
+ "beginCaptures": {
1096
+ "1": {
1097
+ "name": "keyword.control.shell"
1098
+ }
1099
+ },
1100
+ "end": "(?<=^|;|&|\\s)done(?=\\s|;|&|$|\\))",
1101
+ "endCaptures": {
1102
+ "0": {
1103
+ "name": "keyword.control.shell"
1104
+ }
1105
+ },
1106
+ "name": "meta.scope.for-loop.shell",
1107
+ "patterns": [
1108
+ {
1109
+ "include": "#initial_context"
1110
+ }
1111
+ ]
1112
+ },
1113
+ {
1114
+ "begin": "(?<=^|;|&|\\s)(for)\\s+(.+?)\\s+(in)(?=\\s|;|&|$)",
1115
+ "beginCaptures": {
1116
+ "1": {
1117
+ "name": "keyword.control.shell"
1118
+ },
1119
+ "2": {
1120
+ "name": "variable.other.loop.shell",
1121
+ "patterns": [
1122
+ {
1123
+ "include": "#string"
1124
+ }
1125
+ ]
1126
+ },
1127
+ "3": {
1128
+ "name": "keyword.control.shell"
1129
+ }
1130
+ },
1131
+ "end": "(?<=^|;|&|\\s)done(?=\\s|;|&|$|\\))",
1132
+ "endCaptures": {
1133
+ "0": {
1134
+ "name": "keyword.control.shell"
1135
+ }
1136
+ },
1137
+ "name": "meta.scope.for-in-loop.shell",
1138
+ "patterns": [
1139
+ {
1140
+ "include": "#initial_context"
1141
+ }
1142
+ ]
1143
+ },
1144
+ {
1145
+ "begin": "(?<=^|;|&|\\s)(while|until)(?=\\s|;|&|$)",
1146
+ "beginCaptures": {
1147
+ "1": {
1148
+ "name": "keyword.control.shell"
1149
+ }
1150
+ },
1151
+ "end": "(?<=^|;|&|\\s)done(?=\\s|;|&|$|\\))",
1152
+ "endCaptures": {
1153
+ "0": {
1154
+ "name": "keyword.control.shell"
1155
+ }
1156
+ },
1157
+ "name": "meta.scope.while-loop.shell",
1158
+ "patterns": [
1159
+ {
1160
+ "include": "#initial_context"
1161
+ }
1162
+ ]
1163
+ },
1164
+ {
1165
+ "begin": "(?<=^|;|&|\\s)(select)\\s+((?:[^\\s\\\\]|\\\\.)+)(?=\\s|;|&|$)",
1166
+ "beginCaptures": {
1167
+ "1": {
1168
+ "name": "keyword.control.shell"
1169
+ },
1170
+ "2": {
1171
+ "name": "variable.other.loop.shell"
1172
+ }
1173
+ },
1174
+ "end": "(?<=^|;|&|\\s)(done)(?=\\s|;|&|$|\\))",
1175
+ "endCaptures": {
1176
+ "1": {
1177
+ "name": "keyword.control.shell"
1178
+ }
1179
+ },
1180
+ "name": "meta.scope.select-block.shell",
1181
+ "patterns": [
1182
+ {
1183
+ "include": "#initial_context"
1184
+ }
1185
+ ]
1186
+ },
1187
+ {
1188
+ "begin": "(?<=^|;|&|\\s)case(?=\\s|;|&|$)",
1189
+ "beginCaptures": {
1190
+ "0": {
1191
+ "name": "keyword.control.shell"
1192
+ }
1193
+ },
1194
+ "end": "(?<=^|;|&|\\s)esac(?=\\s|;|&|$)",
1195
+ "endCaptures": {
1196
+ "0": {
1197
+ "name": "keyword.control.shell"
1198
+ }
1199
+ },
1200
+ "name": "meta.scope.case-block.shell",
1201
+ "patterns": [
1202
+ {
1203
+ "begin": "(?<=^|;|&|\\s)in(?=\\s|;|&|$)",
1204
+ "beginCaptures": {
1205
+ "0": {
1206
+ "name": "keyword.control.shell"
1207
+ }
1208
+ },
1209
+ "end": "(?<=^|;|&|\\s)(?=esac(\\s|;|&|$))",
1210
+ "name": "meta.scope.case-body.shell",
1211
+ "patterns": [
1212
+ {
1213
+ "include": "#comment"
1214
+ },
1215
+ {
1216
+ "include": "#case-clause"
1217
+ }
1218
+ ]
1219
+ },
1220
+ {
1221
+ "include": "#initial_context"
1222
+ }
1223
+ ]
1224
+ },
1225
+ {
1226
+ "begin": "(?<=^|;|&|\\s)if(?=\\s|;|&|$)",
1227
+ "beginCaptures": {
1228
+ "0": {
1229
+ "name": "keyword.control.shell"
1230
+ }
1231
+ },
1232
+ "end": "(?<=^|;|&|\\s)fi(?=\\s|;|&|$)",
1233
+ "endCaptures": {
1234
+ "0": {
1235
+ "name": "keyword.control.shell"
1236
+ }
1237
+ },
1238
+ "name": "meta.scope.if-block.shell",
1239
+ "patterns": [
1240
+ {
1241
+ "include": "#initial_context"
1242
+ }
1243
+ ]
1244
+ }
1245
+ ]
1246
+ },
1247
+ "math": {
1248
+ "patterns": [
1249
+ {
1250
+ "include": "#variable"
1251
+ },
1252
+ {
1253
+ "match": "\\+{1,2}|-{1,2}|!|~|\\*{1,2}|/|%|<[<=]?|>[>=]?|==|!=|^|\\|{1,2}|&{1,2}|\\?|\\:|,|=|[*/%+\\-&^|]=|<<=|>>=",
1254
+ "name": "keyword.operator.arithmetic.shell"
1255
+ },
1256
+ {
1257
+ "match": "0[xX][0-9A-Fa-f]+",
1258
+ "name": "constant.numeric.hex.shell"
1259
+ },
1260
+ {
1261
+ "match": "0\\d+",
1262
+ "name": "constant.numeric.octal.shell"
1263
+ },
1264
+ {
1265
+ "match": "\\d{1,2}#[0-9a-zA-Z@_]+",
1266
+ "name": "constant.numeric.other.shell"
1267
+ },
1268
+ {
1269
+ "match": "\\d+",
1270
+ "name": "constant.numeric.integer.shell"
1271
+ }
1272
+ ]
1273
+ },
1274
+ "misc_ranges": {
1275
+ "patterns": [
1276
+ {
1277
+ "include": "#logical_expression_single"
1278
+ },
1279
+ {
1280
+ "include": "#logical_expression_double"
1281
+ },
1282
+ {
1283
+ "begin": "\\(\\(",
1284
+ "end": "\\)\\)",
1285
+ "beginCaptures": {
1286
+ "0": {
1287
+ "name": "punctuation.section.arithmetic.shell"
1288
+ }
1289
+ },
1290
+ "endCaptures": {
1291
+ "0": {
1292
+ "name": "punctuation.section.arithmetic.shell"
1293
+ }
1294
+ },
1295
+ "name": "meta.arithmetic.shell",
1296
+ "patterns": [
1297
+ {
1298
+ "include": "#math"
1299
+ }
1300
+ ]
1301
+ },
1302
+ {
1303
+ "begin": "(?<!=)\\(",
1304
+ "end": "\\)",
1305
+ "beginCaptures": {
1306
+ "0": {
1307
+ "name": "punctuation.definition.subshell"
1308
+ }
1309
+ },
1310
+ "endCaptures": {
1311
+ "0": {
1312
+ "name": "punctuation.definition.subshell"
1313
+ }
1314
+ },
1315
+ "name": "meta.scope.subshell",
1316
+ "patterns": [
1317
+ {
1318
+ "include": "#initial_context"
1319
+ }
1320
+ ]
1321
+ },
1322
+ {
1323
+ "begin": "(?<![^ \\t])({)",
1324
+ "end": "}",
1325
+ "beginCaptures": {
1326
+ "1": {
1327
+ "name": "punctuation.definition.group.shell"
1328
+ }
1329
+ },
1330
+ "endCaptures": {
1331
+ "0": {
1332
+ "name": "punctuation.definition.group.shell"
1333
+ }
1334
+ },
1335
+ "name": "meta.scope.group.shell",
1336
+ "patterns": [
1337
+ {
1338
+ "include": "#initial_context"
1339
+ }
1340
+ ]
1341
+ }
1342
+ ]
1343
+ },
1344
+ "modifiers": {
1345
+ "match": "(?<=^|;|&|[ \\t])(?:readonly|declare|typeset|export|local)(?=[ \\t]|;|&|$)",
1346
+ "name": "storage.modifier.$0.shell"
1347
+ },
1348
+ "normal_statement": {
1349
+ "begin": "(?!^[ \\t]*+$)(?:(?<=^until | until |\\tuntil |^while | while |\\twhile |^elif | elif |\\telif |^else | else |\\telse |^then | then |\\tthen |^do | do |\\tdo |^if | if |\\tif )|(?<=(?:^|;|\\||&|!|\\(|\\{|\\`)))[ \\t]*+(?!nocorrect\\W|nocorrect\\$|function\\W|function\\$|foreach\\W|foreach\\$|repeat\\W|repeat\\$|logout\\W|logout\\$|coproc\\W|coproc\\$|select\\W|select\\$|while\\W|while\\$|pushd\\W|pushd\\$|until\\W|until\\$|case\\W|case\\$|done\\W|done\\$|elif\\W|elif\\$|else\\W|else\\$|esac\\W|esac\\$|popd\\W|popd\\$|then\\W|then\\$|time\\W|time\\$|for\\W|for\\$|end\\W|end\\$|fi\\W|fi\\$|do\\W|do\\$|in\\W|in\\$|if\\W|if\\$)",
1350
+ "end": "(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?<!\\\\)",
1351
+ "beginCaptures": {},
1352
+ "endCaptures": {},
1353
+ "name": "meta.statement.shell",
1354
+ "patterns": [
1355
+ {
1356
+ "include": "#function_definition"
1357
+ },
1358
+ {
1359
+ "include": "#assignment"
1360
+ },
1361
+ {
1362
+ "begin": "[ \\t]*+(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?!foreach\\b(?!\\/)|select\\b(?!\\/)|repeat\\b(?!\\/)|until\\b(?!\\/)|while\\b(?!\\/)|case\\b(?!\\/)|done\\b(?!\\/)|elif\\b(?!\\/)|else\\b(?!\\/)|esac\\b(?!\\/)|then\\b(?!\\/)|for\\b(?!\\/)|end\\b(?!\\/)|in\\b(?!\\/)|fi\\b(?!\\/)|do\\b(?!\\/)|if\\b(?!\\/))(?!\\\\\\n?$)",
1363
+ "end": "(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?<!\\\\)",
1364
+ "beginCaptures": {},
1365
+ "endCaptures": {},
1366
+ "name": "meta.statement.command.shell",
1367
+ "patterns": [
1368
+ {
1369
+ "begin": "\\G",
1370
+ "end": "(?= |\\t|;|\\||&|$|\\n|\\)|\\`)",
1371
+ "beginCaptures": {},
1372
+ "endCaptures": {},
1373
+ "name": "meta.statement.command.name.shell",
1374
+ "patterns": [
1375
+ {
1376
+ "include": "#modifiers"
1377
+ },
1378
+ {
1379
+ "match": "(?<!\\w)(?:continue|return|break)(?!\\w)",
1380
+ "name": "entity.name.function.call.shell entity.name.command.shell keyword.control.$0.shell"
1381
+ },
1382
+ {
1383
+ "match": "(?<!\\w)(?:unfunction|continue|autoload|unsetopt|bindkey|builtin|getopts|command|declare|unalias|history|unlimit|typeset|suspend|source|printf|unhash|disown|ulimit|return|which|alias|break|false|print|shift|times|umask|umask|unset|read|type|exec|eval|wait|echo|dirs|jobs|kill|hash|stat|exit|test|trap|true|let|set|pwd|cd|fg|bg|fc|:|\\.)(?!\\/)(?!\\w)",
1384
+ "name": "entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell"
1385
+ },
1386
+ {
1387
+ "include": "#variable"
1388
+ },
1389
+ {
1390
+ "match": "(?<=\\G|'|\"|\\}|\\))([^ \\n\\t\\r\"'=;&\\|`\\)\\{]+)",
1391
+ "captures": {
1392
+ "1": {
1393
+ "name": "entity.name.function.call.shell entity.name.command.shell"
1394
+ }
1395
+ }
1396
+ },
1397
+ {
1398
+ "begin": "(?:\\G|(?<! |\\t|;|\\||&|\\n|\\{|#))((?:\\$)?)((?:(\")|(')))",
1399
+ "end": "(?<!\\G)(?<=(?:\\2))",
1400
+ "beginCaptures": {
1401
+ "1": {
1402
+ "name": "meta.statement.command.name.quoted.shell punctuation.definition.string.shell entity.name.function.call.shell entity.name.command.shell"
1403
+ },
1404
+ "2": {},
1405
+ "3": {
1406
+ "name": "meta.statement.command.name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell"
1407
+ },
1408
+ "4": {
1409
+ "name": "meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell"
1410
+ }
1411
+ },
1412
+ "endCaptures": {},
1413
+ "patterns": [
1414
+ {
1415
+ "include": "#continuation_of_single_quoted_command_name"
1416
+ },
1417
+ {
1418
+ "include": "#continuation_of_double_quoted_command_name"
1419
+ }
1420
+ ]
1421
+ },
1422
+ {
1423
+ "include": "#line_continuation"
1424
+ }
1425
+ ]
1426
+ },
1427
+ {
1428
+ "include": "#line_continuation"
1429
+ },
1430
+ {
1431
+ "include": "#option"
1432
+ },
1433
+ {
1434
+ "include": "#argument"
1435
+ },
1436
+ {
1437
+ "include": "#statement_context"
1438
+ },
1439
+ {
1440
+ "include": "#string"
1441
+ }
1442
+ ]
1443
+ },
1444
+ {
1445
+ "include": "#line_continuation"
1446
+ },
1447
+ {
1448
+ "include": "#normal_statement_context"
1449
+ }
1450
+ ]
1451
+ },
1452
+ "normal_statement_context": {
1453
+ "patterns": [
1454
+ {
1455
+ "include": "#comment"
1456
+ },
1457
+ {
1458
+ "include": "#pipeline"
1459
+ },
1460
+ {
1461
+ "include": "#normal_statement_seperator"
1462
+ },
1463
+ {
1464
+ "include": "#misc_ranges"
1465
+ },
1466
+ {
1467
+ "include": "#boolean"
1468
+ },
1469
+ {
1470
+ "include": "#redirect_number"
1471
+ },
1472
+ {
1473
+ "include": "#numeric_literal"
1474
+ },
1475
+ {
1476
+ "include": "#string"
1477
+ },
1478
+ {
1479
+ "include": "#variable"
1480
+ },
1481
+ {
1482
+ "include": "#interpolation"
1483
+ },
1484
+ {
1485
+ "include": "#heredoc"
1486
+ },
1487
+ {
1488
+ "include": "#herestring"
1489
+ },
1490
+ {
1491
+ "include": "#redirection"
1492
+ },
1493
+ {
1494
+ "include": "#pathname"
1495
+ },
1496
+ {
1497
+ "include": "#keyword"
1498
+ },
1499
+ {
1500
+ "include": "#support"
1501
+ }
1502
+ ]
1503
+ },
1504
+ "normal_statement_seperator": {
1505
+ "match": "(?:(?:(?:(?:(;)|(&&))|(\\|\\|))|(&))|\\n)",
1506
+ "captures": {
1507
+ "1": {
1508
+ "name": "punctuation.terminator.statement.semicolon.shell"
1509
+ },
1510
+ "2": {
1511
+ "name": "punctuation.separator.statement.and.shell"
1512
+ },
1513
+ "3": {
1514
+ "name": "punctuation.separator.statement.or.shell"
1515
+ },
1516
+ "4": {
1517
+ "name": "punctuation.separator.statement.background.shell"
1518
+ }
1519
+ }
1520
+ },
1521
+ "numeric_literal": {
1522
+ "match": "[ \\t]*+(?<==| |\\t|^|\\{|\\(|\\[)(?:(?:(?:(?:(0[xX][0-9A-Fa-f]+)|(0\\d+))|(\\d{1,2}#[0-9a-zA-Z@_]+))|(-?\\d+\\.\\d+))|(-?\\d+))(?!>)",
1523
+ "captures": {
1524
+ "1": {
1525
+ "name": "constant.numeric.shell constant.numeric.hex.shell"
1526
+ },
1527
+ "2": {
1528
+ "name": "constant.numeric.shell constant.numeric.octal.shell"
1529
+ },
1530
+ "3": {
1531
+ "name": "constant.numeric.shell constant.numeric.other.shell"
1532
+ },
1533
+ "4": {
1534
+ "name": "constant.numeric.shell constant.numeric.integer.shell"
1535
+ },
1536
+ "5": {
1537
+ "name": "constant.numeric.shell constant.numeric.integer.shell"
1538
+ }
1539
+ }
1540
+ },
1541
+ "option": {
1542
+ "begin": "[ \\t]++(-)((?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t])))",
1543
+ "end": "(?:(?=[ \\t])|(?=;|\\||&|\\n|\\)|\\`|\\{|\\}|[ \\t]*#|\\])(?<!\\\\))",
1544
+ "beginCaptures": {
1545
+ "1": {
1546
+ "name": "string.unquoted.argument.shell constant.other.option.dash.shell"
1547
+ },
1548
+ "2": {
1549
+ "name": "string.unquoted.argument.shell constant.other.option.shell"
1550
+ }
1551
+ },
1552
+ "endCaptures": {},
1553
+ "contentName": "string.unquoted.argument constant.other.option",
1554
+ "patterns": [
1555
+ {
1556
+ "include": "#option_context"
1557
+ }
1558
+ ]
1559
+ },
1560
+ "option_context": {
1561
+ "patterns": [
1562
+ {
1563
+ "include": "#misc_ranges"
1564
+ },
1565
+ {
1566
+ "include": "#string"
1567
+ },
1568
+ {
1569
+ "include": "#variable"
1570
+ },
1571
+ {
1572
+ "include": "#interpolation"
1573
+ },
1574
+ {
1575
+ "include": "#heredoc"
1576
+ },
1577
+ {
1578
+ "include": "#herestring"
1579
+ },
1580
+ {
1581
+ "include": "#redirection"
1582
+ },
1583
+ {
1584
+ "include": "#pathname"
1585
+ },
1586
+ {
1587
+ "include": "#keyword"
1588
+ },
1589
+ {
1590
+ "include": "#support"
1591
+ }
1592
+ ]
1593
+ },
1594
+ "pathname": {
1595
+ "patterns": [
1596
+ {
1597
+ "match": "(?<=\\s|:|=|^)~",
1598
+ "name": "keyword.operator.tilde.shell"
1599
+ },
1600
+ {
1601
+ "match": "\\*|\\?",
1602
+ "name": "keyword.operator.glob.shell"
1603
+ },
1604
+ {
1605
+ "begin": "([?*+@!])(\\()",
1606
+ "beginCaptures": {
1607
+ "1": {
1608
+ "name": "keyword.operator.extglob.shell"
1609
+ },
1610
+ "2": {
1611
+ "name": "punctuation.definition.extglob.shell"
1612
+ }
1613
+ },
1614
+ "end": "\\)",
1615
+ "endCaptures": {
1616
+ "0": {
1617
+ "name": "punctuation.definition.extglob.shell"
1618
+ }
1619
+ },
1620
+ "name": "meta.structure.extglob.shell",
1621
+ "patterns": [
1622
+ {
1623
+ "include": "#initial_context"
1624
+ }
1625
+ ]
1626
+ }
1627
+ ]
1628
+ },
1629
+ "pipeline": {
1630
+ "patterns": [
1631
+ {
1632
+ "match": "(?<=^|;|&|\\s)(time)(?=\\s|;|&|$)",
1633
+ "name": "keyword.other.shell"
1634
+ },
1635
+ {
1636
+ "match": "[|!]",
1637
+ "name": "keyword.operator.pipe.shell"
1638
+ }
1639
+ ]
1640
+ },
1641
+ "redirect_number": {
1642
+ "match": "(?<=[ \\t])(?:(1)|(2)|(\\d+))(?=>)",
1643
+ "captures": {
1644
+ "1": {
1645
+ "name": "keyword.operator.redirect.stdout.shell"
1646
+ },
1647
+ "2": {
1648
+ "name": "keyword.operator.redirect.stderr.shell"
1649
+ },
1650
+ "3": {
1651
+ "name": "keyword.operator.redirect.$3.shell"
1652
+ }
1653
+ }
1654
+ },
1655
+ "redirection": {
1656
+ "patterns": [
1657
+ {
1658
+ "begin": "[><]\\(",
1659
+ "beginCaptures": {
1660
+ "0": {
1661
+ "name": "punctuation.definition.string.begin.shell"
1662
+ }
1663
+ },
1664
+ "end": "\\)",
1665
+ "endCaptures": {
1666
+ "0": {
1667
+ "name": "punctuation.definition.string.end.shell"
1668
+ }
1669
+ },
1670
+ "name": "string.interpolated.process-substitution.shell",
1671
+ "patterns": [
1672
+ {
1673
+ "include": "#initial_context"
1674
+ }
1675
+ ]
1676
+ },
1677
+ {
1678
+ "match": "(?<![<>])(&>|\\d*>&\\d*|\\d*(>>|>|<)|\\d*<&|\\d*<>)(?![<>])",
1679
+ "name": "keyword.operator.redirect.shell"
1680
+ }
1681
+ ]
1682
+ },
1683
+ "regex_comparison": {
1684
+ "match": "\\=~",
1685
+ "name": "keyword.operator.logical.regex.shell"
1686
+ },
1687
+ "regexp": {
1688
+ "patterns": [
1689
+ {
1690
+ "match": ".+"
1691
+ }
1692
+ ]
1693
+ },
1694
+ "simple_options": {
1695
+ "match": "(?:[ \\t]++\\-\\w+)*",
1696
+ "captures": {
1697
+ "0": {
1698
+ "patterns": [
1699
+ {
1700
+ "match": "[ \\t]++(\\-)(\\w+)",
1701
+ "captures": {
1702
+ "1": {
1703
+ "name": "string.unquoted.argument.shell constant.other.option.dash.shell"
1704
+ },
1705
+ "2": {
1706
+ "name": "string.unquoted.argument.shell constant.other.option.shell"
1707
+ }
1708
+ }
1709
+ }
1710
+ ]
1711
+ }
1712
+ }
1713
+ },
1714
+ "start_of_command": {
1715
+ "match": "[ \\t]*+(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?!foreach\\b(?!\\/)|select\\b(?!\\/)|repeat\\b(?!\\/)|until\\b(?!\\/)|while\\b(?!\\/)|case\\b(?!\\/)|done\\b(?!\\/)|elif\\b(?!\\/)|else\\b(?!\\/)|esac\\b(?!\\/)|then\\b(?!\\/)|for\\b(?!\\/)|end\\b(?!\\/)|in\\b(?!\\/)|fi\\b(?!\\/)|do\\b(?!\\/)|if\\b(?!\\/))(?!\\\\\\n?$)"
1716
+ },
1717
+ "start_of_double_quoted_command_name": {
1718
+ "match": "(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?:[ \\t]*+([^ \t\n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$\")|\")",
1719
+ "captures": {
1720
+ "1": {
1721
+ "name": "entity.name.function.call.shell entity.name.command.shell",
1722
+ "patterns": [
1723
+ {
1724
+ "match": "\\*",
1725
+ "name": "variable.language.special.wildcard.shell"
1726
+ },
1727
+ {
1728
+ "include": "#variable"
1729
+ },
1730
+ {
1731
+ "include": "#numeric_literal"
1732
+ },
1733
+ {
1734
+ "match": "(?<!\\w)(\\b(?:true|false)\\b)(?!\\w)",
1735
+ "captures": {
1736
+ "1": {
1737
+ "name": "constant.language.$1.shell"
1738
+ }
1739
+ }
1740
+ }
1741
+ ]
1742
+ }
1743
+ },
1744
+ "name": "meta.statement.command.name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell"
1745
+ },
1746
+ "start_of_single_quoted_command_name": {
1747
+ "match": "(?!(?:!|&|\\||\\(|\\)|\\{|\\[|<|>|#|\\n|$|;|[ \\t]))(?:[ \\t]*+([^ \t\n'&;<>\\(\\)\\$`\\\\\"\\|]+(?!>)))?(?:(?:\\$')|')",
1748
+ "captures": {
1749
+ "1": {
1750
+ "name": "entity.name.function.call.shell entity.name.command.shell",
1751
+ "patterns": [
1752
+ {
1753
+ "match": "\\*",
1754
+ "name": "variable.language.special.wildcard.shell"
1755
+ },
1756
+ {
1757
+ "include": "#variable"
1758
+ },
1759
+ {
1760
+ "include": "#numeric_literal"
1761
+ },
1762
+ {
1763
+ "match": "(?<!\\w)(\\b(?:true|false)\\b)(?!\\w)",
1764
+ "captures": {
1765
+ "1": {
1766
+ "name": "constant.language.$1.shell"
1767
+ }
1768
+ }
1769
+ }
1770
+ ]
1771
+ }
1772
+ },
1773
+ "name": "meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell"
1774
+ },
1775
+ "string": {
1776
+ "patterns": [
1777
+ {
1778
+ "match": "\\\\.",
1779
+ "name": "constant.character.escape.shell"
1780
+ },
1781
+ {
1782
+ "begin": "'",
1783
+ "end": "'",
1784
+ "beginCaptures": {
1785
+ "0": {
1786
+ "name": "punctuation.definition.string.begin.shell"
1787
+ }
1788
+ },
1789
+ "endCaptures": {
1790
+ "0": {
1791
+ "name": "punctuation.definition.string.end.shell"
1792
+ }
1793
+ },
1794
+ "name": "string.quoted.single.shell"
1795
+ },
1796
+ {
1797
+ "begin": "\\$?\"",
1798
+ "end": "\"",
1799
+ "beginCaptures": {
1800
+ "0": {
1801
+ "name": "punctuation.definition.string.begin.shell"
1802
+ }
1803
+ },
1804
+ "endCaptures": {
1805
+ "0": {
1806
+ "name": "punctuation.definition.string.end.shell"
1807
+ }
1808
+ },
1809
+ "name": "string.quoted.double.shell",
1810
+ "patterns": [
1811
+ {
1812
+ "match": "\\\\[\\$\\n`\"\\\\]",
1813
+ "name": "constant.character.escape.shell"
1814
+ },
1815
+ {
1816
+ "include": "#variable"
1817
+ },
1818
+ {
1819
+ "include": "#interpolation"
1820
+ }
1821
+ ]
1822
+ },
1823
+ {
1824
+ "begin": "\\$'",
1825
+ "end": "'",
1826
+ "beginCaptures": {
1827
+ "0": {
1828
+ "name": "punctuation.definition.string.begin.shell"
1829
+ }
1830
+ },
1831
+ "endCaptures": {
1832
+ "0": {
1833
+ "name": "punctuation.definition.string.end.shell"
1834
+ }
1835
+ },
1836
+ "name": "string.quoted.single.dollar.shell",
1837
+ "patterns": [
1838
+ {
1839
+ "match": "\\\\(?:a|b|e|f|n|r|t|v|\\\\|')",
1840
+ "name": "constant.character.escape.ansi-c.shell"
1841
+ },
1842
+ {
1843
+ "match": "\\\\[0-9]{3}\"",
1844
+ "name": "constant.character.escape.octal.shell"
1845
+ },
1846
+ {
1847
+ "match": "\\\\x[0-9a-fA-F]{2}\"",
1848
+ "name": "constant.character.escape.hex.shell"
1849
+ },
1850
+ {
1851
+ "match": "\\\\c.\"",
1852
+ "name": "constant.character.escape.control-char.shell"
1853
+ }
1854
+ ]
1855
+ }
1856
+ ]
1857
+ },
1858
+ "support": {
1859
+ "patterns": [
1860
+ {
1861
+ "match": "(?<=^|;|&|\\s)(?::|\\.)(?=\\s|;|&|$)",
1862
+ "name": "support.function.builtin.shell"
1863
+ }
1864
+ ]
1865
+ },
1866
+ "variable": {
1867
+ "patterns": [
1868
+ {
1869
+ "match": "(\\$)(\\@(?!\\w))",
1870
+ "captures": {
1871
+ "1": {
1872
+ "name": "punctuation.definition.variable.shell variable.parameter.positional.all.shell"
1873
+ },
1874
+ "2": {
1875
+ "name": "variable.parameter.positional.all.shell"
1876
+ }
1877
+ }
1878
+ },
1879
+ {
1880
+ "match": "(\\$)([0-9](?!\\w))",
1881
+ "captures": {
1882
+ "1": {
1883
+ "name": "punctuation.definition.variable.shell variable.parameter.positional.shell"
1884
+ },
1885
+ "2": {
1886
+ "name": "variable.parameter.positional.shell"
1887
+ }
1888
+ }
1889
+ },
1890
+ {
1891
+ "match": "(\\$)([-*#?$!0_](?!\\w))",
1892
+ "captures": {
1893
+ "1": {
1894
+ "name": "punctuation.definition.variable.shell variable.language.special.shell"
1895
+ },
1896
+ "2": {
1897
+ "name": "variable.language.special.shell"
1898
+ }
1899
+ }
1900
+ },
1901
+ {
1902
+ "begin": "(\\$)(\\{)[ \\t]*+(?=\\d)",
1903
+ "end": "\\}",
1904
+ "beginCaptures": {
1905
+ "1": {
1906
+ "name": "punctuation.definition.variable.shell variable.parameter.positional.shell"
1907
+ },
1908
+ "2": {
1909
+ "name": "punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell variable.parameter.positional.shell"
1910
+ }
1911
+ },
1912
+ "endCaptures": {
1913
+ "0": {
1914
+ "name": "punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell variable.parameter.positional.shell"
1915
+ }
1916
+ },
1917
+ "contentName": "meta.parameter-expansion",
1918
+ "patterns": [
1919
+ {
1920
+ "match": "!|:[-=?]?|\\*|@|##|#|%%|%|\\/",
1921
+ "name": "keyword.operator.expansion.shell"
1922
+ },
1923
+ {
1924
+ "match": "(\\[)[^\\]]+(\\])",
1925
+ "captures": {
1926
+ "1": {
1927
+ "name": "punctuation.section.array.shell"
1928
+ },
1929
+ "2": {
1930
+ "name": "punctuation.section.array.shell"
1931
+ }
1932
+ }
1933
+ },
1934
+ {
1935
+ "match": "[0-9]+",
1936
+ "name": "variable.parameter.positional.shell"
1937
+ },
1938
+ {
1939
+ "match": "(?<!\\w)[a-zA-Z_0-9-]+(?!\\w)",
1940
+ "name": "variable.other.normal.shell"
1941
+ },
1942
+ {
1943
+ "include": "#variable"
1944
+ },
1945
+ {
1946
+ "include": "#string"
1947
+ }
1948
+ ]
1949
+ },
1950
+ {
1951
+ "begin": "(\\$)(\\{)",
1952
+ "end": "\\}",
1953
+ "beginCaptures": {
1954
+ "1": {
1955
+ "name": "punctuation.definition.variable.shell"
1956
+ },
1957
+ "2": {
1958
+ "name": "punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell"
1959
+ }
1960
+ },
1961
+ "endCaptures": {
1962
+ "0": {
1963
+ "name": "punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell"
1964
+ }
1965
+ },
1966
+ "contentName": "meta.parameter-expansion",
1967
+ "patterns": [
1968
+ {
1969
+ "match": "!|:[-=?]?|\\*|@|##|#|%%|%|\\/",
1970
+ "name": "keyword.operator.expansion.shell"
1971
+ },
1972
+ {
1973
+ "match": "(\\[)[^\\]]+(\\])",
1974
+ "captures": {
1975
+ "1": {
1976
+ "name": "punctuation.section.array.shell"
1977
+ },
1978
+ "2": {
1979
+ "name": "punctuation.section.array.shell"
1980
+ }
1981
+ }
1982
+ },
1983
+ {
1984
+ "match": "(?<!\\w)[a-zA-Z_0-9-]+(?!\\w)",
1985
+ "name": "variable.other.normal.shell"
1986
+ },
1987
+ {
1988
+ "include": "#variable"
1989
+ },
1990
+ {
1991
+ "include": "#string"
1992
+ }
1993
+ ]
1994
+ },
1995
+ {
1996
+ "match": "(\\$)(\\w+(?!\\w))",
1997
+ "captures": {
1998
+ "1": {
1999
+ "name": "punctuation.definition.variable.shell variable.other.normal.shell"
2000
+ },
2001
+ "2": {
2002
+ "name": "variable.other.normal.shell"
2003
+ }
2004
+ }
2005
+ }
2006
+ ]
2007
+ }
2008
+ }
2009
+ }