Skip to content

Commit 181cb4a

Browse files
committed
Handles the function type and constructor type in a better way
1 parent 3e0e15e commit 181cb4a

22 files changed

+581
-260
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ repository:
725725
- include: '#type-tuple'
726726
- include: '#type-object'
727727
- include: '#type-operator'
728+
- include: '#type-fn-type-parameters'
728729
- include: '#type-paren-or-function-parameters'
729730
- include: '#type-function-return-type'
730731
- include: '#type-name'
@@ -761,17 +762,55 @@ repository:
761762
# (number | (param: number, param2: string) => void)
762763
type-paren-or-function-parameters:
763764
name: meta.type.paren.cover.ts
764-
begin: '(?:(?<!\.|\$)\b(new)\b)?\s*(\()'
765+
begin: '\s*(\()'
765766
beginCaptures:
766-
'1': { name: keyword.control.new.ts }
767-
'2': { name: meta.brace.round.ts }
767+
'1': { name: meta.brace.round.ts }
768768
end: '\)'
769769
endCaptures:
770770
'0': { name: meta.brace.round.ts }
771771
patterns:
772772
- include: '#type'
773773
- include: '#function-parameters'
774774

775+
type-fn-type-parameters:
776+
patterns:
777+
# constructor type
778+
- name: meta.type.constructor.ts
779+
match: (?<!\.|\$)\b(new)\b(?=\s*\<)
780+
captures:
781+
'1': { name: keyword.control.new.ts }
782+
- name: meta.type.constructor.ts
783+
begin: (?<!\.|\$)\b(new)\b\s*(?=\()
784+
beginCaptures:
785+
'1': { name: keyword.control.new.ts }
786+
end: (?<=\))
787+
patterns:
788+
- include: '#function-parameters'
789+
#type parameters followed by parenthesis
790+
- name: meta.type.function.ts
791+
begin: (?<=\>)\s*(?=\()
792+
end: (?<=\))
793+
patterns:
794+
- include: '#function-parameters'
795+
# () | (... | (param: | (param, | (param? | (param= | (param) =>
796+
- name: meta.type.function.ts
797+
begin: '(?x)(
798+
\s*
799+
(?=
800+
[(]\s*(
801+
([)]) |
802+
(\.\.\.) |
803+
([_$[:alnum:]]+\s*(
804+
([:,?=])|
805+
([)]\s*=>)
806+
))
807+
)
808+
)
809+
)'
810+
end: (?<=\))
811+
patterns:
812+
- include: '#function-parameters'
813+
775814
type-operator:
776815
name: keyword.operator.type.ts
777816
match: '[&|]'

