Skip to content

Commit c0c0c5f

Browse files
committed
Fix the function detection for variables/parameters typed as Function type
Fixes #763
1 parent 894c5c5 commit c0c0c5f

File tree

5 files changed

+123
-0
lines changed

5 files changed

+123
-0
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ variables:
113113
))
114114
))
115115
)) |
116+
(:\s*{{startOfIdentifier}}Function{{endOfIdentifier}}) |
116117
(:\s*{{possiblyMultilineArrow}})
117118
functionLikeAssignmentOrType: |-
118119
\s*

TypeScript.tmLanguage

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,7 @@
656656
))
657657
))
658658
)) |
659+
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
659660
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*([\{\[]\s*)?$))) |
660661
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
661662
((async\s+)?(
@@ -814,6 +815,7 @@
814815
))
815816
))
816817
)) |
818+
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
817819
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*([\{\[]\s*)?$))) |
818820
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
819821
((async\s+)?(
@@ -1475,6 +1477,7 @@
14751477
))
14761478
))
14771479
)) |
1480+
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
14781481
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*([\{\[]\s*)?$))) |
14791482
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
14801483
((async\s+)?(
@@ -1933,6 +1936,7 @@
19331936
))
19341937
))
19351938
)) |
1939+
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
19361940
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*([\{\[]\s*)?$))) |
19371941
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
19381942
((async\s+)?(
@@ -4926,6 +4930,7 @@
49264930
))
49274931
))
49284932
)) |
4933+
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
49294934
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*([\{\[]\s*)?$))) |
49304935
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
49314936
((async\s+)?(
@@ -7063,6 +7068,7 @@
70637068
))
70647069
))
70657070
)) |
7071+
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
70667072
(:\s*((&lt;\s*$)|((&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*([\{\[]\s*)?$))))</string>
70677073
<key>captures</key>
70687074
<dict>

TypeScriptReact.tmLanguage

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,7 @@
662662
))
663663
))
664664
)) |
665+
(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
665666
(:\s*((&lt;\s*$)|([\(]\s*([\{\[]\s*)?$))) |
666667
(:\s*(=&gt;|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
667668
((async\s+)?(
@@ -824,6 +825,7 @@
824825
))
825826
))
826827
)) |
828+
(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
827829
(:\s*((&lt;\s*$)|([\(]\s*([\{\[]\s*)?$))) |
828830
(:\s*(=&gt;|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
829831
((async\s+)?(
@@ -1489,6 +1491,7 @@
14891491
))
14901492
))
14911493
)) |
1494+
(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
14921495
(:\s*((&lt;\s*$)|([\(]\s*([\{\[]\s*)?$))) |
14931496
(:\s*(=&gt;|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
14941497
((async\s+)?(
@@ -1951,6 +1954,7 @@
19511954
))
19521955
))
19531956
)) |
1957+
(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
19541958
(:\s*((&lt;\s*$)|([\(]\s*([\{\[]\s*)?$))) |
19551959
(:\s*(=&gt;|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
19561960
((async\s+)?(
@@ -4952,6 +4956,7 @@
49524956
))
49534957
))
49544958
)) |
4959+
(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
49554960
(:\s*((&lt;\s*$)|([\(]\s*([\{\[]\s*)?$))) |
49564961
(:\s*(=&gt;|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
49574962
((async\s+)?(
@@ -7011,6 +7016,7 @@
70117016
))
70127017
))
70137018
)) |
7019+
(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
70147020
(:\s*((&lt;\s*$)|([\(]\s*([\{\[]\s*)?$))))</string>
70157021
<key>captures</key>
70167022
<dict>

tests/baselines/Issue763.baseline.txt

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
original file
2+
-----------------------------------
3+
interface SomeInterface {
4+
onStart(callback: Function): void;
5+
onError(callback: (obj: { videoPath: string }) => void): void;
6+
}
7+
-----------------------------------
8+
9+
Grammar: TypeScript.tmLanguage
10+
-----------------------------------
11+
>interface SomeInterface {
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+
> onStart(callback: Function): void;
23+
^^
24+
source.ts meta.interface.ts meta.method.declaration.ts
25+
^^^^^^^
26+
source.ts meta.interface.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
27+
^
28+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
29+
^^^^^^^^
30+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts entity.name.function.ts
31+
^
32+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
33+
^
34+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
35+
^^^^^^^^
36+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
37+
^
38+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
39+
^
40+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
41+
^
42+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts
43+
^^^^
44+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts support.type.primitive.ts
45+
^
46+
source.ts meta.interface.ts punctuation.terminator.statement.ts
47+
> onError(callback: (obj: { videoPath: string }) => void): void;
48+
^^
49+
source.ts meta.interface.ts meta.method.declaration.ts
50+
^^^^^^^
51+
source.ts meta.interface.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
52+
^
53+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
54+
^^^^^^^^
55+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts entity.name.function.ts
56+
^
57+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
58+
^
59+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
60+
^
61+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.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.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts variable.parameter.ts
64+
^
65+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
66+
^
67+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts
68+
^
69+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
70+
^
71+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts
72+
^^^^^^^^^
73+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
74+
^
75+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
76+
^
77+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
78+
^^^^^^
79+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
80+
^
81+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
82+
^
83+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.object.type.ts punctuation.definition.block.ts
84+
^
85+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
86+
^
87+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
88+
^^
89+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.return.ts storage.type.function.arrow.ts
90+
^
91+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.return.ts
92+
^^^^
93+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.function.return.ts support.type.primitive.ts
94+
^
95+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
96+
^
97+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
98+
^
99+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts
100+
^^^^
101+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts support.type.primitive.ts
102+
^
103+
source.ts meta.interface.ts punctuation.terminator.statement.ts
104+
>}
105+
^
106+
source.ts meta.interface.ts punctuation.definition.block.ts

tests/cases/Issue763.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
interface SomeInterface {
2+
onStart(callback: Function): void;
3+
onError(callback: (obj: { videoPath: string }) => void): void;
4+
}

0 commit comments

Comments
 (0)