Skip to content

Commit 31b00a7

Browse files
committed
Match anything following ternary ':' as expression in class body as fallback
Fixes #721 and #724
1 parent 6985226 commit 31b00a7

File tree

7 files changed

+487
-0
lines changed

7 files changed

+487
-0
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,11 @@ repository:
951951
patterns:
952952
- include: '#comment'
953953
- include: '#decorator'
954+
# The : could most probably be end of ternary expression so to avoid matching expression following it as field declaration, explicitly match it as expression
955+
- begin: (?<=:)\s*
956+
end: (?=\s|[;),}\]:\-\+]|{{endOfStatement}})
957+
patterns:
958+
- include: '#expression'
954959
- include: '#method-declaration'
955960
- include: '#indexer-declaration'
956961
- include: '#field-declaration'

TypeScript.tmLanguage

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3053,6 +3053,19 @@
30533053
<key>include</key>
30543054
<string>#decorator</string>
30553055
</dict>
3056+
<dict>
3057+
<key>begin</key>
3058+
<string>(?&lt;=:)\s*</string>
3059+
<key>end</key>
3060+
<string>(?=\s|[;),}\]:\-\+]|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))</string>
3061+
<key>patterns</key>
3062+
<array>
3063+
<dict>
3064+
<key>include</key>
3065+
<string>#expression</string>
3066+
</dict>
3067+
</array>
3068+
</dict>
30563069
<dict>
30573070
<key>include</key>
30583071
<string>#method-declaration</string>

TypeScriptReact.tmLanguage

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3057,6 +3057,19 @@
30573057
<key>include</key>
30583058
<string>#decorator</string>
30593059
</dict>
3060+
<dict>
3061+
<key>begin</key>
3062+
<string>(?&lt;=:)\s*</string>
3063+
<key>end</key>
3064+
<string>(?=\s|[;),}\]:\-\+]|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))</string>
3065+
<key>patterns</key>
3066+
<array>
3067+
<dict>
3068+
<key>include</key>
3069+
<string>#expression</string>
3070+
</dict>
3071+
</array>
3072+
</dict>
30603073
<dict>
30613074
<key>include</key>
30623075
<string>#method-declaration</string>

tests/baselines/Issue721.baseline.txt

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
original file
2+
-----------------------------------
3+
class Foo {
4+
prop = () =>
5+
this.condition
6+
? fn(this.value)
7+
: fn(this.value)
8+
}
9+
-----------------------------------
10+
11+
Grammar: TypeScript.tmLanguage
12+
-----------------------------------
13+
>class Foo {
14+
^^^^^
15+
source.ts meta.class.ts storage.type.class.ts
16+
^
17+
source.ts meta.class.ts
18+
^^^
19+
source.ts meta.class.ts entity.name.type.class.ts
20+
^
21+
source.ts meta.class.ts
22+
^
23+
source.ts meta.class.ts punctuation.definition.block.ts
24+
> prop = () =>
25+
^^
26+
source.ts meta.class.ts meta.field.declaration.ts
27+
^^^^
28+
source.ts meta.class.ts meta.field.declaration.ts meta.definition.property.ts entity.name.function.ts
29+
^
30+
source.ts meta.class.ts meta.field.declaration.ts
31+
^
32+
source.ts meta.class.ts meta.field.declaration.ts keyword.operator.assignment.ts
33+
^
34+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
35+
^
36+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
37+
^
38+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
39+
^
40+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
41+
^^
42+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts storage.type.function.arrow.ts
43+
> this.condition
44+
^^^^
45+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
46+
^^^^
47+
source.ts meta.class.ts meta.field.declaration.ts variable.language.this.ts
48+
^
49+
source.ts meta.class.ts meta.field.declaration.ts punctuation.accessor.ts
50+
^^^^^^^^^
51+
source.ts meta.class.ts meta.field.declaration.ts variable.other.property.ts
52+
> ? fn(this.value)
53+
^^^^^^
54+
source.ts meta.class.ts
55+
^
56+
source.ts meta.class.ts keyword.operator.ternary.ts
57+
^
58+
source.ts meta.class.ts
59+
^^
60+
source.ts meta.class.ts meta.function-call.ts entity.name.function.ts
61+
^
62+
source.ts meta.class.ts meta.brace.round.ts
63+
^^^^
64+
source.ts meta.class.ts variable.language.this.ts
65+
^
66+
source.ts meta.class.ts punctuation.accessor.ts
67+
^^^^^
68+
source.ts meta.class.ts support.variable.property.dom.ts
69+
^
70+
source.ts meta.class.ts meta.brace.round.ts
71+
> : fn(this.value)
72+
^^^^^^
73+
source.ts meta.class.ts
74+
^
75+
source.ts meta.class.ts keyword.operator.ternary.ts
76+
^
77+
source.ts meta.class.ts
78+
^^
79+
source.ts meta.class.ts meta.function-call.ts entity.name.function.ts
80+
^
81+
source.ts meta.class.ts meta.brace.round.ts
82+
^^^^
83+
source.ts meta.class.ts variable.language.this.ts
84+
^
85+
source.ts meta.class.ts punctuation.accessor.ts
86+
^^^^^
87+
source.ts meta.class.ts support.variable.property.dom.ts
88+
^
89+
source.ts meta.class.ts meta.brace.round.ts
90+
>}
91+
^
92+
source.ts meta.class.ts punctuation.definition.block.ts

0 commit comments

Comments
 (0)