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