Skip to content

Commit 9c7430d

Browse files
authored
Merge pull request #263 from Microsoft/functionTypeEnhancement
Fix handling of function type, type alias declaration and type annotation operator
2 parents 066bddd + 6e62cd3 commit 9c7430d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1927
-593
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -234,13 +234,14 @@ repository:
234234
'1': { name: keyword.control.export.ts }
235235
'2': { name: storage.type.type.ts }
236236
'3': { name: entity.name.type.ts }
237-
end: (?=$|[,);>]|\bvar\b|\blet\b|\bconst\b|\btype\b|\bfunction\b|\bclass\b|\binterface\b|\bnamespace\b|\bmodule\b|\bimport\b|\benum\b|\bdeclare\b|\bexport\b|\babstract\b|\basync\b)
237+
end: (?=[};]|\bvar\b|\blet\b|\bconst\b|\btype\b|\bfunction\b|\bclass\b|\binterface\b|\bnamespace\b|\bmodule\b|\bimport\b|\benum\b|\bdeclare\b|\bexport\b|\babstract\b|\basync\b)
238238
patterns:
239239
- include: '#comment'
240240
- include: '#type-parameters'
241241
- include: '#type'
242-
- name: keyword.operator.assignment.ts
243-
match: '=\s*'
242+
- match: '(=)\s*'
243+
captures:
244+
'1': { name: keyword.operator.assignment.ts }
244245

245246
enum-declaration:
246247
name: meta.enum.declaration.ts
@@ -684,7 +685,9 @@ repository:
684685

685686
return-type:
686687
name: meta.return.type.ts
687-
begin: '(?<=\))\s*:'
688+
begin: '(?<=\))\s*(:)'
689+
beginCaptures:
690+
'1': { name: keyword.operator.type.annotation.ts }
688691
end: (?<!:)((?=$)|(?=\{|;|//))
689692
patterns:
690693
- include: '#comment'
@@ -708,6 +711,8 @@ repository:
708711
type-annotation:
709712
name: meta.type.annotation.ts
710713
begin: ":"
714+
beginCaptures:
715+
'0': { name: keyword.operator.type.annotation.ts }
711716
end: (?=$|[,);\}\]]|//)|(?==[^>])|(?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{)
712717
patterns:
713718
- include: '#comment'
@@ -725,6 +730,7 @@ repository:
725730
- include: '#type-tuple'
726731
- include: '#type-object'
727732
- include: '#type-operator'
733+
- include: '#type-fn-type-parameters'
728734
- include: '#type-paren-or-function-parameters'
729735
- include: '#type-function-return-type'
730736
- include: '#type-name'
@@ -761,17 +767,55 @@ repository:
761767
# (number | (param: number, param2: string) => void)
762768
type-paren-or-function-parameters:
763769
name: meta.type.paren.cover.ts
764-
begin: '(?:(?<!\.|\$)\b(new)\b)?\s*(\()'
770+
begin: '\s*(\()'
765771
beginCaptures:
766-
'1': { name: keyword.control.new.ts }
767-
'2': { name: meta.brace.round.ts }
772+
'1': { name: meta.brace.round.ts }
768773
end: '\)'
769774
endCaptures:
770775
'0': { name: meta.brace.round.ts }
771776
patterns:
772777
- include: '#type'
773778
- include: '#function-parameters'
774779

780+
type-fn-type-parameters:
781+
patterns:
782+
# constructor type
783+
- name: meta.type.constructor.ts
784+
match: (?<!\.|\$)\b(new)\b(?=\s*\<)
785+
captures:
786+
'1': { name: keyword.control.new.ts }
787+
- name: meta.type.constructor.ts
788+
begin: (?<!\.|\$)\b(new)\b\s*(?=\()
789+
beginCaptures:
790+
'1': { name: keyword.control.new.ts }
791+
end: (?<=\))
792+
patterns:
793+
- include: '#function-parameters'
794+
#type parameters followed by parenthesis
795+
- name: meta.type.function.ts
796+
begin: (?<=\>)\s*(?=\()
797+
end: (?<=\))
798+
patterns:
799+
- include: '#function-parameters'
800+
# () | (... | (param: | (param, | (param? | (param= | (param) =>
801+
- name: meta.type.function.ts
802+
begin: '(?x)(
803+
\s*
804+
(?=
805+
[(]\s*(
806+
([)]) |
807+
(\.\.\.) |
808+
([_$[:alnum:]]+\s*(
809+
([:,?=])|
810+
([)]\s*=>)
811+
))
812+
)
813+
)
814+
)'
815+
end: (?<=\))
816+
patterns:
817+
- include: '#function-parameters'
818+
775819
type-operator:
776820
name: keyword.operator.type.ts
777821
match: '[&|]'
@@ -1069,7 +1113,9 @@ repository:
10691113

