Skip to content

Commit e17fc5c

Browse files
authored
fix(syntaxes): Use expression.ng instead of JS for block expressions (#1960)
JS syntax has certain expectations for statements that do not hold true inside Angular template expressions. A missing trailing `;` in a variable assignment in a `for` expression will cause the javascript to never terminate. This commit updates the expression to use `expression.ng` instead. fixes #1957
1 parent 33764db commit e17fc5c

File tree

7 files changed

+84
-29
lines changed

7 files changed

+84
-29
lines changed

.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU=

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
.npmrc=974837034
44
pnpm-lock.yaml=-788183804
55
yarn.lock=1782215124
6-
package.json=1628153514
6+
package.json=-1597267529
77
pnpm-workspace.yaml=1711114604

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@
182182
],
183183
"embeddedLanguages": {
184184
"text.html": "html",
185-
"source.js": "javascript"
185+
"expression.ng": "javascript"
186186
}
187187
},
188188
{

syntaxes/src/template-blocks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const TemplateBlocks: GrammarDefinition = {
4444
0: {name: 'meta.brace.round.ts'},
4545
},
4646
contentName: 'control.block.expression.ng',
47-
patterns: [{include: 'source.js'}],
47+
patterns: [{include: 'expression.ng'}],
4848
end: /\)/,
4949
endCaptures: {
5050
0: {name: 'meta.brace.round.ts'},

syntaxes/template-blocks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"contentName": "control.block.expression.ng",
4747
"patterns": [
4848
{
49-
"include": "source.js"
49+
"include": "expression.ng"
5050
}
5151
],
5252
"end": "\\)",

syntaxes/test/cases.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ export const cases = [
2121
{
2222
'name': 'block syntax',
2323
'scopeName': 'template.blocks.ng',
24-
'grammarFiles': ['syntaxes/template-blocks.json'],
24+
'grammarFiles':
25+
['syntaxes/template-blocks.json', 'syntaxes/expression.json', 'syntaxes/template.json'],
2526
'testFile': 'syntaxes/test/data/template-blocks.html'
2627
},
2728
{

syntaxes/test/data/template-blocks.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232

3333
@if (
3434
items;
35-
track $index
35+
track $index;
36+
let o = $odd
3637
) {
37-
bla
38+
{{o}}
3839
}

syntaxes/test/data/template-blocks.html.snap

Lines changed: 75 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22
#^ template.blocks.ng keyword.control.block.transition.ng
33
# ^^^^^^ template.blocks.ng keyword.control.block.kind.ng
44
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
5-
# ^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
6-
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
7-
# ^^ template.blocks.ng control.block.ng
5+
# ^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng entity.name.function.ts
6+
# ^ template.blocks.ng control.block.ng control.block.expression.ng meta.brace.round.ts
7+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
8+
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng constant.numeric.decimal.ts
9+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
10+
# ^ template.blocks.ng control.block.ng control.block.expression.ng meta.brace.round.ts
11+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
12+
# ^ template.blocks.ng control.block.ng
813
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
914
> <a></a>
1015
#^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
@@ -24,33 +29,43 @@
2429
#^ template.blocks.ng keyword.control.block.transition.ng
2530
# ^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
2631
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
27-
# ^ template.blocks.ng control.block.ng control.block.expression.ng
32+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
2833
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
2934
# ^ template.blocks.ng control.block.ng
3035
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
3136
> @case (1) {
3237
#^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
3338
> {{getCase1()}}
34-
#^^^^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
35-
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
36-
# ^^ template.blocks.ng
39+
#^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
40+
# ^^ template.blocks.ng control.block.ng control.block.body.ng punctuation.definition.block.ts
41+
# ^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng expression.ng entity.name.function.ts
42+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng meta.brace.round.ts
43+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng meta.brace.round.ts
44+
# ^^ template.blocks.ng control.block.ng control.block.body.ng punctuation.definition.block.ts
3745
> }
38-
#^^^^^^ template.blocks.ng
46+
#^^^^ template.blocks.ng control.block.ng control.block.body.ng
47+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
3948
> @case (2) {
4049
#^^^^ template.blocks.ng
4150
# ^ template.blocks.ng keyword.control.block.transition.ng
4251
# ^^^^^ template.blocks.ng keyword.control.block.kind.ng
4352
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
44-
# ^ template.blocks.ng control.block.ng control.block.expression.ng
53+
# ^ template.blocks.ng control.block.ng control.block.expression.ng constant.numeric.decimal.ts
4554
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
4655
# ^ template.blocks.ng control.block.ng
4756
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
4857
> {{a.b.c}}
49-
#^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
50-
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
51-
# ^^ template.blocks.ng
58+
#^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
59+
# ^^ template.blocks.ng control.block.ng control.block.body.ng punctuation.definition.block.ts
60+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng variable.other.object.ts
61+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng punctuation.accessor.ts
62+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng variable.other.object.property.ts
63+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng punctuation.accessor.ts
64+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng variable.other.property.ts
65+
# ^^ template.blocks.ng control.block.ng control.block.body.ng punctuation.definition.block.ts
5266
> }
53-
#^^^^^^ template.blocks.ng
67+
#^^^^ template.blocks.ng control.block.ng control.block.body.ng
68+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
5469
> @default {
5570
#^^^^ template.blocks.ng
5671
# ^ template.blocks.ng keyword.control.block.transition.ng
@@ -68,7 +83,9 @@
6883
#^ template.blocks.ng keyword.control.block.transition.ng
6984
# ^^^ template.blocks.ng keyword.control.block.kind.ng
7085
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
71-
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng
86+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
87+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.comparison.ts
88+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
7289
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
7390
# ^ template.blocks.ng control.block.ng
7491
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
@@ -85,7 +102,9 @@
85102
#^ template.blocks.ng keyword.control.block.transition.ng
86103
# ^^^ template.blocks.ng keyword.control.block.kind.ng
87104
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
88-
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng
105+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
106+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.comparison.ts
107+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
89108
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
90109
# ^ template.blocks.ng control.block.ng
91110
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
@@ -98,7 +117,9 @@
98117
# ^ template.blocks.ng keyword.control.block.transition.ng
99118
# ^^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
100119
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
101-
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng
120+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
121+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.comparison.ts
122+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
102123
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
103124
# ^ template.blocks.ng control.block.ng
104125
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
@@ -112,7 +133,21 @@
112133
#^ template.blocks.ng keyword.control.block.transition.ng
113134
# ^^^^ template.blocks.ng keyword.control.block.kind.ng
114135
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
115-
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
136+
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
137+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
138+
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
139+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
140+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ts
141+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
142+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
143+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
144+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.as.ts
145+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
146+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng entity.name.type.ts
147+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
148+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
149+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
150+
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
116151
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
117152
# ^ template.blocks.ng control.block.ng
118153
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
@@ -126,15 +161,33 @@
126161
# ^^^ template.blocks.ng keyword.control.block.kind.ng
127162
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
128163
> items;
129-
#^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
130-
> track $index
131-
#^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
164+
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
165+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
166+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
167+
> track $index;
168+
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
169+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
170+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
171+
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
172+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
173+
> let o = $odd
174+
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
175+
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
176+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
177+
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
178+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
179+
# ^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.assignment.ts
180+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
181+
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
132182
>) {
133183
#^ template.blocks.ng control.block.ng meta.brace.round.ts
134184
# ^ template.blocks.ng control.block.ng
135185
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
136-
> bla
137-
#^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
186+
> {{o}}
187+
#^^^^ template.blocks.ng control.block.ng control.block.body.ng
188+
# ^^ template.blocks.ng control.block.ng control.block.body.ng punctuation.definition.block.ts
189+
# ^ template.blocks.ng control.block.ng control.block.body.ng expression.ng variable.other.readwrite.ts
190+
# ^^ template.blocks.ng control.block.ng control.block.body.ng punctuation.definition.block.ts
138191
>}
139192
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
140193
>

0 commit comments

Comments
 (0)