Skip to content

Commit 0ed86a7

Browse files
committed
Add decl-block as fail safe as object literal member matching for methods
Fixes #964
1 parent 23309fb commit 0ed86a7

File tree

5 files changed

+188
-0
lines changed

5 files changed

+188
-0
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1492,6 +1492,7 @@ repository:
14921492
- include: '#possibly-arrow-return-type'
14931493
- include: '#expression'
14941494
- include: '#punctuation-comma'
1495+
- include: '#decl-block'
14951496

14961497
#ternary expression
14971498
ternary-expression:

TypeScript.tmLanguage

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4829,6 +4829,10 @@
48294829
<key>include</key>
48304830
<string>#punctuation-comma</string>
48314831
</dict>
4832+
<dict>
4833+
<key>include</key>
4834+
<string>#decl-block</string>
4835+
</dict>
48324836
</array>
48334837
</dict>
48344838
<key>ternary-expression</key>

TypeScriptReact.tmLanguage

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4853,6 +4853,10 @@
48534853
<key>include</key>
48544854
<string>#punctuation-comma</string>
48554855
</dict>
4856+
<dict>
4857+
<key>include</key>
4858+
<string>#decl-block</string>
4859+
</dict>
48564860
</array>
48574861
</dict>
48584862
<key>ternary-expression</key>

tests/baselines/Issue964.baseline.txt

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
original file
2+
-----------------------------------
3+
({
4+
foo():{}{
5+
let bar;//This line is gray, because tokenization thinks it is inside an object literal scope.
6+
//The issue goes away if a space is present between the return type and the method block.
7+
},
8+
foo: ():{}=>{
9+
let bar;//This works fine.
10+
}
11+
});
12+
let bar;
13+
function baz():{}{
14+
let bar;//This also works fine.
15+
}
16+
-----------------------------------
17+
18+
Grammar: TypeScript.tmLanguage
19+
-----------------------------------
20+
>({
21+
^
22+
source.ts meta.brace.round.ts
23+
^
24+
source.ts meta.objectliteral.ts punctuation.definition.block.ts
25+
> foo():{}{
26+
^^^^
27+
source.ts meta.objectliteral.ts meta.method.declaration.ts
28+
^^^
29+
source.ts meta.objectliteral.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
30+
^
31+
source.ts meta.objectliteral.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
32+
^
33+
source.ts meta.objectliteral.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
34+
^
35+
source.ts meta.objectliteral.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
36+
^
37+
source.ts meta.objectliteral.ts meta.method.declaration.ts meta.return.type.ts meta.object.type.ts punctuation.definition.block.ts
38+
^
39+
source.ts meta.objectliteral.ts meta.method.declaration.ts meta.return.type.ts meta.object.type.ts punctuation.definition.block.ts
40+
^
41+
source.ts meta.objectliteral.ts meta.block.ts punctuation.definition.block.ts
42+
> let bar;//This line is gray, because tokenization thinks it is inside an object literal scope.
43+
^^^^^^^^
44+
source.ts meta.objectliteral.ts meta.block.ts
45+
^^^
46+
source.ts meta.objectliteral.ts meta.block.ts meta.var.expr.ts storage.type.ts
47+
^
48+
source.ts meta.objectliteral.ts meta.block.ts meta.var.expr.ts
49+
^^^
50+
source.ts meta.objectliteral.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
51+
^
52+
source.ts meta.objectliteral.ts meta.block.ts punctuation.terminator.statement.ts
53+
^^
54+
source.ts meta.objectliteral.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
55+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
56+
source.ts meta.objectliteral.ts meta.block.ts comment.line.double-slash.ts
57+
> //The issue goes away if a space is present between the return type and the method block.
58+
^^^^^^^^
59+
source.ts meta.objectliteral.ts meta.block.ts punctuation.whitespace.comment.leading.ts
60+
^^
61+
source.ts meta.objectliteral.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
62+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
63+
source.ts meta.objectliteral.ts meta.block.ts comment.line.double-slash.ts
64+
> },
65+
^^^^
66+
source.ts meta.objectliteral.ts meta.block.ts
67+
^
68+
source.ts meta.objectliteral.ts meta.block.ts punctuation.definition.block.ts
69+
^
70+
source.ts meta.objectliteral.ts punctuation.separator.comma.ts
71+
> foo: ():{}=>{
72+
^^^^
73+
source.ts meta.objectliteral.ts
74+
^^^
75+
source.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts entity.name.function.ts
76+
^
77+
source.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
78+
^
79+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts
80+
^
81+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
82+
^
83+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
84+
^
85+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
86+
^
87+
source.ts meta.objectliteral.ts meta.object.member.ts meta.objectliteral.ts punctuation.definition.block.ts
88+
^
89+
source.ts meta.objectliteral.ts meta.object.member.ts meta.objectliteral.ts punctuation.definition.block.ts
90+
^^
91+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts storage.type.function.arrow.ts
92+
^
93+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
94+
> let bar;//This works fine.
95+
^^^^^^^^
96+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts
97+
^^^
98+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
99+
^
100+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
101+
^^^
102+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
103+
^
104+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
105+
^^
106+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
107+
^^^^^^^^^^^^^^^^
108+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts comment.line.double-slash.ts
109+
> }
110+
^^^^
111+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts
112+
^
113+
source.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
114+
>});
115+
^
116+
source.ts meta.objectliteral.ts punctuation.definition.block.ts
117+
^
118+
source.ts meta.brace.round.ts
119+
^
120+
source.ts punctuation.terminator.statement.ts
121+
>let bar;
122+
^^^
123+
source.ts meta.var.expr.ts storage.type.ts
124+
^
125+
source.ts meta.var.expr.ts
126+
^^^
127+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
128+
^
129+
source.ts punctuation.terminator.statement.ts
130+
>function baz():{}{
131+
^^^^^^^^
132+
source.ts meta.function.ts storage.type.function.ts
133+
^
134+
source.ts meta.function.ts
135+
^^^
136+
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
137+
^
138+
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
139+
^
140+
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
141+
^
142+
source.ts meta.function.ts meta.return.type.ts keyword.operator.type.annotation.ts
143+
^
144+
source.ts meta.function.ts meta.return.type.ts meta.object.type.ts punctuation.definition.block.ts
145+
^
146+
source.ts meta.function.ts meta.return.type.ts meta.object.type.ts punctuation.definition.block.ts
147+
^
148+
source.ts meta.block.ts punctuation.definition.block.ts
149+
> let bar;//This also works fine.
150+
^^^^
151+
source.ts meta.block.ts
152+
^^^
153+
source.ts meta.block.ts meta.var.expr.ts storage.type.ts
154+
^
155+
source.ts meta.block.ts meta.var.expr.ts
156+
^^^
157+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
158+
^
159+
source.ts meta.block.ts punctuation.terminator.statement.ts
160+
^^
161+
source.ts meta.block.ts comment.line.double-slash.ts punctuation.definition.comment.ts
162+
^^^^^^^^^^^^^^^^^^^^^
163+
source.ts meta.block.ts comment.line.double-slash.ts
164+
>}
165+
^
166+
source.ts meta.block.ts punctuation.definition.block.ts

tests/cases/Issue964.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
({
2+
foo():{}{
3+
let bar;//This line is gray, because tokenization thinks it is inside an object literal scope.
4+
//The issue goes away if a space is present between the return type and the method block.
5+
},
6+
foo: ():{}=>{
7+
let bar;//This works fine.
8+
}
9+
});
10+
let bar;
11+
function baz():{}{
12+
let bar;//This also works fine.
13+
}

0 commit comments

Comments
 (0)