Skip to content

Commit 4299f47

Browse files
committed
Do not allow function expression to end with line break
Fixes #389
1 parent c5e57fa commit 4299f47

16 files changed

+656
-498
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,13 @@ repository:
183183
- include: '#expression'
184184

185185
expression:
186-
name: meta.expression.ts
187186
patterns:
188187
- include: '#string'
189188
- include: '#regex'
190189
- include: '#template'
191190
- include: '#comment'
192191
- include: '#literal'
193-
- include: '#function-declaration'
192+
- include: '#function-expression'
194193
- include: '#class-or-interface-declaration'
195194
- include: '#arrow-function'
196195
- include: '#cast'
@@ -230,7 +229,6 @@ repository:
230229
match: (?<!\.|\$)\b(declare)\b(?!\$)
231230

232231
declaration:
233-
name: meta.declaration.ts
234232
patterns:
235233
- include: '#decorator'
236234
- include: '#var-expr'
@@ -663,7 +661,23 @@ repository:
663661
'3': { name: storage.type.function.ts }
664662
'4': { name: keyword.generator.asterisk.ts }
665663
'5': { name: meta.definition.function.ts entity.name.function.ts }
666-
end: (?=$|;|\})|(?<=\})
664+
end: (?=$|;)|(?<=\})
665+
patterns:
666+
- include: '#comment'
667+
- include: '#type-parameters'
668+
- include: '#function-parameters'
669+
- include: '#return-type'
670+
- include: '#decl-block'
671+
672+
function-expression:
673+
name: meta.function.expression.ts
674+
begin: (?<!\.|\$)\b(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*
675+
beginCaptures:
676+
'1': { name: storage.modifier.async.ts }
677+
'2': { name: storage.type.function.ts }
678+
'3': { name: keyword.generator.asterisk.ts }
679+
'4': { name: meta.definition.function.ts entity.name.function.ts }
680+
end: (?<=\})
667681
patterns:
668682
- include: '#comment'
669683
- include: '#type-parameters'
@@ -854,7 +868,6 @@ repository:
854868
- include: '#type'
855869

856870
type:
857-
name: meta.type.ts
858871
patterns:
859872
- include: '#comment'
860873
- include: '#string'
@@ -1804,7 +1817,6 @@ repository:
18041817
- include: '#expression'
18051818

18061819
literal:
1807-
name: literal.ts
18081820
patterns:
18091821
- include: '#numeric-literal'
18101822
- include: '#boolean-literal'

TypeScript.tmLanguage

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,6 @@
520520
</dict>
521521
<key>expression</key>
522522
<dict>
523-
<key>name</key>
524-
<string>meta.expression.ts</string>
525523
<key>patterns</key>
526524
<array>
527525
<dict>
@@ -546,7 +544,7 @@
546544
</dict>
547545
<dict>
548546
<key>include</key>
549-
<string>#function-declaration</string>
547+
<string>#function-expression</string>
550548
</dict>
551549
<dict>
552550
<key>include</key>
@@ -675,8 +673,6 @@
675673
</dict>
676674
<key>declaration</key>
677675
<dict>
678-
<key>name</key>
679-
<string>meta.declaration.ts</string>
680676
<key>patterns</key>
681677
<array>
682678
<dict>
@@ -2080,7 +2076,62 @@
20802076
</dict>
20812077
</dict>
20822078
<key>end</key>
2083-
<string>(?=$|;|\})|(?&lt;=\})</string>
2079+
<string>(?=$|;)|(?&lt;=\})</string>
2080+
<key>patterns</key>
2081+
<array>
2082+
<dict>
2083+
<key>include</key>
2084+
<string>#comment</string>
2085+
</dict>
2086+
<dict>
2087+
<key>include</key>
2088+
<string>#type-parameters</string>
2089+
</dict>
2090+
<dict>
2091+
<key>include</key>
2092+
<string>#function-parameters</string>
2093+
</dict>
2094+
<dict>
2095+
<key>include</key>
2096+
<string>#return-type</string>
2097+
</dict>
2098+
<dict>
2099+
<key>include</key>
2100+
<string>#decl-block</string>
2101+
</dict>
2102+
</array>
2103+
</dict>
2104+
<key>function-expression</key>
2105+
<dict>
2106+
<key>name</key>
2107+
<string>meta.function.expression.ts</string>
2108+
<key>begin</key>
2109+
<string>(?&lt;!\.|\$)\b(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2110+
<key>beginCaptures</key>
2111+
<dict>
2112+
<key>1</key>
2113+
<dict>
2114+
<key>name</key>
2115+
<string>storage.modifier.async.ts</string>
2116+
</dict>
2117+
<key>2</key>
2118+
<dict>
2119+
<key>name</key>
2120+
<string>storage.type.function.ts</string>
2121+
</dict>
2122+
<key>3</key>
2123+
<dict>
2124+
<key>name</key>
2125+
<string>keyword.generator.asterisk.ts</string>
2126+
</dict>
2127+
<key>4</key>
2128+
<dict>
2129+
<key>name</key>
2130+
<string>meta.definition.function.ts entity.name.function.ts</string>
2131+
</dict>
2132+
</dict>
2133+
<key>end</key>
2134+
<string>(?&lt;=\})</string>
20842135
<key>patterns</key>
20852136
<array>
20862137
<dict>
@@ -2627,8 +2678,6 @@
26272678
</dict>
26282679
<key>type</key>
26292680
<dict>
2630-
<key>name</key>
2631-
<string>meta.type.ts</string>
26322681
<key>patterns</key>
26332682
<array>
26342683
<dict>
@@ -4976,8 +5025,6 @@
49765025
</dict>
49775026
<key>literal</key>
49785027
<dict>
4979-
<key>name</key>
4980-
<string>literal.ts</string>
49815028
<key>patterns</key>
49825029
<array>
49835030
<dict>

