Skip to content

Commit 10e222a

Browse files
authored
Add 'abstract' constructor types (#861)
1 parent dcfca7b commit 10e222a

5 files changed

+89
-10
lines changed

TypeScript.YAML-tmLanguage

+6-4
Original file line numberDiff line numberDiff line change
@@ -2443,17 +2443,19 @@ repository:
24432443
type-fn-type-parameters:
24442444
patterns:
24452445
# constructor type
2446-
- begin: '{{startOfIdentifier}}(new)\b(?=\s*\<)'
2446+
- begin: '{{startOfIdentifier}}(?:(abstract)\s+)?(new)\b(?=\s*\<)'
24472447
beginCaptures:
2448-
'1': { name: meta.type.constructor.ts keyword.control.new.ts }
2448+
'1': { name: meta.type.constructor.ts storage.modifier.ts } # captures keyword (abstract)
2449+
'2': { name: meta.type.constructor.ts keyword.control.new.ts } # captures keyword (new)
24492450
end: (?<=>)
24502451
patterns:
24512452
- include: '#comment'
24522453
- include: '#type-parameters'
24532454
- name: meta.type.constructor.ts
2454-
begin: '{{startOfIdentifier}}(new)\b\s*(?=\()'
2455+
begin: '{{startOfIdentifier}}(?:(abstract)\s+)?(new)\b\s*(?=\()'
24552456
beginCaptures:
2456-
'1': { name: keyword.control.new.ts }
2457+
'1': { name: storage.modifier.ts } # captures keyword (abstract)
2458+
'2': { name: keyword.control.new.ts } # captures keyword (new)
24572459
end: (?<=\))
24582460
patterns:
24592461
- include: '#function-parameters'

TypeScript.tmLanguage

+12-2
Original file line numberDiff line numberDiff line change
@@ -7424,10 +7424,15 @@
74247424
<array>
74257425
<dict>
74267426
<key>begin</key>
7427-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\b(?=\s*\&lt;)</string>
7427+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b(?=\s*\&lt;)</string>
74287428
<key>beginCaptures</key>
74297429
<dict>
74307430
<key>1</key>
7431+
<dict>
7432+
<key>name</key>
7433+
<string>meta.type.constructor.ts storage.modifier.ts</string>
7434+
</dict>
7435+
<key>2</key>
74317436
<dict>
74327437
<key>name</key>
74337438
<string>meta.type.constructor.ts keyword.control.new.ts</string>
@@ -7451,10 +7456,15 @@
74517456
<key>name</key>
74527457
<string>meta.type.constructor.ts</string>
74537458
<key>begin</key>
7454-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\b\s*(?=\()</string>
7459+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()</string>
74557460
<key>beginCaptures</key>
74567461
<dict>
74577462
<key>1</key>
7463+
<dict>
7464+
<key>name</key>
7465+
<string>storage.modifier.ts</string>
7466+
</dict>
7467+
<key>2</key>
74587468
<dict>
74597469
<key>name</key>
74607470
<string>keyword.control.new.ts</string>

TypeScriptReact.tmLanguage

+12-2
Original file line numberDiff line numberDiff line change
@@ -7372,10 +7372,15 @@
73727372
<array>
73737373
<dict>
73747374
<key>begin</key>
7375-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\b(?=\s*\&lt;)</string>
7375+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b(?=\s*\&lt;)</string>
73767376
<key>beginCaptures</key>
73777377
<dict>
73787378
<key>1</key>
7379+
<dict>
7380+
<key>name</key>
7381+
<string>meta.type.constructor.tsx storage.modifier.tsx</string>
7382+
</dict>
7383+
<key>2</key>
73797384
<dict>
73807385
<key>name</key>
73817386
<string>meta.type.constructor.tsx keyword.control.new.tsx</string>
@@ -7399,10 +7404,15 @@
73997404
<key>name</key>
74007405
<string>meta.type.constructor.tsx</string>
74017406
<key>begin</key>
7402-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\b\s*(?=\()</string>
7407+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()</string>
74037408
<key>beginCaptures</key>
74047409
<dict>
74057410
<key>1</key>
7411+
<dict>
7412+
<key>name</key>
7413+
<string>storage.modifier.tsx</string>
7414+
</dict>
7415+
<key>2</key>
74067416
<dict>
74077417
<key>name</key>
74087418
<string>keyword.control.new.tsx</string>

tests/baselines/constructorType.baseline.txt

+57-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
original file
22
-----------------------------------
33
type constructorType<T> = new <T>(a: T) => T;
4+
type abstractConstructorType<T> = abstract new <T>(a: T) => T;
45
-----------------------------------
56

67
Grammar: TypeScript.tmLanguage
@@ -55,4 +56,59 @@ Grammar: TypeScript.tmLanguage
5556
^
5657
source.ts meta.type.declaration.ts meta.type.function.return.ts entity.name.type.ts
5758
^
58-
source.ts punctuation.terminator.statement.ts
59+
source.ts punctuation.terminator.statement.ts
60+
>type abstractConstructorType<T> = abstract new <T>(a: T) => T;
61+
^^^^
62+
source.ts meta.type.declaration.ts storage.type.type.ts
63+
^
64+
source.ts meta.type.declaration.ts
65+
^^^^^^^^^^^^^^^^^^^^^^^
66+
source.ts meta.type.declaration.ts entity.name.type.alias.ts
67+
^
68+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
69+
^
70+
source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts
71+
^
72+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
73+
^
74+
source.ts meta.type.declaration.ts
75+
^
76+
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
77+
^
78+
source.ts meta.type.declaration.ts
79+
^^^^^^^^
80+
source.ts meta.type.declaration.ts meta.type.constructor.ts storage.modifier.ts
81+
^
82+
source.ts meta.type.declaration.ts
83+
^^^
84+
source.ts meta.type.declaration.ts meta.type.constructor.ts keyword.control.new.ts
85+
^
86+
source.ts meta.type.declaration.ts
87+
^
88+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
89+
^
90+
source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts
91+
^
92+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
93+
^
94+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
95+
^
96+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts variable.parameter.ts
97+
^
98+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
99+
^
100+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts
101+
^
102+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
103+
^
104+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
105+
^
106+
source.ts meta.type.declaration.ts
107+
^^
108+
source.ts meta.type.declaration.ts meta.type.function.return.ts storage.type.function.arrow.ts
109+
^
110+
source.ts meta.type.declaration.ts meta.type.function.return.ts
111+
^
112+
source.ts meta.type.declaration.ts meta.type.function.return.ts entity.name.type.ts
113+
^
114+
source.ts punctuation.terminator.statement.ts

tests/cases/constructorType.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
type constructorType<T> = new <T>(a: T) => T;
1+
type constructorType<T> = new <T>(a: T) => T;
2+
type abstractConstructorType<T> = abstract new <T>(a: T) => T;

0 commit comments

Comments
 (0)