TypeScript.tmLanguage

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3654,6 +3654,10 @@
36543654
<key>include</key>
36553655
<string>#type-operator</string>
36563656
</dict>
3657+
<dict>
3658+
<key>include</key>
3659+
<string>#type-fn-type-parameters</string>
3660+
</dict>
36573661
<dict>
36583662
<key>include</key>
36593663
<string>#type-paren-or-function-parameters</string>
@@ -3743,6 +3747,79 @@
37433747
</dict>
37443748
</array>
37453749
</dict>
3750+
<key>type-fn-type-parameters</key>
3751+
<dict>
3752+
<key>patterns</key>
3753+
<array>
3754+
<dict>
3755+
<key>captures</key>
3756+
<dict>
3757+
<key>1</key>
3758+
<dict>
3759+
<key>name</key>
3760+
<string>keyword.control.new.ts</string>
3761+
</dict>
3762+
</dict>
3763+
<key>match</key>
3764+
<string>(?&lt;!\.|\$)\b(new)\b(?=\s*\&lt;)</string>
3765+
<key>name</key>
3766+
<string>meta.type.constructor.ts</string>
3767+
</dict>
3768+
<dict>
3769+
<key>begin</key>
3770+
<string>(?&lt;!\.|\$)\b(new)\b\s*(?=\()</string>
3771+
<key>beginCaptures</key>
3772+
<dict>
3773+
<key>1</key>
3774+
<dict>
3775+
<key>name</key>
3776+
<string>keyword.control.new.ts</string>
3777+
</dict>
3778+
</dict>
3779+
<key>end</key>
3780+
<string>(?&lt;=\))</string>
3781+
<key>name</key>
3782+
<string>meta.type.constructor.ts</string>
3783+
<key>patterns</key>
3784+
<array>
3785+
<dict>
3786+
<key>include</key>
3787+
<string>#function-parameters</string>
3788+
</dict>
3789+
</array>
3790+
</dict>
3791+
<dict>
3792+
<key>begin</key>
3793+
<string>(?&lt;=\&gt;)\s*(?=\()</string>
3794+
<key>end</key>
3795+
<string>(?&lt;=\))</string>
3796+
<key>name</key>
3797+
<string>meta.type.function.ts</string>
3798+
<key>patterns</key>
3799+
<array>
3800+
<dict>
3801+
<key>include</key>
3802+
<string>#function-parameters</string>
3803+
</dict>
3804+
</array>
3805+
</dict>
3806+
<dict>
3807+
<key>begin</key>
3808+
<string>(?x)( \s* (?= [(]\s*( ([)]) | (\.\.\.) | ([_$[:alnum:]]+\s*( ([:,?=])| ([)]\s*=&gt;) )) ) ) )</string>
3809+
<key>end</key>
3810+
<string>(?&lt;=\))</string>
3811+
<key>name</key>
3812+
<string>meta.type.function.ts</string>
3813+
<key>patterns</key>
3814+
<array>
3815+
<dict>
3816+
<key>include</key>
3817+
<string>#function-parameters</string>
3818+
</dict>
3819+
</array>
3820+
</dict>
3821+
</array>
3822+
</dict>
37463823
<key>type-function-return-type</key>
37473824
<dict>
37483825
<key>begin</key>
@@ -3957,15 +4034,10 @@
39574034
<key>type-paren-or-function-parameters</key>
39584035
<dict>
39594036
<key>begin</key>
3960-
<string>(?:(?&lt;!\.|\$)\b(new)\b)?\s*(\()</string>
4037+
<string>\s*(\()</string>
39614038
<key>beginCaptures</key>
39624039
<dict>
39634040
<key>1</key>
3964-
<dict>
3965-
<key>name</key>
3966-
<string>keyword.control.new.ts</string>
3967-
</dict>
3968-
<key>2</key>
39694041
<dict>
39704042
<key>name</key>
39714043
<string>meta.brace.round.ts</string>

TypeScriptReact.YAML-tmLanguage

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,7 @@ repository:
729729
- include: '#type-tuple'
730730
- include: '#type-object'
731731
- include: '#type-operator'
732+
- include: '#type-fn-type-parameters'
732733
- include: '#type-paren-or-function-parameters'
733734
- include: '#type-function-return-type'
734735
- include: '#type-name'
@@ -765,17 +766,55 @@ repository:
765766
# (number | (param: number, param2: string) => void)
766767
type-paren-or-function-parameters:
767768
name: meta.type.paren.cover.tsx
768-
begin: '(?:(?<!\.|\$)\b(new)\b)?\s*(\()'
769+
begin: '\s*(\()'
769770
beginCaptures:
770-
'1': { name: keyword.control.new.tsx }
771-
'2': { name: meta.brace.round.tsx }
771+
'1': { name: meta.brace.round.tsx }
772772
end: '\)'
773773
endCaptures:
774774
'0': { name: meta.brace.round.tsx }
775775
patterns:
776776
- include: '#type'
777777
- include: '#function-parameters'
778778

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

TypeScriptReact.tmLanguage

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4044,6 +4044,10 @@
40444044
<key>include</key>
40454045
<string>#type-operator</string>
40464046
</dict>
4047+
<dict>
4048+
<key>include</key>
4049+
<string>#type-fn-type-parameters</string>
4050+
</dict>
40474051
<dict>
40484052
<key>include</key>
40494053
<string>#type-paren-or-function-parameters</string>
@@ -4133,6 +4137,79 @@
41334137
</dict>
41344138
</array>
41354139
</dict>
4140+
<key>type-fn-type-parameters</key>
4141+
<dict>
4142+
<key>patterns</key>
4143+
<array>
4144+
<dict>
4145+
<key>captures</key>
4146+
<dict>
4147+
<key>1</key>
4148+
<dict>
4149+
<key>name</key>
4150+
<string>keyword.control.new.tsx</string>
4151+
</dict>
4152+
</dict>
4153+
<key>match</key>
4154+
<string>(?&lt;!\.|\$)\b(new)\b(?=\s*\&lt;)</string>
4155+
<key>name</key>
4156+
<string>meta.type.constructor.tsx</string>
4157+
</dict>
4158+
<dict>
4159+
<key>begin</key>
4160+
<string>(?&lt;!\.|\$)\b(new)\b\s*(?=\()</string>
4161+
<key>beginCaptures</key>
4162+
<dict>
4163+
<key>1</key>
4164+
<dict>
4165+
<key>name</key>
4166+
<string>keyword.control.new.tsx</string>
4167+
</dict>
4168+
</dict>
4169+
<key>end</key>
4170+
<string>(?&lt;=\))</string>
4171+
<key>name</key>
4172+
<string>meta.type.constructor.tsx</string>
4173+
<key>patterns</key>
4174+
<array>
4175+
<dict>
4176+
<key>include</key>
4177+
<string>#function-parameters</string>
4178+
</dict>
4179+
</array>
4180+
</dict>
4181+
<dict>
4182+
<key>begin</key>
4183+
<string>(?&lt;=\&gt;)\s*(?=\()</string>
4184+
<key>end</key>
4185+
<string>(?&lt;=\))</string>
4186+
<key>name</key>
4187+
<string>meta.type.function.tsx</string>
4188+
<key>patterns</key>
4189+
<array>
4190+
<dict>
4191+
<key>include</key>
4192+
<string>#function-parameters</string>
4193+
</dict>
4194+
</array>
4195+
</dict>
4196+
<dict>
4197+
<key>begin</key>
4198+
<string>(?x)( \s* (?= [(]\s*( ([)]) | (\.\.\.) | ([_$[:alnum:]]+\s*( ([:,?=])| ([)]\s*=&gt;) )) ) ) )</string>
4199+
<key>end</key>
4200+
<string>(?&lt;=\))</string>
4201+
<key>name</key>
4202+
<string>meta.type.function.tsx</string>
4203+
<key>patterns</key>
4204+
<array>
4205+
<dict>
4206+
<key>include</key>
4207+
<string>#function-parameters</string>
4208+
</dict>
4209+
</array>
4210+
</dict>
4211+
</array>
4212+
</dict>
41364213
<key>type-function-return-type</key>
41374214
<dict>
41384215
<key>begin</key>
@@ -4347,15 +4424,10 @@
43474424
<key>type-paren-or-function-parameters</key>
43484425
<dict>
43494426
<key>begin</key>
4350-
<string>(?:(?&lt;!\.|\$)\b(new)\b)?\s*(\()</string>
4427+
<string>\s*(\()</string>
43514428
<key>beginCaptures</key>
43524429
<dict>
43534430
<key>1</key>
4354-
<dict>
4355-
<key>name</key>
4356-
<string>keyword.control.new.tsx</string>
4357-
</dict>
4358-
<key>2</key>
43594431
<dict>
43604432
<key>name</key>
43614433
<string>meta.brace.round.tsx</string>

0 commit comments

Comments
 (0)