Skip to content

Commit e8d2994

Browse files
committed
Handle new statement ending with ternary : operator
Fixes #573
1 parent 57f591c commit e8d2994

File tree

5 files changed

+160
-3
lines changed

5 files changed

+160
-3
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,7 @@ repository:
11021102
begin: '{{startOfIdentifier}}(new){{endOfIdentifier}}'
11031103
beginCaptures:
11041104
'1': { name: keyword.operator.new.ts }
1105-
end: (?<=\))|(?=[;),}\]]|$|({{startOfIdentifier}}new{{endOfIdentifier}})|({{startOfIdentifier}}function((\s+{{identifier}})|(\s*[\(]))))
1105+
end: (?<=\))|(?=[;),}\]:]|$|({{startOfIdentifier}}new{{endOfIdentifier}})|({{startOfIdentifier}}function((\s+{{identifier}})|(\s*[\(]))))
11061106
patterns:
11071107
- include: '#paren-expression'
11081108
- include: '#class-declaration'

TypeScript.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3468,7 +3468,7 @@
34683468
</dict>
34693469
</dict>
34703470
<key>end</key>
3471-
<string>(?&lt;=\))|(?=[;),}\]]|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
3471+
<string>(?&lt;=\))|(?=[;),}\]:]|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
34723472
<key>patterns</key>
34733473
<array>
34743474
<dict>

TypeScriptReact.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3472,7 +3472,7 @@
34723472
</dict>
34733473
</dict>
34743474
<key>end</key>
3475-
<string>(?&lt;=\))|(?=[;),}\]]|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
3475+
<string>(?&lt;=\))|(?=[;),}\]:]|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
34763476
<key>patterns</key>
34773477
<array>
34783478
<dict>
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
original file
2+
-----------------------------------
3+
class Foo {
4+
static a(): void {
5+
let foo = true ? new String : "";
6+
}
7+
8+
static b(): void {
9+
// wrong
10+
}
11+
}
12+
-----------------------------------
13+
14+
Grammar: TypeScript.tmLanguage
15+
-----------------------------------
16+
>class Foo {
17+
^^^^^
18+
source.ts meta.class.ts storage.type.class.ts
19+
^
20+
source.ts meta.class.ts
21+
^^^
22+
source.ts meta.class.ts entity.name.type.class.ts
23+
^
24+
source.ts meta.class.ts
25+
^
26+
source.ts meta.class.ts punctuation.definition.block.ts
27+
^^
28+
source.ts meta.class.ts
29+
> static a(): void {
30+
^^^^
31+
source.ts meta.class.ts
32+
^^^^^^
33+
source.ts meta.class.ts storage.modifier.ts
34+
^
35+
source.ts meta.class.ts
36+
^
37+
source.ts meta.class.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
38+
^
39+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
40+
^
41+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
42+
^
43+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
44+
^
45+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
46+
^^^^
47+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts support.type.primitive.ts
48+
^
49+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
50+
^
51+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
52+
^^
53+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
54+
> let foo = true ? new String : "";
55+
^^^^^^^^
56+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
57+
^^^
58+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts storage.type.ts
59+
^
60+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts
61+
^^^
62+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
63+
^
64+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
65+
^
66+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
67+
^
68+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts
69+
^^^^
70+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts constant.language.boolean.true.ts
71+
^
72+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts
73+
^
74+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts keyword.operator.ternary.ts
75+
^
76+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts
77+
^^^
78+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts new.expr.ts keyword.operator.new.ts
79+
^
80+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts new.expr.ts
81+
^^^^^^
82+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts new.expr.ts entity.name.type.ts
83+
^
84+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts new.expr.ts
85+
^
86+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts keyword.operator.ternary.ts
87+
^
88+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts
89+
^
90+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.begin.ts
91+
^
92+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.end.ts
93+
^
94+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.terminator.statement.ts
95+
^^
96+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
97+
> }
98+
^^^^
99+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
100+
^
101+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
102+
^^
103+
source.ts meta.class.ts
104+
>
105+
^^
106+
source.ts meta.class.ts
107+
> static b(): void {
108+
^^^^
109+
source.ts meta.class.ts
110+
^^^^^^
111+
source.ts meta.class.ts storage.modifier.ts
112+
^
113+
source.ts meta.class.ts
114+
^
115+
source.ts meta.class.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
116+
^
117+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
118+
^
119+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
120+
^
121+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
122+
^
123+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
124+
^^^^
125+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts support.type.primitive.ts
126+
^
127+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
128+
^
129+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
130+
^^
131+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
132+
> // wrong
133+
^^^^^^^^
134+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.whitespace.comment.leading.ts
135+
^^
136+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
137+
^^^^^^^^
138+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts comment.line.double-slash.ts
139+
> }
140+
^^^^
141+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
142+
^
143+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
144+
^^
145+
source.ts meta.class.ts
146+
>}
147+
^
148+
source.ts meta.class.ts punctuation.definition.block.ts

tests/cases/Issues573.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Foo {
2+
static a(): void {
3+
let foo = true ? new String : "";
4+
}
5+
6+
static b(): void {
7+
// wrong
8+
}
9+
}

0 commit comments

Comments
 (0)