github-linguist 4.8.8 → 4.8.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/grammars/hint.haskell.json +1123 -0
  3. data/grammars/hint.message.haskell.json +1147 -0
  4. data/grammars/hint.type.haskell.json +1120 -0
  5. data/grammars/source.asn.json +59 -0
  6. data/grammars/source.blitzmax.json +0 -2
  7. data/grammars/source.bsl.json +372 -0
  8. data/grammars/source.c++.json +67 -0
  9. data/grammars/source.c2hs.json +27 -0
  10. data/grammars/source.cabal.json +66 -0
  11. data/grammars/source.coffee.json +6 -5
  12. data/grammars/source.crystal.json +0 -11
  13. data/grammars/source.csound-score.json +3 -3
  14. data/grammars/source.csound.json +51 -15
  15. data/grammars/source.css.json +1 -1
  16. data/grammars/source.css.less.json +9 -5
  17. data/grammars/source.cython.json +42 -193
  18. data/grammars/source.d.json +7 -7
  19. data/grammars/source.elixir.json +2 -2
  20. data/grammars/source.forth.json +0 -2
  21. data/grammars/source.graphql.json +8 -2
  22. data/grammars/source.haskell.json +1089 -323
  23. data/grammars/source.hsc2hs.json +12 -0
  24. data/grammars/source.ideal.json +356 -0
  25. data/grammars/source.java.json +3 -0
  26. data/grammars/source.js.json +262 -131
  27. data/grammars/source.js.jsx.json +848 -256
  28. data/grammars/source.lsl.json +51 -103
  29. data/grammars/source.objc.json +1 -1
  30. data/grammars/source.parrot.pir.json +49 -15
  31. data/grammars/source.pic.json +868 -0
  32. data/grammars/source.purescript.json +114 -90
  33. data/grammars/source.python.json +11 -9
  34. data/grammars/source.regexp.babel.json +1 -1
  35. data/grammars/source.renpy.json +7 -7
  36. data/grammars/source.rexx.json +59 -0
  37. data/grammars/source.sas.json +8 -75
  38. data/grammars/source.sdbl.json +97 -0
  39. data/grammars/source.shell.json +1 -0
  40. data/grammars/source.smali.json +2 -2
  41. data/grammars/source.sqf.json +11 -11
  42. data/grammars/source.stan.json +60 -25
  43. data/grammars/source.tla.json +18 -6
  44. data/grammars/source.toc.json +5 -1
  45. data/grammars/source.ts.json +134 -31
  46. data/grammars/source.tsx.json +134 -31
  47. data/grammars/source.vhdl.json +150 -117
  48. data/grammars/source.viml.json +4 -4
  49. data/grammars/source.xquery.json +23 -5
  50. data/grammars/source.yaml.json +35 -19
  51. data/grammars/text.html.handlebars.json +2 -2
  52. data/grammars/text.html.php.blade.json +1 -1
  53. data/grammars/text.html.twig.json +1 -4
  54. data/grammars/text.html.vue.json +41 -1
  55. data/grammars/text.restructuredtext.json +56 -1
  56. data/grammars/text.roff.json +5089 -0
  57. data/grammars/text.runoff.json +321 -0
  58. data/grammars/text.slim.json +126 -105
  59. data/grammars/text.tex.latex.haskell.json +1335 -21
  60. data/lib/linguist/heuristics.rb +8 -0
  61. data/lib/linguist/languages.json +1 -1
  62. data/lib/linguist/languages.yml +58 -3
  63. data/lib/linguist/samples.json +5257 -76
  64. data/lib/linguist/version.rb +1 -1
  65. metadata +16 -4
  66. data/grammars/source.man.json +0 -53
  67. data/grammars/text.groff.json +0 -113
