on master help sign in
Add support for JSX in javascript and typescript
commitd455cb7c3271c2ec6790ea9da5e3dab3bc3de31c authorTobenna <tobennandu@gmail.com> dateWed 5 Sep 2018, 08:49 (8 years ago) parentd2b4766
4 files changed+4453
.gitmodules+3 assets/syntaxes/JavaScript (Babel)+1 assets/syntaxes/Javascript (Babel).sublime-syntax+1288 assets/syntaxes/TypsecriptReact.sublime-syntax+3161
.gitmodules+3
@@ -67,3 +67,6 @@
6767[submodule "assets/themes/onehalf"]
6868 path = assets/themes/onehalf
6969 url = https://github.com/sonph/onehalf
70+[submodule "assets/syntaxes/JavaScript (Babel)"]
71+ path = assets/syntaxes/JavaScript (Babel)
72+ url = https://github.com/babel/babel-sublime
assets/syntaxes/JavaScript (Babel)new file+1

Submodule changed.

assets/syntaxes/Javascript (Babel).sublime-syntaxnew file+1288
@@ -0,0 +1,1288 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: JavaScript (Babel)
5+file_extensions:
6+ - js
7+ - jsx
8+ - babel
9+ - es6
10+first_line_match: ^#!\s*/.*\b(node|js)$\n?
11+scope: source.js
12+contexts:
13+ main:
14+ - include: core
15+ brackets:
16+ - include: round-brackets
17+ - include: square-brackets
18+ - include: curly-brackets
19+ class-method-definition:
20+ - match: '(@@[_$a-zA-Z][$\w]*|static|return)(?=\s*[<(])|(?=\s*<)'
21+ captures:
22+ 1: keyword.operator.flowtype.js
23+ push:
24+ - meta_scope: meta.short-method.flowtype.js
25+ - match: '(?=\s*[;{])'
26+ pop: true
27+ - include: flowtype-polymorph
28+ - include: function-declaration-parameters
29+ - include: flowtype-annotation
30+ - include: comments
31+ - include: curly-brackets
32+ - match: '(?<=[]"''])\s*(?=[<(])'
33+ push:
34+ - meta_scope: meta.class-method.computed.js
35+ - match: '(?=\s*[;{])'
36+ pop: true
37+ - include: flowtype-polymorph
38+ - include: function-declaration-parameters
39+ - include: flowtype-annotation
40+ - include: comments
41+ - include: curly-brackets
42+ - match: |-
43+ (?x)
44+ ((?>get|set)\s+)
45+ (?>
46+ ((')((?>[^'\\]|\\.)*)('))|
47+ ((")((?>[^"\\]|\\.)*)("))|
48+ (([_$a-zA-Z][$\w]*|\d+))
49+ )(?=\s*[<(])
50+ captures:
51+ 1: storage.type.js
52+ 2: string.quoted.js
53+ 3: punctuation.definition.string.begin.js
54+ 4: entity.name.function.js
55+ 5: punctuation.definition.string.end.js
56+ 6: string.quoted.js
57+ 7: punctuation.definition.string.begin.js
58+ 8: entity.name.function.js
59+ 9: punctuation.definition.string.end.js
60+ 10: string.unquoted.js
61+ 11: entity.name.function.js
62+ push:
63+ - meta_scope: meta.class-accessor.js
64+ - match: '(?=\s*[;{])'
65+ pop: true
66+ - include: flowtype-polymorph
67+ - include: function-declaration-parameters
68+ - include: flowtype-annotation
69+ - include: comments
70+ - include: curly-brackets
71+ - match: |-
72+ (?x)
73+ (?>
74+ ((')((?>[^'\\]|\\.)*)('))|
75+ ((")((?>[^"\\]|\\.)*)("))|
76+ (([_$a-zA-Z][$\w]*|\d+))
77+ )(?=\s*[<(])
78+ captures:
79+ 1: string.quoted.js
80+ 2: punctuation.definition.string.begin.js
81+ 3: entity.name.function.js
82+ 4: punctuation.definition.string.end.js
83+ 5: string.quoted.js
84+ 6: punctuation.definition.string.begin.js
85+ 7: entity.name.function.js
86+ 8: punctuation.definition.string.end.js
87+ 9: string.unquoted.js
88+ 10: entity.name.function.js
89+ push:
90+ - meta_scope: meta.class-method.js
91+ - match: '(?=\s*[;{])'
92+ pop: true
93+ - include: flowtype-polymorph
94+ - include: function-declaration-parameters
95+ - include: flowtype-annotation
96+ - include: comments
97+ - include: curly-brackets
98+ class-method-storage:
99+ - match: (?<!\.)\b(?>static|declare)\b
100+ scope: storage.modifier.js
101+ - match: (?<!\.)\b(async)\b
102+ scope: storage.type.js
103+ - match: (?<!\.)\b(get|set)\b(?!\s*\()
104+ scope: storage.type.js
105+ - match: \*
106+ scope: keyword.generator.asterisk.js
107+ class-properties:
108+ - match: '([_$a-zA-Z][$\w]*)(?=\s*[:=])'
109+ captures:
110+ 1: variable.other.property.js
111+ push:
112+ - meta_scope: meta.class.property.js
113+ - match: '(?=\s*[;}])'
114+ pop: true
115+ - include: flowtype-annotation
116+ - include: expression
117+ comments:
118+ - match: /\*\*(?!/)
119+ captures:
120+ 0: punctuation.definition.comment.js
121+ push:
122+ - meta_scope: comment.block.documentation.js
123+ - match: \*/
124+ captures:
125+ 0: punctuation.definition.comment.js
126+ pop: true
127+ - match: /\*
128+ captures:
129+ 0: punctuation.definition.comment.begin.js
130+ push:
131+ - meta_scope: comment.block.js
132+ - match: \*/
133+ captures:
134+ 0: punctuation.definition.comment.end.js
135+ pop: true
136+ - match: (?><!--|-->)
137+ scope: comment.block.html.js
138+ captures:
139+ 0: punctuation.definition.comment.js
140+ - match: (//).*$\n?
141+ scope: comment.line.double-slash.js
142+ captures:
143+ 1: punctuation.definition.comment.js
144+ - match: ^(#!).*$\n?
145+ scope: comment.line.shebang.js
146+ captures:
147+ 1: punctuation.definition.comment.js
148+ core:
149+ - include: literal-function-labels
150+ - include: literal-arrow-function-labels
151+ - include: literal-labels
152+ - include: literal-for
153+ - include: literal-switch
154+ - include: styled-components
155+ - include: graphql
156+ - include: expression
157+ - include: literal-punctuation
158+ curly-brackets:
159+ - match: "{"
160+ captures:
161+ 0: meta.brace.curly.begin.js
162+ push:
163+ - meta_scope: meta.group.braces.curly.js
164+ - match: "}"
165+ captures:
166+ 0: meta.brace.curly.end.js
167+ pop: true
168+ - include: main
169+ es7-decorators:
170+ - match: |-
171+ (?x)
172+ (@)([_$a-zA-Z][$\w]*)\b
173+ scope: tag.decorator.js
174+ captures:
175+ 1: punctuation.definition.tag.js
176+ 2: entity.name.tag.js
177+ expression:
178+ - include: merge-conflits
179+ - include: literal-regexp
180+ - include: literal-jsx
181+ - include: es7-decorators
182+ - include: support-class
183+ - include: support-other
184+ - include: literal-function
185+ - include: literal-arrow-function
186+ - include: literal-prototype
187+ - include: literal-keywords
188+ - include: literal-method
189+ - include: literal-module
190+ - include: literal-class
191+ - include: flowtype-declaration
192+ - include: literal-number
193+ - include: literal-template-string
194+ - include: literal-string
195+ - include: literal-language-constant
196+ - include: literal-language-variable
197+ - include: literal-constructor
198+ - include: literal-method-call
199+ - include: literal-function-call
200+ - include: comments
201+ - include: brackets
202+ - include: literal-operators
203+ - include: literal-variable
204+ flowtype-annotation:
205+ - match: (?:(\?)\s*)?(:)
206+ captures:
207+ 1: keyword.operator.flowtype.optional.js
208+ 2: keyword.operator.flowtype.annotation.js
209+ push:
210+ - meta_scope: meta.flowtype.annotation.js
211+ - include: flowtype-tokens
212+ - match: (?=\S)
213+ pop: true
214+ flowtype-brackets:
215+ - match: "{"
216+ captures:
217+ 0: punctuation.section.flowtype.begin.js
218+ push:
219+ - match: "}"
220+ captures:
221+ 0: punctuation.section.flowtype.end.js
222+ pop: true
223+ - include: flowtype-tokens
224+ flowtype-declaration:
225+ - match: (?<!\.)\b(declare)\b
226+ scope: support.type.declare.flowtype.js
227+ - match: '(?<!\.)\b(type)\b(?=\s*[_$a-zA-Z])'
228+ captures:
229+ 1: support.type.type.flowtype.js
230+ push:
231+ - meta_scope: meta.type.flowtype.js
232+ - match: (?=\s*(;|from))
233+ pop: true
234+ - include: flowtype-tokens
235+ - match: '(?<!\.)\b(type)\b(?=\s*{)'
236+ captures:
237+ 1: support.type.type.flowtype.js
238+ push:
239+ - meta_scope: meta.type.flowtype.js
240+ - match: "(?<=})"
241+ pop: true
242+ - include: comments
243+ - include: flowtype-brackets
244+ - include: flowtype-polymorph
245+ - match: '([_$a-zA-Z][$\w]*)'
246+ scope: entity.name.type.js
247+ flowtype-identifier:
248+ - include: support-class
249+ - match: \b(?:any|bool|boolean|mixed|number|string|void)\b
250+ scope: constant.other.primitve.flowtype.js
251+ - match: '[_$a-zA-Z][$\w]*'
252+ scope: variable.other.flowtype.js
253+ - match: \?
254+ scope: keyword.operator.flowtype.optional.js
255+ flowtype-polymorph:
256+ - match: <
257+ captures:
258+ 0: punctuation.section.flowtype.begin.js
259+ push:
260+ - meta_scope: meta.flowtype.polymorph.js
261+ - match: ">"
262+ captures:
263+ 0: punctuation.section.flowtype.end.js
264+ pop: true
265+ - include: flowtype-tokens
266+ flowtype-tokens:
267+ - match: '(?<=[:?|&=])(?=\s*{)'
268+ push:
269+ - match: "(?<=})"
270+ pop: true
271+ - include: flowtype-brackets
272+ - match: '\s*([|&])\s*'
273+ scope: meta.flowtype.set.js
274+ captures:
275+ 1: keyword.operator.flowtype.other.js
276+ - match: '[*:?&|.]|\.\.\.|\b(typeof)\b'
277+ scope: keyword.operator.flowtype.other.js
278+ - match: <
279+ captures:
280+ 0: punctuation.section.flowtype.begin.js
281+ push:
282+ - match: ">"
283+ captures:
284+ 0: punctuation.section.flowtype.end.js
285+ pop: true
286+ - include: flowtype-tokens
287+ - match: '\['
288+ captures:
289+ 0: punctuation.section.flowtype.begin.js
290+ push:
291+ - match: '\]'
292+ captures:
293+ 0: punctuation.section.flowtype.end.js
294+ pop: true
295+ - include: flowtype-tokens
296+ - match: \(
297+ captures:
298+ 0: punctuation.section.flowtype.begin.js
299+ push:
300+ - match: \)
301+ captures:
302+ 0: punctuation.section.flowtype.end.js
303+ pop: true
304+ - include: flowtype-tokens
305+ - match: "=>"
306+ captures:
307+ 0: keyword.operator.flowtype.js
308+ push:
309+ - meta_scope: meta.flowtype.function.js
310+ - match: "(?<=}|[_$a-zA-Z])"
311+ pop: true
312+ - include: flowtype-brackets
313+ - include: flowtype-identifier
314+ - include: comments
315+ - include: flowtype-identifier
316+ - include: literal-string
317+ - include: comments
318+ function-declaration-parameters:
319+ - match: \(
320+ captures:
321+ 0: punctuation.definition.parameters.begin.js
322+ push:
323+ - match: \)
324+ captures:
325+ 0: punctuation.definition.parameters.end.js
326+ pop: true
327+ - include: comments
328+ - include: flowtype-annotation
329+ - match: (?<!\.)\.\.\.
330+ scope: keyword.operator.spread.js
331+ - match: '([_$a-zA-Z][$\w]*)'
332+ scope: variable.parameter.function.js
333+ - match: ","
334+ scope: punctuation.separator.parameter.function.js
335+ - match: "="
336+ captures:
337+ 0: keyword.operator.assignment.js
338+ push:
339+ - meta_scope: meta.parameter.optional.js
340+ - match: "(?=[,)])"
341+ pop: true
342+ - include: expression
343+ graphql:
344+ - match: \s*+gql`
345+ push:
346+ - meta_scope: meta.graphql.js
347+ - match: "`"
348+ pop: true
349+ - include: scope:source.graphql
350+ - match: '\${'
351+ push:
352+ - meta_scope: js
353+ - match: "}"
354+ pop: true
355+ - include: core
356+ - match: \s*+`#graphql
357+ push:
358+ - meta_scope: meta.graphql.js
359+ - match: "`"
360+ pop: true
361+ - include: scope:source.graphql
362+ - match: '\${'
363+ push:
364+ - meta_scope: js
365+ - match: "}"
366+ pop: true
367+ - include: core
368+ jsx-attribute-assignment:
369+ - match: "="
370+ scope: keyword.operator.assignment.jsx
371+ jsx-attribute-name:
372+ - match: '[_$a-zA-Z][-$\w]*'
373+ scope: entity.other.attribute-name.jsx
374+ jsx-attributes:
375+ - include: jsx-attribute-name
376+ - include: jsx-attribute-assignment
377+ - include: jsx-string-quoted
378+ - include: jsx-evaluated-code
379+ - include: comments
380+ jsx-entities:
381+ - match: '&(?:[a-zA-Z0-9]+|#\d+|#x\h+);'
382+ scope: constant.character.entity.jsx
383+ - match: '&\S*;'
384+ scope: invalid.illegal.bad-ampersand.jsx
385+ jsx-evaluated-code:
386+ - match: "{"
387+ captures:
388+ 0: punctuation.section.embedded.begin.jsx
389+ push:
390+ - meta_scope: meta.embedded.expression.jsx
391+ - match: "}"
392+ captures:
393+ 0: punctuation.section.embedded.end.jsx
394+ pop: true
395+ - include: expression
396+ jsx-string-quoted:
397+ - match: '(["''])'
398+ captures:
399+ 0: punctuation.definition.string.begin.jsx
400+ push:
401+ - meta_scope: string.quoted.jsx
402+ - match: \1
403+ captures:
404+ 0: punctuation.definition.string.end.jsx
405+ pop: true
406+ - include: jsx-entities
407+ jsx-tag-end:
408+ - match: ">"
409+ captures:
410+ 0: meta.tag.jsx punctuation.definition.tag.end.jsx
411+ push:
412+ - match: (?=</)
413+ pop: true
414+ - include: jsx-tag-start
415+ - include: jsx-evaluated-code
416+ - include: jsx-entities
417+ jsx-tag-start:
418+ - match: '(<)([_$a-zA-Z][-$:.\w]*[$\w]*)'
419+ captures:
420+ 1: meta.tag.jsx punctuation.definition.tag.begin.jsx
421+ 2: meta.tag.jsx entity.name.tag.jsx
422+ push:
423+ - match: (</)(\2)(>)|(/>)
424+ captures:
425+ 1: meta.tag.jsx punctuation.definition.tag.begin.jsx
426+ 2: meta.tag.jsx entity.name.tag.jsx
427+ 3: meta.tag.jsx punctuation.definition.tag.end.jsx
428+ 4: meta.tag.jsx punctuation.definition.tag.end.jsx
429+ pop: true
430+ - include: jsx-tag-end
431+ - include: jsx-attributes
432+ - match: <
433+ scope: invalid.illegal.tag.incomplete.jsx
434+ literal-arrow-function:
435+ - match: |-
436+ (?x)
437+ (?:([_$a-zA-Z][$\w]*)\s*(=)\s*)?
438+ (?:\b(async)\s+)?
439+ (?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
440+ captures:
441+ 1: entity.name.function.js
442+ 2: keyword.operator.assignment.js
443+ 3: storage.type.js
444+ push:
445+ - meta_scope: meta.function.arrow.js
446+ - match: (?<=\))\s*(=>)
447+ captures:
448+ 1: storage.type.function.arrow.js
449+ pop: true
450+ - include: function-declaration-parameters
451+ - match: |-
452+ (?x)
453+ (?:([_$a-zA-Z][$\w]*)\s*(=)\s*)?
454+ (?:(async)\s+)?
455+ \b([_$a-zA-Z][$\w]*)\s*(=>)
456+ scope: meta.function.arrow.js
457+ captures:
458+ 1: entity.name.function.js
459+ 2: keyword.operator.assignment.js
460+ 3: storage.type.js
461+ 4: variable.parameter.function.js
462+ 5: storage.type.function.arrow.js
463+ - match: |-
464+ (?x)
465+ (\b_?[A-Z][$\w]*)?
466+ (\.)(prototype)
467+ (\.)([_$a-zA-Z][$\w]*)
468+ \s*(=)
469+ \s*(async)?
470+ \s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
471+ captures:
472+ 1: entity.name.class.js
473+ 2: keyword.operator.accessor.js
474+ 3: variable.language.prototype.js
475+ 4: keyword.operator.accessor.js
476+ 5: entity.name.function.js
477+ 6: keyword.operator.assignment.js
478+ 7: storage.type.js
479+ push:
480+ - meta_scope: meta.prototype.function.arrow.js
481+ - match: (?<=\))\s*(=>)
482+ captures:
483+ 1: storage.type.function.arrow.js
484+ pop: true
485+ - include: function-declaration-parameters
486+ - match: |-
487+ (?x)
488+ (\b_?[A-Z][$\w]*)?
489+ (\.)(prototype)
490+ (\.)([_$a-zA-Z][$\w]*)
491+ \s*(=)
492+ \s*(async)?
493+ \s*\b([_$a-zA-Z][$\w]*)\s*(=>)
494+ scope: meta.prototype.function.arrow.js
495+ captures:
496+ 1: entity.name.class.js
497+ 2: keyword.operator.accessor.js
498+ 3: variable.language.prototype.js
499+ 4: keyword.operator.accessor.js
500+ 5: entity.name.function.js
501+ 6: keyword.operator.assignment.js
502+ 7: storage.type.js
503+ 8: variable.parameter.function.js
504+ 9: storage.type.function.arrow.js
505+ - match: |-
506+ (?x)
507+ (\b_?[A-Z][$\w]*)?
508+ (\.)([_$a-zA-Z][$\w]*)
509+ \s*(=)
510+ \s*(async)?
511+ \s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
512+ captures:
513+ 1: entity.name.class.js
514+ 2: keyword.operator.accessor.js
515+ 3: entity.name.function.js
516+ 4: keyword.operator.assignment.js
517+ 5: storage.type.js
518+ push:
519+ - meta_scope: meta.function.static.arrow.js
520+ - match: (?<=\))\s*(=>)
521+ captures:
522+ 1: storage.type.function.arrow.js
523+ pop: true
524+ - include: function-declaration-parameters
525+ - match: |-
526+ (?x)
527+ (\b_?[A-Z][$\w]*)?
528+ (\.)([_$a-zA-Z][$\w]*)
529+ \s*(=)
530+ \s*(async)?
531+ \s*\b([_$a-zA-Z][$\w]*)\s*(=>)
532+ scope: meta.function.static.arrow.js
533+ captures:
534+ 1: entity.name.class.js
535+ 2: keyword.operator.accessor.js
536+ 3: entity.name.function.js
537+ 4: keyword.operator.assignment.js
538+ 5: storage.type.js
539+ 6: variable.parameter.function.js
540+ 7: storage.type.function.arrow.js
541+ literal-arrow-function-labels:
542+ - match: |-
543+ (?x)
544+ (?>
545+ ((')((?>[^'\\]|\\.)*)('))|
546+ ((")((?>[^"\\]|\\.)*)("))|
547+ (([_$a-zA-Z][$\w]*|\d+))
548+ )
549+ \s*(:)
550+ \s*(?:\b(async)\s+)?
551+ \s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*(=>))
552+ captures:
553+ 1: string.quoted.js
554+ 2: punctuation.definition.string.begin.js
555+ 3: entity.name.function.js
556+ 4: punctuation.definition.string.end.js
557+ 5: string.quoted.js
558+ 6: punctuation.definition.string.begin.js
559+ 7: entity.name.function.js
560+ 8: punctuation.definition.string.end.js
561+ 9: string.unquoted.js
562+ 10: entity.name.function.js
563+ 11: punctuation.separator.key-value.js
564+ 12: storage.type.js
565+ push:
566+ - meta_scope: meta.function.json.arrow.js
567+ - match: (?<=\))\s*(=>)
568+ captures:
569+ 1: storage.type.function.arrow.js
570+ pop: true
571+ - include: function-declaration-parameters
572+ - match: |-
573+ (?x)
574+ (?>
575+ ((')((?>[^'\\]|\\.)*)('))|
576+ ((")((?>[^"\\]|\\.)*)("))|
577+ (([_$a-zA-Z][$\w]*|\d+))
578+ )
579+ \s*(:)
580+ \s*(?:\b(async)\s+)?
581+ \s*\b([_$a-zA-Z][$\w]*)\s*(=>)
582+ scope: meta.function.json.arrow.js
583+ captures:
584+ 1: string.quoted.js
585+ 2: punctuation.definition.string.begin.js
586+ 3: entity.name.function.js
587+ 4: punctuation.definition.string.end.js
588+ 5: string.quoted.js
589+ 6: punctuation.definition.string.begin.js
590+ 7: entity.name.function.js
591+ 8: punctuation.definition.string.end.js
592+ 9: string.unquoted.js
593+ 10: entity.name.function.js
594+ 11: punctuation.separator.key-value.js
595+ 12: storage.type.js
596+ 13: variable.parameter.function.js
597+ 14: storage.type.function.arrow.js
598+ literal-class:
599+ - match: (?<!\.)\b(?:(class)|(interface))\b
600+ captures:
601+ 1: storage.type.class.js
602+ 2: storage.type.interface.flowtype.js
603+ push:
604+ - meta_scope: meta.class.js
605+ - match: '\}'
606+ captures:
607+ 0: meta.brace.curly.end.js
608+ pop: true
609+ - include: comments
610+ - match: '([_$a-zA-Z][$\w]*)'
611+ captures:
612+ 0: entity.name.class.js
613+ push:
614+ - match: "(?={)"
615+ pop: true
616+ - include: comments
617+ - include: flowtype-polymorph
618+ - match: (?<!\.)\b(extends)\b
619+ captures:
620+ 0: storage.type.extends.js
621+ push:
622+ - meta_scope: meta.class.extends.js
623+ - match: "(?={)"
624+ pop: true
625+ - include: flowtype-polymorph
626+ - include: expression
627+ - match: '\{'
628+ captures:
629+ 0: meta.brace.curly.begin.js
630+ push:
631+ - match: "(?=})"
632+ pop: true
633+ - include: es7-decorators
634+ - include: class-properties
635+ - include: class-method-definition
636+ - include: class-method-storage
637+ - include: brackets
638+ - include: comments
639+ literal-constructor:
640+ - match: '(new)\s+(?=[_$a-zA-Z][$\w.]*)'
641+ captures:
642+ 1: keyword.operator.new.js
643+ push:
644+ - meta_scope: meta.instance.constructor.js
645+ - match: '(?![_$a-zA-Z][$\w.]*)'
646+ pop: true
647+ - include: support-class
648+ - include: support-other
649+ - match: '([_$a-zA-Z][$\w.]*\.)?([_$a-zA-Z][$\w]*)'
650+ captures:
651+ 2: variable.function.constructor.js
652+ literal-for:
653+ - match: (?<!\.)\b(for)\b
654+ captures:
655+ 1: keyword.control.loop.js
656+ push:
657+ - meta_scope: meta.for.js
658+ - match: \)
659+ captures:
660+ 0: meta.brace.round.end.js
661+ pop: true
662+ - include: comments
663+ - match: \(
664+ captures:
665+ 0: meta.brace.round.begin.js
666+ push:
667+ - match: (?=\))
668+ pop: true
669+ - include: literal-keyword-storage
670+ - include: expression
671+ - include: literal-punctuation
672+ literal-function:
673+ - match: |-
674+ (?x)
675+ (?:([_$a-zA-Z][$\w]*)\s*(=)\s*)?
676+ (?:(async)\s+)?
677+ (function)(?>\s*(\*)|(?=[\s(<]))
678+ \s*([_$a-zA-Z][$\w]*)?
679+ captures:
680+ 1: entity.name.function.js
681+ 2: keyword.operator.assignment.js
682+ 3: storage.type.js
683+ 4: storage.type.function.js
684+ 5: keyword.generator.asterisk.js
685+ 6: entity.name.function.js
686+ push:
687+ - meta_scope: meta.function.js
688+ - match: (?<=\))
689+ pop: true
690+ - include: flowtype-polymorph
691+ - include: function-declaration-parameters
692+ - match: |-
693+ (?x)
694+ (\b_?[A-Z][$\w]*)?
695+ (\.)(prototype)
696+ (\.)([_$a-zA-Z][$\w]*)
697+ \s*(=)
698+ \s*(?:(async)\s+)?
699+ \s*(function)(?>\s*(\*)|(?=[\s(<]))
700+ \s*([_$a-zA-Z][$\w]*)?\s*
701+ captures:
702+ 1: entity.name.class.js
703+ 2: keyword.operator.accessor.js
704+ 3: variable.language.prototype.js
705+ 4: keyword.operator.accessor.js
706+ 5: entity.name.function.js
707+ 6: keyword.operator.assignment.js
708+ 7: storage.type.js
709+ 8: storage.type.function.js
710+ 9: keyword.generator.asterisk.js
711+ 10: entity.name.function.js
712+ push:
713+ - meta_scope: meta.function.prototype.js
714+ - match: (?<=\))
715+ pop: true
716+ - include: flowtype-polymorph
717+ - include: function-declaration-parameters
718+ - match: |-
719+ (?x)
720+ (\b_?[A-Z][$\w]*)?
721+ (\.)([_$a-zA-Z][$\w]*)
722+ \s*(=)
723+ \s*(?:(async)\s+)?
724+ \s*(function)(?>\s*(\*)|(?=[\s(<]))
725+ \s*([_$a-zA-Z][$\w]*)?\s*
726+ captures:
727+ 1: entity.name.class.js
728+ 2: keyword.operator.accessor.js
729+ 3: entity.name.function.js
730+ 4: keyword.operator.assignment.js
731+ 5: storage.type.js
732+ 6: storage.type.function.js
733+ 7: keyword.generator.asterisk.js
734+ 8: entity.name.function.js
735+ push:
736+ - meta_scope: meta.function.static.js
737+ - match: (?<=\))
738+ pop: true
739+ - include: flowtype-polymorph
740+ - include: function-declaration-parameters
741+ literal-function-call:
742+ - match: '([_$a-zA-Z][$\w]*)\s*(\(\s*\))'
743+ scope: meta.function-call.without-arguments.js
744+ captures:
745+ 1: variable.function.js
746+ 2: meta.group.braces.round.function.arguments.js
747+ - match: '([_$a-zA-Z][$\w]*)\s*(?=\()'
748+ scope: meta.function-call.with-arguments.js
749+ captures:
750+ 1: variable.function.js
751+ - match: '([_$a-zA-Z][$\w]*)\s*(?=`)'
752+ scope: meta.function-call.tagged-template.js
753+ captures:
754+ 1: variable.function.js
755+ literal-function-labels:
756+ - match: |-
757+ (?x)
758+ (?>
759+ ((')((?>[^'\\]|\\.)*)('))|
760+ ((")((?>[^"\\]|\\.)*)("))|
761+ (([_$a-zA-Z][$\w]*|\d+))
762+ )
763+ \s*(:)
764+ \s*(?:\b(async)\s+)?
765+ \s*(function)(?>\s*(\*)|(?=[\s(<]))
766+ \s*([_$a-zA-Z][$\w]*)?
767+ captures:
768+ 1: string.quoted.js
769+ 2: punctuation.definition.string.begin.js
770+ 3: entity.name.function.js
771+ 4: punctuation.definition.string.end.js
772+ 5: string.quoted.js
773+ 6: punctuation.definition.string.begin.js
774+ 7: entity.name.function.js
775+ 8: punctuation.definition.string.end.js
776+ 9: string.unquoted.js
777+ 10: entity.name.function.js
778+ 11: punctuation.separator.key-value.js
779+ 12: storage.type.js
780+ 13: storage.type.function.js
781+ 14: keyword.generator.asterisk.js
782+ 15: entity.name.function.js
783+ push:
784+ - meta_scope: meta.function.json.js
785+ - match: (?<=\))
786+ pop: true
787+ - include: flowtype-polymorph
788+ - include: function-declaration-parameters
789+ literal-jsx:
790+ - match: '(?<=\(|\{|\[|,|&&|\|\||\?|:|=|=>|\Wreturn|^return|\Wdefault|^)(?=\s*<[_$a-zA-Z])'
791+ push:
792+ - meta_content_scope: meta.jsx.js
793+ - match: (?<=/>|>)
794+ pop: true
795+ - include: jsx-tag-start
796+ literal-keyword-storage:
797+ - match: (?<!\.)\b(?>const|let|var)\b
798+ scope: storage.type.js
799+ literal-keywords:
800+ - include: literal-keyword-storage
801+ - match: (?<!\.)\b((?>await|yield))\b(?:\s*(\*))?
802+ captures:
803+ 1: keyword.control.flow.js
804+ 2: keyword.generator.asterisk.js
805+ - match: (?<!\.)\b(return)\b
806+ scope: keyword.control.flow.js
807+ - match: (?<!\.)\b(?>if|else)\b
808+ scope: keyword.control.conditional.js
809+ - match: (?<!\.)\b(?>catch|finally|throw|try)\b
810+ scope: keyword.control.trycatch.js
811+ - match: (?<!\.)\b(?>break|continue|do|goto|while|case|default)\b
812+ scope: keyword.control.loop.js
813+ - match: (?<!\.)\b(?>enum|module|public|package|private|interface|protected)\b
814+ scope: keyword.other.reserved.js
815+ - match: (?<!\.)\b(debugger)\b
816+ scope: keyword.other.js
817+ literal-labels:
818+ - match: |-
819+ (?x)
820+ (?<!\?)(?<!\?\s)(?=(?>
821+ ((')((?>[^'\\]|\\.)*)('))|
822+ ((")((?>[^"\\]|\\.)*)("))|
823+ )\s*:)
824+ push:
825+ - match: ":"
826+ captures:
827+ 0: punctuation.separator.key-value.js
828+ pop: true
829+ - include: literal-string
830+ - match: '(?<!\.|\?|\?\s)([_$a-zA-Z][$\w]*)\s*(:)'
831+ scope: constant.other.object.key.js
832+ captures:
833+ 1: string.unquoted.label.js
834+ 2: punctuation.separator.key-value.js
835+ literal-language-constant:
836+ - match: (?<!\.)\b(true)\b
837+ scope: constant.language.boolean.true.js
838+ - match: (?<!\.)\b(false)\b
839+ scope: constant.language.boolean.false.js
840+ - match: (?<!\.)\b(null)\b
841+ scope: constant.language.null.js
842+ - match: (?<!\.)\b(undefined)\b
843+ scope: constant.language.undefined.js
844+ - match: (?<!\.)\b(NaN)\b
845+ scope: constant.language.nan.js
846+ literal-language-variable:
847+ - match: (?<!(?<!\.\.)\.)\b(arguments)\b
848+ scope: variable.language.arguments.js
849+ - match: (?<!(?<!\.\.)\.)\b(super)\b
850+ scope: variable.language.super.js
851+ - match: (?<!(?<!\.\.)\.)\b(this)\b
852+ scope: variable.language.this.js
853+ - match: (?<!(?<!\.\.)\.)\b(self)\b
854+ scope: variable.language.self.js
855+ - match: (?<=\.)(__proto__)\b
856+ scope: variable.language.proto.js
857+ - match: (?<=\.)(constructor)\b
858+ scope: variable.language.constructor.js
859+ - match: (?<=\.)(prototype)\b
860+ scope: variable.language.prototype.js
861+ literal-method:
862+ - match: |-
863+ (?x)
864+ (?:\b(static)\s+)?
865+ (?:\b(async)\s+)?
866+ (?:(\*)\s*)?
867+ (?>
868+ ((')((?>[^'\\]|\\.)*)('))|
869+ ((")((?>[^"\\]|\\.)*)("))|
870+ (([_$a-zA-Z][$\w]*|\d+))
871+ )
872+ (?=\s*(\((?>(?>[^()]+)|\g<-1>)*\))(?>\s|/\*.*\*/)*\{)
873+ captures:
874+ 1: storage.type.js
875+ 2: storage.type.js
876+ 3: keyword.generator.asterisk.js
877+ 4: string.quoted.js
878+ 5: punctuation.definition.string.begin.js
879+ 6: entity.name.function.js
880+ 7: punctuation.definition.string.end.js
881+ 8: string.quoted.js
882+ 9: punctuation.definition.string.begin.js
883+ 10: entity.name.function.js
884+ 11: punctuation.definition.string.end.js
885+ 12: string.unquoted.js
886+ 13: entity.name.function.js
887+ push:
888+ - meta_scope: meta.method.js
889+ - match: (?<=\))
890+ pop: true
891+ - include: function-declaration-parameters
892+ - match: |-
893+ (?x)
894+ \b(?:(static)\s+)?
895+ (get|set)\s+
896+ ([_$a-zA-Z][$\w]*|\d+)\s*
897+ (?=(\((?>(?>[^()]+)|\g<-1>)*\))(?>\s|/\*.*\*/)*\{)
898+ captures:
899+ 1: storage.type.js
900+ 2: storage.type.accessor.js
901+ 3: entity.name.accessor.js
902+ push:
903+ - meta_scope: meta.accessor.js
904+ - match: (?<=\))
905+ pop: true
906+ - include: function-declaration-parameters
907+ literal-method-call:
908+ - match: |-
909+ (?x)
910+ (?:(?<=\.)|\b)
911+ ([A-Z][$\w]*)\s*(\.)
912+ ([_$a-zA-Z][$\w]*)\s*
913+ (\(\s*\))
914+ scope: meta.function-call.static.without-arguments.js
915+ captures:
916+ 1: variable.other.class.js
917+ 2: keyword.operator.accessor.js
918+ 3: variable.function.js
919+ 4: meta.group.braces.round.function.arguments.js
920+ - match: |-
921+ (?x)
922+ (?:(?<=\.)|\b)
923+ ([A-Z][$\w]*)\s*(\.)
924+ ([_$a-zA-Z][$\w]*)\s*
925+ (?=\()
926+ scope: meta.function-call.static.with-arguments.js
927+ captures:
928+ 1: variable.other.class.js
929+ 2: keyword.operator.accessor.js
930+ 3: variable.function.js
931+ - match: |-
932+ (?x)
933+ (?<=\.)
934+ ([_$a-zA-Z][$\w]*)\s*
935+ (\(\s*\))
936+ scope: meta.function-call.method.without-arguments.js
937+ captures:
938+ 1: variable.function.js
939+ 2: meta.group.braces.round.function.arguments.js
940+ - match: |-
941+ (?x)
942+ (?<=\.)
943+ ([_$a-zA-Z][$\w]*)\s*
944+ (?=\()
945+ scope: meta.function-call.method.with-arguments.js
946+ captures:
947+ 1: variable.function.js
948+ literal-module:
949+ - match: (?<!\.)\b(?>import|export|default|from|as)\b
950+ scope: keyword.operator.module.js
951+ literal-number:
952+ - match: '(?i)(?:\B[-+]|\b)0x[0-9a-f]*\.(\B|\b[0-9]+)'
953+ scope: invalid.illegal.numeric.hex.js
954+ - match: '(?:\B[-+]|\b)0[0-9]+\.(\B|\b[0-9]+)'
955+ scope: invalid.illegal.numeric.octal.js
956+ - match: |-
957+ (?xi)
958+ (?:\B[-+])?
959+ (?:
960+ \b0b[0-1]*| # binary
961+ \b0o[0-7]*| # octal
962+ \b0x[0-9a-f]*| # hex
963+ (
964+ \B\.[0-9]+| # e.g. .999
965+ \b[0-9]+(\.[0-9]*)? # e.g. 999.999, 999. or 999
966+ )(e[-+]?[0-9]+)? # e.g. e+123, E-123
967+ )
968+ scope: constant.numeric.js
969+ - match: '(?:\B[-+]|\b)(Infinity)\b'
970+ scope: constant.language.infinity.js
971+ literal-operators:
972+ - match: (?<!\.)\b(?>delete|instanceof|in|new|of|typeof|void|with)\b
973+ scope: keyword.operator.js
974+ - match: |-
975+ (?x)
976+ !(?!=)| # logical-not right-to-left right
977+ && | # logical-and left-to-right both
978+ \|\| # logical-or left-to-right both
979+ scope: keyword.operator.logical.js
980+ - match: |-
981+ (?x)
982+ =(?!=) # assignment right-to-left both
983+ scope: keyword.operator.assignment.js
984+ - match: |-
985+ (?x)
986+ %= | # assignment right-to-left both
987+ &= | # assignment right-to-left both
988+ \*= | # assignment right-to-left both
989+ \+= | # assignment right-to-left both
990+ -= | # assignment right-to-left both
991+ /= | # assignment right-to-left both
992+ \^= | # assignment right-to-left both
993+ \|= | # assignment right-to-left both
994+ <<= | # assignment right-to-left both
995+ >>= | # assignment right-to-left both
996+ >>>= # assignment right-to-left both
997+ scope: keyword.operator.assignment.augmented.js
998+ - match: |-
999+ (?x)
1000+ ~ | # bitwise-not right-to-left right
1001+ << | # bitwise-shift left-to-right both
1002+ >>> | # bitwise-shift left-to-right both
1003+ >> | # bitwise-shift left-to-right both
1004+ & | # bitwise-and left-to-right both
1005+ \^ | # bitwise-xor left-to-right both
1006+ \| # bitwise-or left-to-right both
1007+ scope: keyword.operator.bitwise.js
1008+ - match: |-
1009+ (?x)
1010+ <= | # relational left-to-right both
1011+ >= | # relational left-to-right both
1012+ < | # relational left-to-right both
1013+ > # relational left-to-right both
1014+ scope: keyword.operator.relational.js
1015+ - match: |-
1016+ (?x)
1017+ === | # equality left-to-right both
1018+ !== | # equality left-to-right both
1019+ == | # equality left-to-right both
1020+ != # equality left-to-right both
1021+ scope: keyword.operator.comparison.js
1022+ - match: |-
1023+ (?x)
1024+ -- | # decrement n/a right-or-left
1025+ \+\+ | # increment n/a right-or-left
1026+ / | # division left-to-right both
1027+ % | # modulus left-to-right both
1028+ \* | # multiplication left-to-right both
1029+ \+ | # addition left-to-right both
1030+ - # subtraction left-to-right both
1031+ scope: keyword.operator.arithmetic.js
1032+ - match: "[?:]"
1033+ scope: keyword.operator.ternary.js
1034+ - match: (?<!\.)\.\.\.
1035+ scope: keyword.operator.spread.js
1036+ - match: \.
1037+ scope: keyword.operator.accessor.js
1038+ literal-prototype:
1039+ - match: '([_$a-zA-Z][$\w]*)(\.)(prototype)\s*(=)\s*'
1040+ scope: meta.prototype.declaration.js
1041+ captures:
1042+ 1: entity.name.class.js
1043+ 2: keyword.operator.accessor.js
1044+ 3: variable.language.prototype.js
1045+ 4: keyword.operator.assignment.js
1046+ - match: '([_$a-zA-Z][$\w]*)(\.)(prototype)\b'
1047+ scope: meta.prototype.access.js
1048+ captures:
1049+ 1: entity.name.class.js
1050+ 2: keyword.operator.accessor.js
1051+ 3: variable.language.prototype.js
1052+ literal-punctuation:
1053+ - match: ;
1054+ scope: punctuation.terminator.statement.js
1055+ - match: ","
1056+ scope: meta.delimiter.comma.js
1057+ literal-regexp:
1058+ - match: |-
1059+ (?x)
1060+ (?<=
1061+ \.|\(|,|{|}|\[|;|<|>|<=|>=|==|!=|===|!==|\+|-|\*|%|\+\+|--|<<|>>|>>>|&|\||\^|!|~|&&|\|\||\?|:|=|\+=|-=|\*=|%=|<<=|>>=|>>>=|&=|\|=|\^=|/|/=|
1062+ \Wnew|\Wdelete|\Wvoid|\Wtypeof|\Winstanceof|\Win|\Wdo|\Wreturn|\Wcase|\Wthrow|\Wyield|
1063+ ^new|^delete|^void|^typeof|^instanceof|^in|^do|^return|^case|^throw|^yield|^
1064+ )\s*
1065+ (/)
1066+ (?!/|\*|$)
1067+ captures:
1068+ 1: punctuation.definition.string.begin.js
1069+ push:
1070+ - meta_scope: string.regexp.js
1071+ - match: "(/)([gimy]*)"
1072+ captures:
1073+ 1: punctuation.definition.string.end.js
1074+ 2: keyword.other.js
1075+ pop: true
1076+ - include: scope:source.regexp.js
1077+ literal-string:
1078+ - match: '(["''])'
1079+ captures:
1080+ 0: punctuation.definition.string.begin.js
1081+ push:
1082+ - meta_scope: string.quoted.js
1083+ - match: (\1)|(\n)
1084+ captures:
1085+ 1: punctuation.definition.string.end.js
1086+ 2: invalid.illegal.newline.js
1087+ pop: true
1088+ - include: string-content
1089+ literal-switch:
1090+ - match: (?<!\.)\b(switch)\b
1091+ captures:
1092+ 1: keyword.control.switch.js
1093+ push:
1094+ - meta_scope: meta.switch.js
1095+ - match: '\}'
1096+ captures:
1097+ 0: meta.brace.curly.end.js
1098+ pop: true
1099+ - include: comments
1100+ - include: round-brackets
1101+ - match: '\{'
1102+ captures:
1103+ 0: meta.brace.curly.begin.js
1104+ push:
1105+ - match: "(?=})"
1106+ pop: true
1107+ - match: (?<!\.)\b(case|default)\b
1108+ captures:
1109+ 1: keyword.control.switch.js
1110+ push:
1111+ - match: (?=:)
1112+ pop: true
1113+ - include: expression
1114+ - include: main
1115+ literal-template-string:
1116+ - match: "`"
1117+ captures:
1118+ 0: string.interpolated.js keyword.other.template.begin.js
1119+ push:
1120+ - match: "`"
1121+ captures:
1122+ 0: string.interpolated.js keyword.other.template.end.js
1123+ pop: true
1124+ - include: string-content
1125+ - match: \\`
1126+ scope: constant.character.escape.js
1127+ - match: '\${'
1128+ captures:
1129+ 0: keyword.other.substitution.begin.js
1130+ push:
1131+ - match: "}"
1132+ captures:
1133+ 0: keyword.other.substitution.end.js
1134+ pop: true
1135+ - include: expression
1136+ - match: .
1137+ scope: string.interpolated.js
1138+ literal-variable:
1139+ - match: '_*?[A-Z][_$\dA-Z]*\b'
1140+ scope: variable.other.constant.js
1141+ - match: '\b([A-Z][$\w]*)\s*(\.)([_$a-zA-Z][$\w]*)'
1142+ scope: meta.property.class.js
1143+ captures:
1144+ 1: variable.other.class.js
1145+ 2: keyword.operator.accessor.js
1146+ 3: variable.other.property.static.js
1147+ - match: '(?<!\.)([_$a-zA-Z][$\w]*)\s*(?=[\[\.])'
1148+ scope: variable.other.object.js
1149+ captures:
1150+ 1: variable.other.object.js
1151+ - match: '(?<=\.)\s*([_$a-zA-Z][$\w]*)'
1152+ scope: meta.property.object.js
1153+ captures:
1154+ 1: variable.other.property.js
1155+ - match: '[_$a-zA-Z][$\w]*'
1156+ scope: variable.other.readwrite.js
1157+ merge-conflits:
1158+ - match: '^([<]{7})\s(.+)$'
1159+ captures:
1160+ 1: invalid.illegal.conflict-marker.merge-into.js
1161+ 2: invalid.illegal.string.js
1162+ - match: "^([=|]{7})$"
1163+ captures:
1164+ 1: invalid.illegal.conflict-marker.separator.js
1165+ - match: '^([>]{7})\s(.+)$'
1166+ captures:
1167+ 1: invalid.illegal.conflict-marker.other-commit.js
1168+ 2: invalid.illegal.string.js
1169+ round-brackets:
1170+ - match: \(
1171+ captures:
1172+ 0: meta.brace.round.begin.js
1173+ push:
1174+ - meta_scope: meta.group.braces.round.js
1175+ - match: \)
1176+ captures:
1177+ 0: meta.brace.round.end.js
1178+ pop: true
1179+ - include: expression
1180+ square-brackets:
1181+ - match: '\['
1182+ captures:
1183+ 0: meta.brace.square.begin.js
1184+ push:
1185+ - meta_scope: meta.group.braces.square.js
1186+ - match: '\]'
1187+ captures:
1188+ 0: meta.brace.square.end.js
1189+ pop: true
1190+ - include: expression
1191+ string-content:
1192+ - match: \\\s*\n
1193+ scope: constant.character.escape.newline.js
1194+ - match: '\\([1-7][0-7]{0,2}|[0-7]{2,3}|[bfnrtv0''"\\]|x\h{2}|u\{\h+\}|u\h{4})'
1195+ scope: constant.character.escape.js
1196+ styled-components:
1197+ - match: (?<!\.)\b(injectGlobal|keyframes)\s*(`)
1198+ captures:
1199+ 1: variable.function.tagged-template.js
1200+ 2: punctuation.definition.string.template.begin.js
1201+ push:
1202+ - meta_scope: meta.styled-components.js
1203+ - meta_content_scope: source.css.embedded.js
1204+ - match: "`"
1205+ captures:
1206+ 0: punctuation.definition.string.template.end.js
1207+ pop: true
1208+ - include: scope:source.js.css
1209+ - match: '(?<!\.)\b(styled)(\.)([_$a-zA-Z][$\w]*)\s*(`)'
1210+ captures:
1211+ 1: variable.other.object.js
1212+ 2: punctuation.accessor.js
1213+ 3: variable.function.tagged-template.js
1214+ 4: punctuation.definition.string.template.begin.js
1215+ push:
1216+ - meta_scope: meta.styled-components.js
1217+ - meta_content_scope: source.css.embedded.js
1218+ - match: "`"
1219+ captures:
1220+ 0: punctuation.definition.string.template.end.js
1221+ pop: true
1222+ - include: scope:source.js.css
1223+ - match: '(?<!\.)\b(styled)\s*(?=(\((?>(?>[^()]+)|\g<-1>)*\))\s*`)'
1224+ captures:
1225+ 1: meta.function-call.with-arguments.js variable.function.js
1226+ push:
1227+ - meta_scope: meta.styled-components.js
1228+ - match: (?<=`)
1229+ captures:
1230+ 1: meta.function-call.with-arguments.js variable.function.js
1231+ pop: true
1232+ - match: \(
1233+ captures:
1234+ 0: punctuation.definition.group.begin.js
1235+ push:
1236+ - meta_scope: meta.function-call.with-arguments.js meta.group.js
1237+ - match: \)
1238+ captures:
1239+ 0: punctuation.definition.group.end.js
1240+ pop: true
1241+ - include: expression
1242+ - match: "`"
1243+ captures:
1244+ 0: punctuation.definition.string.template.begin.js
1245+ push:
1246+ - meta_content_scope: source.css.embedded.js
1247+ - match: "`"
1248+ captures:
1249+ 0: punctuation.definition.string.template.end.js
1250+ pop: true
1251+ - include: scope:source.js.css
1252+ support-class:
1253+ - match: (?<!\.)\b(Array|ArrayBuffer|Boolean|DataView|Date|Float32Array|Float64Array|Function|Infinity|Int16Array|Int32Array|Int8Array|JSON|Map|Math|NaN|Number|Object|Promise|Proxy|Reflect|RegExp|Set|String|Symbol|System|TypeError|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|WeakMap|WeakSet)\b
1254+ scope: support.class.builtin.js
1255+ - match: (?<!\.)\b((?>Eval|Range|Reference|Syntax|Type|URI)?Error)\b
1256+ scope: support.class.error.js
1257+ - match: \b(?>Buffer)\b
1258+ scope: support.class.node.js
1259+ support-other:
1260+ - match: (?<!\.)\b(constructor|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|hasOwnProperty|isFinite|isNaN|isPrototypeOf|parseFloat|parseInt|propertyIsEnumerable|toLocaleString|toString|unescape|valueOf)\b
1261+ scope: support.function.builtin.js
1262+ - match: (?<!\.)\b(clearImmediate|clearInterval|clearTimeout|require|setImmediate|setInterval|setTimeout)\b
1263+ scope: support.function.node.js
1264+ - match: (?<!\.)\b(?>document|window)\b
1265+ scope: support.type.object.dom.js
1266+ - match: (?<!\.)\b(?>global|GLOBAL|root|__dirname|__filename)\b
1267+ scope: support.type.object.node.js
1268+ - match: (?<!\.)\b(console)(?:(\.)(assert|count|dir|error|group|groupCollapsed|groupEnd|info|log|profile|profileEnd|table|time|timeEnd|trace|warn))?\b
1269+ captures:
1270+ 1: support.type.object.console.js
1271+ 2: keyword.operator.accessor.js
1272+ 3: support.function.console.js
1273+ - match: (?<!\.)\b(process)(?:(\.)(?:(arch|argv|config|env|execArgv|execPath|exitCode|mainModule|pid|platform|stderr|stdin|stdout|title|version|versions)|(abort|chdir|cwd|exit|getgid|getgroups|getuid|hrtime|initgroups|kill|memoryUsage|nextTick|setgid|setgroups|setuid|umask|uptime)))?\b
1274+ captures:
1275+ 1: support.type.object.process.js
1276+ 2: keyword.operator.accessor.js
1277+ 3: support.type.object.process.js
1278+ 4: support.function.process.js
1279+ - match: (?<!\.)\b(exports|module)(?:(\.)(children|exports|filename|id|loaded|parent))?\b
1280+ captures:
1281+ 1: support.type.object.module.js
1282+ 2: keyword.operator.accessor.js
1283+ 3: support.type.object.module.js
1284+ - match: "{{"
1285+ push:
1286+ - meta_scope: meta.tag.mustache.js
1287+ - match: "}}"
1288+ pop: true
assets/syntaxes/TypsecriptReact.sublime-syntaxnew file+3161
@@ -0,0 +1,3161 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: TypeScriptReact
5+file_extensions:
6+ - tsx
7+scope: source.tsx
8+contexts:
9+ main:
10+ - include: directives
11+ - include: statements
12+ - match: \A(#!).*(?=$)
13+ scope: comment.line.shebang.ts
14+ captures:
15+ 1: punctuation.definition.comment.ts
16+ comment:
17+ - match: /\*\*(?!/)
18+ captures:
19+ 0: punctuation.definition.comment.tsx
20+ push:
21+ - meta_scope: comment.block.documentation.tsx
22+ - match: \*/
23+ captures:
24+ 0: punctuation.definition.comment.tsx
25+ pop: true
26+ - include: docblock
27+ - match: (/\*)(?:\s*((@)internal)(?=\s|(\*/)))?
28+ captures:
29+ 1: punctuation.definition.comment.tsx
30+ 2: storage.type.internaldeclaration.tsx
31+ 3: punctuation.decorator.internaldeclaration.tsx
32+ push:
33+ - meta_scope: comment.block.tsx
34+ - match: \*/
35+ captures:
36+ 0: punctuation.definition.comment.tsx
37+ pop: true
38+ - match: '(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)'
39+ captures:
40+ 1: punctuation.whitespace.comment.leading.tsx
41+ 2: comment.line.double-slash.tsx
42+ 3: punctuation.definition.comment.tsx
43+ 4: storage.type.internaldeclaration.tsx
44+ 5: punctuation.decorator.internaldeclaration.tsx
45+ push:
46+ - meta_content_scope: comment.line.double-slash.tsx
47+ - match: (?=^)
48+ pop: true
49+ access-modifier:
50+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
51+ scope: storage.modifier.tsx
52+ after-operator-block-as-object-literal:
53+ - match: '(?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)'
54+ captures:
55+ 1: punctuation.definition.block.tsx
56+ push:
57+ - meta_scope: meta.objectliteral.tsx
58+ - match: '\}'
59+ captures:
60+ 0: punctuation.definition.block.tsx
61+ pop: true
62+ - include: object-member
63+ array-binding-pattern:
64+ - match: '(?:(\.\.\.)\s*)?(\[)'
65+ captures:
66+ 1: keyword.operator.rest.tsx
67+ 2: punctuation.definition.binding-pattern.array.tsx
68+ push:
69+ - match: '\]'
70+ captures:
71+ 0: punctuation.definition.binding-pattern.array.tsx
72+ pop: true
73+ - include: binding-element
74+ - include: punctuation-comma
75+ array-binding-pattern-const:
76+ - match: '(?:(\.\.\.)\s*)?(\[)'
77+ captures:
78+ 1: keyword.operator.rest.tsx
79+ 2: punctuation.definition.binding-pattern.array.tsx
80+ push:
81+ - match: '\]'
82+ captures:
83+ 0: punctuation.definition.binding-pattern.array.tsx
84+ pop: true
85+ - include: binding-element-const
86+ - include: punctuation-comma
87+ array-literal:
88+ - match: '\s*(\[)'
89+ captures:
90+ 1: meta.brace.square.tsx
91+ push:
92+ - meta_scope: meta.array.literal.tsx
93+ - match: '\]'
94+ captures:
95+ 0: meta.brace.square.tsx
96+ pop: true
97+ - include: expression
98+ - include: punctuation-comma
99+ arrow-function:
100+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==>)'
101+ scope: meta.arrow.tsx
102+ captures:
103+ 1: storage.modifier.async.tsx
104+ 2: variable.parameter.tsx
105+ - match: |-
106+ (?x) (?:
107+ (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(\basync)
108+ )? ((?<![})!\]])\s*
109+ (?=
110+ # sure shot arrow functions even if => is on new line
111+ (
112+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
113+ [(]\s*
114+ (
115+ ([)]\s*:) | # ():
116+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
117+ )
118+ ) |
119+ (
120+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
121+ ) |
122+ # arrow function possible to detect only with => on same line
123+ (
124+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
125+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
126+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
127+ \s*=> # arrow operator
128+ )
129+ )
130+ )
131+ captures:
132+ 1: storage.modifier.async.tsx
133+ push:
134+ - meta_scope: meta.arrow.tsx
135+ - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))'
136+ pop: true
137+ - include: comment
138+ - include: type-parameters
139+ - include: function-parameters
140+ - include: arrow-return-type
141+ - match: "=>"
142+ captures:
143+ 0: storage.type.function.arrow.tsx
144+ push:
145+ - meta_scope: meta.arrow.tsx
146+ - match: '(?<=\}|\S)(?<!=>)|((?!\{)(?=\S))'
147+ pop: true
148+ - include: decl-block
149+ - include: expression
150+ arrow-return-type:
151+ - match: (?<=\))\s*(:)
152+ captures:
153+ 1: keyword.operator.type.annotation.tsx
154+ push:
155+ - meta_scope: meta.return.type.arrow.tsx
156+ - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))'
157+ pop: true
158+ - include: arrow-return-type-body
159+ arrow-return-type-body:
160+ - match: '(?<=[:])(?=\s*\{)'
161+ push:
162+ - match: '(?<=\})'
163+ pop: true
164+ - include: type-object
165+ - include: type-predicate-operator
166+ - include: type
167+ async-modifier:
168+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
169+ scope: storage.modifier.async.tsx
170+ binding-element:
171+ - include: comment
172+ - include: string
173+ - include: object-binding-pattern
174+ - include: array-binding-pattern
175+ - include: destructuring-variable-rest
176+ - include: variable-initializer
177+ binding-element-const:
178+ - include: comment
179+ - include: string
180+ - include: object-binding-pattern-const
181+ - include: array-binding-pattern-const
182+ - include: destructuring-variable-rest-const
183+ - include: variable-initializer
184+ boolean-literal:
185+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
186+ scope: constant.language.boolean.true.tsx
187+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
188+ scope: constant.language.boolean.false.tsx
189+ brackets:
190+ - match: "{"
191+ push:
192+ - match: '}|(?=\*/)'
193+ pop: true
194+ - include: brackets
195+ - match: '\['
196+ push:
197+ - match: '\]|(?=\*/)'
198+ pop: true
199+ - include: brackets
200+ cast:
201+ - include: jsx
202+ class-declaration:
203+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(export)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])'
204+ captures:
205+ 1: keyword.control.export.tsx
206+ 2: storage.modifier.tsx
207+ 3: storage.type.class.tsx
208+ push:
209+ - meta_scope: meta.class.tsx
210+ - match: '(?<=\})'
211+ pop: true
212+ - include: class-declaration-or-expression-patterns
213+ class-declaration-or-expression-patterns:
214+ - include: comment
215+ - include: class-or-interface-heritage
216+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
217+ captures:
218+ 0: entity.name.type.class.tsx
219+ - include: type-parameters
220+ - include: class-or-interface-body
221+ class-expression:
222+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(class)\b(?=\s+|[<{]|\/[\/*])'
223+ captures:
224+ 1: storage.type.class.tsx
225+ push:
226+ - meta_scope: meta.class.tsx
227+ - match: '(?<=\})'
228+ pop: true
229+ - include: class-declaration-or-expression-patterns
230+ class-or-interface-body:
231+ - match: '\{'
232+ captures:
233+ 0: punctuation.definition.block.tsx
234+ push:
235+ - match: '\}'
236+ captures:
237+ 0: punctuation.definition.block.tsx
238+ pop: true
239+ - include: comment
240+ - include: decorator
241+ - include: method-declaration
242+ - include: indexer-declaration
243+ - include: field-declaration
244+ - include: string
245+ - include: type-annotation
246+ - include: variable-initializer
247+ - include: access-modifier
248+ - include: property-accessor
249+ - include: async-modifier
250+ - include: after-operator-block-as-object-literal
251+ - include: decl-block
252+ - include: expression
253+ - include: punctuation-comma
254+ - include: punctuation-semicolon
255+ class-or-interface-heritage:
256+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
257+ captures:
258+ 1: storage.modifier.tsx
259+ push:
260+ - match: '(?=\{)'
261+ pop: true
262+ - include: comment
263+ - include: class-or-interface-heritage
264+ - include: type-parameters
265+ - include: expressionWithoutIdentifiers
266+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*)'
267+ captures:
268+ 1: entity.name.type.module.tsx
269+ 2: punctuation.accessor.tsx
270+ 3: punctuation.accessor.optional.tsx
271+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
272+ captures:
273+ 1: entity.other.inherited-class.tsx
274+ - include: expressionPunctuations
275+ control-statement:
276+ - include: switch-statement
277+ - include: for-loop
278+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
279+ scope: keyword.control.trycatch.tsx
280+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
281+ captures:
282+ 1: keyword.control.loop.tsx
283+ 2: entity.name.label.tsx
284+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
285+ scope: keyword.control.loop.tsx
286+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
287+ scope: keyword.control.flow.tsx
288+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
289+ scope: keyword.control.switch.tsx
290+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
291+ scope: keyword.control.conditional.tsx
292+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
293+ scope: keyword.control.with.tsx
294+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
295+ scope: keyword.control.tsx
296+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
297+ scope: keyword.other.debugger.tsx
298+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(declare)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
299+ scope: storage.modifier.tsx
300+ decl-block:
301+ - match: '\{'
302+ captures:
303+ 0: punctuation.definition.block.tsx
304+ push:
305+ - meta_scope: meta.block.tsx
306+ - match: '\}'
307+ captures:
308+ 0: punctuation.definition.block.tsx
309+ pop: true
310+ - include: statements
311+ declaration:
312+ - include: decorator
313+ - include: var-expr
314+ - include: function-declaration
315+ - include: class-declaration
316+ - include: interface-declaration
317+ - include: enum-declaration
318+ - include: namespace-declaration
319+ - include: type-alias-declaration
320+ - include: import-equals-declaration
321+ - include: import-declaration
322+ - include: export-declaration
323+ decorator:
324+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))\@'
325+ captures:
326+ 0: punctuation.decorator.tsx
327+ push:
328+ - meta_scope: meta.decorator.tsx
329+ - match: (?=\s)
330+ pop: true
331+ - include: expression
332+ destructuring-const:
333+ - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)'
334+ push:
335+ - meta_scope: meta.object-binding-pattern-variable.tsx
336+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
337+ pop: true
338+ - include: object-binding-pattern-const
339+ - include: type-annotation
340+ - include: comment
341+ - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)'
342+ push:
343+ - meta_scope: meta.array-binding-pattern-variable.tsx
344+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
345+ pop: true
346+ - include: array-binding-pattern-const
347+ - include: type-annotation
348+ - include: comment
349+ destructuring-parameter:
350+ - match: '(?<!=|:)\s*(\{)'
351+ captures:
352+ 1: punctuation.definition.binding-pattern.object.tsx
353+ push:
354+ - meta_scope: meta.parameter.object-binding-pattern.tsx
355+ - match: '\}'
356+ captures:
357+ 0: punctuation.definition.binding-pattern.object.tsx
358+ pop: true
359+ - include: parameter-object-binding-element
360+ - match: '(?<!=|:)\s*(\[)'
361+ captures:
362+ 1: punctuation.definition.binding-pattern.array.tsx
363+ push:
364+ - meta_scope: meta.paramter.array-binding-pattern.tsx
365+ - match: '\]'
366+ captures:
367+ 0: punctuation.definition.binding-pattern.array.tsx
368+ pop: true
369+ - include: parameter-binding-element
370+ - include: punctuation-comma
371+ destructuring-parameter-rest:
372+ - match: '(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)'
373+ captures:
374+ 1: keyword.operator.rest.tsx
375+ 2: variable.parameter.tsx
376+ destructuring-variable:
377+ - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)'
378+ push:
379+ - meta_scope: meta.object-binding-pattern-variable.tsx
380+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
381+ pop: true
382+ - include: object-binding-pattern
383+ - include: type-annotation
384+ - include: comment
385+ - match: '(?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)'
386+ push:
387+ - meta_scope: meta.array-binding-pattern-variable.tsx
388+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
389+ pop: true
390+ - include: array-binding-pattern
391+ - include: type-annotation
392+ - include: comment
393+ destructuring-variable-rest:
394+ - match: '(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)'
395+ captures:
396+ 1: keyword.operator.rest.tsx
397+ 2: meta.definition.variable.tsx variable.other.readwrite.tsx
398+ destructuring-variable-rest-const:
399+ - match: '(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)'
400+ captures:
401+ 1: keyword.operator.rest.tsx
402+ 2: meta.definition.variable.tsx variable.other.constant.tsx
403+ directives:
404+ - match: '^(///)\s*(?=<(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name)\s*=\s*((\''([^\''\\]|\\\''|\\)*\'')|(\"([^\"\\]|\\\"|\\)*\")))+\s*/>\s*$)'
405+ captures:
406+ 1: punctuation.definition.comment.tsx
407+ push:
408+ - meta_scope: comment.line.triple-slash.directive.tsx
409+ - match: (?=^)
410+ pop: true
411+ - match: (<)(reference|amd-dependency|amd-module)
412+ captures:
413+ 1: punctuation.definition.tag.directive.tsx
414+ 2: entity.name.tag.directive.tsx
415+ push:
416+ - meta_scope: meta.tag.tsx
417+ - match: />
418+ captures:
419+ 0: punctuation.definition.tag.directive.tsx
420+ pop: true
421+ - match: path|types|no-default-lib|lib|name
422+ scope: entity.other.attribute-name.directive.tsx
423+ - match: "="
424+ scope: keyword.operator.assignment.tsx
425+ - include: string
426+ docblock:
427+ - match: |-
428+ (?x)
429+ ((@)(?:access|api))
430+ \s+
431+ (private|protected|public)
432+ \b
433+ captures:
434+ 1: storage.type.class.jsdoc
435+ 2: punctuation.definition.block.tag.jsdoc
436+ 3: constant.language.access-type.jsdoc
437+ - match: |-
438+ (?x)
439+ ((@)author)
440+ \s+
441+ (
442+ [^@\s<>*/]
443+ (?:[^@<>*/]|\*[^/])*
444+ )
445+ (?:
446+ \s*
447+ (<)
448+ ([^>\s]+)
449+ (>)
450+ )?
451+ captures:
452+ 1: storage.type.class.jsdoc
453+ 2: punctuation.definition.block.tag.jsdoc
454+ 3: entity.name.type.instance.jsdoc
455+ 4: punctuation.definition.bracket.angle.begin.jsdoc
456+ 5: constant.other.email.link.underline.jsdoc
457+ 6: punctuation.definition.bracket.angle.end.jsdoc
458+ - match: |-
459+ (?x)
460+ ((@)borrows) \s+
461+ ((?:[^@\s*/]|\*[^/])+) # <that namepath>
462+ \s+ (as) \s+ # as
463+ ((?:[^@\s*/]|\*[^/])+) # <this namepath>
464+ captures:
465+ 1: storage.type.class.jsdoc
466+ 2: punctuation.definition.block.tag.jsdoc
467+ 3: entity.name.type.instance.jsdoc
468+ 4: keyword.operator.control.jsdoc
469+ 5: entity.name.type.instance.jsdoc
470+ - match: ((@)example)\s+
471+ captures:
472+ 1: storage.type.class.jsdoc
473+ 2: punctuation.definition.block.tag.jsdoc
474+ push:
475+ - meta_scope: meta.example.jsdoc
476+ - match: (?=@|\*/)
477+ pop: true
478+ - match: ^\s\*\s+
479+ - match: \G(<)caption(>)
480+ captures:
481+ 0: entity.name.tag.inline.jsdoc
482+ 1: punctuation.definition.bracket.angle.begin.jsdoc
483+ 2: punctuation.definition.bracket.angle.end.jsdoc
484+ push:
485+ - meta_content_scope: constant.other.description.jsdoc
486+ - match: (</)caption(>)|(?=\*/)
487+ captures:
488+ 0: entity.name.tag.inline.jsdoc
489+ 1: punctuation.definition.bracket.angle.begin.jsdoc
490+ 2: punctuation.definition.bracket.angle.end.jsdoc
491+ pop: true
492+ - match: '[^\s@*](?:[^*]|\*[^/])*'
493+ captures:
494+ 0: source.embedded.tsx
495+ - match: (?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b
496+ captures:
497+ 1: storage.type.class.jsdoc
498+ 2: punctuation.definition.block.tag.jsdoc
499+ 3: constant.language.symbol-type.jsdoc
500+ - match: |-
501+ (?x)
502+ ((@)see)
503+ \s+
504+ (?:
505+ # URL
506+ (
507+ (?=https?://)
508+ (?:[^\s*]|\*[^/])+
509+ )
510+ |
511+ # JSDoc namepath
512+ (
513+ (?!
514+ # Avoid matching bare URIs (also acceptable as links)
515+ https?://
516+ |
517+ # Avoid matching {@inline tags}; we match those below
518+ (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag}
519+ {@(?:link|linkcode|linkplain|tutorial)\b
520+ )
521+ # Matched namepath
522+ (?:[^@\s*/]|\*[^/])+
523+ )
524+ )
525+ captures:
526+ 1: storage.type.class.jsdoc
527+ 2: punctuation.definition.block.tag.jsdoc
528+ 3: variable.other.link.underline.jsdoc
529+ 4: entity.name.type.instance.jsdoc
530+ - match: |-
531+ (?x)
532+ ((@)template)
533+ \s+
534+ # One or more valid identifiers
535+ (
536+ [A-Za-z_$] # First character: non-numeric word character
537+ [\w$.\[\]]* # Rest of identifier
538+ (?: # Possible list of additional identifiers
539+ \s* , \s*
540+ [A-Za-z_$]
541+ [\w$.\[\]]*
542+ )*
543+ )
544+ captures:
545+ 1: storage.type.class.jsdoc
546+ 2: punctuation.definition.block.tag.jsdoc
547+ 3: variable.other.jsdoc
548+ - match: |-
549+ (?x)
550+ (
551+ (@)
552+ (?:arg|argument|const|constant|member|namespace|param|var)
553+ )
554+ \s+
555+ (
556+ [A-Za-z_$]
557+ [\w$.\[\]]*
558+ )
559+ captures:
560+ 1: storage.type.class.jsdoc
561+ 2: punctuation.definition.block.tag.jsdoc
562+ 3: variable.other.jsdoc
563+ - match: '((@)typedef)\s+(?={)'
564+ captures:
565+ 1: storage.type.class.jsdoc
566+ 2: punctuation.definition.block.tag.jsdoc
567+ push:
568+ - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])'
569+ pop: true
570+ - include: jsdoctype
571+ - match: '(?:[^@\s*/]|\*[^/])+'
572+ scope: entity.name.type.instance.jsdoc
573+ - match: '((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)'
574+ captures:
575+ 1: storage.type.class.jsdoc
576+ 2: punctuation.definition.block.tag.jsdoc
577+ push:
578+ - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])'
579+ pop: true
580+ - include: jsdoctype
581+ - match: '([A-Za-z_$][\w$.\[\]]*)'
582+ scope: variable.other.jsdoc
583+ - match: |-
584+ (?x)
585+ (\[)\s*
586+ [\w$]+
587+ (?:
588+ (?:\[\])? # Foo[ ].bar properties within an array
589+ \. # Foo.Bar namespaced parameter
590+ [\w$]+
591+ )*
592+ (?:
593+ \s*
594+ (=) # [foo=bar] Default parameter value
595+ \s*
596+ (
597+ # The inner regexes are to stop the match early at */ and to not stop at escaped quotes
598+ (?>
599+ "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted
600+ '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted
601+ \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal
602+ (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else
603+ )*
604+ )
605+ )?
606+ \s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/))
607+ scope: variable.other.jsdoc
608+ captures:
609+ 1: punctuation.definition.optional-value.begin.bracket.square.jsdoc
610+ 2: keyword.operator.assignment.jsdoc
611+ 3: source.embedded.tsx
612+ 4: punctuation.definition.optional-value.end.bracket.square.jsdoc
613+ 5: invalid.illegal.syntax.jsdoc
614+ - match: |-
615+ (?x)
616+ (
617+ (@)
618+ (?:define|enum|exception|export|extends|lends|implements|modifies
619+ |namespace|private|protected|returns?|suppress|this|throws|type
620+ |yields?)
621+ )
622+ \s+(?={)
623+ captures:
624+ 1: storage.type.class.jsdoc
625+ 2: punctuation.definition.block.tag.jsdoc
626+ push:
627+ - match: '(?=\s|\*/|[^{}\[\]A-Za-z_$])'
628+ pop: true
629+ - include: jsdoctype
630+ - match: |-
631+ (?x)
632+ (
633+ (@)
634+ (?:alias|augments|callback|constructs|emits|event|fires|exports?
635+ |extends|external|function|func|host|lends|listens|interface|memberof!?
636+ |method|module|mixes|mixin|name|requires|see|this|typedef|uses)
637+ )
638+ \s+
639+ (
640+ (?:
641+ [^{}@\s*] | \*[^/]
642+ )+
643+ )
644+ captures:
645+ 1: storage.type.class.jsdoc
646+ 2: punctuation.definition.block.tag.jsdoc
647+ 3: entity.name.type.instance.jsdoc
648+ - match: '((@)(?:default(?:value)?|license|version))\s+(([''''"]))'
649+ captures:
650+ 1: storage.type.class.jsdoc
651+ 2: punctuation.definition.block.tag.jsdoc
652+ 3: variable.other.jsdoc
653+ 4: punctuation.definition.string.begin.jsdoc
654+ push:
655+ - meta_content_scope: variable.other.jsdoc
656+ - match: (\3)|(?=$|\*/)
657+ captures:
658+ 0: variable.other.jsdoc
659+ 1: punctuation.definition.string.end.jsdoc
660+ pop: true
661+ - match: '((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)'
662+ captures:
663+ 1: storage.type.class.jsdoc
664+ 2: punctuation.definition.block.tag.jsdoc
665+ 3: variable.other.jsdoc
666+ - match: '(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b'
667+ scope: storage.type.class.jsdoc
668+ captures:
669+ 1: punctuation.definition.block.tag.jsdoc
670+ - include: inline-tags
671+ enum-declaration:
672+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)'
673+ captures:
674+ 1: keyword.control.export.tsx
675+ 2: storage.modifier.tsx
676+ 3: storage.type.enum.tsx
677+ 4: entity.name.type.enum.tsx
678+ push:
679+ - meta_scope: meta.enum.declaration.tsx
680+ - match: '(?<=\})'
681+ pop: true
682+ - include: comment
683+ - match: '\{'
684+ captures:
685+ 0: punctuation.definition.block.tsx
686+ push:
687+ - match: '\}'
688+ captures:
689+ 0: punctuation.definition.block.tsx
690+ pop: true
691+ - include: comment
692+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
693+ captures:
694+ 0: variable.other.enummember.tsx
695+ push:
696+ - match: '(?=,|\}|$)'
697+ pop: true
698+ - include: comment
699+ - include: variable-initializer
700+ - match: '(?=((\''([^\''\\]|\\\''|\\)*\'')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\])))'
701+ push:
702+ - match: '(?=,|\}|$)'
703+ pop: true
704+ - include: string
705+ - include: array-literal
706+ - include: comment
707+ - include: variable-initializer
708+ - include: punctuation-comma
709+ export-declaration:
710+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*)'
711+ captures:
712+ 1: keyword.control.export.tsx
713+ 2: keyword.control.as.tsx
714+ 3: storage.type.namespace.tsx
715+ 4: entity.name.type.module.tsx
716+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))'
717+ captures:
718+ 1: keyword.control.export.tsx
719+ 2: keyword.operator.assignment.tsx
720+ 3: keyword.control.default.tsx
721+ push:
722+ - meta_scope: meta.export.default.tsx
723+ - match: (?=$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)
724+ pop: true
725+ - include: expression
726+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?!\s*:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
727+ captures:
728+ 0: keyword.control.export.tsx
729+ push:
730+ - meta_scope: meta.export.tsx
731+ - match: (?=$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)
732+ pop: true
733+ - include: import-export-declaration
734+ expression:
735+ - include: expressionWithoutIdentifiers
736+ - include: identifiers
737+ - include: expressionPunctuations
738+ expression-inside-possibly-arrow-parens:
739+ - include: expressionWithoutIdentifiers
740+ - include: function-parameters-body
741+ - include: identifiers
742+ - include: expressionPunctuations
743+ expression-operators:
744+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
745+ scope: keyword.control.flow.tsx
746+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*)'
747+ captures:
748+ 1: keyword.control.flow.tsx
749+ push:
750+ - match: \*
751+ captures:
752+ 0: keyword.generator.asterisk.tsx
753+ pop: true
754+ - include: comment
755+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))?'
756+ captures:
757+ 1: keyword.control.flow.tsx
758+ 2: keyword.generator.asterisk.tsx
759+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
760+ scope: keyword.operator.expression.delete.tsx
761+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()'
762+ scope: keyword.operator.expression.in.tsx
763+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()'
764+ scope: keyword.operator.expression.of.tsx
765+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
766+ scope: keyword.operator.expression.instanceof.tsx
767+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
768+ scope: keyword.operator.new.tsx
769+ - include: typeof-operator
770+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
771+ scope: keyword.operator.expression.void.tsx
772+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+'
773+ captures:
774+ 1: keyword.control.as.tsx
775+ push:
776+ - match: '(?=$|^|[;,:})\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+))'
777+ pop: true
778+ - include: type
779+ - match: \.\.\.
780+ scope: keyword.operator.spread.tsx
781+ - match: \*=|(?<!\()/=|%=|\+=|\-=
782+ scope: keyword.operator.assignment.compound.tsx
783+ - match: \&=|\^=|<<=|>>=|>>>=|\|=
784+ scope: keyword.operator.assignment.compound.bitwise.tsx
785+ - match: "<<|>>>|>>"
786+ scope: keyword.operator.bitwise.shift.tsx
787+ - match: "===|!==|==|!="
788+ scope: keyword.operator.comparison.tsx
789+ - match: <=|>=|<>|<|>
790+ scope: keyword.operator.relational.tsx
791+ - match: \!|&&|\|\|
792+ scope: keyword.operator.logical.tsx
793+ - match: \&|~|\^|\|
794+ scope: keyword.operator.bitwise.tsx
795+ - match: \=
796+ scope: keyword.operator.assignment.tsx
797+ - match: "--"
798+ scope: keyword.operator.decrement.tsx
799+ - match: \+\+
800+ scope: keyword.operator.increment.tsx
801+ - match: '%|\*|/|-|\+'
802+ scope: keyword.operator.arithmetic.tsx
803+ - match: '(?<=[_$[:alnum:])\]])\s*(/)(?![/*])'
804+ captures:
805+ 1: keyword.operator.arithmetic.tsx
806+ expressionPunctuations:
807+ - include: punctuation-comma
808+ - include: punctuation-accessor
809+ expressionWithoutIdentifiers:
810+ - include: jsx
811+ - include: string
812+ - include: regex
813+ - include: template
814+ - include: comment
815+ - include: function-expression
816+ - include: class-expression
817+ - include: arrow-function
818+ - include: paren-expression-possibly-arrow
819+ - include: cast
820+ - include: ternary-expression
821+ - include: new-expr
822+ - include: instanceof-expr
823+ - include: object-literal
824+ - include: expression-operators
825+ - include: function-call
826+ - include: literal
827+ - include: support-objects
828+ - include: paren-expression
829+ field-declaration:
830+ - match: |-
831+ (?x)(?<!\()(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s+)?(?=\s*((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
832+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
833+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
834+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
835+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
836+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
837+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
838+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
839+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
840+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))
841+ captures:
842+ 1: storage.modifier.tsx
843+ push:
844+ - meta_scope: meta.field.declaration.tsx
845+ - match: |-
846+ (?x)(?=\}|;|,|$|(^(?!\s*((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
847+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
848+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
849+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
850+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
851+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
852+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
853+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
854+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
855+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?<=\})
856+ pop: true
857+ - include: variable-initializer
858+ - match: |-
859+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
860+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
861+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
862+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
863+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
864+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
865+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
866+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
867+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
868+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))
869+ push:
870+ - match: |-
871+ (?x)(?=[};,=]|$|(^(?!\s*((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
872+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
873+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
874+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
875+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
876+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
877+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
878+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
879+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
880+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\?\s*)?(=|:))))|(?<=\})
881+ pop: true
882+ - include: type-annotation
883+ - include: string
884+ - include: array-literal
885+ - include: numeric-literal
886+ - include: comment
887+ - match: |-
888+ (?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
889+ # function assignment |
890+ (=\s*(
891+ ((async\s+)?(
892+ (function\s*[(<*]) |
893+ (function\s+) |
894+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
895+ )) |
896+ ((async\s*)?(
897+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
898+ # sure shot arrow functions even if => is on new line
899+ (
900+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
901+ [(]\s*
902+ (
903+ ([)]\s*:) | # ():
904+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
905+ )
906+ ) |
907+ (
908+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
909+ ) |
910+ # arrow function possible to detect only with => on same line
911+ (
912+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
913+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
914+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
915+ \s*=> # arrow operator
916+ )
917+ ))
918+ )) |
919+ # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
920+ (:\s*(
921+ (<) |
922+ ([(]\s*(
923+ ([)]) |
924+ (\.\.\.) |
925+ ([_$[:alnum:]]+\s*(
926+ ([:,?=])|
927+ ([)]\s*=>)
928+ ))
929+ ))
930+ )) |
931+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
932+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
933+ ((async\s+)?(
934+ (function\s*[(<*]) |
935+ (function\s+) |
936+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
937+ )) |
938+ ((async\s*)?(
939+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
940+ # sure shot arrow functions even if => is on new line
941+ (
942+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
943+ [(]\s*
944+ (
945+ ([)]\s*:) | # ():
946+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
947+ )
948+ ) |
949+ (
950+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
951+ ) |
952+ # arrow function possible to detect only with => on same line
953+ (
954+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
955+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
956+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
957+ \s*=> # arrow operator
958+ )
959+ ))
960+ )))
961+ captures:
962+ 1: meta.definition.property.tsx entity.name.function.tsx
963+ 2: keyword.operator.optional.tsx
964+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
965+ scope: meta.definition.property.tsx variable.object.property.tsx
966+ - match: \?
967+ scope: keyword.operator.optional.tsx
968+ for-loop:
969+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\())'
970+ captures:
971+ 0: keyword.control.loop.tsx
972+ push:
973+ - match: (?<=\))
974+ pop: true
975+ - include: comment
976+ - match: await
977+ scope: keyword.control.loop.tsx
978+ - match: \(
979+ captures:
980+ 0: meta.brace.round.tsx
981+ push:
982+ - match: \)
983+ captures:
984+ 0: meta.brace.round.tsx
985+ pop: true
986+ - include: var-expr
987+ - include: expression
988+ - include: punctuation-semicolon
989+ function-body:
990+ - include: comment
991+ - include: type-parameters
992+ - include: function-parameters
993+ - include: return-type
994+ - include: decl-block
995+ - match: \*
996+ scope: keyword.generator.asterisk.tsx
997+ function-call:
998+ - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()'
999+ push:
1000+ - match: '(?<=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()'
1001+ pop: true
1002+ - match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'
1003+ push:
1004+ - meta_scope: meta.function-call.tsx
1005+ - match: '(?=\s*(\?\.\s*)?(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)?\()'
1006+ pop: true
1007+ - include: literal
1008+ - include: support-objects
1009+ - include: object-identifiers
1010+ - include: punctuation-accessor
1011+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*[\(]\s*[\"\''\`]))'
1012+ scope: keyword.operator.expression.import.tsx
1013+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
1014+ scope: entity.name.function.tsx
1015+ - include: comment
1016+ - match: \?\.
1017+ scope: meta.function-call.tsx punctuation.accessor.optional.tsx
1018+ - include: type-arguments
1019+ - include: paren-expression
1020+ function-declaration:
1021+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*'
1022+ captures:
1023+ 1: keyword.control.export.tsx
1024+ 2: storage.modifier.async.tsx
1025+ 3: storage.type.function.tsx
1026+ 4: keyword.generator.asterisk.tsx
1027+ 5: meta.definition.function.tsx entity.name.function.tsx
1028+ push:
1029+ - meta_scope: meta.function.tsx
1030+ - match: '(?=$|^|;)|(?<=\})'
1031+ pop: true
1032+ - include: function-name
1033+ - include: function-body
1034+ function-expression:
1035+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*'
1036+ captures:
1037+ 1: storage.modifier.async.tsx
1038+ 2: storage.type.function.tsx
1039+ 3: keyword.generator.asterisk.tsx
1040+ 4: meta.definition.function.tsx entity.name.function.tsx
1041+ push:
1042+ - meta_scope: meta.function.expression.tsx
1043+ - match: '(?<=\})'
1044+ pop: true
1045+ - include: function-name
1046+ - include: function-body
1047+ function-name:
1048+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
1049+ scope: meta.definition.function.tsx entity.name.function.tsx
1050+ function-parameters:
1051+ - match: \(
1052+ captures:
1053+ 0: punctuation.definition.parameters.begin.tsx
1054+ push:
1055+ - meta_scope: meta.parameters.tsx
1056+ - match: \)
1057+ captures:
1058+ 0: punctuation.definition.parameters.end.tsx
1059+ pop: true
1060+ - include: function-parameters-body
1061+ function-parameters-body:
1062+ - include: comment
1063+ - include: decorator
1064+ - include: destructuring-parameter
1065+ - include: parameter-name
1066+ - include: type-annotation
1067+ - include: variable-initializer
1068+ - match: ","
1069+ scope: punctuation.separator.parameter.tsx
1070+ identifiers:
1071+ - include: object-identifiers
1072+ - match: |-
1073+ (?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
1074+ ((async\s+)?(
1075+ (function\s*[(<*]) |
1076+ (function\s+) |
1077+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1078+ )) |
1079+ ((async\s*)?(
1080+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
1081+ # sure shot arrow functions even if => is on new line
1082+ (
1083+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1084+ [(]\s*
1085+ (
1086+ ([)]\s*:) | # ():
1087+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1088+ )
1089+ ) |
1090+ (
1091+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
1092+ ) |
1093+ # arrow function possible to detect only with => on same line
1094+ (
1095+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1096+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1097+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
1098+ \s*=> # arrow operator
1099+ )
1100+ ))
1101+ ))
1102+ captures:
1103+ 1: punctuation.accessor.tsx
1104+ 2: punctuation.accessor.optional.tsx
1105+ 3: entity.name.function.tsx
1106+ - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])'
1107+ captures:
1108+ 1: punctuation.accessor.tsx
1109+ 2: punctuation.accessor.optional.tsx
1110+ 3: variable.other.constant.property.tsx
1111+ - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*([_$[:alpha:]][_$[:alnum:]]*)'
1112+ captures:
1113+ 1: punctuation.accessor.tsx
1114+ 2: punctuation.accessor.optional.tsx
1115+ 3: variable.other.property.tsx
1116+ - match: "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])"
1117+ scope: variable.other.constant.tsx
1118+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
1119+ scope: variable.other.readwrite.tsx
1120+ import-declaration:
1121+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(import)(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1122+ captures:
1123+ 1: keyword.control.export.tsx
1124+ 2: keyword.control.import.tsx
1125+ push:
1126+ - meta_scope: meta.import.tsx
1127+ - match: '(?<!^import|[^\._$[:alnum:]]import)(?=;|$|^)'
1128+ pop: true
1129+ - include: comment
1130+ - include: string
1131+ - match: '(?<=^import|[^\._$[:alnum:]]import)(?!\s*["''])'
1132+ push:
1133+ - match: \bfrom\b
1134+ captures:
1135+ 0: keyword.control.from.tsx
1136+ pop: true
1137+ - include: import-export-declaration
1138+ - include: import-export-declaration
1139+ import-equals-declaration:
1140+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(import)\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()'
1141+ captures:
1142+ 1: keyword.control.export.tsx
1143+ 2: keyword.control.import.tsx
1144+ 3: variable.other.readwrite.alias.tsx
1145+ 4: keyword.operator.assignment.tsx
1146+ 5: keyword.control.require.tsx
1147+ 6: meta.brace.round.tsx
1148+ push:
1149+ - meta_scope: meta.import-equals.external.tsx
1150+ - match: \)
1151+ captures:
1152+ 0: meta.brace.round.tsx
1153+ pop: true
1154+ - include: comment
1155+ - include: string
1156+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(import)\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)'
1157+ captures:
1158+ 1: keyword.control.export.tsx
1159+ 2: keyword.control.import.tsx
1160+ 3: variable.other.readwrite.alias.tsx
1161+ 4: keyword.operator.assignment.tsx
1162+ push:
1163+ - meta_scope: meta.import-equals.internal.tsx
1164+ - match: (?=;|$|^)
1165+ pop: true
1166+ - include: comment
1167+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))'
1168+ captures:
1169+ 1: entity.name.type.module.tsx
1170+ 2: punctuation.accessor.tsx
1171+ 3: punctuation.accessor.optional.tsx
1172+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
1173+ scope: variable.other.readwrite.tsx
1174+ import-export-block:
1175+ - match: '\{'
1176+ captures:
1177+ 0: punctuation.definition.block.tsx
1178+ push:
1179+ - meta_scope: meta.block.tsx
1180+ - match: '\}'
1181+ captures:
1182+ 0: punctuation.definition.block.tsx
1183+ pop: true
1184+ - include: import-export-clause
1185+ import-export-clause:
1186+ - include: comment
1187+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*))\s+(as)\s+(?:(\bdefault(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(\b[_$[:alpha:]][_$[:alnum:]]*))'
1188+ captures:
1189+ 1: keyword.control.default.tsx
1190+ 2: constant.language.import-export-all.tsx
1191+ 3: variable.other.readwrite.tsx
1192+ 4: keyword.control.as.tsx
1193+ 5: keyword.control.default.tsx
1194+ 6: variable.other.readwrite.alias.tsx
1195+ - include: punctuation-comma
1196+ - match: \*
1197+ scope: constant.language.import-export-all.tsx
1198+ - match: \b(default)\b
1199+ scope: keyword.control.default.tsx
1200+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
1201+ scope: variable.other.readwrite.alias.tsx
1202+ import-export-declaration:
1203+ - include: comment
1204+ - include: string
1205+ - include: import-export-block
1206+ - match: \bfrom\b
1207+ scope: keyword.control.from.tsx
1208+ - include: import-export-clause
1209+ indexer-declaration:
1210+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)'
1211+ captures:
1212+ 1: storage.modifier.tsx
1213+ 2: meta.brace.square.tsx
1214+ 3: variable.parameter.tsx
1215+ push:
1216+ - meta_scope: meta.indexer.declaration.tsx
1217+ - match: '(\])\s*(\?\s*)?|$'
1218+ captures:
1219+ 1: meta.brace.square.tsx
1220+ 2: keyword.operator.optional.tsx
1221+ pop: true
1222+ - include: type-annotation
1223+ indexer-mapped-type-declaration:
1224+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+'
1225+ captures:
1226+ 1: keyword.operator.type.modifier.tsx
1227+ 2: storage.modifier.tsx
1228+ 3: meta.brace.square.tsx
1229+ 4: entity.name.type.tsx
1230+ 5: keyword.operator.expression.in.tsx
1231+ push:
1232+ - meta_scope: meta.indexer.mappedtype.declaration.tsx
1233+ - match: '(\])([+-])?\s*(\?\s*)?|$'
1234+ captures:
1235+ 1: meta.brace.square.tsx
1236+ 2: keyword.operator.type.modifier.tsx
1237+ 3: keyword.operator.optional.tsx
1238+ pop: true
1239+ - include: type
1240+ inline-tags:
1241+ - match: '(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))'
1242+ scope: constant.other.description.jsdoc
1243+ captures:
1244+ 1: punctuation.definition.bracket.square.begin.jsdoc
1245+ 2: punctuation.definition.bracket.square.end.jsdoc
1246+ - match: '({)((@)(?:link(?:code|plain)?|tutorial))\s*'
1247+ captures:
1248+ 1: punctuation.definition.bracket.curly.begin.jsdoc
1249+ 2: storage.type.class.jsdoc
1250+ 3: punctuation.definition.inline.tag.jsdoc
1251+ push:
1252+ - meta_scope: entity.name.type.instance.jsdoc
1253+ - match: '}|(?=\*/)'
1254+ captures:
1255+ 0: punctuation.definition.bracket.curly.end.jsdoc
1256+ pop: true
1257+ - match: '\G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)?'
1258+ captures:
1259+ 1: variable.other.link.underline.jsdoc
1260+ 2: punctuation.separator.pipe.jsdoc
1261+ - match: '\G((?:[^{}@\s|*]|\*[^/])+)(\|)?'
1262+ captures:
1263+ 1: variable.other.description.jsdoc
1264+ 2: punctuation.separator.pipe.jsdoc
1265+ instanceof-expr:
1266+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1267+ captures:
1268+ 1: keyword.operator.expression.instanceof.tsx
1269+ push:
1270+ - match: '(?<=\))|(?=[;),}\]:?]|\|\||\&\&|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
1271+ pop: true
1272+ - include: type
1273+ interface-declaration:
1274+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(export)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])'
1275+ captures:
1276+ 1: keyword.control.export.tsx
1277+ 2: storage.modifier.tsx
1278+ 3: storage.type.interface.tsx
1279+ push:
1280+ - meta_scope: meta.interface.tsx
1281+ - match: '(?<=\})'
1282+ pop: true
1283+ - include: comment
1284+ - include: class-or-interface-heritage
1285+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
1286+ captures:
1287+ 0: entity.name.type.interface.tsx
1288+ - include: type-parameters
1289+ - include: class-or-interface-body
1290+ jsdoctype:
1291+ - match: '\G{(?:[^}*]|\*[^/}])+$'
1292+ scope: invalid.illegal.type.jsdoc
1293+ - match: '\G({)'
1294+ captures:
1295+ 0: entity.name.type.instance.jsdoc
1296+ 1: punctuation.definition.bracket.curly.begin.jsdoc
1297+ push:
1298+ - meta_content_scope: entity.name.type.instance.jsdoc
1299+ - match: '((}))\s*|(?=\*/)'
1300+ captures:
1301+ 1: entity.name.type.instance.jsdoc
1302+ 2: punctuation.definition.bracket.curly.end.jsdoc
1303+ pop: true
1304+ - include: brackets
1305+ jsx:
1306+ - include: jsx-tag-without-attributes-in-expression
1307+ - include: jsx-tag-in-expression
1308+ jsx-children:
1309+ - include: jsx-tag-without-attributes
1310+ - include: jsx-tag
1311+ - include: jsx-evaluated-code
1312+ - include: jsx-entities
1313+ jsx-entities:
1314+ - match: "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)"
1315+ scope: constant.character.entity.tsx
1316+ captures:
1317+ 1: punctuation.definition.entity.tsx
1318+ 3: punctuation.definition.entity.tsx
1319+ - match: "&"
1320+ scope: invalid.illegal.bad-ampersand.tsx
1321+ jsx-evaluated-code:
1322+ - match: '\{'
1323+ captures:
1324+ 0: punctuation.section.embedded.begin.tsx
1325+ push:
1326+ - meta_scope: meta.embedded.expression.tsx
1327+ - match: '\}'
1328+ captures:
1329+ 0: punctuation.section.embedded.end.tsx
1330+ pop: true
1331+ - include: expression
1332+ jsx-string-double-quoted:
1333+ - match: '"'
1334+ captures:
1335+ 0: punctuation.definition.string.begin.tsx
1336+ push:
1337+ - meta_scope: string.quoted.double.tsx
1338+ - match: '"'
1339+ captures:
1340+ 0: punctuation.definition.string.end.tsx
1341+ pop: true
1342+ - include: jsx-entities
1343+ jsx-string-single-quoted:
1344+ - match: "'"
1345+ captures:
1346+ 0: punctuation.definition.string.begin.tsx
1347+ push:
1348+ - meta_scope: string.quoted.single.tsx
1349+ - match: "'"
1350+ captures:
1351+ 0: punctuation.definition.string.end.tsx
1352+ pop: true
1353+ - include: jsx-entities
1354+ jsx-tag:
1355+ - match: '(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))'
1356+ push:
1357+ - meta_scope: meta.tag.tsx
1358+ - match: '(/>)|(?:(</)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))'
1359+ captures:
1360+ 1: punctuation.definition.tag.end.tsx
1361+ 2: punctuation.definition.tag.begin.tsx
1362+ 3: entity.name.tag.namespace.tsx
1363+ 4: punctuation.separator.namespace.tsx
1364+ 5: entity.name.tag.tsx
1365+ 6: support.class.component.tsx
1366+ 7: punctuation.definition.tag.end.tsx
1367+ pop: true
1368+ - match: '(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)'
1369+ captures:
1370+ 1: punctuation.definition.tag.begin.tsx
1371+ 2: entity.name.tag.namespace.tsx
1372+ 3: punctuation.separator.namespace.tsx
1373+ 4: entity.name.tag.tsx
1374+ 5: support.class.component.tsx
1375+ push:
1376+ - match: "(?=[/]?>)"
1377+ pop: true
1378+ - include: comment
1379+ - include: type-arguments
1380+ - include: jsx-tag-attributes
1381+ - match: (>)
1382+ captures:
1383+ 1: punctuation.definition.tag.end.tsx
1384+ push:
1385+ - meta_content_scope: meta.jsx.children.tsx
1386+ - match: (?=</)
1387+ pop: true
1388+ - include: jsx-children
1389+ jsx-tag-attribute-assignment:
1390+ - match: '=(?=\s*(?:''|"|{|/\*|//|\n))'
1391+ scope: keyword.operator.assignment.tsx
1392+ jsx-tag-attribute-name:
1393+ - match: |-
1394+ (?x)
1395+ \s*
1396+ (?:([_$[:alpha:]][-$[:alnum:].]*)(:))?
1397+ ([_$[:alpha:]][-$[:alnum:]]*)
1398+ (?=\s|=|/?>|/\*|//)
1399+ captures:
1400+ 1: entity.other.attribute-name.namespace.tsx
1401+ 2: punctuation.separator.namespace.tsx
1402+ 3: entity.other.attribute-name.tsx
1403+ jsx-tag-attributes:
1404+ - match: \s+
1405+ push:
1406+ - meta_scope: meta.tag.attributes.tsx
1407+ - match: "(?=[/]?>)"
1408+ pop: true
1409+ - include: comment
1410+ - include: jsx-tag-attribute-name
1411+ - include: jsx-tag-attribute-assignment
1412+ - include: jsx-string-double-quoted
1413+ - include: jsx-string-single-quoted
1414+ - include: jsx-evaluated-code
1415+ - include: jsx-tag-attributes-illegal
1416+ jsx-tag-attributes-illegal:
1417+ - match: \S+
1418+ scope: invalid.illegal.attribute.tsx
1419+ jsx-tag-in-expression:
1420+ - match: |-
1421+ (?x)
1422+ (?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*
1423+ (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow
1424+ (?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))
1425+ push:
1426+ - match: '(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>))'
1427+ pop: true
1428+ - include: jsx-tag
1429+ jsx-tag-without-attributes:
1430+ - match: '(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>)'
1431+ captures:
1432+ 1: punctuation.definition.tag.begin.tsx
1433+ 2: entity.name.tag.namespace.tsx
1434+ 3: punctuation.separator.namespace.tsx
1435+ 4: entity.name.tag.tsx
1436+ 5: support.class.component.tsx
1437+ 6: punctuation.definition.tag.end.tsx
1438+ push:
1439+ - meta_scope: meta.tag.without-attributes.tsx
1440+ - meta_content_scope: meta.jsx.children.tsx
1441+ - match: '(</)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>)'
1442+ captures:
1443+ 1: punctuation.definition.tag.begin.tsx
1444+ 2: entity.name.tag.namespace.tsx
1445+ 3: punctuation.separator.namespace.tsx
1446+ 4: entity.name.tag.tsx
1447+ 5: support.class.component.tsx
1448+ 6: punctuation.definition.tag.end.tsx
1449+ pop: true
1450+ - include: jsx-children
1451+ jsx-tag-without-attributes-in-expression:
1452+ - match: '(?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))'
1453+ push:
1454+ - match: '(?!(<)\s*(?:([_$[:alpha:]][-$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-$[:alnum:].]*))(?<!\.|-))?\s*(>))'
1455+ pop: true
1456+ - include: jsx-tag-without-attributes
1457+ label:
1458+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{)'
1459+ captures:
1460+ 1: entity.name.label.tsx
1461+ 2: punctuation.separator.label.tsx
1462+ push:
1463+ - match: '(?<=\})'
1464+ pop: true
1465+ - include: decl-block
1466+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(:)'
1467+ captures:
1468+ 1: entity.name.label.tsx
1469+ 2: punctuation.separator.label.tsx
1470+ literal:
1471+ - include: numeric-literal
1472+ - include: boolean-literal
1473+ - include: null-literal
1474+ - include: undefined-literal
1475+ - include: numericConstant-literal
1476+ - include: array-literal
1477+ - include: this-literal
1478+ - include: super-literal
1479+ method-declaration:
1480+ - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1481+ captures:
1482+ 1: storage.modifier.tsx
1483+ 2: storage.modifier.tsx
1484+ 3: storage.modifier.async.tsx
1485+ 4: storage.type.tsx
1486+ push:
1487+ - meta_scope: meta.method.declaration.tsx
1488+ - match: '(?=\}|;|,|$)|(?<=\})'
1489+ pop: true
1490+ - include: method-declaration-name
1491+ - include: function-body
1492+ - match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*[\(\<])'
1493+ captures:
1494+ 1: storage.modifier.tsx
1495+ 2: storage.modifier.tsx
1496+ 3: storage.modifier.async.tsx
1497+ 4: keyword.operator.new.tsx
1498+ 5: keyword.generator.asterisk.tsx
1499+ push:
1500+ - meta_scope: meta.method.declaration.tsx
1501+ - match: '(?=\}|;|,|$)|(?<=\})'
1502+ pop: true
1503+ - include: method-declaration-name
1504+ - include: function-body
1505+ - match: |-
1506+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1507+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1508+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1509+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1510+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1511+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1512+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1513+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1514+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1515+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\<])
1516+ captures:
1517+ 1: storage.modifier.tsx
1518+ 2: storage.modifier.tsx
1519+ 3: storage.modifier.async.tsx
1520+ 4: storage.type.property.tsx
1521+ 5: keyword.generator.asterisk.tsx
1522+ push:
1523+ - meta_scope: meta.method.declaration.tsx
1524+ - match: '(?=\}|;|,|$)|(?<=\})'
1525+ pop: true
1526+ - include: method-declaration-name
1527+ - include: function-body
1528+ method-declaration-name:
1529+ - match: |-
1530+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1531+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1532+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1533+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1534+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1535+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1536+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1537+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1538+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1539+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\<])
1540+ push:
1541+ - match: (?=\(|\<)
1542+ pop: true
1543+ - include: string
1544+ - include: array-literal
1545+ - include: numeric-literal
1546+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
1547+ scope: meta.definition.method.tsx entity.name.function.tsx
1548+ - match: \?
1549+ scope: keyword.operator.optional.tsx
1550+ namespace-declaration:
1551+ - match: '(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"''`]))'
1552+ captures:
1553+ 1: keyword.control.export.tsx
1554+ 2: storage.type.namespace.tsx
1555+ push:
1556+ - meta_scope: meta.namespace.declaration.tsx
1557+ - match: '(?<=\})|(?=;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)'
1558+ pop: true
1559+ - include: comment
1560+ - include: string
1561+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
1562+ scope: entity.name.type.module.tsx
1563+ - include: punctuation-accessor
1564+ - include: decl-block
1565+ new-expr:
1566+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1567+ captures:
1568+ 1: keyword.operator.new.tsx
1569+ push:
1570+ - meta_scope: new.expr.tsx
1571+ - match: '(?<=\))|(?=[;),}\]:]|\|\||\&\&|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
1572+ pop: true
1573+ - include: paren-expression
1574+ - include: class-declaration
1575+ - include: type
1576+ null-literal:
1577+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1578+ scope: constant.language.null.tsx
1579+ numeric-literal:
1580+ - match: '\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$)'
1581+ scope: constant.numeric.hex.tsx
1582+ - match: '\b(?<!\$)0(b|B)[01][01_]*\b(?!\$)'
1583+ scope: constant.numeric.binary.tsx
1584+ - match: '\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$)'
1585+ scope: constant.numeric.octal.tsx
1586+ - match: |-
1587+ (?x)
1588+ (?<!\$)(?:
1589+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1590+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1591+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1592+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1593+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1594+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1595+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1596+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1597+ )(?!\$)
1598+ captures:
1599+ 0: constant.numeric.decimal.tsx
1600+ 1: meta.delimiter.decimal.period.tsx
1601+ 2: meta.delimiter.decimal.period.tsx
1602+ 3: meta.delimiter.decimal.period.tsx
1603+ 4: meta.delimiter.decimal.period.tsx
1604+ 5: meta.delimiter.decimal.period.tsx
1605+ 6: meta.delimiter.decimal.period.tsx
1606+ numericConstant-literal:
1607+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1608+ scope: constant.language.nan.tsx
1609+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
1610+ scope: constant.language.infinity.tsx
1611+ object-binding-element:
1612+ - include: comment
1613+ - match: |-
1614+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1615+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1616+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1617+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1618+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1619+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1620+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1621+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1622+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1623+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
1624+ push:
1625+ - match: '(?=,|\})'
1626+ pop: true
1627+ - include: object-binding-element-propertyName
1628+ - include: binding-element
1629+ - include: object-binding-pattern
1630+ - include: destructuring-variable-rest
1631+ - include: variable-initializer
1632+ - include: punctuation-comma
1633+ object-binding-element-const:
1634+ - include: comment
1635+ - match: |-
1636+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1637+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1638+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1639+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1640+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1641+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1642+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1643+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1644+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1645+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
1646+ push:
1647+ - match: '(?=,|\})'
1648+ pop: true
1649+ - include: object-binding-element-propertyName
1650+ - include: binding-element-const
1651+ - include: object-binding-pattern-const
1652+ - include: destructuring-variable-rest-const
1653+ - include: variable-initializer
1654+ - include: punctuation-comma
1655+ object-binding-element-propertyName:
1656+ - match: |-
1657+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1658+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1659+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1660+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1661+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1662+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1663+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1664+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1665+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1666+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
1667+ push:
1668+ - match: (:)
1669+ captures:
1670+ 0: punctuation.destructuring.tsx
1671+ pop: true
1672+ - include: string
1673+ - include: array-literal
1674+ - include: numeric-literal
1675+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
1676+ scope: variable.object.property.tsx
1677+ object-binding-pattern:
1678+ - match: '(?:(\.\.\.)\s*)?(\{)'
1679+ captures:
1680+ 1: keyword.operator.rest.tsx
1681+ 2: punctuation.definition.binding-pattern.object.tsx
1682+ push:
1683+ - match: '\}'
1684+ captures:
1685+ 0: punctuation.definition.binding-pattern.object.tsx
1686+ pop: true
1687+ - include: object-binding-element
1688+ object-binding-pattern-const:
1689+ - match: '(?:(\.\.\.)\s*)?(\{)'
1690+ captures:
1691+ 1: keyword.operator.rest.tsx
1692+ 2: punctuation.definition.binding-pattern.object.tsx
1693+ push:
1694+ - match: '\}'
1695+ captures:
1696+ 0: punctuation.definition.binding-pattern.object.tsx
1697+ pop: true
1698+ - include: object-binding-element-const
1699+ object-identifiers:
1700+ - match: '([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$))'
1701+ scope: support.class.tsx
1702+ - match: |-
1703+ (?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
1704+ ([[:upper:]][_$[:digit:][:upper:]]*) |
1705+ ([_$[:alpha:]][_$[:alnum:]]*)
1706+ )(?=\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)
1707+ captures:
1708+ 1: punctuation.accessor.tsx
1709+ 2: punctuation.accessor.optional.tsx
1710+ 3: variable.other.constant.object.property.tsx
1711+ 4: variable.other.object.property.tsx
1712+ - match: |-
1713+ (?x)(?:
1714+ ([[:upper:]][_$[:digit:][:upper:]]*) |
1715+ ([_$[:alpha:]][_$[:alnum:]]*)
1716+ )(?=\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)
1717+ captures:
1718+ 1: variable.other.constant.object.tsx
1719+ 2: variable.other.object.tsx
1720+ object-literal:
1721+ - match: '\{'
1722+ captures:
1723+ 0: punctuation.definition.block.tsx
1724+ push:
1725+ - meta_scope: meta.objectliteral.tsx
1726+ - match: '\}'
1727+ captures:
1728+ 0: punctuation.definition.block.tsx
1729+ pop: true
1730+ - include: object-member
1731+ object-literal-method-declaration:
1732+ - match: |-
1733+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1734+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1735+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1736+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1737+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1738+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1739+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1740+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1741+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1742+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\<])
1743+ captures:
1744+ 1: storage.modifier.async.tsx
1745+ 2: storage.type.property.tsx
1746+ 3: keyword.generator.asterisk.tsx
1747+ push:
1748+ - meta_scope: meta.method.declaration.tsx
1749+ - match: '(?=\}|;|,)|(?<=\})'
1750+ pop: true
1751+ - include: method-declaration-name
1752+ - include: function-body
1753+ - match: |-
1754+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
1755+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
1756+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
1757+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
1758+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
1759+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
1760+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
1761+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
1762+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
1763+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*[\(\<])
1764+ captures:
1765+ 1: storage.modifier.async.tsx
1766+ 2: storage.type.property.tsx
1767+ 3: keyword.generator.asterisk.tsx
1768+ push:
1769+ - match: (?=\(|\<)
1770+ pop: true
1771+ - include: method-declaration-name
1772+ object-member:
1773+ - include: comment
1774+ - include: object-literal-method-declaration
1775+ - match: '(?=\[)'
1776+ push:
1777+ - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx
1778+ - match: '(?=:)|((?<=[\]])(?=\s*[\(\<]))'
1779+ pop: true
1780+ - include: array-literal
1781+ - match: '(?=[\''\"])'
1782+ push:
1783+ - meta_scope: meta.object.member.tsx meta.object-literal.key.tsx
1784+ - match: '(?=:)|((?<=[\''\"])(?=\s*[\(\<]))'
1785+ pop: true
1786+ - include: string
1787+ - match: '(?<=[\]\''\"])(?=\s*[\(\<])'
1788+ push:
1789+ - meta_scope: meta.method.declaration.tsx
1790+ - match: '(?=\}|;|,)|(?<=\})'
1791+ pop: true
1792+ - include: function-body
1793+ - match: '(?![_$[:alpha:]])([[:digit:]]+)\s*(?=:)'
1794+ scope: meta.object.member.tsx
1795+ captures:
1796+ 0: meta.object-literal.key.tsx
1797+ 1: constant.numeric.decimal.tsx
1798+ - match: |-
1799+ (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:\s*(
1800+ ((async\s+)?(
1801+ (function\s*[(<*]) |
1802+ (function\s+) |
1803+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1804+ )) |
1805+ ((async\s*)?(
1806+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
1807+ # sure shot arrow functions even if => is on new line
1808+ (
1809+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1810+ [(]\s*
1811+ (
1812+ ([)]\s*:) | # ():
1813+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1814+ )
1815+ ) |
1816+ (
1817+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
1818+ ) |
1819+ # arrow function possible to detect only with => on same line
1820+ (
1821+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1822+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1823+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
1824+ \s*=> # arrow operator
1825+ )
1826+ ))
1827+ )))
1828+ scope: meta.object.member.tsx
1829+ captures:
1830+ 0: meta.object-literal.key.tsx
1831+ 1: entity.name.function.tsx
1832+ - match: '(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)'
1833+ scope: meta.object.member.tsx
1834+ captures:
1835+ 0: meta.object-literal.key.tsx
1836+ - match: \.\.\.
1837+ captures:
1838+ 0: keyword.operator.spread.tsx
1839+ push:
1840+ - meta_scope: meta.object.member.tsx
1841+ - match: '(?=,|\})'
1842+ pop: true
1843+ - include: expression
1844+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$)'
1845+ scope: meta.object.member.tsx
1846+ captures:
1847+ 1: variable.other.readwrite.tsx
1848+ - match: '(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)'
1849+ push:
1850+ - meta_scope: meta.object.member.tsx
1851+ - match: '(?=,|\}|$)'
1852+ pop: true
1853+ - include: expression
1854+ - match: ":"
1855+ captures:
1856+ 0: meta.object-literal.key.tsx punctuation.separator.key-value.tsx
1857+ push:
1858+ - meta_scope: meta.object.member.tsx
1859+ - match: '(?=,|\})'
1860+ pop: true
1861+ - match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)\(\s*([\{\[]\s*)?$)'
1862+ captures:
1863+ 1: storage.modifier.async.tsx
1864+ push:
1865+ - match: (?<=\))
1866+ pop: true
1867+ - include: type-parameters
1868+ - match: \(
1869+ captures:
1870+ 0: meta.brace.round.tsx
1871+ push:
1872+ - match: \)
1873+ captures:
1874+ 0: meta.brace.round.tsx
1875+ pop: true
1876+ - include: expression-inside-possibly-arrow-parens
1877+ - match: '(?<=:)\s*(async)?\s*(\()(?=\s*([\{\[]\s*)?$)'
1878+ captures:
1879+ 1: storage.modifier.async.tsx
1880+ 2: meta.brace.round.tsx
1881+ push:
1882+ - match: \)
1883+ captures:
1884+ 0: meta.brace.round.tsx
1885+ pop: true
1886+ - include: expression-inside-possibly-arrow-parens
1887+ - include: expression
1888+ - include: punctuation-comma
1889+ parameter-array-binding-pattern:
1890+ - match: '(?:(\.\.\.)\s*)?(\[)'
1891+ captures:
1892+ 1: keyword.operator.rest.tsx
1893+ 2: punctuation.definition.binding-pattern.array.tsx
1894+ push:
1895+ - match: '\]'
1896+ captures:
1897+ 0: punctuation.definition.binding-pattern.array.tsx
1898+ pop: true
1899+ - include: parameter-binding-element
1900+ - include: punctuation-comma
1901+ parameter-binding-element:
1902+ - include: comment
1903+ - include: string
1904+ - include: parameter-object-binding-pattern
1905+ - include: parameter-array-binding-pattern
1906+ - include: destructuring-parameter-rest
1907+ - include: variable-initializer
1908+ parameter-name:
1909+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'
1910+ captures:
1911+ 1: storage.modifier.tsx
1912+ - match: |-
1913+ (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
1914+ # function assignment |
1915+ (=\s*(
1916+ ((async\s+)?(
1917+ (function\s*[(<*]) |
1918+ (function\s+) |
1919+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1920+ )) |
1921+ ((async\s*)?(
1922+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
1923+ # sure shot arrow functions even if => is on new line
1924+ (
1925+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1926+ [(]\s*
1927+ (
1928+ ([)]\s*:) | # ():
1929+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1930+ )
1931+ ) |
1932+ (
1933+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
1934+ ) |
1935+ # arrow function possible to detect only with => on same line
1936+ (
1937+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1938+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1939+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
1940+ \s*=> # arrow operator
1941+ )
1942+ ))
1943+ )) |
1944+ # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
1945+ (:\s*(
1946+ (<) |
1947+ ([(]\s*(
1948+ ([)]) |
1949+ (\.\.\.) |
1950+ ([_$[:alnum:]]+\s*(
1951+ ([:,?=])|
1952+ ([)]\s*=>)
1953+ ))
1954+ ))
1955+ )) |
1956+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
1957+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
1958+ ((async\s+)?(
1959+ (function\s*[(<*]) |
1960+ (function\s+) |
1961+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1962+ )) |
1963+ ((async\s*)?(
1964+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
1965+ # sure shot arrow functions even if => is on new line
1966+ (
1967+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
1968+ [(]\s*
1969+ (
1970+ ([)]\s*:) | # ():
1971+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1972+ )
1973+ ) |
1974+ (
1975+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
1976+ ) |
1977+ # arrow function possible to detect only with => on same line
1978+ (
1979+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
1980+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
1981+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
1982+ \s*=> # arrow operator
1983+ )
1984+ ))
1985+ )))
1986+ captures:
1987+ 1: storage.modifier.tsx
1988+ 2: keyword.operator.rest.tsx
1989+ 3: entity.name.function.tsx variable.language.this.tsx
1990+ 4: entity.name.function.tsx
1991+ 5: keyword.operator.optional.tsx
1992+ - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
1993+ captures:
1994+ 1: storage.modifier.tsx
1995+ 2: keyword.operator.rest.tsx
1996+ 3: variable.parameter.tsx variable.language.this.tsx
1997+ 4: variable.parameter.tsx
1998+ 5: keyword.operator.optional.tsx
1999+ parameter-object-binding-element:
2000+ - include: comment
2001+ - match: |-
2002+ (?x)(?=((\b(?<!\$)0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\b(?!\$))|(\b(?<!\$)0(b|B)[01][01_]*\b(?!\$))|(\b(?<!\$)0(o|O)?[0-7][0-7_]*\b(?!\$))|((?<!\$)(?:
2003+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1.1E+3
2004+ (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*\b)| # 1.E+3
2005+ (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # .1E+3
2006+ (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*\b)| # 1E+3
2007+ (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*\b)| # 1.1
2008+ (?:\b[0-9][0-9_]*(\.)\B)| # 1.
2009+ (?:\B(\.)[0-9][0-9_]*\b)| # .1
2010+ (?:\b[0-9][0-9_]*\b(?!\.)) # 1
2011+ )(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\\'|\\)*\')|(\"([^\"\\]|\\\"|\\)*\")|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))
2012+ push:
2013+ - match: '(?=,|\})'
2014+ pop: true
2015+ - include: object-binding-element-propertyName
2016+ - include: parameter-binding-element
2017+ - include: parameter-object-binding-pattern
2018+ - include: destructuring-parameter-rest
2019+ - include: variable-initializer
2020+ - include: punctuation-comma
2021+ parameter-object-binding-pattern:
2022+ - match: '(?:(\.\.\.)\s*)?(\{)'
2023+ captures:
2024+ 1: keyword.operator.rest.tsx
2025+ 2: punctuation.definition.binding-pattern.object.tsx
2026+ push:
2027+ - match: '\}'
2028+ captures:
2029+ 0: punctuation.definition.binding-pattern.object.tsx
2030+ pop: true
2031+ - include: parameter-object-binding-element
2032+ paren-expression:
2033+ - match: \(
2034+ captures:
2035+ 0: meta.brace.round.tsx
2036+ push:
2037+ - match: \)
2038+ captures:
2039+ 0: meta.brace.round.tsx
2040+ pop: true
2041+ - include: expression
2042+ paren-expression-possibly-arrow:
2043+ - match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*))?\(\s*[\{\[]\s*$)'
2044+ captures:
2045+ 1: storage.modifier.async.tsx
2046+ push:
2047+ - match: (?<=\))
2048+ pop: true
2049+ - include: paren-expression-possibly-arrow-with-typeparameters
2050+ - match: '(?<=[(=,]|=>)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*))?\()|(<))\s*$)'
2051+ captures:
2052+ 1: storage.modifier.async.tsx
2053+ push:
2054+ - match: (?<=\))
2055+ pop: true
2056+ - include: paren-expression-possibly-arrow-with-typeparameters
2057+ - include: possibly-arrow-return-type
2058+ paren-expression-possibly-arrow-with-typeparameters:
2059+ - include: type-parameters
2060+ - match: \(
2061+ captures:
2062+ 0: meta.brace.round.tsx
2063+ push:
2064+ - match: \)
2065+ captures:
2066+ 0: meta.brace.round.tsx
2067+ pop: true
2068+ - include: expression-inside-possibly-arrow-parens
2069+ possibly-arrow-return-type:
2070+ - match: '(?<=\))\s*(:)(?=\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+\s*=>)'
2071+ captures:
2072+ 1: meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx
2073+ push:
2074+ - meta_content_scope: meta.arrow.tsx meta.return.type.arrow.tsx
2075+ - match: '(?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))'
2076+ pop: true
2077+ - include: arrow-return-type-body
2078+ property-accessor:
2079+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2080+ scope: storage.type.property.tsx
2081+ punctuation-accessor:
2082+ - match: '(?:(\.)|(\?\.(?!\s*[[:digit:]])))'
2083+ captures:
2084+ 1: punctuation.accessor.tsx
2085+ 2: punctuation.accessor.optional.tsx
2086+ punctuation-comma:
2087+ - match: ","
2088+ scope: punctuation.separator.comma.tsx
2089+ punctuation-semicolon:
2090+ - match: ;
2091+ scope: punctuation.terminator.statement.tsx
2092+ qstring-double:
2093+ - match: '"'
2094+ captures:
2095+ 0: punctuation.definition.string.begin.tsx
2096+ push:
2097+ - meta_scope: string.quoted.double.tsx
2098+ - match: '(")|((?:[^\\\n])$)'
2099+ captures:
2100+ 1: punctuation.definition.string.end.tsx
2101+ 2: invalid.illegal.newline.tsx
2102+ pop: true
2103+ - include: string-character-escape
2104+ qstring-single:
2105+ - match: "'"
2106+ captures:
2107+ 0: punctuation.definition.string.begin.tsx
2108+ push:
2109+ - meta_scope: string.quoted.single.tsx
2110+ - match: '(\'')|((?:[^\\\n])$)'
2111+ captures:
2112+ 1: punctuation.definition.string.end.tsx
2113+ 2: invalid.illegal.newline.tsx
2114+ pop: true
2115+ - include: string-character-escape
2116+ regex:
2117+ - match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))'
2118+ captures:
2119+ 1: punctuation.definition.string.begin.tsx
2120+ push:
2121+ - meta_scope: string.regexp.tsx
2122+ - match: "(/)([gimsuy]*)"
2123+ captures:
2124+ 1: punctuation.definition.string.end.tsx
2125+ 2: keyword.other.tsx
2126+ pop: true
2127+ - include: regexp
2128+ - match: '(?<![_$[:alnum:])\]]|\+\+|--|})\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))'
2129+ captures:
2130+ 0: punctuation.definition.string.begin.tsx
2131+ push:
2132+ - meta_scope: string.regexp.tsx
2133+ - match: "(/)([gimsuy]*)"
2134+ captures:
2135+ 1: punctuation.definition.string.end.tsx
2136+ 2: keyword.other.tsx
2137+ pop: true
2138+ - include: regexp
2139+ regex-character-class:
2140+ - match: '\\[wWsSdDtrnvf]|\.'
2141+ scope: constant.other.character-class.regexp
2142+ - match: '\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})'
2143+ scope: constant.character.numeric.regexp
2144+ - match: '\\c[A-Z]'
2145+ scope: constant.character.control.regexp
2146+ - match: \\.
2147+ scope: constant.character.escape.backslash.regexp
2148+ regexp:
2149+ - match: '\\[bB]|\^|\$'
2150+ scope: keyword.control.anchor.regexp
2151+ - match: '\\[1-9]\d*|\\k<([a-zA-Z_$][\w$]*)>'
2152+ captures:
2153+ 0: keyword.other.back-reference.regexp
2154+ 1: variable.other.regexp
2155+ - match: '[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??'
2156+ scope: keyword.operator.quantifier.regexp
2157+ - match: \|
2158+ scope: keyword.operator.or.regexp
2159+ - match: (\()((\?=)|(\?!)|(\?<=)|(\?<!))
2160+ captures:
2161+ 1: punctuation.definition.group.regexp
2162+ 2: punctuation.definition.group.assertion.regexp
2163+ 3: meta.assertion.look-ahead.regexp
2164+ 4: meta.assertion.negative-look-ahead.regexp
2165+ 5: meta.assertion.look-behind.regexp
2166+ 6: meta.assertion.negative-look-behind.regexp
2167+ push:
2168+ - meta_scope: meta.group.assertion.regexp
2169+ - match: (\))
2170+ captures:
2171+ 1: punctuation.definition.group.regexp
2172+ pop: true
2173+ - include: regexp
2174+ - match: '\((?:(\?:)|(?:\?<([a-zA-Z_$][\w$]*)>))?'
2175+ captures:
2176+ 0: punctuation.definition.group.regexp
2177+ 1: punctuation.definition.group.no-capture.regexp
2178+ 2: variable.other.regexp
2179+ push:
2180+ - meta_scope: meta.group.regexp
2181+ - match: \)
2182+ captures:
2183+ 0: punctuation.definition.group.regexp
2184+ pop: true
2185+ - include: regexp
2186+ - match: '(\[)(\^)?'
2187+ captures:
2188+ 1: punctuation.definition.character-class.regexp
2189+ 2: keyword.operator.negation.regexp
2190+ push:
2191+ - meta_scope: constant.other.character-class.set.regexp
2192+ - match: '(\])'
2193+ captures:
2194+ 1: punctuation.definition.character-class.regexp
2195+ pop: true
2196+ - match: '(?:.|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))\-(?:[^\]\\]|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))'
2197+ scope: constant.other.character-class.range.regexp
2198+ captures:
2199+ 1: constant.character.numeric.regexp
2200+ 2: constant.character.control.regexp
2201+ 3: constant.character.escape.backslash.regexp
2202+ 4: constant.character.numeric.regexp
2203+ 5: constant.character.control.regexp
2204+ 6: constant.character.escape.backslash.regexp
2205+ - include: regex-character-class
2206+ - include: regex-character-class
2207+ return-type:
2208+ - match: (?<=\))\s*(:)(?=\s*\S)
2209+ captures:
2210+ 1: keyword.operator.type.annotation.tsx
2211+ push:
2212+ - meta_scope: meta.return.type.tsx
2213+ - match: "(?<![:|&])(?=$|^|[{};,]|//)"
2214+ pop: true
2215+ - include: return-type-core
2216+ - match: (?<=\))\s*(:)
2217+ captures:
2218+ 1: keyword.operator.type.annotation.tsx
2219+ push:
2220+ - meta_scope: meta.return.type.tsx
2221+ - match: '(?<![:|&])((?=[{};,]|//|^\s*$)|((?<=\S)(?=\s*$)))'
2222+ pop: true
2223+ - include: return-type-core
2224+ return-type-core:
2225+ - include: comment
2226+ - match: '(?<=[:|&])(?=\s*\{)'
2227+ push:
2228+ - match: '(?<=\})'
2229+ pop: true
2230+ - include: type-object
2231+ - include: type-predicate-operator
2232+ - include: type
2233+ statements:
2234+ - include: string
2235+ - include: template
2236+ - include: comment
2237+ - include: declaration
2238+ - include: control-statement
2239+ - include: after-operator-block-as-object-literal
2240+ - include: decl-block
2241+ - include: label
2242+ - include: expression
2243+ - include: punctuation-semicolon
2244+ string:
2245+ - include: qstring-single
2246+ - include: qstring-double
2247+ string-character-escape:
2248+ - match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)'
2249+ scope: constant.character.escape.tsx
2250+ super-literal:
2251+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))super\b(?!\$)'
2252+ scope: variable.language.super.tsx
2253+ support-objects:
2254+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(arguments)\b(?!\$)'
2255+ scope: variable.language.arguments.tsx
2256+ - match: |-
2257+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Array|ArrayBuffer|Atomics|Boolean|DataView|Date|Float32Array|Float64Array|Function|Generator
2258+ |GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
2259+ |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray
2260+ |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$)
2261+ scope: support.class.builtin.tsx
2262+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$)'
2263+ scope: support.class.error.tsx
2264+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Promise)\b(?!\$)'
2265+ scope: support.class.promise.tsx
2266+ - match: |-
2267+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|
2268+ isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\()
2269+ scope: support.function.tsx
2270+ - match: |-
2271+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
2272+ (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|
2273+ expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|
2274+ round|sign|sin|sinh|sqrt|tan|tanh|trunc)
2275+ |
2276+ (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$)
2277+ captures:
2278+ 1: support.constant.math.tsx
2279+ 2: punctuation.accessor.tsx
2280+ 3: punctuation.accessor.optional.tsx
2281+ 4: support.function.math.tsx
2282+ 5: support.constant.property.math.tsx
2283+ - match: |-
2284+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(
2285+ assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log
2286+ |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$)
2287+ captures:
2288+ 1: support.class.console.tsx
2289+ 2: punctuation.accessor.tsx
2290+ 3: punctuation.accessor.optional.tsx
2291+ 4: support.function.console.tsx
2292+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$)'
2293+ captures:
2294+ 1: support.constant.json.tsx
2295+ 2: punctuation.accessor.tsx
2296+ 3: punctuation.accessor.optional.tsx
2297+ 4: support.function.json.tsx
2298+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)'
2299+ captures:
2300+ 1: keyword.control.import.tsx
2301+ 2: punctuation.accessor.tsx
2302+ 3: punctuation.accessor.optional.tsx
2303+ 4: support.variable.property.importmeta.tsx
2304+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)'
2305+ captures:
2306+ 1: keyword.operator.new.tsx
2307+ 2: punctuation.accessor.tsx
2308+ 3: punctuation.accessor.optional.tsx
2309+ 4: support.variable.property.target.tsx
2310+ - match: |-
2311+ (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
2312+ (constructor|length|prototype|__proto__)
2313+ |
2314+ (EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY))\b(?!\$)
2315+ captures:
2316+ 1: punctuation.accessor.tsx
2317+ 2: punctuation.accessor.optional.tsx
2318+ 3: support.variable.property.tsx
2319+ 4: support.constant.tsx
2320+ - match: |-
2321+ (?x) (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.)) \b (?:
2322+ (document|event|navigator|performance|screen|window)
2323+ |
2324+ (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener
2325+ |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule
2326+ |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration
2327+ |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern
2328+ |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent
2329+ |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException
2330+ |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer
2331+ |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry
2332+ |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent
2333+ |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential
2334+ |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync
2335+ |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement
2336+ |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement
2337+ |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement
2338+ |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement
2339+ |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement
2340+ |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement
2341+ |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement
2342+ |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement
2343+ |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement
2344+ |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement
2345+ |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement
2346+ |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase
2347+ |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction
2348+ |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities
2349+ |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess
2350+ |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent
2351+ |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream
2352+ |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent
2353+ |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID
2354+ |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification
2355+ |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential
2356+ |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark
2357+ |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList
2358+ |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent
2359+ |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList
2360+ |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager
2361+ |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource
2362+ |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement
2363+ |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength
2364+ |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio
2365+ |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement
2366+ |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement
2367+ |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement
2368+ |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength
2369+ |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement
2370+ |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio
2371+ |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList
2372+ |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement
2373+ |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement
2374+ |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState
2375+ |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet
2376+ |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable
2377+ |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer
2378+ |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat
2379+ |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES
2380+ |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope
2381+ |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult
2382+ |XSLTProcessor))\b(?!\$)
2383+ captures:
2384+ 1: support.variable.dom.tsx
2385+ 2: support.class.dom.tsx
2386+ - match: |-
2387+ (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
2388+ (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE
2389+ |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR
2390+ |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR
2391+ |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)
2392+ |
2393+ (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName
2394+ |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop
2395+ |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor
2396+ |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption
2397+ |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear
2398+ |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete
2399+ |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset
2400+ |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight
2401+ |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds
2402+ |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize
2403+ |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host
2404+ |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth
2405+ |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext
2406+ |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom
2407+ |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple
2408+ |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName
2409+ |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight
2410+ |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer
2411+ |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling
2412+ |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText
2413+ |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts
2414+ |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove
2415+ |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
2416+ |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
2417+ |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
2418+ |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?\()
2419+ captures:
2420+ 1: punctuation.accessor.tsx
2421+ 2: punctuation.accessor.optional.tsx
2422+ 3: support.constant.dom.tsx
2423+ 4: support.variable.property.dom.tsx
2424+ - match: |-
2425+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream
2426+ |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$)
2427+ scope: support.class.node.tsx
2428+ - match: |-
2429+ (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?:
2430+ (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)
2431+ |
2432+ (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)
2433+ ))?\b(?!\$)
2434+ captures:
2435+ 1: support.variable.object.process.tsx
2436+ 2: punctuation.accessor.tsx
2437+ 3: punctuation.accessor.optional.tsx
2438+ 4: support.variable.property.process.tsx
2439+ 5: support.function.process.tsx
2440+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$)'
2441+ captures:
2442+ 1: support.type.object.module.tsx
2443+ 2: support.type.object.module.tsx
2444+ 3: punctuation.accessor.tsx
2445+ 4: punctuation.accessor.optional.tsx
2446+ 5: support.type.object.module.tsx
2447+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$)'
2448+ scope: support.variable.object.node.tsx
2449+ - match: |-
2450+ (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s*
2451+ (?:
2452+ (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|
2453+ Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|
2454+ Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|
2455+ Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|
2456+ Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|
2457+ Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|
2458+ Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|
2459+ Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)
2460+ ) |
2461+ (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
2462+ scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|
2463+ sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|
2464+ Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|
2465+ Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|
2466+ savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
2467+ contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
2468+ createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
2469+ test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
2470+ untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|
2471+ print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
2472+ fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
2473+ forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
2474+ abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
2475+ releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|
2476+ Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|
2477+ Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|
2478+ moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back
2479+ ) |
2480+ (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
2481+ appendChild|appendData|before|blur|canPlayType|captureStream|
2482+ caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
2483+ cloneContents|cloneNode|cloneRange|close|closest|collapse|
2484+ compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
2485+ convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
2486+ createAttributeNS|createCaption|createCDATASection|createComment|
2487+ createContextualFragment|createDocument|createDocumentFragment|
2488+ createDocumentType|createElement|createElementNS|createEntityReference|
2489+ createEvent|createExpression|createHTMLDocument|createNodeIterator|
2490+ createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
2491+ createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
2492+ deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
2493+ deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
2494+ enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
2495+ exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
2496+ getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
2497+ getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
2498+ getClientRects|getContext|getDestinationInsertionPoints|getElementById|
2499+ getElementsByClassName|getElementsByName|getElementsByTagName|
2500+ getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
2501+ getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
2502+ hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
2503+ insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
2504+ insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
2505+ isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
2506+ lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
2507+ moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
2508+ parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
2509+ previousSibling|probablySupportsContext|queryCommandEnabled|
2510+ queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
2511+ querySelector|querySelectorAll|registerContentHandler|registerElement|
2512+ registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
2513+ removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
2514+ removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
2515+ requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
2516+ scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
2517+ setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
2518+ setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
2519+ setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
2520+ slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
2521+ submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
2522+ toDataURL|toggle|toString|values|write|writeln
2523+ ) |
2524+ (all|catch|finally|race|reject|resolve|then
2525+ )
2526+ )(?=\s*\()
2527+ captures:
2528+ 1: punctuation.accessor.tsx
2529+ 2: punctuation.accessor.optional.tsx
2530+ 3: support.function.event-handler.tsx
2531+ 4: support.function.tsx
2532+ 5: support.function.dom.tsx
2533+ 6: support.function.promise.tsx
2534+ switch-statement:
2535+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bswitch\s*\()'
2536+ push:
2537+ - meta_scope: switch-statement.expr.tsx
2538+ - match: '\}'
2539+ captures:
2540+ 0: punctuation.definition.block.tsx
2541+ pop: true
2542+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(switch)\s*(\()'
2543+ captures:
2544+ 1: keyword.control.switch.tsx
2545+ 2: meta.brace.round.tsx
2546+ push:
2547+ - meta_scope: switch-expression.expr.tsx
2548+ - match: \)
2549+ captures:
2550+ 0: meta.brace.round.tsx
2551+ pop: true
2552+ - include: expression
2553+ - match: '\{'
2554+ captures:
2555+ 0: punctuation.definition.block.tsx
2556+ push:
2557+ - meta_scope: switch-block.expr.tsx
2558+ - match: '(?=\})'
2559+ pop: true
2560+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2561+ captures:
2562+ 1: keyword.control.switch.tsx
2563+ push:
2564+ - meta_scope: case-clause.expr.tsx
2565+ - match: (?=:)
2566+ pop: true
2567+ - include: expression
2568+ - match: '(:)\s*(\{)'
2569+ captures:
2570+ 1: case-clause.expr.tsx punctuation.definition.section.case-statement.tsx
2571+ 2: meta.block.tsx punctuation.definition.block.tsx
2572+ push:
2573+ - meta_content_scope: meta.block.tsx
2574+ - match: '\}'
2575+ captures:
2576+ 0: meta.block.tsx punctuation.definition.block.tsx
2577+ pop: true
2578+ - include: statements
2579+ - match: (:)
2580+ captures:
2581+ 0: case-clause.expr.tsx punctuation.definition.section.case-statement.tsx
2582+ - include: statements
2583+ template:
2584+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''[^\'']*\'')|(\"[^\"]*\")|(\`[^\`]*\`))(?=\s*([\<\>\,\.\[=]|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?!=)\>)*(?!=)>\s*)`)'
2585+ captures:
2586+ 1: entity.name.function.tagged-template.tsx
2587+ push:
2588+ - meta_scope: string.template.tsx
2589+ - match: (?=`)
2590+ pop: true
2591+ - include: type-arguments
2592+ - match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
2593+ captures:
2594+ 1: entity.name.function.tagged-template.tsx
2595+ 2: punctuation.definition.string.template.begin.tsx
2596+ push:
2597+ - meta_scope: string.template.tsx
2598+ - match: "`"
2599+ captures:
2600+ 0: punctuation.definition.string.template.end.tsx
2601+ pop: true
2602+ - include: template-substitution-element
2603+ - include: string-character-escape
2604+ template-substitution-element:
2605+ - match: '\$\{'
2606+ captures:
2607+ 0: punctuation.definition.template-expression.begin.tsx
2608+ push:
2609+ - meta_scope: meta.template.expression.tsx
2610+ - meta_content_scope: meta.embedded.line.tsx
2611+ - match: '\}'
2612+ captures:
2613+ 0: punctuation.definition.template-expression.end.tsx
2614+ pop: true
2615+ - include: expression
2616+ ternary-expression:
2617+ - match: '(?!\?\.\s*[^[:digit:]])(\?)'
2618+ captures:
2619+ 1: keyword.operator.ternary.tsx
2620+ push:
2621+ - match: \s*(:)
2622+ captures:
2623+ 1: keyword.operator.ternary.tsx
2624+ pop: true
2625+ - include: expression
2626+ this-literal:
2627+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))this\b(?!\$)'
2628+ scope: variable.language.this.tsx
2629+ type:
2630+ - include: comment
2631+ - include: string
2632+ - include: numeric-literal
2633+ - include: type-primitive
2634+ - include: type-builtin-literals
2635+ - include: type-parameters
2636+ - include: type-tuple
2637+ - include: type-object
2638+ - include: type-conditional
2639+ - include: type-operators
2640+ - include: type-fn-type-parameters
2641+ - include: type-paren-or-function-parameters
2642+ - include: type-function-return-type
2643+ - include: type-name
2644+ type-alias-declaration:
2645+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*'
2646+ captures:
2647+ 1: keyword.control.export.tsx
2648+ 2: storage.type.type.tsx
2649+ 3: entity.name.type.alias.tsx
2650+ push:
2651+ - meta_scope: meta.type.declaration.tsx
2652+ - match: '(?=\}|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)'
2653+ pop: true
2654+ - include: comment
2655+ - include: type-parameters
2656+ - match: (=)\s*
2657+ captures:
2658+ 1: keyword.operator.assignment.tsx
2659+ push:
2660+ - match: '(?=\}|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)'
2661+ pop: true
2662+ - include: type
2663+ type-annotation:
2664+ - match: (:)(?=\s*\S)
2665+ captures:
2666+ 1: keyword.operator.type.annotation.tsx
2667+ push:
2668+ - meta_scope: meta.type.annotation.tsx
2669+ - match: '(?<![:|&])((?=$|^|[,);\}\]]|//)|(?==[^>])|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))'
2670+ pop: true
2671+ - include: type
2672+ - match: (:)
2673+ captures:
2674+ 1: keyword.operator.type.annotation.tsx
2675+ push:
2676+ - meta_scope: meta.type.annotation.tsx
2677+ - match: '(?<![:|&])((?=[,);\}\]]|//)|(?==[^>])|(?=^\s*$)|((?<=\S)(?=\s*$))|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)))'
2678+ pop: true
2679+ - include: type
2680+ type-arguments:
2681+ - match: \<
2682+ captures:
2683+ 0: punctuation.definition.typeparameters.begin.tsx
2684+ push:
2685+ - meta_scope: meta.type.parameters.tsx
2686+ - match: \>
2687+ captures:
2688+ 0: punctuation.definition.typeparameters.end.tsx
2689+ pop: true
2690+ - include: type
2691+ - include: punctuation-comma
2692+ type-builtin-literals:
2693+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2694+ scope: support.type.builtin.tsx
2695+ type-conditional:
2696+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(extends)\s+'
2697+ captures:
2698+ 1: storage.modifier.tsx
2699+ push:
2700+ - match: (?<=:)
2701+ pop: true
2702+ - match: \?
2703+ captures:
2704+ 0: keyword.operator.ternary.tsx
2705+ push:
2706+ - match: ":"
2707+ captures:
2708+ 0: keyword.operator.ternary.tsx
2709+ pop: true
2710+ - include: type
2711+ - include: type
2712+ type-fn-type-parameters:
2713+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b(?=\s*\<)'
2714+ scope: meta.type.constructor.tsx
2715+ captures:
2716+ 1: keyword.control.new.tsx
2717+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b\s*(?=\()'
2718+ captures:
2719+ 1: keyword.control.new.tsx
2720+ push:
2721+ - meta_scope: meta.type.constructor.tsx
2722+ - match: (?<=\))
2723+ pop: true
2724+ - include: function-parameters
2725+ - match: |-
2726+ (?x)(
2727+ (?=
2728+ [(]\s*(
2729+ ([)]) |
2730+ (\.\.\.) |
2731+ ([_$[:alnum:]]+\s*(
2732+ ([:,?=])|
2733+ ([)]\s*=>)
2734+ ))
2735+ )
2736+ )
2737+ )
2738+ push:
2739+ - meta_scope: meta.type.function.tsx
2740+ - match: (?<=\))
2741+ pop: true
2742+ - include: function-parameters
2743+ type-function-return-type:
2744+ - match: (=>)(?=\s*\S)
2745+ captures:
2746+ 1: storage.type.function.arrow.tsx
2747+ push:
2748+ - meta_scope: meta.type.function.return.tsx
2749+ - match: '(?<!=>)(?<![|&])(?=[,\]\)\{\}=;>:\?]|//|$)'
2750+ pop: true
2751+ - include: type-function-return-type-core
2752+ - match: "=>"
2753+ captures:
2754+ 0: storage.type.function.arrow.tsx
2755+ push:
2756+ - meta_scope: meta.type.function.return.tsx
2757+ - match: '(?<!=>)(?<![|&])((?=[,\]\)\{\}=;:\?>]|//|^\s*$)|((?<=\S)(?=\s*$)))'
2758+ pop: true
2759+ - include: type-function-return-type-core
2760+ type-function-return-type-core:
2761+ - include: comment
2762+ - match: '(?<==>)(?=\s*\{)'
2763+ push:
2764+ - match: '(?<=\})'
2765+ pop: true
2766+ - include: type-object
2767+ - include: type-predicate-operator
2768+ - include: type
2769+ type-name:
2770+ - match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))'
2771+ captures:
2772+ 1: entity.name.type.module.tsx
2773+ 2: punctuation.accessor.tsx
2774+ 3: punctuation.accessor.optional.tsx
2775+ - match: "[_$[:alpha:]][_$[:alnum:]]*"
2776+ scope: entity.name.type.tsx
2777+ type-object:
2778+ - match: '\{'
2779+ captures:
2780+ 0: punctuation.definition.block.tsx
2781+ push:
2782+ - meta_scope: meta.object.type.tsx
2783+ - match: '\}'
2784+ captures:
2785+ 0: punctuation.definition.block.tsx
2786+ pop: true
2787+ - include: comment
2788+ - include: method-declaration
2789+ - include: indexer-declaration
2790+ - include: indexer-mapped-type-declaration
2791+ - include: field-declaration
2792+ - include: type-annotation
2793+ - match: \.\.\.
2794+ captures:
2795+ 0: keyword.operator.spread.tsx
2796+ push:
2797+ - match: '(?=\}|;|,|$)|(?<=\})'
2798+ pop: true
2799+ - include: type
2800+ - include: punctuation-comma
2801+ - include: punctuation-semicolon
2802+ - include: type
2803+ type-operators:
2804+ - include: typeof-operator
2805+ - match: '(?:([&|])|(=(?!>)))(?=\s*\{)'
2806+ captures:
2807+ 1: keyword.operator.type.tsx
2808+ 2: keyword.operator.assignment.tsx
2809+ push:
2810+ - match: '(?<=\})'
2811+ pop: true
2812+ - include: type-object
2813+ - match: "([&|])|(=(?!>))"
2814+ captures:
2815+ 1: keyword.operator.type.tsx
2816+ 2: keyword.operator.assignment.tsx
2817+ push:
2818+ - match: (?=\S)
2819+ pop: true
2820+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2821+ scope: keyword.operator.expression.keyof.tsx
2822+ - match: (\?|\:)
2823+ scope: keyword.operator.ternary.tsx
2824+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]])'
2825+ scope: keyword.operator.expression.infer.tsx
2826+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\()'
2827+ scope: keyword.operator.expression.import.tsx
2828+ type-parameters:
2829+ - match: (<)
2830+ captures:
2831+ 1: punctuation.definition.typeparameters.begin.tsx
2832+ push:
2833+ - meta_scope: meta.type.parameters.tsx
2834+ - match: (>)
2835+ captures:
2836+ 1: punctuation.definition.typeparameters.end.tsx
2837+ pop: true
2838+ - include: comment
2839+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2840+ scope: storage.modifier.tsx
2841+ - include: type
2842+ - include: punctuation-comma
2843+ type-paren-or-function-parameters:
2844+ - match: \(
2845+ captures:
2846+ 0: meta.brace.round.tsx
2847+ push:
2848+ - meta_scope: meta.type.paren.cover.tsx
2849+ - match: \)
2850+ captures:
2851+ 0: meta.brace.round.tsx
2852+ pop: true
2853+ - include: destructuring-parameter
2854+ - match: |-
2855+ (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*(
2856+ (<) |
2857+ ([(]\s*(
2858+ ([)]) |
2859+ (\.\.\.) |
2860+ ([_$[:alnum:]]+\s*(
2861+ ([:,?=])|
2862+ ([)]\s*=>)
2863+ ))
2864+ ))
2865+ )) |
2866+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))))
2867+ captures:
2868+ 1: storage.modifier.tsx
2869+ 2: keyword.operator.rest.tsx
2870+ 3: entity.name.function.tsx variable.language.this.tsx
2871+ 4: entity.name.function.tsx
2872+ 5: keyword.operator.optional.tsx
2873+ - match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:)'
2874+ captures:
2875+ 1: storage.modifier.tsx
2876+ 2: keyword.operator.rest.tsx
2877+ 3: variable.parameter.tsx variable.language.this.tsx
2878+ 4: variable.parameter.tsx
2879+ 5: keyword.operator.optional.tsx
2880+ - include: type-annotation
2881+ - match: ","
2882+ scope: punctuation.separator.parameter.tsx
2883+ - include: type
2884+ type-predicate-operator:
2885+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2886+ scope: keyword.operator.expression.is.tsx
2887+ type-primitive:
2888+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|boolean|symbol|any|void|never)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2889+ scope: support.type.primitive.tsx
2890+ type-tuple:
2891+ - match: '\['
2892+ captures:
2893+ 0: meta.brace.square.tsx
2894+ push:
2895+ - meta_scope: meta.type.tuple.tsx
2896+ - match: '\]'
2897+ captures:
2898+ 0: meta.brace.square.tsx
2899+ pop: true
2900+ - include: type
2901+ - include: punctuation-comma
2902+ typeof-operator:
2903+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2904+ scope: keyword.operator.expression.typeof.tsx
2905+ undefined-literal:
2906+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2907+ scope: constant.language.undefined.tsx
2908+ var-expr:
2909+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2910+ captures:
2911+ 1: keyword.control.export.tsx
2912+ 2: storage.type.tsx
2913+ push:
2914+ - meta_scope: meta.var.expr.tsx
2915+ - match: '((?=;|}|(\s+(of|in)\s+)|^\s*$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)|((?<=\S)(?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
2916+ pop: true
2917+ - include: destructuring-variable
2918+ - include: var-single-variable
2919+ - include: variable-initializer
2920+ - include: comment
2921+ - match: (,)\s*(?!\S)
2922+ captures:
2923+ 1: punctuation.separator.comma.tsx
2924+ push:
2925+ - match: '(?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))'
2926+ pop: true
2927+ - include: comment
2928+ - include: destructuring-variable
2929+ - include: var-single-variable
2930+ - include: punctuation-comma
2931+ - include: punctuation-comma
2932+ - match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
2933+ captures:
2934+ 1: keyword.control.export.tsx
2935+ 2: storage.type.tsx
2936+ push:
2937+ - meta_scope: meta.var.expr.tsx
2938+ - match: '((?=;|}|(\s+(of|in)\s+)|^\s*$|;|^\s*abstract\b|^\s*async\b|^\s*class\b|^\s*const\b|^\s*declare\b|^\s*enum\b|^\s*export\b|^\s*function\b|^\s*import\b|^\s*interface\b|^\s*let\b|^\s*module\b|^\s*namespace\b|^\s*return\b|^\s*type\b|^\s*var\b)|((?<=\S)(?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
2939+ pop: true
2940+ - include: destructuring-const
2941+ - include: var-single-const
2942+ - include: variable-initializer
2943+ - include: comment
2944+ - match: (,)\s*(?!\S)
2945+ captures:
2946+ 1: punctuation.separator.comma.tsx
2947+ push:
2948+ - match: '(?<!,)(((?==|;|}|(\s+(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$)))'
2949+ pop: true
2950+ - include: comment
2951+ - include: destructuring-const
2952+ - include: var-single-const
2953+ - include: punctuation-comma
2954+ - include: punctuation-comma
2955+ var-single-const:
2956+ - match: |-
2957+ (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
2958+ # function assignment |
2959+ (=\s*(
2960+ ((async\s+)?(
2961+ (function\s*[(<*]) |
2962+ (function\s+) |
2963+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
2964+ )) |
2965+ ((async\s*)?(
2966+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
2967+ # sure shot arrow functions even if => is on new line
2968+ (
2969+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
2970+ [(]\s*
2971+ (
2972+ ([)]\s*:) | # ():
2973+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2974+ )
2975+ ) |
2976+ (
2977+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
2978+ ) |
2979+ # arrow function possible to detect only with => on same line
2980+ (
2981+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
2982+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
2983+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
2984+ \s*=> # arrow operator
2985+ )
2986+ ))
2987+ )) |
2988+ # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
2989+ (:\s*(
2990+ (<) |
2991+ ([(]\s*(
2992+ ([)]) |
2993+ (\.\.\.) |
2994+ ([_$[:alnum:]]+\s*(
2995+ ([:,?=])|
2996+ ([)]\s*=>)
2997+ ))
2998+ ))
2999+ )) |
3000+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
3001+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
3002+ ((async\s+)?(
3003+ (function\s*[(<*]) |
3004+ (function\s+) |
3005+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
3006+ )) |
3007+ ((async\s*)?(
3008+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
3009+ # sure shot arrow functions even if => is on new line
3010+ (
3011+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
3012+ [(]\s*
3013+ (
3014+ ([)]\s*:) | # ():
3015+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
3016+ )
3017+ ) |
3018+ (
3019+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
3020+ ) |
3021+ # arrow function possible to detect only with => on same line
3022+ (
3023+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
3024+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
3025+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
3026+ \s*=> # arrow operator
3027+ )
3028+ ))
3029+ )))
3030+ captures:
3031+ 1: meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx
3032+ push:
3033+ - meta_scope: meta.var-single-variable.expr.tsx
3034+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
3035+ pop: true
3036+ - include: var-single-variable-type-annotation
3037+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
3038+ captures:
3039+ 1: meta.definition.variable.tsx variable.other.constant.tsx
3040+ push:
3041+ - meta_scope: meta.var-single-variable.expr.tsx
3042+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
3043+ pop: true
3044+ - include: var-single-variable-type-annotation
3045+ var-single-variable:
3046+ - match: |-
3047+ (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
3048+ # function assignment |
3049+ (=\s*(
3050+ ((async\s+)?(
3051+ (function\s*[(<*]) |
3052+ (function\s+) |
3053+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
3054+ )) |
3055+ ((async\s*)?(
3056+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
3057+ # sure shot arrow functions even if => is on new line
3058+ (
3059+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
3060+ [(]\s*
3061+ (
3062+ ([)]\s*:) | # ():
3063+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
3064+ )
3065+ ) |
3066+ (
3067+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
3068+ ) |
3069+ # arrow function possible to detect only with => on same line
3070+ (
3071+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
3072+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
3073+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
3074+ \s*=> # arrow operator
3075+ )
3076+ ))
3077+ )) |
3078+ # typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
3079+ (:\s*(
3080+ (<) |
3081+ ([(]\s*(
3082+ ([)]) |
3083+ (\.\.\.) |
3084+ ([_$[:alnum:]]+\s*(
3085+ ([:,?=])|
3086+ ([)]\s*=>)
3087+ ))
3088+ ))
3089+ )) |
3090+ (:\s*((<\s*$)|([\(]\s*([\{\[]\s*)?$))) |
3091+ (:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
3092+ ((async\s+)?(
3093+ (function\s*[(<*]) |
3094+ (function\s+) |
3095+ ([_$[:alpha:]][_$[:alnum:]]*\s*=>)
3096+ )) |
3097+ ((async\s*)?(
3098+ ((<\s*$)|([\(]\s*([\{\[]\s*)?$)) |
3099+ # sure shot arrow functions even if => is on new line
3100+ (
3101+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)?
3102+ [(]\s*
3103+ (
3104+ ([)]\s*:) | # ():
3105+ ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
3106+ )
3107+ ) |
3108+ (
3109+ [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends
3110+ ) |
3111+ # arrow function possible to detect only with => on same line
3112+ (
3113+ (<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*>\s*)? # typeparameters
3114+ \(\s*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()]|(\(([^\(\)]|(\([^\(\)]*\)))*\)))*)?\) # parameters
3115+ (\s*:\s*([^<>\(\)]|\<[^<>]+\>|\([^\(\)]+\))+)? # return type
3116+ \s*=> # arrow operator
3117+ )
3118+ ))
3119+ )))
3120+ captures:
3121+ 1: meta.definition.variable.tsx entity.name.function.tsx
3122+ push:
3123+ - meta_scope: meta.var-single-variable.expr.tsx
3124+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
3125+ pop: true
3126+ - include: var-single-variable-type-annotation
3127+ - match: "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])"
3128+ captures:
3129+ 1: meta.definition.variable.tsx variable.other.constant.tsx
3130+ push:
3131+ - meta_scope: meta.var-single-variable.expr.tsx
3132+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
3133+ pop: true
3134+ - include: var-single-variable-type-annotation
3135+ - match: "([_$[:alpha:]][_$[:alnum:]]*)"
3136+ captures:
3137+ 1: meta.definition.variable.tsx variable.other.readwrite.tsx
3138+ push:
3139+ - meta_scope: meta.var-single-variable.expr.tsx
3140+ - match: '(?=$|^|[;,=}]|(\s+(of|in)\s+))'
3141+ pop: true
3142+ - include: var-single-variable-type-annotation
3143+ var-single-variable-type-annotation:
3144+ - include: type-annotation
3145+ - include: string
3146+ - include: comment
3147+ variable-initializer:
3148+ - match: (?<!=|!)(=)(?!=)(?=\s*\S)
3149+ captures:
3150+ 1: keyword.operator.assignment.tsx
3151+ push:
3152+ - match: '(?=$|^|[,);}\]])'
3153+ pop: true
3154+ - include: expression
3155+ - match: (?<!=|!)(=)(?!=)
3156+ captures:
3157+ 1: keyword.operator.assignment.tsx
3158+ push:
3159+ - match: '(?=[,);}\]])|(?=^\s*$)|(?<=\S)(?<!=)(?=\s*$)'
3160+ pop: true
3161+ - include: expression