Skip to content

Commit f01053f

Browse files
committed
Support generators syntax and fix the scoping of type parameter end
1 parent 82ac7df commit f01053f

16 files changed

+750
-80
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,11 @@ repository:
185185
- name: keyword.control.loop.ts
186186
match: (?<!\.)\b(break|continue|do|goto|while)\b
187187
- name: keyword.control.flow.ts
188-
match: (?<!\.)\b(await|return|yield)\b
188+
match: (?<!\.)\b(await|return)\b
189+
- match: (?<!\.)\b(yield)\b(?:\s*(\*))?
190+
captures:
191+
'1': { name: keyword.control.flow.ts }
192+
'2': { name: keyword.generator.asterisk.ts }
189193
- name: keyword.control.switch.ts
190194
match: (?<!\.)\b(case|default|switch)\b
191195
- name: keyword.control.conditional.ts
@@ -472,7 +476,7 @@ repository:
472476

473477
method-declaration:
474478
name: meta.method.declaration.ts
475-
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|(((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
479+
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|((?:(\*)\s*)?((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
476480
beginCaptures:
477481
'1': { name: storage.modifier.ts } # captures keyword (abstract)
478482
'2': { name: storage.modifier.ts } # captures keyword (public or private or protected)
@@ -490,7 +494,7 @@ repository:
490494

491495
method-overload-declaration:
492496
name: meta.method.overload.declaration.ts
493-
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|(((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
497+
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|((?:(\*)\s*)?((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
494498
beginCaptures:
495499
'1': { name: storage.modifier.ts } # captures keyword (abstract)
496500
'2': { name: storage.modifier.ts } # captures keyword (public or private or protected)
@@ -504,6 +508,9 @@ repository:
504508
begin: \G
505509
end: (?=\(|\<)
506510
patterns:
511+
- match: (\*)\s*
512+
captures:
513+
'1': { name: keyword.generator.asterisk.ts }
507514
- include: '#string'
508515
- include: '#array-literal'
509516
- name: keyword.operator.new.ts
@@ -536,12 +543,13 @@ repository:
536543

537544
function-declaration:
538545
name: meta.function.ts
539-
begin: \b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s+([_$[:alpha:]][_$[:alnum:]]*))?\s*
546+
begin: \b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*
540547
beginCaptures:
541548
'1': { name: keyword.control.export.ts }
542549
'2': { name: storage.modifier.async.ts }
543550
'3': { name: storage.type.function.ts }
544-
'4': { name: entity.name.function.ts }
551+
'4': { name: keyword.generator.asterisk.ts }
552+
'5': { name: entity.name.function.ts }
545553
end: (?=;|\})|(?<=\})
546554
patterns:
547555
- include: '#comment'
@@ -553,11 +561,13 @@ repository:
553561

554562
function-overload-declaration:
555563
name: meta.function.overload.ts
556-
match: \b(?:(export)\s+)?(function\b)(?:\s+([_$[:alpha:]][_$[:alnum:]]*))?\s*
564+
match: \b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*
557565
captures:
558566
'1': { name: keyword.control.export.ts }
559-
'2': { name: storage.type.function.ts }
560-
'3': { name: entity.name.function.ts }
567+
'2': { name: storage.modifier.async.ts }
568+
'3': { name: storage.type.function.ts }
569+
'4': { name: keyword.generator.asterisk.ts }
570+
'5': { name: entity.name.function.ts }
561571

562572
object-literal:
563573
name: meta.object-literal.ts
@@ -583,7 +593,7 @@ repository:
583593

584594
after-operator-block:
585595
name: meta.object-literal.ts
586-
begin: (?<=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&&|\|\|)\s*(\{)
596+
begin: (?<=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&&|\|\||\*)\s*(\{)
587597
beginCaptures:
588598
'1': { name: punctuation.definition.block.ts }
589599
end: \}
@@ -798,7 +808,7 @@ repository:
798808
'2': { name: punctuation.definition.typeparameters.begin.ts }
799809
end: '(?=$)|(>)'
800810
endCaptures:
801-
'2': { name: punctuation.definition.typeparameters.end.ts }
811+
'1': { name: punctuation.definition.typeparameters.end.ts }
802812
patterns:
803813
- name: storage.modifier.ts
804814
match: '\b(extends)\b'
@@ -887,7 +897,7 @@ repository:
887897
# If '<' is preceeded by 'return', 'throw', 'yield', or 'await', it's most likely a type assertion
888898
# If '=', '(', ',', ':', or '>' are followed by a '<', it is also likely a type assertion as otherwise it would be a syntax error
889899
# '<=' and '<<=' are cannot be type assertions, as they are assignment operators.
890-
begin: '(?:(?<=return|throw|yield|await|[=(,:>]))\s*(<)(?!<?\=)'
900+
begin: '(?:(?<=return|throw|yield|await|[=(,:>*]))\s*(<)(?!<?\=)'
891901
beginCaptures:
892902
'1': { name: meta.brace.angle.ts }
893903
end: '>'
@@ -974,7 +984,7 @@ repository:
974984
captures:
975985
'1': { name: variable.parameter.ts }
976986
- name: meta.arrow.ts
977-
begin: (?x)(?<=return|throw|yield|await|async|[=(,:>])\s*(?=\(([^()]+|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
987+
begin: (?x)(?<=return|throw|yield|await|async|[=(,:>*])\s*(?=\(([^()]+|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
978988
end: (?==>)
979989
patterns:
980990
- include: '#function-parameters'

TypeScript.tmLanguage

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<key>after-operator-block</key>
2828
<dict>
2929
<key>begin</key>
30-
<string>(?&lt;=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&amp;&amp;|\|\|)\s*(\{)</string>
30+
<string>(?&lt;=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
3131
<key>beginCaptures</key>
3232
<dict>
3333
<key>1</key>
@@ -182,7 +182,7 @@
182182
</dict>
183183
<dict>
184184
<key>begin</key>
185-
<string>(?x)(?&lt;=return|throw|yield|await|async|[=(,:&gt;])\s*(?=\(([^()]+|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)</string>
185+
<string>(?x)(?&lt;=return|throw|yield|await|async|[=(,:&gt;*])\s*(?=\(([^()]+|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)</string>
186186
<key>end</key>
187187
<string>(?==&gt;)</string>
188188
<key>name</key>
@@ -289,7 +289,7 @@
289289
<key>cast</key>
290290
<dict>
291291
<key>begin</key>
292-
<string>(?:(?&lt;=return|throw|yield|await|[=(,:&gt;]))\s*(&lt;)(?!&lt;?\=)</string>
292+
<string>(?:(?&lt;=return|throw|yield|await|[=(,:&gt;*]))\s*(&lt;)(?!&lt;?\=)</string>
293293
<key>beginCaptures</key>
294294
<dict>
295295
<key>1</key>
@@ -623,10 +623,27 @@
623623
</dict>
624624
<dict>
625625
<key>match</key>
626-
<string>(?&lt;!\.)\b(await|return|yield)\b</string>
626+
<string>(?&lt;!\.)\b(await|return)\b</string>
627627
<key>name</key>
628628
<string>keyword.control.flow.ts</string>
629629
</dict>
630+
<dict>
631+
<key>captures</key>
632+
<dict>
633+
<key>1</key>
634+
<dict>
635+
<key>name</key>
636+
<string>keyword.control.flow.ts</string>
637+
</dict>
638+
<key>2</key>
639+
<dict>
640+
<key>name</key>
641+
<string>keyword.generator.asterisk.ts</string>
642+
</dict>
643+
</dict>
644+
<key>match</key>
645+
<string>(?&lt;!\.)\b(yield)\b(?:\s*(\*))?</string>
646+
</dict>
630647
<dict>
631648
<key>match</key>
632649
<string>(?&lt;!\.)\b(case|default|switch)\b</string>
@@ -1387,7 +1404,7 @@
13871404
<key>function-declaration</key>
13881405
<dict>
13891406
<key>begin</key>
1390-
<string>\b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s+([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
1407+
<string>\b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
13911408
<key>beginCaptures</key>
13921409
<dict>
13931410
<key>1</key>
@@ -1406,6 +1423,11 @@
14061423
<string>storage.type.function.ts</string>
14071424
</dict>
14081425
<key>4</key>
1426+
<dict>
1427+
<key>name</key>
1428+
<string>keyword.generator.asterisk.ts</string>
1429+
</dict>
1430+
<key>5</key>
14091431
<dict>
14101432
<key>name</key>
14111433
<string>entity.name.function.ts</string>
@@ -1455,16 +1477,26 @@
14551477
<key>2</key>
14561478
<dict>
14571479
<key>name</key>
1458-
<string>storage.type.function.ts</string>
1480+
<string>storage.modifier.async.ts</string>
14591481
</dict>
14601482
<key>3</key>
1483+
<dict>
1484+
<key>name</key>
1485+
<string>storage.type.function.ts</string>
1486+
</dict>
1487+
<key>4</key>
1488+
<dict>
1489+
<key>name</key>
1490+
<string>keyword.generator.asterisk.ts</string>
1491+
</dict>
1492+
<key>5</key>
14611493
<dict>
14621494
<key>name</key>
14631495
<string>entity.name.function.ts</string>
14641496
</dict>
14651497
</dict>
14661498
<key>match</key>
1467-
<string>\b(?:(export)\s+)?(function\b)(?:\s+([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
1499+
<string>\b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
14681500
<key>name</key>
14691501
<string>meta.function.overload.ts</string>
14701502
</dict>
@@ -1908,7 +1940,7 @@
19081940
<key>method-declaration</key>
19091941
<dict>
19101942
<key>begin</key>
1911-
<string>(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|(((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\&lt;])</string>
1943+
<string>(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|((?:(\*)\s*)?((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\&lt;])</string>
19121944
<key>beginCaptures</key>
19131945
<dict>
19141946
<key>1</key>
@@ -1976,6 +2008,18 @@
19762008
<string>(?=\(|\&lt;)</string>
19772009
<key>patterns</key>
19782010
<array>
2011+
<dict>
2012+
<key>captures</key>
2013+
<dict>
2014+
<key>1</key>
2015+
<dict>
2016+
<key>name</key>
2017+
<string>keyword.generator.asterisk.ts</string>
2018+
</dict>
2019+
</dict>
2020+
<key>match</key>
2021+
<string>(\*)\s*</string>
2022+
</dict>
19792023
<dict>
19802024
<key>include</key>
19812025
<string>#string</string>
@@ -2013,7 +2057,7 @@
20132057
<key>method-overload-declaration</key>
20142058
<dict>
20152059
<key>begin</key>
2016-
<string>(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|(((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\&lt;])</string>
2060+
<string>(?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|((?:(\*)\s*)?((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\&lt;])</string>
20172061
<key>beginCaptures</key>
20182062
<dict>
20192063
<key>1</key>
@@ -3632,7 +3676,7 @@
36323676
<string>(?=$)|(&gt;)</string>
36333677
<key>endCaptures</key>
36343678
<dict>
3635-
<key>2</key>
3679+
<key>1</key>
36363680
<dict>
36373681
<key>name</key>
36383682
<string>punctuation.definition.typeparameters.end.ts</string>

TypeScriptReact.YAML-tmLanguage

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,11 @@ repository:
189189
- name: keyword.control.loop.tsx
190190
match: (?<!\.)\b(break|continue|do|goto|while)\b
191191
- name: keyword.control.flow.tsx
192-
match: (?<!\.)\b(await|return|yield)\b
192+
match: (?<!\.)\b(await|return)\b
193+
- match: (?<!\.)\b(yield)\b(?:\s*(\*))?
194+
captures:
195+
'1': { name: keyword.control.flow.tsx }
196+
'2': { name: keyword.generator.asterisk.tsx }
193197
- name: keyword.control.switch.tsx
194198
match: (?<!\.)\b(case|default|switch)\b
195199
- name: keyword.control.conditional.tsx
@@ -476,7 +480,7 @@ repository:
476480

477481
method-declaration:
478482
name: meta.method.declaration.tsx
479-
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|(((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
483+
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|((?:(\*)\s*)?((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
480484
beginCaptures:
481485
'1': { name: storage.modifier.tsx } # captures keyword (abstract)
482486
'2': { name: storage.modifier.tsx } # captures keyword (public or private or protected)
@@ -494,7 +498,7 @@ repository:
494498

495499
method-overload-declaration:
496500
name: meta.method.overload.declaration.tsx
497-
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|(((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
501+
begin: (?:\b(abstract)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?=((\bnew)|(?:\b(constructor)\b)|((?:(\*)\s*)?((?:\b[_$[:alpha:]][_$[:alnum:]]*)|(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*(\??)))?\s*[\(\<])
498502
beginCaptures:
499503
'1': { name: storage.modifier.tsx } # captures keyword (abstract)
500504
'2': { name: storage.modifier.tsx } # captures keyword (public or private or protected)
@@ -508,6 +512,9 @@ repository:
508512
begin: \G
509513
end: (?=\(|\<)
510514
patterns:
515+
- match: (\*)\s*
516+
captures:
517+
'1': { name: keyword.generator.asterisk.tsx }
511518
- include: '#string'
512519
- include: '#array-literal'
513520
- name: keyword.operator.new.tsx
@@ -540,12 +547,13 @@ repository:
540547

541548
function-declaration:
542549
name: meta.function.tsx
543-
begin: \b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s+([_$[:alpha:]][_$[:alnum:]]*))?\s*
550+
begin: \b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*
544551
beginCaptures:
545552
'1': { name: keyword.control.export.tsx }
546553
'2': { name: storage.modifier.async.tsx }
547554
'3': { name: storage.type.function.tsx }
548-
'4': { name: entity.name.function.tsx }
555+
'4': { name: keyword.generator.asterisk.tsx }
556+
'5': { name: entity.name.function.ts }
549557
end: (?=;|\})|(?<=\})
550558
patterns:
551559
- include: '#comment'
@@ -557,11 +565,13 @@ repository:
557565

558566
function-overload-declaration:
559567
name: meta.function.overload.tsx
560-
match: \b(?:(export)\s+)?(function\b)(?:\s+([_$[:alpha:]][_$[:alnum:]]*))?\s*
568+
match: \b(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*
561569
captures:
562570
'1': { name: keyword.control.export.tsx }
563-
'2': { name: storage.type.function.tsx }
564-
'3': { name: entity.name.function.tsx }
571+
'2': { name: storage.modifier.async.tsx }
572+
'3': { name: storage.type.function.tsx }
573+
'4': { name: keyword.generator.asterisk.tsx }
574+
'5': { name: entity.name.function.tsx }
565575

566576
object-literal:
567577
name: meta.object-literal.tsx
@@ -587,7 +597,7 @@ repository:
587597

588598
after-operator-block:
589599
name: meta.object-literal.tsx
590-
begin: (?<=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&&|\|\|)\s*(\{)
600+
begin: (?<=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&&|\|\||\*)\s*(\{)
591601
beginCaptures:
592602
'1': { name: punctuation.definition.block.tsx }
593603
end: \}
@@ -802,7 +812,7 @@ repository:
802812
'2': { name: punctuation.definition.typeparameters.begin.tsx }
803813
end: '(?=$)|(>)'
804814
endCaptures:
805-
'2': { name: punctuation.definition.typeparameters.end.tsx }
815+
'1': { name: punctuation.definition.typeparameters.end.tsx }
806816
patterns:
807817
- name: storage.modifier.tsx
808818
match: '\b(extends)\b'
@@ -964,7 +974,7 @@ repository:
964974
captures:
965975
'1': { name: variable.parameter.tsx }
966976
- name: meta.arrow.tsx
967-
begin: (?x)(?<=return|throw|yield|await|async|[=(,:>])\s*(?=\(([^()]+|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
977+
begin: (?x)(?<=return|throw|yield|await|async|[=(,:>*])\s*(?=\(([^()]+|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
968978
end: (?==>)
969979
patterns:
970980
- include: '#function-parameters'

0 commit comments

Comments
 (0)