github-linguist 5.0.11 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/grammars/source.antlr.json +2 -2
  3. data/grammars/source.batchfile.json +31 -39
  4. data/grammars/source.c++.json +2 -2
  5. data/grammars/source.c.json +1 -1
  6. data/grammars/source.capnp.json +2 -2
  7. data/grammars/source.chapel.json +2 -2
  8. data/grammars/source.clojure.json +3 -1
  9. data/grammars/source.coffee.json +6 -6
  10. data/grammars/source.crystal.json +1 -1
  11. data/grammars/source.csound-document.json +20 -5
  12. data/grammars/source.csound-score.json +1 -1
  13. data/grammars/source.csound.json +7 -20
  14. data/grammars/source.css.less.json +2 -2
  15. data/grammars/source.cython.json +2 -2
  16. data/grammars/source.dart.json +16 -20
  17. data/grammars/source.ditroff.json +3 -3
  18. data/grammars/source.elixir.json +3 -3
  19. data/grammars/source.erlang.json +1 -1
  20. data/grammars/source.fan.json +345 -0
  21. data/grammars/source.fancy.json +1 -1
  22. data/grammars/source.gdb.json +1 -1
  23. data/grammars/source.gdb.session.json +1 -1
  24. data/grammars/source.gdscript.json +1 -1
  25. data/grammars/source.gfm.json +16 -0
  26. data/grammars/source.grace.json +1 -1
  27. data/grammars/source.harbour.json +1 -1
  28. data/grammars/source.idl.json +1 -1
  29. data/grammars/source.java.json +2 -2
  30. data/grammars/source.jison.json +45 -7
  31. data/grammars/source.jisonlex.json +13 -3
  32. data/grammars/source.js.json +7 -7
  33. data/grammars/source.js.regexp.json +2 -2
  34. data/grammars/source.jsdoc.json +24 -49
  35. data/grammars/source.livescript.json +4 -4
  36. data/grammars/source.logtalk.json +1 -1
  37. data/grammars/source.lsl.json +1 -1
  38. data/grammars/source.lua.json +5 -7
  39. data/grammars/source.mask.json +2 -2
  40. data/grammars/source.nim.json +2 -2
  41. data/grammars/source.nim_filter.json +2 -2
  42. data/grammars/source.nimcfg.json +2 -2
  43. data/grammars/source.nix.json +2 -2
  44. data/grammars/source.nu.json +2 -2
  45. data/grammars/source.pan.json +711 -0
  46. data/grammars/source.pawn.json +1 -1
  47. data/grammars/source.perl6fe.json +384 -7
  48. data/grammars/source.php.zephir.json +2 -2
  49. data/grammars/source.reason.json +2 -2
  50. data/grammars/source.ring.json +277 -0
  51. data/grammars/source.rust.json +8 -3
  52. data/grammars/source.scad.json +2 -2
  53. data/grammars/source.shell.json +1 -1
  54. data/grammars/source.smalltalk.json +83 -16
  55. data/grammars/source.spin.json +2 -2
  56. data/grammars/source.sqf.json +1 -1
  57. data/grammars/source.supercollider.json +2 -2
  58. data/grammars/source.swift.json +41 -2
  59. data/grammars/source.tl.json +264 -0
  60. data/grammars/source.toml.json +3 -3
  61. data/grammars/source.vhdl.json +1 -1
  62. data/grammars/source.webassembly.json +344 -0
  63. data/grammars/source.yaml.json +2 -2
  64. data/grammars/text.haml.json +3 -3
  65. data/grammars/text.html.handlebars.json +17 -8
  66. data/grammars/text.html.markdown.source.gfm.mson.json +1 -1
  67. data/grammars/text.html.php.blade.json +987 -440
  68. data/grammars/text.html.php.json +6 -6
  69. data/grammars/text.html.soy.json +3 -3
  70. data/grammars/text.html.vue.json +10 -10
  71. data/grammars/text.marko.json +3 -3
  72. data/grammars/text.roff.json +6 -3
  73. data/lib/linguist/heuristics.rb +4 -4
  74. data/lib/linguist/languages.json +1 -1
  75. data/lib/linguist/languages.yml +54 -4
  76. data/lib/linguist/samples.json +3030 -470
  77. data/lib/linguist/vendor.yml +3 -0
  78. data/lib/linguist/version.rb +1 -1
  79. metadata +7 -2
