Skip to content

Commit 5d44152

Browse files
committed
Handle type arguments and type parameters when matching type correctly
Fixes #695
1 parent 21ec2c2 commit 5d44152

File tree

5 files changed

+454
-4
lines changed

5 files changed

+454
-4
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,6 +2124,10 @@ repository:
21242124
endCaptures:
21252125
'0': { name: punctuation.definition.typeparameters.end.ts }
21262126
patterns:
2127+
- include: '#type-arguments-body'
2128+
2129+
type-arguments-body:
2130+
patterns:
21272131
- match: '{{startOfIdentifier}}(_){{endOfIdentifier}}'
21282132
captures:
21292133
'0': { name: keyword.operator.type.ts }
@@ -2138,7 +2142,7 @@ repository:
21382142
- include: '#numeric-literal'
21392143
- include: '#type-primitive'
21402144
- include: '#type-builtin-literals'
2141-
- include: '#type-arguments'
2145+
- include: '#type-parameters'
21422146
- include: '#type-tuple'
21432147
- include: '#type-object'
21442148
- include: '#type-conditional'
@@ -2342,9 +2346,31 @@ repository:
23422346
name: keyword.operator.expression.is.ts
23432347
match: '{{startOfIdentifier}}is{{endOfIdentifier}}'
23442348

2345-
#name of the type
2349+
#name of the type and type name followed by type arguments
23462350
type-name:
23472351
patterns:
2352+
- begin: '({{identifier}})\s*{{propertyAccess}}\s*(<)'
2353+
captures:
2354+
'1': { name: entity.name.type.module.ts }
2355+
'2': { name: punctuation.accessor.ts }
2356+
'3': { name: punctuation.accessor.optional.ts }
2357+
'4': { name: meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts }
2358+
end: '(>)'
2359+
endCaptures:
2360+
'1': { name: meta.type.parameters.ts punctuation.definition.typeparameters.end.ts }
2361+
contentName: meta.type.parameters.ts
2362+
patterns:
2363+
- include: '#type-arguments-body'
2364+
- begin: '({{identifier}})\s*(<)'
2365+
beginCaptures:
2366+
'1': { name: entity.name.type.ts }
2367+
'2': { name: meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts }
2368+
end: '(>)'
2369+
endCaptures:
2370+
'1': { name: meta.type.parameters.ts punctuation.definition.typeparameters.end.ts }
2371+
contentName: meta.type.parameters.ts
2372+
patterns:
2373+
- include: '#type-arguments-body'
23482374
- match: ({{identifier}})\s*{{propertyAccess}}
23492375
captures:
23502376
'1': { name: entity.name.type.module.ts }

TypeScript.tmLanguage