TypeScriptReact.tmLanguage

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,6 @@
520520
</dict>
521521
<key>expression</key>
522522
<dict>
523-
<key>name</key>
524-
<string>meta.expression.tsx</string>
525523
<key>patterns</key>
526524
<array>
527525
<dict>
@@ -550,7 +548,7 @@
550548
</dict>
551549
<dict>
552550
<key>include</key>
553-
<string>#function-declaration</string>
551+
<string>#function-expression</string>
554552
</dict>
555553
<dict>
556554
<key>include</key>
@@ -679,8 +677,6 @@
679677
</dict>
680678
<key>declaration</key>
681679
<dict>
682-
<key>name</key>
683-
<string>meta.declaration.tsx</string>
684680
<key>patterns</key>
685681
<array>
686682
<dict>
@@ -2084,7 +2080,62 @@
20842080
</dict>
20852081
</dict>
20862082
<key>end</key>
2087-
<string>(?=$|;|\})|(?&lt;=\})</string>
2083+
<string>(?=$|;)|(?&lt;=\})</string>
2084+
<key>patterns</key>
2085+
<array>
2086+
<dict>
2087+
<key>include</key>
2088+
<string>#comment</string>
2089+
</dict>
2090+
<dict>
2091+
<key>include</key>
2092+
<string>#type-parameters</string>
2093+
</dict>
2094+
<dict>
2095+
<key>include</key>
2096+
<string>#function-parameters</string>
2097+
</dict>
2098+
<dict>
2099+
<key>include</key>
2100+
<string>#return-type</string>
2101+
</dict>
2102+
<dict>
2103+
<key>include</key>
2104+
<string>#decl-block</string>
2105+
</dict>
2106+
</array>
2107+
</dict>
2108+
<key>function-expression</key>
2109+
<dict>
2110+
<key>name</key>
2111+
<string>meta.function.expression.tsx</string>
2112+
<key>begin</key>
2113+
<string>(?&lt;!\.|\$)\b(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2114+
<key>beginCaptures</key>
2115+
<dict>
2116+
<key>1</key>
2117+
<dict>
2118+
<key>name</key>
2119+
<string>storage.modifier.async.tsx</string>
2120+
</dict>
2121+
<key>2</key>
2122+
<dict>
2123+
<key>name</key>
2124+
<string>storage.type.function.tsx</string>
2125+
</dict>
2126+
<key>3</key>
2127+
<dict>
2128+
<key>name</key>
2129+
<string>keyword.generator.asterisk.tsx</string>
2130+
</dict>
2131+
<key>4</key>
2132+
<dict>
2133+
<key>name</key>
2134+
<string>meta.definition.function.tsx entity.name.function.tsx</string>
2135+
</dict>
2136+
</dict>
2137+
<key>end</key>
2138+
<string>(?&lt;=\})</string>
20882139
<key>patterns</key>
20892140
<array>
20902141
<dict>
@@ -2631,8 +2682,6 @@
26312682
</dict>
26322683
<key>type</key>
26332684
<dict>
2634-
<key>name</key>
2635-
<string>meta.type.tsx</string>
26362685
<key>patterns</key>
26372686
<array>
26382687
<dict>
@@ -4958,8 +5007,6 @@
49585007
</dict>
49595008
<key>literal</key>
49605009
<dict>
4961-
<key>name</key>
4962-
<string>literal.tsx</string>
49635010
<key>patterns</key>
49645011
<array>
49655012
<dict>

tests/baselines/Issue115.baseline.txt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -136,41 +136,41 @@ Grammar: TypeScript.tmLanguage
136136
^
137137
source.ts meta.var.expr.ts
138138
^^^^^^^^
139-
source.ts meta.var.expr.ts meta.function.ts storage.type.function.ts
139+
source.ts meta.var.expr.ts meta.function.expression.ts storage.type.function.ts
140140
^
141-
source.ts meta.var.expr.ts meta.function.ts
141+
source.ts meta.var.expr.ts meta.function.expression.ts
142142
^
143-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
143+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
144144
^
145-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts variable.parameter.ts
145+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts variable.parameter.ts
146146
^
147-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
147+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
148148
^
149-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
149+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts
150150
^^^
151-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
151+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
152152
^
153-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
153+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts punctuation.separator.parameter.ts
154154
^
155-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts
155+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts
156156
^
157-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts variable.parameter.ts
157+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts variable.parameter.ts
158158
^
159-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
159+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
160160
^
161-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
161+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts
162162
^^^^^^
163-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
163+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
164164
^
165-
source.ts meta.var.expr.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
165+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts punctuation.definition.parameters.end.ts
166166
^
167-
source.ts meta.var.expr.ts meta.function.ts
167+
source.ts meta.var.expr.ts meta.function.expression.ts
168168
^
169-
source.ts meta.var.expr.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
169+
source.ts meta.var.expr.ts meta.function.expression.ts meta.block.ts punctuation.definition.block.ts
170170
^
171-
source.ts meta.var.expr.ts meta.function.ts meta.block.ts
171+
source.ts meta.var.expr.ts meta.function.expression.ts meta.block.ts
172172
^
173-
source.ts meta.var.expr.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
173+
source.ts meta.var.expr.ts meta.function.expression.ts meta.block.ts punctuation.definition.block.ts
174174
^
175175
source.ts meta.var.expr.ts
176176
>

0 commit comments

Comments
 (0)