10701114
arrow-return-type:
10711115
name: meta.return.type.arrow.ts
1072-
begin: '(?<=\))\s*:'
1116+
begin: '(?<=\))\s*(:)'
1117+
beginCaptures:
1118+
'1': { name: keyword.operator.type.annotation.ts }
10731119
end: (?<!:)((?=$)|(?==>|;|//))
10741120
patterns:
10751121
# TODO: handle the fn and constructor type specifically.

TypeScript.tmLanguage

Lines changed: 114 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@
737737
</dict>
738738
</dict>
739739
<key>end</key>
740-
<string>(?=$|[,);&gt;]|\bvar\b|\blet\b|\bconst\b|\btype\b|\bfunction\b|\bclass\b|\binterface\b|\bnamespace\b|\bmodule\b|\bimport\b|\benum\b|\bdeclare\b|\bexport\b|\babstract\b|\basync\b)</string>
740+
<string>(?=[};]|\bvar\b|\blet\b|\bconst\b|\btype\b|\bfunction\b|\bclass\b|\binterface\b|\bnamespace\b|\bmodule\b|\bimport\b|\benum\b|\bdeclare\b|\bexport\b|\babstract\b|\basync\b)</string>
741741
<key>patterns</key>
742742
<array>
743743
<dict>
@@ -753,10 +753,16 @@
753753
<string>#type</string>
754754
</dict>
755755
<dict>
756-
<key>name</key>
757-
<string>keyword.operator.assignment.ts</string>
758756
<key>match</key>
759-
<string>=\s*</string>
757+
<string>(=)\s*</string>
758+
<key>captures</key>
759+
<dict>
760+
<key>1</key>
761+
<dict>
762+
<key>name</key>
763+
<string>keyword.operator.assignment.ts</string>
764+
</dict>
765+
</dict>
760766
</dict>
761767
</array>
762768
</dict>
@@ -2211,7 +2217,15 @@
22112217
<key>name</key>
22122218
<string>meta.return.type.ts</string>
22132219
<key>begin</key>
2214-
<string>(?&lt;=\))\s*:</string>
2220+
<string>(?&lt;=\))\s*(:)</string>
2221+
<key>beginCaptures</key>
2222+
<dict>
2223+
<key>1</key>
2224+
<dict>
2225+
<key>name</key>
2226+
<string>keyword.operator.type.annotation.ts</string>
2227+
</dict>
2228+
</dict>
22152229
<key>end</key>
22162230
<string>(?&lt;!:)((?=$)|(?=\{|;|//))</string>
22172231
<key>patterns</key>
@@ -2274,6 +2288,14 @@
22742288
<string>meta.type.annotation.ts</string>
22752289
<key>begin</key>
22762290
<string>:</string>
2291+
<key>beginCaptures</key>
2292+
<dict>
2293+
<key>0</key>
2294+
<dict>
2295+
<key>name</key>
2296+
<string>keyword.operator.type.annotation.ts</string>
2297+
</dict>
2298+
</dict>
22772299
<key>end</key>
22782300
<string>(?=$|[,);\}\]]|//)|(?==[^&gt;])|(?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)</string>
22792301
<key>patterns</key>
@@ -2330,6 +2352,10 @@
23302352
<key>include</key>
23312353
<string>#type-operator</string>
23322354
</dict>
2355+
<dict>
2356+
<key>include</key>
2357+
<string>#type-fn-type-parameters</string>
2358+
</dict>
23332359
<dict>
23342360
<key>include</key>
23352361
<string>#type-paren-or-function-parameters</string>
@@ -2421,15 +2447,10 @@
24212447
<key>name</key>
24222448
<string>meta.type.paren.cover.ts</string>
24232449
<key>begin</key>
2424-
<string>(?:(?&lt;!\.|\$)\b(new)\b)?\s*(\()</string>
2450+
<string>\s*(\()</string>
24252451
<key>beginCaptures</key>
24262452
<dict>
24272453
<key>1</key>
2428-
<dict>
2429-
<key>name</key>
2430-
<string>keyword.control.new.ts</string>
2431-
</dict>
2432-
<key>2</key>
24332454
<dict>
24342455
<key>name</key>
24352456
<string>meta.brace.round.ts</string>
@@ -2457,6 +2478,79 @@
24572478
</dict>
24582479
</array>
24592480
</dict>
2481+
<key>type-fn-type-parameters</key>
2482+
<dict>
2483+
<key>patterns</key>
2484+
<array>
2485+
<dict>
2486+
<key>name</key>
2487+
<string>meta.type.constructor.ts</string>
2488+
<key>match</key>
2489+
<string>(?&lt;!\.|\$)\b(new)\b(?=\s*\&lt;)</string>
2490+
<key>captures</key>
2491+
<dict>
2492+
<key>1</key>
2493+
<dict>
2494+
<key>name</key>
2495+
<string>keyword.control.new.ts</string>
2496+
</dict>
2497+
</dict>
2498+
</dict>
2499+
<dict>
2500+
<key>name</key>
2501+
<string>meta.type.constructor.ts</string>
2502+
<key>begin</key>
2503+
<string>(?&lt;!\.|\$)\b(new)\b\s*(?=\()</string>
2504+
<key>beginCaptures</key>
2505+
<dict>
2506+
<key>1</key>
2507+
<dict>
2508+
<key>name</key>
2509+
<string>keyword.control.new.ts</string>
2510+
</dict>
2511+
</dict>
2512+
<key>end</key>
2513+
<string>(?&lt;=\))</string>
2514+
<key>patterns</key>
2515+
<array>
2516+
<dict>
2517+
<key>include</key>
2518+
<string>#function-parameters</string>
2519+
</dict>
2520+
</array>
2521+
</dict>
2522+
<dict>
2523+
<key>name</key>
2524+
<string>meta.type.function.ts</string>
2525+
<key>begin</key>
2526+
<string>(?&lt;=\&gt;)\s*(?=\()</string>
2527+
<key>end</key>
2528+
<string>(?&lt;=\))</string>
2529+
<key>patterns</key>
2530+
<array>
2531+
<dict>
2532+
<key>include</key>
2533+
<string>#function-parameters</string>
2534+
</dict>
2535+
</array>
2536+
</dict>
2537+
<dict>
2538+
<key>name</key>
2539+
<string>meta.type.function.ts</string>
2540+
<key>begin</key>
2541+
<string>(?x)( \s* (?= [(]\s*( ([)]) | (\.\.\.) | ([_$[:alnum:]]+\s*( ([:,?=])| ([)]\s*=&gt;) )) ) ) )</string>
2542+
<key>end</key>
2543+
<string>(?&lt;=\))</string>
2544+
<key>patterns</key>
2545+
<array>
2546+
<dict>
2547+
<key>include</key>
2548+
<string>#function-parameters</string>
2549+
</dict>
2550+
</array>
2551+
</dict>
2552+
</array>
2553+
</dict>
24602554
<key>type-operator</key>
24612555
<dict>
24622556
<key>name</key>
@@ -3311,7 +3405,15 @@
33113405
<key>name</key>
33123406
<string>meta.return.type.arrow.ts</string>
33133407
<key>begin</key>
3314-
<string>(?&lt;=\))\s*:</string>
3408+
<string>(?&lt;=\))\s*(:)</string>
3409+
<key>beginCaptures</key>
3410+
<dict>
3411+
<key>1</key>
3412+
<dict>
3413+
<key>name</key>
3414+
<string>keyword.operator.type.annotation.ts</string>
3415+
</dict>
3416+
</dict>
33153417
<key>end</key>
33163418
<string>(?&lt;!:)((?=$)|(?==&gt;|;|//))</string>
33173419
<key>patterns</key>

0 commit comments

Comments
 (0)