@@ -439,7 +439,7 @@
439
439
  "name": "string.quoted.double.css",
440
440
  "patterns": [
441
441
  {
442
- "match": "\\\\(\\h{1,6}|.)",
442
+ "match": "\\\\([0-9A-Fa-f]{1,6}|.)",
443
443
  "name": "constant.character.escape.css"
444
444
  },
445
445
  {
@@ -463,7 +463,7 @@
463
463
  "name": "string.quoted.single.css",
464
464
  "patterns": [
465
465
  {
466
- "match": "\\\\(\\h{1,6}|.)",
466
+ "match": "\\\\([0-9A-Fa-f]{1,6}|.)",
467
467
  "name": "constant.character.escape.css"
468
468
  },
469
469
  {
@@ -31,11 +31,11 @@
31
31
  ]
32
32
  },
33
33
  {
34
- "match": "\\b(?i:(0x\\h*)L)",
34
+ "match": "\\b(?i:(0x[0-9A-Fa-f]*)L)",
35
35
  "name": "constant.numeric.integer.long.hexadecimal.cython"
36
36
  },
37
37
  {
38
- "match": "\\b(?i:(0x\\h*))",
38
+ "match": "\\b(?i:(0x[0-9A-Fa-f]*))",
39
39
  "name": "constant.numeric.integer.hexadecimal.cython"
40
40
  },
41
41
  {
@@ -180,67 +180,63 @@
180
180
  "constants-and-special-vars": {
181
181
  "patterns": [
182
182
  {
183
- "match": "\\b(true|false|null)\\b",
183
+ "match": "(?<!\\$)\\b(true|false|null)\\b(?!\\$)",
184
184
  "name": "constant.language.dart"
185
185
  },
186
186
  {
187
- "match": "\\b(this|super)\\b",
187
+ "match": "(?<!\\$)\\b(this|super)\\b(?!\\$)",
188
188
  "name": "variable.language.dart"
189
189
  },
190
190
  {
191
- "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)\\b",
191
+ "match": "(?<!\\$)\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)\\b(?!\\$)",
192
192
  "name": "constant.numeric.dart"
193
193
  },
194
194
  {
195
- "match": "\\b_?[A-Z][a-zA-Z0-9_]+\\b",
195
+ "match": "(?<![a-zA-Z0-9_$])[_$]*[A-Z][a-zA-Z0-9_$]*",
196
196
  "name": "support.class.dart"
197
197
  },
198
198
  {
199
- "match": "(_?[a-z][a-zA-Z0-9_]+)(\\(|\\s+=>)",
199
+ "match": "([_$]*[a-z][a-zA-Z0-9_$]*)(\\(|\\s+=>)",
200
200
  "captures": {
201
201
  "1": {
202
202
  "name": "entity.name.function.dart"
203
203
  }
204
204
  }
205
- },
206
- {
207
- "match": "\\b[A-Z_0-9]+\\b",
208
- "name": "support.constant.dart"
209
205
  }
210
206
  ]
211
207
  },
212
208
  "keywords": {
213
209
  "patterns": [
214
210
  {
215
- "match": "\\bas\\b",
211
+ "match": "(?<!\\$)\\bas\\b(?!\\$)",
216
212
  "name": "keyword.cast.dart"
217
213
  },
218
214
  {
219
- "match": "\\b(try|on|catch|finally|throw|rethrow)\\b",
215
+ "match": "(?<!\\$)\\b(try|on|catch|finally|throw|rethrow)\\b(?!\\$)",
220
216
  "name": "keyword.control.catch-exception.dart"
221
217
  },
222
218
  {
223
- "match": "\\b(break|case|continue|default|do|else|for|if|in|return|switch|while)\\b",
219
+ "match": "(?<!\\$)\\b(break|case|continue|default|do|else|for|if|in|return|switch|while)\\b(?!\\$)",
224
220
  "name": "keyword.control.dart"
225
221
  },
226
222
  {
227
- "match": "\\b(sync(\\*)?|async(\\*)?|await|yield(\\*)?)\\b",
223
+ "match": "(?<!\\$)\\b(sync(\\*)?|async(\\*)?|await|yield(\\*)?)\\b(?!\\$)",
228
224
  "name": "keyword.control.dart"
229
225
  },
230
226
  {
231
- "match": "\\bassert\\b",
227
+ "match": "(?<!\\$)\\bassert\\b(?!\\$)",
232
228
  "name": "keyword.control.dart"
233
229
  },
234
230
  {
235
- "match": "\\b(new)\\b",
231
+ "match": "(?<!\\$)\\b(new)\\b(?!\\$)",
236
232
  "name": "keyword.control.new.dart"
237
233
  },
238
234
  {
239
- "match": "\\b(abstract|class|enum|extends|external|factory|implements|interface|get|native|operator|set|typedef|with)\\b",
235
+ "match": "(?<!\\$)\\b(abstract|class|enum|extends|external|factory|implements|get|native|operator|set|typedef|with)\\b(?!\\$)",
240
236
  "name": "keyword.declaration.dart"
241
237
  },
242
238
  {
243
- "match": "\\b(is\\!?)\\b",
239
+ "match": "(?<!\\$)\\b(is\\!?)\\b(?!\\$)",
244
240
  "name": "keyword.operator.dart"
245
241
  },
246
242
  {
@@ -280,11 +276,11 @@
280
276
  "name": "keyword.operator.logical.dart"
281
277
  },
282
278
  {
283
- "match": "\\b(static|final|const)\\b",
279
+ "match": "(?<!\\$)\\b(static|final|const)\\b(?!\\$)",
284
280
  "name": "storage.modifier.dart"
285
281
  },
286
282
  {
287
- "match": "\\b(?:void|bool|num|int|double|dynamic|var)\\b",
283
+ "match": "(?<!\\$)\\b(?:void|bool|num|int|double|dynamic|var)\\b(?!\\$)",
288
284
  "name": "storage.type.primitive.dart"
289
285
  }
290
286
  ]
@@ -300,7 +296,7 @@
300
296
  "name": "variable.parameter.dart"
301
297
  }
302
298
  },
303
- "match": "\\$((\\w+)|\\{(\\w+)\\})"
299
+ "match": "\\$((\\w+)|\\{([^{}]+)\\})"
304
300
  },
305
301
  {
306
302
  "match": "\\\\.",
@@ -184,7 +184,7 @@
184
184
  "patterns": [
185
185
  {
186
186
  "name": "meta.custom.device-control.ditroff",
187
- "begin": "^\\s*(x)\\s*(X\\S*)",
187
+ "begin": "(x)\\s*(X\\S*)",
188
188
  "end": "^(?!\\+)",
189
189
  "beginCaptures": {
190
190
  "1": {
@@ -204,7 +204,7 @@
204
204
  },
205
205
  {
206
206
  "name": "meta.device-control.ditroff",
207
- "begin": "^\\s*(x)\\s*",
207
+ "begin": "(x)\\s*",
208
208
  "end": "(?=$|#)",
209
209
  "beginCaptures": {
210
210
  "1": {
@@ -536,7 +536,7 @@
536
536
  }
537
537
  },
538
538
  "wordSpace": {
539
- "name": "entity.name.function.ditroff",
539
+ "name": "entity.name.function.word-space.ditroff",
540
540
  "match": "(?<=^|[\\s\\d])w"
541
541
  }
542
542
  }
@@ -370,7 +370,7 @@
370
370
  "name": "support.type.binary.elixir"
371
371
  },
372
372
  {
373
- "match": "\\b(0x\\h(?>_?\\h)*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0b[01]+|0o[0-7]+)\\b",
373
+ "match": "\\b(0x[0-9A-Fa-f](?>_?[0-9A-Fa-f])*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0b[01]+|0o[0-7]+)\\b",
374
374
  "name": "constant.numeric.elixir"
375
375
  }
376
376
  ]
@@ -424,7 +424,7 @@
424
424
  "name": "variable.other.capture.elixir"
425
425
  },
426
426
  {
427
- "match": "\\b(0x\\h(?>_?\\h)*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0b[01]+|0o[0-7]+)\\b",
427
+ "match": "\\b(0x[0-9A-Fa-f](?>_?[0-9A-Fa-f])*|\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0b[01]+|0o[0-7]+)\\b",
428
428
  "name": "constant.numeric.elixir"
429
429
  },
430
430
  {
@@ -842,7 +842,7 @@
842
842
  },
843
843
  {
844
844
  "comment": "\n\t\t\tmatches questionmark-letters.\n\n\t\t\texamples (1st alternation = hex):\n\t\t\t?\\x1 ?\\x61\n\n\t\t\texamples (2rd alternation = escaped):\n\t\t\t?\\n ?\\b\n\n\t\t\texamples (3rd alternation = normal):\n\t\t\t?a ?A ?0 \n\t\t\t?* ?\" ?( \n\t\t\t?. ?#\n\t\t\t\n\t\t\tthe negative lookbehind prevents against matching\n\t\t\tp(42.tainted?)\n\t\t\t",
845
- "match": "(?<!\\w)\\?(\\\\(x\\h{1,2}(?!\\h)\\b|[^xMC])|[^\\s\\\\])",
845
+ "match": "(?<!\\w)\\?(\\\\(x[0-9A-Fa-f]{1,2}(?![0-9A-Fa-f])\\b|[^xMC])|[^\\s\\\\])",
846
846
  "name": "constant.numeric.elixir"
847
847
  },
848
848
  {
@@ -1247,7 +1247,7 @@
1247
1247
  "name": "punctuation.separator.base-integer.erlang"
1248
1248
  }
1249
1249
  },
1250
- "match": "16(#)\\h++",
1250
+ "match": "16(#)[0-9A-Fa-f]++",
1251
1251
  "name": "constant.numeric.integer.hexadecimal.erlang"
1252
1252
  },