@@ -0,0 +1,12 @@
1
+ {
2
+ "fileTypes": [
3
+ "hsc"
4
+ ],
5
+ "name": "Hsc2Hs",
6
+ "scopeName": "source.hsc2hs",
7
+ "patterns": [
8
+ {
9
+ "include": "source.haskell"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,356 @@
1
+ {
2
+ "scopeName": "source.ideal",
3
+ "patterns": [
4
+ {
5
+ "include": "#external"
6
+ },
7
+ {
8
+ "include": "#main"
9
+ }
10
+ ],
11
+ "repository": {
12
+ "external": {
13
+ "patterns": [
14
+ {
15
+ "include": "source.pic#tags"
16
+ },
17
+ {
18
+ "begin": "^(?=[.'][ \t]*(?:\\w|\\\\))",
19
+ "end": "(?<!\\\\)$|(\\\\\".*)$",
20
+ "patterns": [
21
+ {
22
+ "include": "text.roff"
23
+ }
24
+ ],
25
+ "endCaptures": {
26
+ "1": {
27
+ "patterns": [
28
+ {
29
+ "include": "text.roff"
30
+ }
31
+ ]
32
+ }
33
+ }
34
+ }
35
+ ]
36
+ },
37
+ "tags": {
38
+ "begin": "^([.'])[ \t]*(IS)\\b\\s*(\\\\[\"#].*$)?",
39
+ "end": "^([.'])[ \t]*(IE)\\b",
40
+ "contentName": "source.embedded.ideal",
41
+ "patterns": [
42
+ {
43
+ "include": "$self"
44
+ }
45
+ ],
46
+ "beginCaptures": {
47
+ "0": {
48
+ "name": "meta.function.begin.ideal.section.macro.roff"
49
+ },
50
+ "1": {
51
+ "name": "punctuation.definition.macro.roff"
52
+ },
53
+ "2": {
54
+ "name": "entity.function.name.roff"
55
+ },
56
+ "3": {
57
+ "patterns": [
58
+ {
59
+ "include": "text.roff#escapes"
60
+ }
61
+ ]
62
+ }
63
+ },
64
+ "endCaptures": {
65
+ "0": {
66
+ "name": "meta.function.end.ideal.section.macro.roff"
67
+ },
68
+ "1": {
69
+ "name": "punctuation.definition.macro.roff"
70
+ },
71
+ "2": {
72
+ "name": "entity.function.name.roff"
73
+ }
74
+ }
75
+ },
76
+ "main": {
77
+ "patterns": [
78
+ {
79
+ "include": "#comment"
80
+ },
81
+ {
82
+ "include": "#strings"
83
+ },
84
+ {
85
+ "include": "#number"
86
+ },
87
+ {
88
+ "include": "#libfile"
89
+ },
90
+ {
91
+ "include": "#variables"
92
+ },
93
+ {
94
+ "include": "#box"
95
+ },
96
+ {
97
+ "include": "#function-call"
98
+ },
99
+ {
100
+ "include": "#keywords"
101
+ },
102
+ {
103
+ "include": "#operators"
104
+ },
105
+ {
106
+ "include": "#punctuation"
107
+ }
108
+ ]
109
+ },
110
+ "box": {
111
+ "begin": "(\\w+)[ \t]*(\\{)",
112
+ "end": "\\}",
113
+ "beginCaptures": {
114
+ "0": {
115
+ "name": "meta.box.definition.ideal"
116
+ },
117
+ "1": {
118
+ "name": "entity.function.box.name.ideal"
119
+ },
120
+ "2": {
121
+ "name": "punctuation.definition.bracket.curly.ideal"
122
+ }
123
+ },
124
+ "endCaptures": {
125
+ "0": {
126
+ "name": "punctuation.definition.bracket.curly.ideal"
127
+ }
128
+ },
129
+ "patterns": [
130
+ {
131
+ "include": "$self"
132
+ }
133
+ ]
134
+ },
135
+ "comment": {
136
+ "name": "comment.block.ideal",
137
+ "begin": "/\\*",
138
+ "end": "\\*/"
139
+ },
140
+ "function-call": {
141
+ "name": "meta.function-call.ideal",
142
+ "begin": "(\\w+)(\\()",
143
+ "end": "(?=\\))",
144
+ "beginCaptures": {
145
+ "1": {
146
+ "name": "entity.function.name.ideal"
147
+ },
148
+ "2": {
149
+ "name": "punctuation.definition.bracket.round.ideal"
150
+ }
151
+ },
152
+ "patterns": [
153
+ {
154
+ "include": "$self"
155
+ }
156
+ ]
157
+ },
158
+ "libfile": {
159
+ "name": "meta.libfile.include.ideal",
160
+ "match": "((\\.{3})libfile)\\b",
161
+ "captures": {
162
+ "1": {
163
+ "name": "keyword.control.directive.include.ideal"
164
+ },
165
+ "2": {
166
+ "name": "punctuation.definition.directive.include.ideal"
167
+ }
168
+ }
169
+ },
170
+ "keywords": {
171
+ "patterns": [
172
+ {
173
+ "name": "keyword.operator.$1.ideal",
174
+ "match": "\\b(at|box|conn|construct|to|put|using|opaque(?:\\s+exterior)?)\\b(?:\\s+(?:\\w+)\\s*(:)\\s*?)?",
175
+ "captures": {
176
+ "2": {
177
+ "name": "punctuation.separator.dictionary.key-value.ideal"
178
+ }
179
+ }
180
+ },
181
+ {
182
+ "name": "entity.function.box.name.ideal",
183
+ "match": "\\b(left|right|spline)\\b"
184
+ }
185
+ ]
186
+ },
187
+ "number": {
188
+ "name": "constant.numeric.ideal",
189
+ "match": "(?<![A-Za-z])\\d+(?:\\.\\d+)?"
190
+ },
191
+ "operators": {
192
+ "patterns": [
193
+ {
194
+ "name": "keyword.operator.assignment.ideal",
195
+ "match": "="
196
+ },
197
+ {
198
+ "name": "keyword.operator.arithmetic.ideal",
199
+ "match": "[-+*/~]"
200
+ }
201
+ ]
202
+ },
203
+ "punctuation": {
204
+ "patterns": [
205
+ {
206
+ "name": "punctuation.delimiter.full-stop.period.ideal",
207
+ "match": "\\."
208
+ },
209
+ {
210
+ "name": "punctuation.delimiter.object.comma.ideal",
211
+ "match": ","
212
+ },
213
+ {
214
+ "name": "punctuation.terminator.statement.ideal",
215
+ "match": ";"
216
+ },
217
+ {
218
+ "name": "punctuation.definition.bracket.round.ideal",
219
+ "match": "\\)"
220
+ },
221
+ {
222
+ "name": "punctuation.definition.bracket.square.ideal",
223
+ "match": "\\]"
224
+ },
225
+ {
226
+ "name": "punctuation.definition.bracket.curly.ideal",
227
+ "match": "\\}"
228
+ },
229
+ {
230
+ "begin": "\\(",
231
+ "end": "\\)",
232
+ "beginCaptures": {
233
+ "0": {
234
+ "name": "punctuation.definition.bracket.round.ideal"
235
+ }
236
+ },
237
+ "endCaptures": {
238
+ "0": {
239
+ "name": "punctuation.definition.bracket.round.ideal"
240
+ }
241
+ },
242
+ "patterns": [
243
+ {
244
+ "include": "$self"
245
+ }
246
+ ]
247
+ },
248
+ {
249
+ "begin": "\\[",
250
+ "end": "\\]",
251
+ "beginCaptures": {
252
+ "0": {
253
+ "name": "punctuation.definition.bracket.square.ideal"
254
+ }
255
+ },
256
+ "endCaptures": {
257
+ "0": {
258
+ "name": "punctuation.definition.bracket.square.ideal"
259
+ }
260
+ },
261
+ "patterns": [
262
+ {
263
+ "include": "$self"
264
+ }
265
+ ]
266
+ },
267
+ {
268
+ "begin": "\\{",
269
+ "end": "\\}",
270
+ "beginCaptures": {
271
+ "0": {
272
+ "name": "punctuation.definition.bracket.curly.ideal"
273
+ }
274
+ },
275
+ "endCaptures": {
276
+ "0": {
277
+ "name": "punctuation.definition.bracket.curly.ideal"
278
+ }
279
+ },
280
+ "patterns": [
281
+ {
282
+ "include": "$self"
283
+ }
284
+ ]
285
+ },
286
+ {
287
+ "begin": "<",
288
+ "end": ">",
289
+ "beginCaptures": {
290
+ "0": {
291
+ "name": "punctuation.definition.bracket.angle.ideal"
292
+ }
293
+ },
294
+ "endCaptures": {
295
+ "0": {
296
+ "name": "punctuation.definition.bracket.angle.ideal"
297
+ }
298
+ }
299
+ }
300
+ ]
301
+ },
302
+ "strings": {
303
+ "patterns": [
304
+ {
305
+ "name": "string.quoted.single.ideal",
306
+ "begin": "'",
307
+ "end": "'",
308
+ "beginCaptures": {
309
+ "0": {
310
+ "name": "punctuation.definition.string.begin.ideal"
311
+ }
312
+ },
313
+ "endCaptures": {
314
+ "0": {
315
+ "name": "punctuation.definition.string.end.ideal"
316
+ }
317
+ }
318
+ },
319
+ {
320
+ "name": "string.quoted.double.ideal",
321
+ "begin": "\"",
322
+ "end": "\"",
323
+ "beginCaptures": {
324
+ "0": {
325
+ "name": "punctuation.definition.string.begin.ideal"
326
+ }
327
+ },
328
+ "endCaptures": {
329
+ "0": {
330
+ "name": "punctuation.definition.string.end.ideal"
331
+ }
332
+ },
333
+ "patterns": [
334
+ {
335
+ "include": "#escapes"
336
+ }
337
+ ]
338
+ }
339
+ ]
340
+ },
341
+ "variables": {
342
+ "begin": "\\b(var)\\b",
343
+ "end": "(?=;)",
344
+ "patterns": [
345
+ {
346
+ "include": "#punctuation"
347
+ }
348
+ ],
349
+ "beginCaptures": {
350
+ "1": {
351
+ "name": "storage.type.var.ideal"
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
@@ -423,6 +423,9 @@
423
423
  {
424
424
  "include": "#anonymous-classes-and-new"
425
425
  },
426
+ {
427
+ "include": "#annotations"
428
+ },
426
429
  {
427
430
  "include": "#keywords"
428
431
  },
@@ -21,16 +21,16 @@
21
21
  "name": "JavaScript",
22
22
  "patterns": [
23
23
  {
24
- "comment": "ES6 import",
25
24
  "begin": "(?<!\\.)\\b(import)(?!\\s*:)\\b",
26
25
  "beginCaptures": {
27
26
  "1": {
28
27
  "name": "keyword.control.js"
29
28
  }
30
29
  },
30
+ "end": "(?=;|$)",
31
+ "name": "meta.import.js",
31
32
  "patterns": [
32
33
  {
33
- "comment": "{ member1 , member2 as alias2 , [...] }",
34
34
  "begin": "\\{",
35
35
  "beginCaptures": {
36
36
  "0": {
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "patterns": [
47
47
  {
48
- "comment": "(default|name) as alias",
48
+ "match": "(?x)\n(?: \\b(default)\\b | \\b([a-zA-Z_$][\\w$]*)\\b)\n\\s*\n(\\b as \\b)\n\\s*\n(?: (\\b default \\b | \\*) | \\b([a-zA-Z_$][\\w$]*)\\b)",
49
49
  "captures": {
50
50
  "1": {
51
51
  "name": "variable.language.default.js"
@@ -62,8 +62,7 @@
62
62
  "5": {
63
63
  "name": "variable.other.module-alias.js"
64
64
  }
65
- },
66
- "match": "(?x) (?: \\b(default)\\b | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b) \\s* (\\b as \\b) \\s* (?: (\\b default \\b | \\*) | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b)"
65
+ }
67
66
  },
68
67
  {
69
68
  "match": ",",
@@ -73,13 +72,13 @@
73
72
  "include": "#comments"
74
73
  },
75
74
  {
76
- "match": "\\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b",
75
+ "match": "\\b([a-zA-Z_$][\\w$]*)\\b",
77
76
  "name": "variable.other.module.js"
78
77
  }
79
78
  ]
80
79
  },
81
80
  {
82
- "comment": "(default|*|name) as alias",
81
+ "match": "(?x)\n(?: \\b(default)\\b | (\\*) | \\b([a-zA-Z_$][\\w$]*)\\b)\n\\s*\n(\\b as \\b)\n\\s*\n(?: (\\b default \\b | \\*) | \\b([a-zA-Z_$][\\w$]*)\\b)",
83
82
  "captures": {
84
83
  "1": {
85
84
  "name": "variable.language.default.js"
@@ -99,8 +98,7 @@
99
98
  "6": {
100
99
  "name": "variable.other.module-alias.js"
101
100
  }
102
- },
103
- "match": "(?x) (?: \\b(default)\\b | (\\*) | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b) \\s* (\\b as \\b) \\s* (?: (\\b default \\b | \\*) | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b)"
101
+ }
104
102
  },
105
103
  {
106
104
  "match": "\\*",
@@ -121,20 +119,17 @@
121
119
  "name": "keyword.control.js"
122
120
  },
123
121
  {
124
- "match": "\\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b(?=.*\\bfrom\\b)",
122
+ "match": "\\b([a-zA-Z_$][\\w$]*)\\b(?=.*\\bfrom\\b)",
125
123
  "name": "variable.other.module.js"
126
124
  },
127
125
  {
128
126
  "match": ",",
129
127
  "name": "meta.delimiter.object.comma.js"
130
128
  }
131
- ],
132
- "end": "(?=;|$)",
133
- "name": "meta.import.js"
129
+ ]
134
130
  },
135
131
  {
136
- "comment": "ES6 export: `export default (variable|class|function, etc.)`",
137
- "match": "(?x) \\b(export)\\b \\s* \\b(default)\\b (?:\\s*) \\b((?!\\bfunction\\b|\\bclass\\b|\\blet\\b|\\bvar\\b|\\bconst\\b)[a-zA-Z_$][a-zA-Z_$0-9]*)?\\b",
132
+ "match": "(?x)\n\\b(export)\\b\\s*\n\\b(default)\\b\\s*\n\\b((?!\\b(?:function|class|let|var|const)\\b)[a-zA-Z_$][\\w$]*)?\\b",
138
133
  "captures": {
139
134
  "0": {
140
135
  "name": "meta.export.js"
@@ -151,19 +146,19 @@
151
146
  }
152
147
  },
153
148
  {
154
- "comment": "ES6 export, re-export: `export {member as alias, [...]} [from ...]`",
155
149
  "begin": "(?<!\\.)\\b(export)(?!\\s*:)\\b",
156
150
  "beginCaptures": {
157
151
  "1": {
158
152
  "name": "keyword.control.js"
159
153
  }
160
154
  },
155
+ "end": "(?=;|\\bfunction\\b|\\bclass\\b|\\blet\\b|\\bvar\\b|\\bconst\\b|$)",
156
+ "name": "meta.export.js",
161
157
  "patterns": [
162
158
  {
163
159
  "include": "#numbers"
164
160
  },
165
161
  {
166
- "comment": "`{ member1 , member2 as alias2 , [...] }` inside re-export",
167
162
  "begin": "\\{(?=.*\\bfrom\\b)",
168
163
  "beginCaptures": {
169
164
  "0": {
@@ -178,7 +173,7 @@
178
173
  },
179
174
  "patterns": [
180
175
  {
181
- "comment": "(default|name) as alias",
176
+ "match": "(?x)\n(?: \\b(default)\\b | \\b([a-zA-Z_$][\\w$]*)\\b)\n\\s*\n(\\b as \\b)\n\\s*\n(?: \\b(default)\\b | (\\*) | \\b([a-zA-Z_$][\\w$]*)\\b)",
182
177
  "captures": {
183
178
  "1": {
184
179
  "name": "variable.language.default.js"
@@ -198,8 +193,7 @@
198
193
  "6": {
199
194
  "name": "variable.other.module-alias.js"
200
195
  }
201
- },
202
- "match": "(?x) (?: \\b(default)\\b | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b) \\s* (\\b as \\b) \\s* (?: \\b(default)\\b | (\\*) | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b)"
196
+ }
203
197
  },
204
198
  {
205
199
  "match": ",",
@@ -209,13 +203,12 @@
209
203
  "include": "#comments"
210
204
  },
211
205
  {
212
- "match": "\\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b",
206
+ "match": "\\b([a-zA-Z_$][\\w$]*)\\b",
213
207
  "name": "variable.other.module.js"
214
208
  }
215
209
  ]
216
210
  },
217
211
  {
218
- "comment": "{ member1 , member2 as alias2 , [...] }",
219
212
  "begin": "(?![a-zA-Z_$0-9])\\{",
220
213
  "beginCaptures": {
221
214
  "0": {
@@ -230,7 +223,6 @@
230
223
  },
231
224
  "patterns": [
232
225
  {
233
- "comment": "name as (default|alias)",
234
226
  "captures": {
235
227
  "1": {
236
228
  "name": "invalid.illegal.js"
@@ -251,7 +243,7 @@
251
243
  "name": "variable.other.module-alias.js"
252
244
  }
253
245
  },
254
- "match": "(?x) (?: \\b(default)\\b | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b) \\s* (\\b as \\b) \\s* (?: \\b(default)\\b | (\\*) | \\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b)"
246
+ "match": "(?x)\n(?: \\b(default)\\b | \\b([a-zA-Z_$][\\w$]*)\\b)\n\\s*\n(\\b as \\b)\n\\s*\n(?: \\b(default)\\b | (\\*) | \\b([a-zA-Z_$][\\w$]*)\\b)"
255
247
  },
256
248
  {
257
249
  "include": "#comments"
@@ -261,7 +253,7 @@
261
253
  "name": "meta.delimiter.object.comma.js"
262
254
  },
263
255
  {
264
- "match": "\\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b",
256
+ "match": "\\b([a-zA-Z_$][\\w$]*)\\b",
265
257
  "name": "variable.other.module.js"
266
258
  }
267
259
  ]
@@ -285,7 +277,7 @@
285
277
  "name": "keyword.control.js"
286
278
  },
287
279
  {
288
- "match": "\\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b",
280
+ "match": "\\b([a-zA-Z_$][\\w$]*)\\b",
289
281
  "name": "variable.other.module.js"
290
282
  },
291
283
  {
@@ -295,23 +287,14 @@
295
287
  {
296
288
  "include": "#operators"
297
289
  }
298
- ],
299
- "end": "(?=;|\\bfunction\\b|\\bclass\\b|\\blet\\b|\\bvar\\b|\\bconst\\b|$)",
300
- "name": "meta.export.js"
290
+ ]
301
291
  },
302
292
  {
303
- "match": "(?<!\\.)\\b(super|this|arguments)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(super|this|arguments)(?=\\s*:)",
304
- "captures": {
305
- "1": {
306
- "name": "variable.language.js"
307
- },
308
- "2": {
309
- "name": "variable.language.js"
310
- }
311
- }
293
+ "match": "(?<!\\.)\\b(?<!\\$)(super|this|arguments)(?!\\s*:|\\$)\\b",
294
+ "name": "variable.language.js"
312
295
  },
313
296
  {
314
- "begin": "(?=(\\basync\\b\\s*)?\\bfunction\\b)",
297
+ "begin": "(?=(\\basync\\b\\s*)?\\bfunction\\b(?!\\s*:))",
315
298
  "end": "(?<=})",
316
299
  "patterns": [
317
300
  {
@@ -456,7 +439,7 @@
456
439
  ]
457
440
  },
458
441
  {
459
- "begin": "(?=\\b(constructor)\\s*)",
442
+ "begin": "(?=\\bconstructor\\b\\s*)",
460
443
  "end": "(?<=})",
461
444
  "patterns": [
462
445
  {
@@ -567,7 +550,7 @@
567
550
  },
568
551
  {
569
552
  "begin": "(?x)\n(?=\n \\b[a-zA-Z_$][\\w$]*\n \\s*:\\s*\n ((\\(([^\\(\\)]*)?\\))|[\\w$]+)\n \\s*=>\n)",
570
- "end": "(?x)\n(?<=})|\n((?!\n \\s*{|\n \\G[\\w$]+:|\n \\s*/\\*|\\s*//\n)(?=\\s*\\S))",
553
+ "end": "(?x)\n(?<=})|\n((?!\n \\s*{|\n \\G[\\w$]+\\s*:|\n \\s*/\\*|\\s*//\n)(?=\\s*\\S))",
571
554
  "patterns": [
572
555
  {
573
556
  "include": "#comments"
@@ -688,16 +671,22 @@
688
671
  "name": "meta.class.js"
689
672
  },
690
673
  {
674
+ "match": "(new)\\s+([\\w$]+[\\w.$]*)",
675
+ "name": "meta.class.instance.constructor.js",
691
676
  "captures": {
692
677
  "1": {
693
678
  "name": "keyword.operator.new.js"
694
679
  },
695
680
  "2": {
696
- "name": "entity.name.type.instance.js"
681
+ "name": "entity.name.type.instance.js",
682
+ "patterns": [
683
+ {
684
+ "match": "\\.",
685
+ "name": "meta.delimiter.property.period.js"
686
+ }
687
+ ]
697
688
  }
698
- },
699
- "match": "(new)\\s+(\\$?\\w+(?:\\.\\w*)?)",
700
- "name": "meta.class.instance.constructor"
689
+ }
701
690
  },
702
691
  {
703
692
  "begin": "(?<![\\w$])console(?![\\w$]|\\s*:)",
@@ -781,6 +770,7 @@
781
770
  "include": "#comments"
782
771
  },
783
772
  {
773
+ "match": "(<!--|-->)",
784
774
  "captures": {
785
775
  "0": {
786
776
  "name": "punctuation.definition.comment.html.js"
@@ -789,7 +779,6 @@
789
779
  "name": "punctuation.definition.comment.html.js"
790
780
  }
791
781
  },
792
- "match": "(<!--|-->)",
793
782
  "name": "comment.block.html.js"
794
783
  },
795
784
  {
@@ -869,30 +858,23 @@
869
858
  ]
870
859
  },
871
860
  {
872
- "match": "(?<!\\.)\\b(yield)(?!\\s*:)\\b(?:\\s*(\\*))?|(?<=\\?)(?:\\s*)(yield)(?=\\s*:)",
861
+ "match": "(?<!\\.)\\b(yield)(?!\\s*:)\\b(?:\\s*(\\*))?",
873
862
  "captures": {
874
863
  "1": {
875
864
  "name": "keyword.control.js"
876
865
  },
877
866
  "2": {
878
867
  "name": "storage.modifier.js"
879
- },
880
- "3": {
881
- "name": "keyword.control.js"
882
- },
883
- "4": {
884
- "name": "storage.modifier.js"
885
868
  }
886
869
  },
887
870
  "name": "meta.control.yield.js"
888
871
  },
889
872
  {
890
- "match": "(?<!\\.)\\b(await|break|case|catch|continue|do|else|finally|for|if|import|from|package|return|switch|throw|try|while|with)(?!\\s*:)\\b",
873
+ "match": "(?<!\\.)\\b(await|break|catch|continue|do|else|finally|for|if|import|package|return|throw|try|while|with)(?!\\s*:)\\b",
891
874
  "name": "keyword.control.js"
892
875
  },
893
876
  {
894
- "match": "(?<!\\.)\\b(default)\\b",
895
- "name": "keyword.control.js"
877
+ "include": "#switch_statement"
896
878
  },
897
879
  {
898
880
  "match": "(?<!\\.)\\b(delete|in|of|instanceof|new|typeof|void)(?!\\s*:)\\b",
@@ -903,79 +885,64 @@
903
885
  "name": "keyword.operator.spread.js"
904
886
  },
905
887
  {
906
- "match": "(?<!\\.)\\b(true|false)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(true|false)(?=\\s*:)",
907
- "captures": {
908
- "1": {
909
- "name": "constant.language.boolean.$1.js"
910
- },
911
- "2": {
912
- "name": "constant.language.boolean.$2.js"
913
- }
914
- }
888
+ "match": "(?<!\\.)\\b(true|false)(?!\\s*:)\\b",
889
+ "name": "constant.language.boolean.$1.js"
915
890
  },
916
891
  {
917
- "match": "(?<!\\.)\\b(null)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(null)(?=\\s*:)",
918
- "captures": {
919
- "1": {
920
- "name": "constant.language.null.js"
921
- },
922
- "2": {
923
- "name": "constant.language.null.js"
924
- }
925
- }
892
+ "match": "(?<!\\.)\\b(null)(?!\\s*:)\\b",
893
+ "name": "constant.language.null.js"
926
894
  },
927
895
  {
928
- "match": "(?<!\\.)\\b(debugger)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(debugger)(?=\\s*:)",
929
- "captures": {
930
- "1": {
931
- "name": "keyword.other.js"
932
- },
933
- "2": {
934
- "name": "keyword.other.js"
935
- }
936
- }
896
+ "match": "(?<!\\.)\\b(debugger)(?!\\s*:)\\b",
897
+ "name": "keyword.other.debugger.js"
937
898
  },
938
899
  {
939
- "match": "(?<!\\$)\\b(Anchor|Applet|Area|Array|Boolean|Button|Checkbox|Date|document|event|FileUpload|Form|Frame|Function|Hidden|History|Image|JavaArray|JavaClass|JavaObject|JavaPackage|java|Layer|Link|Location|Map|MimeType|Number|navigator|netscape|Object|Option|Packages|Password|Plugin|performance|Radio|RegExp|Reset|Select|Set|String|Style|Submit|Symbol|screen|sun|Text|Textarea|WeakMap|WeakSet|window|XMLHttpRequest)\\b",
900
+ "match": "(?x) (?<!\\$) \\b\n(Array|ArrayBuffer|Atomics|Boolean|DataView|Date|Error|EvalError|Float32Array|Float64Array|Function|Generator\n|GeneratorFunction|Int16Array|Int32Array|Int8Array|InternalError|Intl|JSON|Map|Number|Object|Promise|Proxy\n|RangeError|ReferenceError|Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|SyntaxError|TypeError\n|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|URIError|WeakMap|WeakSet)\n\\b",
940
901
  "name": "support.class.js"
941
902
  },
942
903
  {
943
- "match": "(\\.)(systemLanguage|scripts|scrollbars|screenX|screenY|screenTop|screenLeft|style|styleSheets|status|statusText|statusbar|siblingBelow|siblingAbove|source|suffixes|security|securityPolicy|selection|self|history|host|hostname|hash|hasFocus|XMLDocument|XSLDocument|next|namespaces|namespaceURI|nameProp|MIN_VALUE|MAX_VALUE|characterSet|constructor|controllers|cookieEnabled|colorDepth|components|complete|current|cpuClass|clip|clipBoardData|clientInformation|closed|classes|callee|caller|crypto|toolbar|top|textTransform|textIndent|textDecoration|textAlign|tags|innerHeight|innerWidth|input|ids|ignoreCase|zIndex|oscpu|onreadystatechange|onLine|outerHeight|outerWidth|opsProfile|opener|offscreenBuffering|NEGATIVE_INFINITY|display|dialogHeight|dialogTop|dialogWidth|dialogLeft|dialogArguments|directories|description|defaultStatus|defaultChecked|defaultCharset|defaultView|userProfile|userLanguage|userAgent|uniqueID|undefined|updateInterval|_content|pixelDepth|port|personalbar|pkcs11|plugins|platform|pathname|paddingRight|paddingBottom|paddingTop|paddingLeft|parent|parentWindow|parentLayer|pageX|pageXOffset|pageY|pageYOffset|protocol|prototype|product|productSub|prompter|previous|prefix|encoding|enabledPlugin|external|expando|embeds|visiblity|vendor|vendorSub|vLinkcolor|URLUnencoded|POSITIVE_INFINITY|filename|fontSize|fontFamily|fontWeight|formName|frames|frameElement|fgColor|whiteSpace|listStyleType|lineHeight|linkColor|location|locationbar|localName|lowsrc|length|left|leftContext|lastModified|lastMatch|lastIndex|lastParen|layers|layerX|language|appMinorVersion|appName|appCodeName|appCore|appVersion|availHeight|availTop|availWidth|availLeft|all|arity|arguments|aLinkcolor|above|right|rightContext|responseXML|responeText|readyState|global|x|y|z|mimeTypes|multiline|menubar|marginRight|marginBottom|marginTop|marginLeft|bottom|border(Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth)|bufferDepth|below|backgroundColor|backgroundImage)\\b",
904
+ "match": "(?x) (\\.) \\s* (?:\n (constructor|length|prototype) |\n (EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\n)\\b",
944
905
  "captures": {
945
906
  "1": {
946
907
  "name": "meta.delimiter.property.period.js"
947
908
  },
948
909
  "2": {
910
+ "name": "support.variable.property.js"
911
+ },
912
+ "3": {
949
913
  "name": "support.constant.js"
950
914
  }
951
915
  }
952
916
  },
953
917
  {
954
- "match": "(\\.)(shape|systemId|scheme|scope|scrolling|standby|start|size|summary|specified|sectionRowIndex|selected|selectedIndex|hspace|httpEquiv|htmlFor|height|headers|href|hreflang|noResize|notations|notationName|noShade|noHref|nodeName|nodeType|nodeValue|noWrap|nextSibling|name|ch|childNodes|chOff|checked|charset|cite|content|cookie|cords|code|codeBase|codeType|cols|colSpan|color|compact|cells|cellSpacing|cellPadding|clear|className|caption|type|tBodies|title|tHead|text|target|tagName|tFoot|isMap|index|id|implementation|images|options|ownerDocument|object|disabled|dir|doctype|documentElement|docmain|declare|defer|defaultSelected|defaultChecked|defaultValue|dateTime|data|useMap|publicId|parentNode|profile|profileend|prompt|previousDibling|enctype|entities|event|elements|vspace|version|value|valueType|vLink|vAlign|URL|firstChild|form|forms|face|frame|frameBorder|width|link|links|longDesc|lowSrc|lastChild|lang|label|anchors|accessKey|accept|acceptCharset|action|attributes|applets|alt|align|archive|areas|axis|aLink|abbr|rows|rowSpan|rowIndex|rules|rev|referrer|rel|readOnly|multiple|method|media|marginHeight|marginWidth|maxLength|body|border|background|bgColor)\\b",
918
+ "match": "(?x) (?<!\\$) \\b (?:\n (document|event|navigator|performance|screen|window)\n |\n (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener\n |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule\n |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration\n |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern\n |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent\n |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException\n |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer\n |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry\n |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent\n |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential\n |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync\n |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement\n |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement\n |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement\n |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement\n |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement\n |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement\n |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement\n |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement\n |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement\n |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement\n |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement\n |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase\n |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction\n |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities\n |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess\n |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent\n |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream\n |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent\n |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID\n |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification\n |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential\n |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark\n |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList\n |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent\n |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList\n |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager\n |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource\n |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement\n |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength\n |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio\n |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement\n |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement\n |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement\n |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength\n |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement\n |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio\n |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList\n |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement\n |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement\n |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState\n |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet\n |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable\n |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer\n |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat\n |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES\n |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope\n |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult\n |XSLTProcessor)\n)\\b",
955
919
  "captures": {
956
920
  "1": {
957
- "name": "meta.delimiter.property.period.js"
921
+ "name": "support.variable.dom.js"
958
922
  },
959
923
  "2": {
960
- "name": "support.constant.dom.js"
924
+ "name": "support.class.dom.js"
961
925
  }
962
926
  }
963
927
  },
964
928
  {
965
- "match": "\\b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\\b",
966
- "name": "support.constant.dom.js"
967
- },
968
- {
969
- "match": "(?<!\\.)\\b(module|exports|__filename|__dirname|global|process)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(module|exports|__filename|__dirname|global|process)(?=\\s*:)",
929
+ "match": "(?x) (\\.) \\s*\n(?:\n (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n |\n (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex)\n)\n\\b",
970
930
  "captures": {
971
931
  "1": {
972
- "name": "support.variable.js"
932
+ "name": "meta.delimiter.property.period.js"
973
933
  },
974
934
  "2": {
975
- "name": "support.variable.js"
935
+ "name": "support.constant.dom.js"
936
+ },
937
+ "3": {
938
+ "name": "support.variable.property.dom.js"
976
939
  }
977
940
  }
978
941
  },
942
+ {
943
+ "match": "(?<!\\.)\\b(module|exports|__filename|__dirname|global|process)(?!\\s*:)\\b",
944
+ "name": "support.variable.js"
945
+ },
979
946
  {
980
947
  "match": "\\b(Infinity|NaN|undefined)\\b",
981
948
  "name": "constant.language.js"
@@ -1000,6 +967,28 @@
1000
967
  }
1001
968
  ]
1002
969
  },
970
+ {
971
+ "begin": "\\?",
972
+ "beginCaptures": {
973
+ "0": {
974
+ "name": "keyword.operator.ternary.js"
975
+ }
976
+ },
977
+ "end": ":",
978
+ "endCaptures": {
979
+ "0": {
980
+ "name": "keyword.operator.ternary.js"
981
+ }
982
+ },
983
+ "patterns": [
984
+ {
985
+ "include": "#prevent_object_keys_matching"
986
+ },
987
+ {
988
+ "include": "$self"
989
+ }
990
+ ]
991
+ },
1003
992
  {
1004
993
  "include": "#operators"
1005
994
  },
@@ -1019,15 +1008,8 @@
1019
1008
  "include": "#properties"
1020
1009
  },
1021
1010
  {
1022
- "match": "(?<!\\.)\\b([A-Z][A-Z0-9_]+)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)([A-Z][A-Z0-9_]+)(?=\\s*:)",
1023
- "captures": {
1024
- "1": {
1025
- "name": "constant.other.js"
1026
- },
1027
- "2": {
1028
- "name": "constant.other.js"
1029
- }
1030
- }
1011
+ "match": "((?<!\\.|[\\w$])(?![_\\$]+[^A-Z0-9_$])\\$*\\b(?:[A-Z_$][A-Z0-9_$]*)\\b\\$*)(?!\\s*:)",
1012
+ "name": "constant.other.js"
1031
1013
  },
1032
1014
  {
1033
1015
  "match": "(?<!\\$)\\b[0-9]+[\\w$]*",
@@ -1046,6 +1028,7 @@
1046
1028
  "name": "meta.delimiter.method.period.js"
1047
1029
  },
1048
1030
  {
1031
+ "match": "({)(})",
1049
1032
  "captures": {
1050
1033
  "1": {
1051
1034
  "name": "punctuation.section.scope.begin.js"
@@ -1053,9 +1036,7 @@
1053
1036
  "2": {
1054
1037
  "name": "punctuation.section.scope.end.js"
1055
1038
  }
1056
- },
1057
- "comment": "Allows the special return snippet to fire.",
1058
- "match": "({)(})"
1039
+ }
1059
1040
  },
1060
1041
  {
1061
1042
  "begin": "{",
@@ -1170,11 +1151,7 @@
1170
1151
  "name": "keyword.operator.bitwise.js"
1171
1152
  },
1172
1153
  {
1173
- "match": "\\?|:",
1174
- "name": "keyword.operator.js"
1175
- },
1176
- {
1177
- "match": "=",
1154
+ "match": "=|:",
1178
1155
  "name": "keyword.operator.assignment.js"
1179
1156
  },
1180
1157
  {
@@ -1209,8 +1186,7 @@
1209
1186
  "name": "string.quoted.single.js",
1210
1187
  "patterns": [
1211
1188
  {
1212
- "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)",
1213
- "name": "constant.character.escape.js"
1189
+ "include": "#string_escapes"
1214
1190
  },
1215
1191
  {
1216
1192
  "match": "[^']*[^\\n\\r'\\\\]$",
@@ -1234,8 +1210,7 @@
1234
1210
  "name": "string.quoted.double.js",
1235
1211
  "patterns": [
1236
1212
  {
1237
- "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)",
1238
- "name": "constant.character.escape.js"
1213
+ "include": "#string_escapes"
1239
1214
  },
1240
1215
  {
1241
1216
  "match": "[^\"]*[^\\n\\r\"\\\\]$",
@@ -1262,8 +1237,7 @@
1262
1237
  "name": "string.quoted.template.html.js",
1263
1238
  "patterns": [
1264
1239
  {
1265
- "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)",
1266
- "name": "constant.character.escape.js"
1240
+ "include": "#string_escapes"
1267
1241
  },
1268
1242
  {
1269
1243
  "include": "#interpolated_js"
@@ -1292,8 +1266,7 @@
1292
1266
  "name": "string.quoted.template.graphql.js",
1293
1267
  "patterns": [
1294
1268
  {
1295
- "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)",
1296
- "name": "constant.character.escape.js"
1269
+ "include": "#string_escapes"
1297
1270
  },
1298
1271
  {
1299
1272
  "include": "#interpolated_js"
@@ -1319,8 +1292,7 @@
1319
1292
  "name": "string.quoted.template.js",
1320
1293
  "patterns": [
1321
1294
  {
1322
- "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)",
1323
- "name": "constant.character.escape.js"
1295
+ "include": "#string_escapes"
1324
1296
  },
1325
1297
  {
1326
1298
  "include": "#interpolated_js"
@@ -1329,6 +1301,38 @@
1329
1301
  }
1330
1302
  ]
1331
1303
  },
1304
+ "string_escapes": {
1305
+ "patterns": [
1306
+ {
1307
+ "match": "\\\\u(?![A-Fa-f0-9]{4}|{[A-Fa-f0-9]+})[^'\"]*",
1308
+ "name": "invalid.illegal.unicode-escape.js"
1309
+ },
1310
+ {
1311
+ "match": "\\\\u(?:[A-Fa-f0-9]{4}|({)([A-Fa-f0-9]+)(}))",
1312
+ "name": "constant.character.escape.js",
1313
+ "captures": {
1314
+ "1": {
1315
+ "name": "punctuation.definition.unicode-escape.begin.bracket.curly.js"
1316
+ },
1317
+ "2": {
1318
+ "patterns": [
1319
+ {
1320
+ "match": "[A-Fa-f\\d]{7,}|(?!10)[A-Fa-f\\d]{6}",
1321
+ "name": "invalid.illegal.unicode-escape.js"
1322
+ }
1323
+ ]
1324
+ },
1325
+ "3": {
1326
+ "name": "punctuation.definition.unicode-escape.end.bracket.curly.js"
1327
+ }
1328
+ }
1329
+ },
1330
+ {
1331
+ "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)",
1332
+ "name": "constant.character.escape.js"
1333
+ }
1334
+ ]
1335
+ },
1332
1336
  "function_params": {
1333
1337
  "patterns": [
1334
1338
  {
@@ -1491,11 +1495,11 @@
1491
1495
  "name": "support.function.event-handler.js"
1492
1496
  },
1493
1497
  {
1494
- "match": "(?x)\n\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|\nscrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|\nsup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|\nMonth|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|\nTime|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|\nsavePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|\ncontextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|\ncreateEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|\ntest|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|\nuntaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|\nprint|prompt|preference|enableExternalCapture|elementFromPoint|exec|execScript|\nexecCommand|valueOf|UTC|queryCommandState|queryCommandIndeterm|queryCommandEnabled|\nqueryCommandValue|find|file|fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|\nfixed|fontsize|fontcolor|forward|fromCharCode|watch|link|load|lastIndexOf|\nanchor|attachEvent|atob|apply|alert|abort|routeEvents|\nresize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|releaseCapture|\nreleaseEvents|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|\nTime|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|\nAttention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|\nmoveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\b",
1498
+ "match": "(?x)\n\\b(shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|\nscrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|\nsup|sub|substr|substring|splice|split|send|set(Milliseconds|Seconds|Minutes|Hours|\nMonth|Year|FullYear|Date|UTC(Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|\nTime|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|\nsavePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|\ncontextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|\ncreateEventObject|to(GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|\ntest|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|\nuntaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|\nprint|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|\nfileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|\nforward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|\nabort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|\nreleaseCapture|releaseEvents|go|get(Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|\nTime|Date|TimezoneOffset|UTC(Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|\nAttention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|\nmoveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back)\\b",
1495
1499
  "name": "support.function.js"
1496
1500
  },
1497
1501
  {
1498
- "match": "(?x)\n\\b(substringData|submit|splitText|setNamedItem|setAttribute|setAttributeNode|select|\nhasChildNodes|hasFeature|namedItem|click|close|cloneNode|createComment|createCDATASection|\ncreateCaption|createTHead|createTextNode|createTFoot|createDocumentFragment|\ncreateProcessingInstruction|createEntityReference|createElement|createAttribute|\ntabIndex|insertRow|insertBefore|insertCell|insertData|item|open|deleteRow|deleteCell|\ndeleteCaption|deleteTHead|deleteTFoot|deleteData|focus|write|writeln|add|appendChild|\nappendData|reset|replaceChild|replaceData|move|moveNamedItem|moveChild|moveAttribute|\nmoveAttributeNode|getNamedItem|getElementsByName|getElementsByTagName|getElementById|\ngetAttribute|getAttributeNode|blur)\\b",
1502
+ "match": "(?x)\n\\b(acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|\nappendChild|appendData|before|blur|canPlayType|captureStream|\ncaretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|\ncloneContents|cloneNode|cloneRange|close|closest|collapse|\ncompareBoundaryPoints|compareDocumentPosition|comparePoint|contains|\nconvertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|\ncreateAttributeNS|createCaption|createCDATASection|createComment|\ncreateContextualFragment|createDocument|createDocumentFragment|\ncreateDocumentType|createElement|createElementNS|createEntityReference|\ncreateEvent|createExpression|createHTMLDocument|createNodeIterator|\ncreateNSResolver|createProcessingInstruction|createRange|createShadowRoot|\ncreateTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|\ndeleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|\ndeleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|\nenableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|\nexitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|\ngetAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|\ngetAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|\ngetClientRects|getContext|getDestinationInsertionPoints|getElementById|\ngetElementsByClassName|getElementsByName|getElementsByTagName|\ngetElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|\ngetVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|\nhasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|\ninsertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|\ninsertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|\nisPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|\nlookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|\nmoveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|\nparentNode|pause|play|postMessage|prepend|preventDefault|previousNode|\npreviousSibling|probablySupportsContext|queryCommandEnabled|\nqueryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|\nquerySelector|querySelectorAll|registerContentHandler|registerElement|\nregisterProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|\nremoveAttributeNode|removeAttributeNS|removeChild|removeEventListener|\nremoveItem|replace|replaceChild|replaceData|replaceWith|reportValidity|\nrequestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|\nscrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|\nsetAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|\nsetCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|\nsetRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|\nslice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|\nsubmit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|\ntoDataURL|toggle|toString|values|write|writeln)\\b",
1499
1503
  "name": "support.function.dom.js"
1500
1504
  },
1501
1505
  {
@@ -1663,11 +1667,11 @@
1663
1667
  "docblock": {
1664
1668
  "patterns": [
1665
1669
  {
1666
- "match": "(?<!\\w)@(abstract|access|alias|augments|author|async|attribute|arg|argument|beta|borrows|bubbes|callback|class|classdesc|config|const|constant|constructs|constructor|copyright|chainable|default|defaultvalue|deprecated|desc|description|enum|emits|event|example|exports|external|extends|extension|extensionfor|extension_for|for|file|fileoverview|fires|final|function|global|host|ignore|implements|inheritdoc|inner|instance|interface|kind|lends|license|listens|main|member|memberof|method|mixex|mixin(?:s|)|module|name|namespace|override|overview|param|private|prop|property|protected|public|readonly|readOnly|requires|required|return|returns|see|since|static|summary|submodule|this|throws|todo|tutorial|type|typedef|var|variation|version|virtual|uses|writeOnce)\\b",
1670
+ "match": "(?x) (?<!\\w)@\n(abstract|access|alias|arg|argument|async|attribute|augments|author|beta|borrows|bubbes|callback|chainable|class\n|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc\n|description|dict|emits|enum|event|example|exports?|extends|extension|extension_for|extensionfor|external|file\n|fileoverview|final|fires|for|function|global|host|ignore|implements|inherit[Dd]oc|inner|instance|interface|kind\n|lends|license|listens|main|member|memberof|method|mixex|mixins?|module|name|namespace|nocollapse|nosideeffects\n|override|overview|package|param|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]\n|returns?|see|since|static|struct|submodule|summary|template|this|throws|todo|tutorial|type|typedef|unrestricted\n|uses|var|variation|version|virtual|writeOnce)\\b",
1667
1671
  "name": "storage.type.class.jsdoc"
1668
1672
  },
1669
1673
  {
1670
- "match": "({\\b(?:[a-zA-Z_$][a-zA-Z_$0-9]*)\\b})\\s\\b([a-zA-Z_$][a-zA-Z_$0-9]*)\\b\\s*((?:(?!\\*\\/).)*)",
1674
+ "match": "(?x)\n({(?:\\*|(?:\\?|\\!|\\.{3})?(?:\\([a-zA-Z_$][\\w$]*(?:[\\.|][a-zA-Z_$][\\w$]*)*\\)|[a-zA-Z_$][\\w$]*(?:[\\.|][a-zA-Z_$][\\w$]*)*)(?:\\[\\])?=?)})\n\\s+\n(\\[(?:[a-zA-Z_$]+(?:=[\\w][\\s\\w$]*)?)\\]|(?:[a-zA-Z_$][\\w$]*(?:[\\.|][a-zA-Z_$][\\w$]*)*))\n\\s+\n((?:(?!\\*\\/).)*)",
1671
1675
  "captures": {
1672
1676
  "0": {
1673
1677
  "name": "other.meta.jsdoc"
@@ -1682,6 +1686,20 @@
1682
1686
  "name": "other.description.jsdoc"
1683
1687
  }
1684
1688
  }
1689
+ },
1690
+ {
1691
+ "match": "(?x)\n(?:(?<=@returns)|(?<=@return))\n\\s+\n({(?:\\*|(?:\\?|\\!|\\.{3})?(?:\\([a-zA-Z_$][\\w$]*(?:[\\.|][a-zA-Z_$][\\w$]*)*\\)|[a-zA-Z_$][\\w$]*(?:[\\.|][a-zA-Z_$][\\w$]*)*)(?:\\[\\])?=?)})\n\\s+\n((?:(?!\\*\\/).)*)",
1692
+ "captures": {
1693
+ "0": {
1694
+ "name": "other.meta.jsdoc"
1695
+ },
1696
+ "1": {
1697
+ "name": "entity.name.type.instance.jsdoc"
1698
+ },
1699
+ "2": {
1700
+ "name": "other.description.jsdoc"
1701
+ }
1702
+ }
1685
1703
  }
1686
1704
  ]
1687
1705
  },
@@ -1689,27 +1707,37 @@
1689
1707
  "patterns": [
1690
1708
  {
1691
1709
  "begin": "/\\*\\*(?!/)",
1692
- "captures": {
1710
+ "beginCaptures": {
1693
1711
  "0": {
1694
1712
  "name": "punctuation.definition.comment.js"
1695
1713
  }
1696
1714
  },
1715
+ "end": "\\*/",
1716
+ "endCaptures": {
1717
+ "0": {
1718
+ "name": "punctuation.definition.comment.js"
1719
+ }
1720
+ },
1721
+ "name": "comment.block.documentation.js",
1697
1722
  "patterns": [
1698
1723
  {
1699
1724
  "include": "#docblock"
1700
1725
  }
1701
- ],
1702
- "end": "\\*/",
1703
- "name": "comment.block.documentation.js"
1726
+ ]
1704
1727
  },
1705
1728
  {
1706
1729
  "begin": "/\\*",
1707
- "captures": {
1730
+ "beginCaptures": {
1708
1731
  "0": {
1709
1732
  "name": "punctuation.definition.comment.js"
1710
1733
  }
1711
1734
  },
1712
1735
  "end": "\\*/",
1736
+ "endCaptures": {
1737
+ "0": {
1738
+ "name": "punctuation.definition.comment.js"
1739
+ }
1740
+ },
1713
1741
  "name": "comment.block.js"
1714
1742
  },
1715
1743
  {
@@ -1734,6 +1762,109 @@
1734
1762
  ]
1735
1763
  }
1736
1764
  ]
1765
+ },
1766
+ "switch_statement": {
1767
+ "patterns": [
1768
+ {
1769
+ "begin": "\\bswitch\\b",
1770
+ "beginCaptures": {
1771
+ "0": {
1772
+ "name": "keyword.control.switch.js"
1773
+ }
1774
+ },
1775
+ "end": "}",
1776
+ "endCaptures": {
1777
+ "0": {
1778
+ "name": "punctuation.definition.section.switch-block.end.bracket.curly.js"
1779
+ }
1780
+ },
1781
+ "name": "meta.switch-statement.js",
1782
+ "patterns": [
1783
+ {
1784
+ "begin": "\\(",
1785
+ "beginCaptures": {
1786
+ "0": {
1787
+ "name": "punctuation.definition.switch-expression.begin.bracket.round.js"
1788
+ }
1789
+ },
1790
+ "end": "\\)",
1791
+ "endCaptures": {
1792
+ "0": {
1793
+ "name": "punctuation.definition.switch-expression.end.bracket.round.js"
1794
+ }
1795
+ },
1796
+ "patterns": [
1797
+ {
1798
+ "include": "$self"
1799
+ }
1800
+ ]
1801
+ },
1802
+ {
1803
+ "begin": "{",
1804
+ "beginCaptures": {
1805
+ "0": {
1806
+ "name": "punctuation.definition.section.switch-block.begin.bracket.curly.js"
1807
+ }
1808
+ },
1809
+ "end": "(?=})",
1810
+ "patterns": [
1811
+ {
1812
+ "begin": "\\bcase\\b",
1813
+ "beginCaptures": {
1814
+ "0": {
1815
+ "name": "keyword.control.case.js"
1816
+ }
1817
+ },
1818
+ "end": ":",
1819
+ "endCaptures": {
1820
+ "0": {
1821
+ "name": "punctuation.definition.section.case-statement.js"
1822
+ }
1823
+ },
1824
+ "patterns": [
1825
+ {
1826
+ "include": "#prevent_object_keys_matching"
1827
+ },
1828
+ {
1829
+ "include": "$self"
1830
+ }
1831
+ ]
1832
+ },
1833
+ {
1834
+ "match": "(?:^\\s*)?\\b(default)\\b\\s*(:)",
1835
+ "captures": {
1836
+ "1": {
1837
+ "name": "keyword.control.default.js"
1838
+ },
1839
+ "2": {
1840
+ "name": "punctuation.definition.section.case-statement.js"
1841
+ }
1842
+ }
1843
+ },
1844
+ {
1845
+ "include": "$self"
1846
+ }
1847
+ ]
1848
+ }
1849
+ ]
1850
+ }
1851
+ ]
1852
+ },
1853
+ "prevent_object_keys_matching": {
1854
+ "patterns": [
1855
+ {
1856
+ "match": "(\\w+)(?=\\s*:)",
1857
+ "captures": {
1858
+ "1": {
1859
+ "patterns": [
1860
+ {
1861
+ "include": "$self"
1862
+ }
1863
+ ]
1864
+ }
1865
+ }
1866
+ }
1867
+ ]
1737
1868
  }
1738
1869
  }
1739
1870
  }