Skip to content

Commit b61fd56

Browse files
committed
Scope optional methods correctly
Fixes #581
1 parent 874564b commit b61fd56

File tree

5 files changed

+117
-11
lines changed

5 files changed

+117
-11
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,13 @@ repository:
425425
- include: '#string'
426426
- include: '#array-literal'
427427
- include: '#comment'
428-
- name: meta.definition.property.ts entity.name.function.ts
429-
# function assignment |
430-
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
431-
match: |-
432-
(?x)({{identifier}})(?=(\?\s*)?{{functionLikeAssignmentOrType}})
428+
# function assignment |
429+
# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>
430+
- match: |-
431+
(?x)({{identifier}})(\?)?(?=(\?\s*)?{{functionLikeAssignmentOrType}})
432+
captures:
433+
'1': { name: meta.definition.property.ts entity.name.function.ts }
434+
'2': { name: keyword.operator.optional.ts }
433435
- name: meta.definition.property.ts variable.object.property.ts
434436
match: '{{identifier}}'
435437
- name: keyword.operator.optional.ts

TypeScript.tmLanguage

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,10 +1234,8 @@
12341234
<string>#comment</string>
12351235
</dict>
12361236
<dict>
1237-
<key>name</key>
1238-
<string>meta.definition.property.ts entity.name.function.ts</string>
12391237
<key>match</key>
1240-
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\?\s*)?\s*
1238+
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
12411239
# function assignment |
12421240
(=\s*(
12431241
((async\s+)?(
@@ -1305,6 +1303,19 @@
13051303
)
13061304
))
13071305
)))</string>
1306+
<key>captures</key>
1307+
<dict>
1308+
<key>1</key>
1309+
<dict>
1310+
<key>name</key>
1311+
<string>meta.definition.property.ts entity.name.function.ts</string>
1312+
</dict>
1313+
<key>2</key>
1314+
<dict>
1315+
<key>name</key>
1316+
<string>keyword.operator.optional.ts</string>
1317+
</dict>
1318+
</dict>
13081319
</dict>
13091320
<dict>
13101321
<key>name</key>

TypeScriptReact.tmLanguage

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,10 +1238,8 @@
12381238
<string>#comment</string>
12391239
</dict>
12401240
<dict>
1241-
<key>name</key>
1242-
<string>meta.definition.property.tsx entity.name.function.tsx</string>
12431241
<key>match</key>
1244-
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\?\s*)?\s*
1242+
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\?)?(?=(\?\s*)?\s*
12451243
# function assignment |
12461244
(=\s*(
12471245
((async\s+)?(
@@ -1309,6 +1307,19 @@
13091307
)
13101308
))
13111309
)))</string>
1310+
<key>captures</key>
1311+
<dict>
1312+
<key>1</key>
1313+
<dict>
1314+
<key>name</key>
1315+
<string>meta.definition.property.tsx entity.name.function.tsx</string>
1316+
</dict>
1317+
<key>2</key>
1318+
<dict>
1319+
<key>name</key>
1320+
<string>keyword.operator.optional.tsx</string>
1321+
</dict>
1322+
</dict>
13121323
</dict>
13131324
<dict>
13141325
<key>name</key>

tests/baselines/Issue581.baseline.txt

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
original file
2+
-----------------------------------
3+
interface Foo {
4+
a: () => void;
5+
b?: () => void;
6+
}
7+
-----------------------------------
8+
9+
Grammar: TypeScript.tmLanguage
10+
-----------------------------------
11+
>interface Foo {
12+
^^^^^^^^^
13+
source.ts meta.interface.ts storage.type.interface.ts
14+
^
15+
source.ts meta.interface.ts
16+
^^^
17+
source.ts meta.interface.ts entity.name.type.interface.ts
18+
^
19+
source.ts meta.interface.ts
20+
^
21+
source.ts meta.interface.ts punctuation.definition.block.ts
22+
^^
23+
source.ts meta.interface.ts
24+
> a: () => void;
25+
^^
26+
source.ts meta.interface.ts
27+
^
28+
source.ts meta.interface.ts meta.field.declaration.ts meta.definition.property.ts entity.name.function.ts
29+
^
30+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
31+
^
32+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts
33+
^
34+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
35+
^
36+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
37+
^
38+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts
39+
^^
40+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.return.ts storage.type.function.arrow.ts
41+
^
42+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.return.ts
43+
^^^^
44+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.return.ts support.type.primitive.ts
45+
^
46+
source.ts meta.interface.ts punctuation.terminator.statement.ts
47+
^^
48+
source.ts meta.interface.ts
49+
> b?: () => void;
50+
^^
51+
source.ts meta.interface.ts
52+
^
53+
source.ts meta.interface.ts meta.field.declaration.ts meta.definition.property.ts entity.name.function.ts
54+
^
55+
source.ts meta.interface.ts meta.field.declaration.ts keyword.operator.optional.ts
56+
^
57+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
58+
^
59+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts
60+
^
61+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
62+
^
63+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
64+
^
65+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts
66+
^^
67+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.return.ts storage.type.function.arrow.ts
68+
^
69+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.return.ts
70+
^^^^
71+
source.ts meta.interface.ts meta.field.declaration.ts meta.type.annotation.ts meta.type.function.return.ts support.type.primitive.ts
72+
^
73+
source.ts meta.interface.ts punctuation.terminator.statement.ts
74+
^^
75+
source.ts meta.interface.ts
76+
>}
77+
^
78+
source.ts meta.interface.ts punctuation.definition.block.ts

tests/cases/Issue581.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
interface Foo {
2+
a: () => void;
3+
b?: () => void;
4+
}

0 commit comments

Comments
 (0)