1253
1253
  {
@@ -0,0 +1,345 @@
1
+ {
2
+ "fileTypes": [
3
+ "fan"
4
+ ],
5
+ "name": "Fantom",
6
+ "patterns": [
7
+ {
8
+ "include": "#main"
9
+ }
10
+ ],
11
+ "repository": {
12
+ "comments": {
13
+ "patterns": [
14
+ {
15
+ "include": "#line-comment"
16
+ },
17
+ {
18
+ "include": "#fandoc-comment"
19
+ },
20
+ {
21
+ "include": "#multiline-comment"
22
+ }
23
+ ]
24
+ },
25
+ "double-quoted-string": {
26
+ "patterns": [
27
+ {
28
+ "begin": "(\")",
29
+ "end": "(\")",
30
+ "name": "string.quoted.double.fan",
31
+ "patterns": [
32
+ {
33
+ "include": "#escaped-unicode"
34
+ },
35
+ {
36
+ "include": "#escaped-char"
37
+ },
38
+ {
39
+ "include": "#interpolation"
40
+ }
41
+ ]
42
+ }
43
+ ]
44
+ },
45
+ "escaped-char": {
46
+ "patterns": [
47
+ {
48
+ "match": "(\\\\[bfnrt\"'`$\\\\])",
49
+ "name": "constant.character.escape.char.fan"
50
+ },
51
+ {
52
+ "match": "(\\\\.)",
53
+ "name": "invalid.illegal.escape.char.fan"
54
+ }
55
+ ]
56
+ },
57
+ "escaped-unicode": {
58
+ "patterns": [
59
+ {
60
+ "match": "(\\\\u[0-9A-Fa-f]{4})",
61
+ "name": "constant.character.escape.unicode.fan"
62
+ },
63
+ {
64
+ "match": "(\\\\u[0-9A-Fa-f]{0,3})",
65
+ "name": "invalid.illegal.escape.unicode.fan"
66
+ }
67
+ ]
68
+ },
69
+ "fandoc-comment": {
70
+ "patterns": [
71
+ {
72
+ "match": "(^\\s*\\*\\*.*$)",
73
+ "name": "comment.line.fandoc.fan"
74
+ }
75
+ ]
76
+ },
77
+ "interpolation": {
78
+ "patterns": [
79
+ {
80
+ "match": "(\\$\\{.+?\\})",
81
+ "name": "variable.other.interpolated-expr.fan"
82
+ },
83
+ {
84
+ "match": "(\\$([A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*))",
85
+ "name": "variable.other.interpolated-dotcall.fan"
86
+ },
87
+ {
88
+ "match": "(\\$\\{\\w*)",
89
+ "name": "invalid.illegal.interpolation.fan"
90
+ }
91
+ ]
92
+ },
93
+ "keywords": {
94
+ "patterns": [
95
+ {
96
+ "match": "(\\b(true|false|null)\\b)",
97
+ "name": "constant.language.fan"
98
+ },
99
+ {
100
+ "match": "(\\b(abstract|const|enum|facet|final|internal|native|once|override|private|protected|public|readonly|static|virtual|volatile)\\b)",
101
+ "name": "storage.modifier.fan"
102
+ },
103
+ {
104
+ "match": "(\\b(return|break|continue)\\b)",
105
+ "name": "keyword.control.block.fan"
106
+ },
107
+ {
108
+ "match": "(\\b(try|catch|finally|throw|assert)\\b)",
109
+ "name": "keyword.control.exceptions.fan"
110
+ },
111
+ {
112
+ "match": "(\\b(for|while|do|foreach)\\b)",
113
+ "name": "keyword.control.loop.fan"
114
+ },
115
+ {
116
+ "match": "(\\b(if|else|switch|case|default)\\b)",
117
+ "name": "keyword.control.flow.fan"
118
+ },
119
+ {
120
+ "match": "(\\b(new|void)\\b)",
121
+ "name": "keyword.other.fan"
122
+ },
123
+ {
124
+ "match": "(\\b(using)\\b)",
125
+ "name": "storage.modifier.global.fan"
126
+ },
127
+ {
128
+ "match": "(\\b(this|super|it)\\b)",
129
+ "name": "variable.language.self.fan"
130
+ },
131
+ {
132
+ "match": "(\\b(Void|Bool|Int|Float|Decimal|Duration|Str|Uri|Type|Slot|Range|List|Map|This)\\b)",
133
+ "name": "support.type.sys.fan"
134
+ }
135
+ ]
136
+ },
137
+ "line-comment": {
138
+ "patterns": [
139
+ {
140
+ "match": "((//).*$)",
141
+ "name": "comment.line.double-slash.fan"
142
+ }
143
+ ]
144
+ },
145
+ "main": {
146
+ "patterns": [
147
+ {
148
+ "include": "#comments"
149
+ },
150
+ {
151
+ "include": "#strings"
152
+ },
153
+ {
154
+ "include": "#uris"
155
+ },
156
+ {
157
+ "include": "#numbers"
158
+ },
159
+ {
160
+ "include": "#keywords"
161
+ },
162
+ {
163
+ "include": "#operators"
164
+ },
165
+ {
166
+ "include": "#typedef"
167
+ }
168
+ ]
169
+ },
170
+ "multiline-comment": {
171
+ "patterns": [
172
+ {
173
+ "begin": "(/\\*)",
174
+ "end": "(\\*/)",
175
+ "name": "comment.block"
176
+ }
177
+ ]
178
+ },
179
+ "numbers": {
180
+ "patterns": [
181
+ {
182
+ "match": "(\\b0x[0-9A-Fa-f][_0-9A-Fa-f]*)",
183
+ "name": "constant.numeric.hex.fan"
184
+ },
185
+ {
186
+ "match": "(0x)",
187
+ "name": "invalid.illegal.hex.fan"
188
+ },
189
+ {
190
+ "match": "(\\\\u[0-9A-Fa-f]{4})",
191
+ "name": "constant.numeric.escape.unicode.fan"
192
+ },
193
+ {
194
+ "match": "(\\\\(u[0-9A-Fa-f]{0,3})?)",
195
+ "name": "invalid.illegal.escape.unicode.fan"
196
+ },
197
+ {
198
+ "match": "(\\'\\\\[bfnrt\"'$\\\\]\\')",
199
+ "name": "constant.numeric.escape.char.fan"
200
+ },
201
+ {
202
+ "match": "(\\'[^\\\\]\\')",
203
+ "name": "constant.numeric.char.fan"
204
+ },
205
+ {
206
+ "match": "((\\B\\.[0-9][0-9_]*|\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE][-+]?[0-9][0-9_]*)?(ns|ms|sec|min|hr|day))",
207
+ "name": "constant.other.duration.fan"
208
+ },
209
+ {
210
+ "match": "((\\B\\.[0-9][0-9_]*|\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE][-+]?[0-9][0-9_]*)?[fdFD]?)",
211
+ "name": "constant.numeric.number.fan"
212
+ }
213
+ ]
214
+ },
215
+ "operators": {
216
+ "patterns": [
217
+ {
218
+ "match": "(===?|!==?)",
219
+ "name": "keyword.operator.equality.fan"
220
+ },
221
+ {
222
+ "match": "(<(=|=>)?|>=?)",
223
+ "name": "keyword.operator.relational.symbol.fan"
224
+ },
225
+ {
226
+ "match": "(:?=)",
227
+ "name": "keyword.operator.assign.fan"
228
+ },
229
+ {
230
+ "match": "([+*/%-]=?)",
231
+ "name": "keyword.operator.math.fan"
232
+ },
233
+ {
234
+ "match": "(!|&&|(\\?\\:)|(\\|\\|))",
235
+ "name": "keyword.operator.logical.fan"
236
+ },
237
+ {
238
+ "match": "(\\b(is|isnot|as)\\b)",
239
+ "name": "keyword.operator.relational.named.fan"
240
+ },
241
+ {
242
+ "match": "(\\->|\\?\\->|\\?\\.)",
243
+ "name": "keyword.operator.call.fan"
244
+ },
245
+ {
246
+ "match": "(\\+\\+|\\-\\-)",
247
+ "name": "keyword.operator.inc-dec.fan"
248
+ },
249
+ {
250
+ "match": "(\\.\\.<?)",
251
+ "name": "keyword.operator.range.fan"
252
+ },
253
+ {
254
+ "match": "(\\?|:)",
255
+ "name": "keyword.operator.tertiary.fan"
256
+ },
257
+ {
258
+ "match": "(;)",
259
+ "name": "punctuation.terminator.fan"
260
+ }
261
+ ]
262
+ },
263
+ "string-dsl": {
264
+ "patterns": [
265
+ {
266
+ "begin": "((Str)<\\|)",
267
+ "captures": {
268
+ "1": {
269
+ "name": "support.type.sys.fan"
270
+ }
271
+ },
272
+ "end": "(\\|>)",
273
+ "name": "string.quoted.other.fan"
274
+ }
275
+ ]
276
+ },
277
+ "strings": {
278
+ "patterns": [
279
+ {
280
+ "include": "#triple-quoted-string"
281
+ },
282
+ {
283
+ "include": "#double-quoted-string"
284
+ },
285
+ {
286
+ "include": "#string-dsl"
287
+ }
288
+ ]
289
+ },
290
+ "triple-quoted-string": {
291
+ "patterns": [
292
+ {
293
+ "begin": "\"\"\"",
294
+ "end": "\"\"\"",
295
+ "name": "string.quoted.triple.fan",
296
+ "patterns": [
297
+ {
298
+ "match": "\\\\\"",
299
+ "name": "invalid.illegal.escape.char.fan"
300
+ },
301
+ {
302
+ "include": "#escaped-unicode"
303
+ },
304
+ {
305
+ "include": "#escaped-char"
306
+ },
307
+ {
308
+ "include": "#interpolation"
309
+ }
310
+ ]
311
+ }
312
+ ]
313
+ },
314
+ "typedef": {
315
+ "patterns": [
316
+ {
317
+ "match": "(class|mixin)(?=\\s+([A-Za-z_][A-Za-z0-9_]*))",
318
+ "name": "storage.modifier.fan"
319
+ }
320
+ ]
321
+ },
322
+ "uris": {
323
+ "patterns": [
324
+ {
325
+ "begin": "(`)",
326
+ "end": "(`)",
327
+ "name": "string.quoted.other.uri.fan",
328
+ "patterns": [
329
+ {
330
+ "include": "#escaped-unicode"
331
+ },
332
+ {
333
+ "include": "#escaped-char"
334
+ },
335
+ {
336
+ "include": "#interpolation"
337
+ }
338
+ ]
339
+ }
340
+ ]
341
+ }
342
+ },
343
+ "scopeName": "source.fan",
344
+ "uuid": "de0743d9-c48e-44a0-a28b-6003d88f09d0"
345
+ }