Skip to content

Commit e47681d

Browse files
committed
Handle case when function declaration is multiple lines with parameters on new line
This makes it treated like arrow, so allow arrow matching to stop when function block starts Fixes #405
1 parent 602d96a commit e47681d

File tree

5 files changed

+259
-6
lines changed

5 files changed

+259
-6
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,7 @@ repository:
16241624
)
16251625
beginCaptures:
16261626
'1': { name: storage.modifier.async.ts }
1627-
end: (?==>)
1627+
end: (?==>|\{)
16281628
patterns:
16291629
- include: '#comment'
16301630
- include: '#type-parameters'
@@ -1646,9 +1646,19 @@ repository:
16461646
begin: '(?<=\))\s*(:)'
16471647
beginCaptures:
16481648
'1': { name: keyword.operator.type.annotation.ts }
1649-
end: (?==>)
1649+
end: (?==>|\{)
16501650
patterns:
16511651
# TODO: handle the fn and constructor type specifically.
1652+
# Handle returning of object type specifically here so as to not confuse it with the start of function block
1653+
- name: meta.object.type.ts
1654+
begin: (?<=:)\s*(\{)
1655+
beginCaptures:
1656+
'1': { name: punctuation.definition.block.ts }
1657+
end: \}
1658+
endCaptures:
1659+
'0': { name: punctuation.definition.block.ts }
1660+
patterns:
1661+
- include: '#type-object-members'
16521662
- include: '#type-predicate-operator'
16531663
- include: '#type'
16541664

TypeScript.tmLanguage

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4442,7 +4442,7 @@
44424442
</dict>
44434443
</dict>
44444444
<key>end</key>
4445-
<string>(?==&gt;)</string>
4445+
<string>(?==&gt;|\{)</string>
44464446
<key>patterns</key>
44474447
<array>
44484448
<dict>
@@ -4507,9 +4507,40 @@
45074507
</dict>
45084508
</dict>
45094509
<key>end</key>
4510-
<string>(?==&gt;)</string>
4510+
<string>(?==&gt;|\{)</string>
45114511
<key>patterns</key>
45124512
<array>
4513+
<dict>
4514+
<key>name</key>
4515+
<string>meta.object.type.ts</string>
4516+
<key>begin</key>
4517+
<string>(?&lt;=:)\s*(\{)</string>
4518+
<key>beginCaptures</key>
4519+
<dict>
4520+
<key>1</key>
4521+
<dict>
4522+
<key>name</key>
4523+
<string>punctuation.definition.block.ts</string>
4524+
</dict>
4525+
</dict>
4526+
<key>end</key>
4527+
<string>\}</string>
4528+
<key>endCaptures</key>
4529+
<dict>
4530+
<key>0</key>
4531+
<dict>
4532+
<key>name</key>
4533+
<string>punctuation.definition.block.ts</string>
4534+
</dict>
4535+
</dict>
4536+
<key>patterns</key>
4537+
<array>
4538+
<dict>
4539+
<key>include</key>
4540+
<string>#type-object-members</string>
4541+
</dict>
4542+
</array>
4543+
</dict>
45134544
<dict>
45144545
<key>include</key>
45154546
<string>#type-predicate-operator</string>

TypeScriptReact.tmLanguage

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4424,7 +4424,7 @@
44244424
</dict>
44254425
</dict>
44264426
<key>end</key>
4427-
<string>(?==&gt;)</string>
4427+
<string>(?==&gt;|\{)</string>
44284428
<key>patterns</key>
44294429
<array>
44304430
<dict>
@@ -4489,9 +4489,40 @@
44894489
</dict>
44904490
</dict>
44914491
<key>end</key>
4492-
<string>(?==&gt;)</string>
4492+
<string>(?==&gt;|\{)</string>
44934493
<key>patterns</key>
44944494
<array>
4495+
<dict>
4496+
<key>name</key>
4497+
<string>meta.object.type.tsx</string>
4498+
<key>begin</key>
4499+
<string>(?&lt;=:)\s*(\{)</string>
4500+
<key>beginCaptures</key>
4501+
<dict>
4502+
<key>1</key>
4503+
<dict>
4504+
<key>name</key>
4505+
<string>punctuation.definition.block.tsx</string>
4506+
</dict>
4507+
</dict>
4508+
<key>end</key>
4509+
<string>\}</string>
4510+
<key>endCaptures</key>
4511+
<dict>
4512+
<key>0</key>
4513+
<dict>
4514+
<key>name</key>
4515+
<string>punctuation.definition.block.tsx</string>
4516+
</dict>
4517+
</dict>
4518+
<key>patterns</key>
4519+
<array>
4520+
<dict>
4521+
<key>include</key>
4522+
<string>#type-object-members</string>
4523+
</dict>
4524+
</array>
4525+
</dict>
44954526
<dict>
44964527
<key>include</key>
44974528
<string>#type-predicate-operator</string>

tests/baselines/Issue405.baseline.txt

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
original file
2+
-----------------------------------
3+
function myFunction1
4+
(a: string)
5+
{
6+
var r = true;
7+
return true
8+
}
9+
10+
function myFunction2
11+
(a: string): boolean
12+
{
13+
var r = true;
14+
return true
15+
}
16+
17+
-----------------------------------
18+
19+
Grammar: TypeScript.tmLanguage
20+
-----------------------------------
21+
>function myFunction1
22+
^^^^^^^^
23+
source.ts meta.function.ts storage.type.function.ts
24+
^^
25+
source.ts meta.function.ts
26+
^^^^^^^^^^^
27+
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
28+
^^
29+
source.ts meta.function.ts
30+
> (a: string)
31+
^^
32+
source.ts meta.arrow.ts
33+
^
34+
source.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
35+
^
36+
source.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
37+
^
38+
source.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
39+
^
40+
source.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts
41+
^^^^^^
42+
source.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
43+
^
44+
source.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
45+
^^
46+
source.ts meta.arrow.ts
47+
>{
48+
^
49+
source.ts meta.block.ts punctuation.definition.block.ts
50+
^^
51+
source.ts meta.block.ts
52+
> var r = true;
53+
^^
54+
source.ts meta.block.ts
55+
^^^
56+
source.ts meta.block.ts meta.var.expr.ts storage.type.ts
57+
^
58+
source.ts meta.block.ts meta.var.expr.ts
59+
^
60+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
61+
^
62+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
63+
^
64+
source.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
65+
^
66+
source.ts meta.block.ts meta.var.expr.ts
67+
^^^^
68+
source.ts meta.block.ts meta.var.expr.ts constant.language.boolean.true.ts
69+
^
70+
source.ts meta.block.ts punctuation.terminator.statement.ts
71+
^^
72+
source.ts meta.block.ts
73+
> return true
74+
^^
75+
source.ts meta.block.ts
76+
^^^^^^
77+
source.ts meta.block.ts keyword.control.flow.ts
78+
^
79+
source.ts meta.block.ts
80+
^^^^
81+
source.ts meta.block.ts constant.language.boolean.true.ts
82+
^^
83+
source.ts meta.block.ts
84+
>}
85+
^
86+
source.ts meta.block.ts punctuation.definition.block.ts
87+
^^
88+
source.ts
89+
>
90+
^^
91+
source.ts
92+
>function myFunction2
93+
^^^^^^^^
94+
source.ts meta.function.ts storage.type.function.ts
95+
^
96+
source.ts meta.function.ts
97+
^^^^^^^^^^^
98+
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
99+
^^
100+
source.ts meta.function.ts
101+
> (a: string): boolean
102+
^^
103+
source.ts meta.arrow.ts
104+
^
105+
source.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
106+
^
107+
source.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
108+
^
109+
source.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
110+
^
111+
source.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts
112+
^^^^^^
113+
source.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
114+
^
115+
source.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
116+
^
117+
source.ts meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
118+
^
119+
source.ts meta.arrow.ts meta.return.type.arrow.ts
120+
^^^^^^^
121+
source.ts meta.arrow.ts meta.return.type.arrow.ts support.type.primitive.ts
122+
^^
123+
source.ts meta.arrow.ts meta.return.type.arrow.ts
124+
>{
125+
^
126+
source.ts meta.block.ts punctuation.definition.block.ts
127+
^^
128+
source.ts meta.block.ts
129+
> var r = true;
130+
^^
131+
source.ts meta.block.ts
132+
^^^
133+
source.ts meta.block.ts meta.var.expr.ts storage.type.ts
134+
^
135+
source.ts meta.block.ts meta.var.expr.ts
136+
^
137+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
138+
^
139+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
140+
^
141+
source.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
142+
^
143+
source.ts meta.block.ts meta.var.expr.ts
144+
^^^^
145+
source.ts meta.block.ts meta.var.expr.ts constant.language.boolean.true.ts
146+
^
147+
source.ts meta.block.ts punctuation.terminator.statement.ts
148+
^^
149+
source.ts meta.block.ts
150+
> return true
151+
^^
152+
source.ts meta.block.ts
153+
^^^^^^
154+
source.ts meta.block.ts keyword.control.flow.ts
155+
^
156+
source.ts meta.block.ts
157+
^^^^
158+
source.ts meta.block.ts constant.language.boolean.true.ts
159+
^^
160+
source.ts meta.block.ts
161+
>}
162+
^
163+
source.ts meta.block.ts punctuation.definition.block.ts
164+
^^
165+
source.ts
166+
>
167+
^
168+
source.ts

tests/cases/Issue405.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function myFunction1
2+
(a: string)
3+
{
4+
var r = true;
5+
return true
6+
}
7+
8+
function myFunction2
9+
(a: string): boolean
10+
{
11+
var r = true;
12+
return true
13+
}

0 commit comments

Comments
 (0)