Lines changed: 144 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6351,6 +6351,16 @@
63516351
<string>punctuation.definition.typeparameters.end.ts</string>
63526352
</dict>
63536353
</dict>
6354+
<key>patterns</key>
6355+
<array>
6356+
<dict>
6357+
<key>include</key>
6358+
<string>#type-parameters-body</string>
6359+
</dict>
6360+
</array>
6361+
</dict>
6362+
<key>type-parameters-body</key>
6363+
<dict>
63546364
<key>patterns</key>
63556365
<array>
63566366
<dict>
@@ -6403,6 +6413,16 @@
64036413
<string>punctuation.definition.typeparameters.end.ts</string>
64046414
</dict>
64056415
</dict>
6416+
<key>patterns</key>
6417+
<array>
6418+
<dict>
6419+
<key>include</key>
6420+
<string>#type-arguments-body</string>
6421+
</dict>
6422+
</array>
6423+
</dict>
6424+
<key>type-arguments-body</key>
6425+
<dict>
64066426
<key>patterns</key>
64076427
<array>
64086428
<dict>
@@ -6427,6 +6447,47 @@
64276447
</dict>
64286448
</array>
64296449
</dict>
6450+
<key>type-parameters-or-type-arguments</key>
6451+
<dict>
6452+
<key>patterns</key>
6453+
<array>
6454+
<dict>
6455+
<key>name</key>
6456+
<string>meta.type.parameters.ts</string>
6457+
<key>begin</key>
6458+
<string>(\&lt;)(?=\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)</string>
6459+
<key>beginCaptures</key>
6460+
<dict>
6461+
<key>1</key>
6462+
<dict>
6463+
<key>name</key>
6464+
<string>punctuation.definition.typeparameters.begin.ts</string>
6465+
</dict>
6466+
</dict>
6467+
<key>end</key>
6468+
<string>\&gt;</string>
6469+
<key>endCaptures</key>
6470+
<dict>
6471+
<key>0</key>
6472+
<dict>
6473+
<key>name</key>
6474+
<string>punctuation.definition.typeparameters.end.ts</string>
6475+
</dict>
6476+
</dict>
6477+
<key>patterns</key>
6478+
<array>
6479+
<dict>
6480+
<key>include</key>
6481+
<string>#type-parameters-body</string>
6482+
</dict>
6483+
</array>
6484+
</dict>
6485+
<dict>
6486+
<key>include</key>
6487+
<string>#type-arguments</string>
6488+
</dict>
6489+
</array>
6490+
</dict>
64306491
<key>type</key>
64316492
<dict>
64326493
<key>patterns</key>
@@ -6453,7 +6514,7 @@
64536514
</dict>
64546515
<dict>
64556516
<key>include</key>
6456-
<string>#type-arguments</string>
6517+
<string>#type-parameters</string>
64576518
</dict>
64586519
<dict>
64596520
<key>include</key>
@@ -7040,6 +7101,88 @@
70407101
<dict>
70417102
<key>patterns</key>
70427103
<array>
7104+
<dict>
7105+
<key>begin</key>
7106+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(&lt;)</string>
7107+
<key>captures</key>
7108+
<dict>
7109+
<key>1</key>
7110+
<dict>
7111+
<key>name</key>
7112+
<string>entity.name.type.module.ts</string>
7113+
</dict>
7114+
<key>2</key>
7115+
<dict>
7116+
<key>name</key>
7117+
<string>punctuation.accessor.ts</string>
7118+
</dict>
7119+
<key>3</key>
7120+
<dict>
7121+
<key>name</key>
7122+
<string>punctuation.accessor.optional.ts</string>
7123+
</dict>
7124+
<key>4</key>
7125+
<dict>
7126+
<key>name</key>
7127+
<string>meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts</string>
7128+
</dict>
7129+
</dict>
7130+
<key>end</key>
7131+
<string>(&gt;)</string>
7132+
<key>endCaptures</key>
7133+
<dict>
7134+
<key>1</key>
7135+
<dict>
7136+
<key>name</key>
7137+
<string>meta.type.parameters.ts punctuation.definition.typeparameters.end.ts</string>
7138+
</dict>
7139+
</dict>
7140+
<key>contentName</key>
7141+
<string>meta.type.parameters.ts</string>
7142+
<key>patterns</key>
7143+
<array>
7144+
<dict>
7145+
<key>include</key>
7146+
<string>#type-arguments-body</string>
7147+
</dict>
7148+
</array>
7149+
</dict>
7150+
<dict>
7151+
<key>begin</key>
7152+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;)</string>
7153+
<key>beginCaptures</key>
7154+
<dict>
7155+
<key>1</key>
7156+
<dict>
7157+
<key>name</key>
7158+
<string>entity.name.type.ts</string>
7159+
</dict>
7160+
<key>2</key>
7161+
<dict>
7162+
<key>name</key>
7163+
<string>meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts</string>
7164+
</dict>
7165+
</dict>
7166+
<key>end</key>
7167+
<string>(&gt;)</string>
7168+
<key>endCaptures</key>
7169+
<dict>
7170+
<key>1</key>
7171+
<dict>
7172+
<key>name</key>
7173+
<string>meta.type.parameters.ts punctuation.definition.typeparameters.end.ts</string>
7174+
</dict>
7175+
</dict>
7176+
<key>contentName</key>
7177+
<string>meta.type.parameters.ts</string>
7178+
<key>patterns</key>
7179+
<array>
7180+
<dict>
7181+
<key>include</key>
7182+
<string>#type-arguments-body</string>
7183+
</dict>
7184+
</array>
7185+
</dict>
70437186
<dict>
70447187
<key>match</key>
70457188
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>

0 commit comments

Comments
 (0)