Skip to content
This repository was archived by the owner on Nov 21, 2025. It is now read-only.

Commit fd2fbd6

Browse files
committed
fix(syntaxes): keyword token for track
1 parent 3986db5 commit fd2fbd6

File tree

4 files changed

+161
-14
lines changed

4 files changed

+161
-14
lines changed

syntaxes/src/template-blocks.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,46 @@ export const TemplateBlocks: GrammarDefinition = {
4545
0: {name: 'meta.brace.round.ts'},
4646
},
4747
contentName: 'control.block.expression.ng',
48-
patterns: [{include: 'expression.ng'}],
48+
patterns: [
49+
{include: '#blockExpressionOfClause'},
50+
{include: '#blockExpressionLetBinding'},
51+
{include: '#blockExpressionTrackClause'},
52+
{include: 'expression.ng'},
53+
],
4954
end: /\)/,
5055
endCaptures: {
5156
0: {name: 'meta.brace.round.ts'},
5257
},
5358
},
5459

60+
blockExpressionOfClause: {
61+
begin: /([_$[:alpha:]][_$[:alnum:]]*)\s+(of)\b/,
62+
beginCaptures: {
63+
1: {name: 'variable.other.constant.ng'},
64+
2: {name: 'keyword.operator.expression.of.ng'},
65+
},
66+
end: /(?=[$)])|(?<=;)/,
67+
patterns: [{include: 'expression.ng'}],
68+
},
69+
70+
blockExpressionLetBinding: {
71+
begin: /\blet\b/,
72+
beginCaptures: {
73+
0: {name: 'storage.type.ng'},
74+
},
75+
end: /(?=[$)])|(?<=;)/,
76+
patterns: [{include: 'expression.ng'}],
77+
},
78+
79+
blockExpressionTrackClause: {
80+
begin: /\btrack\b/,
81+
beginCaptures: {
82+
0: {name: 'keyword.control.track.ng'},
83+
},
84+
end: /(?=[$)])|(?<=;)/,
85+
patterns: [{include: 'expression.ng'}],
86+
},
87+
5588
blockBody: {
5689
begin: /\{/,
5790
beginCaptures: {

syntaxes/template-blocks.json

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@
4545
},
4646
"contentName": "control.block.expression.ng",
4747
"patterns": [
48+
{
49+
"include": "#blockExpressionOfClause"
50+
},
51+
{
52+
"include": "#blockExpressionLetBinding"
53+
},
54+
{
55+
"include": "#blockExpressionTrackClause"
56+
},
4857
{
4958
"include": "expression.ng"
5059
}
@@ -56,6 +65,51 @@
5665
}
5766
}
5867
},
68+
"blockExpressionOfClause": {
69+
"begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s+(of)\\b",
70+
"beginCaptures": {
71+
"1": {
72+
"name": "variable.other.constant.ng"
73+
},
74+
"2": {
75+
"name": "keyword.operator.expression.of.ng"
76+
}
77+
},
78+
"end": "(?=[$)])|(?<=;)",
79+
"patterns": [
80+
{
81+
"include": "expression.ng"
82+
}
83+
]
84+
},
85+
"blockExpressionLetBinding": {
86+
"begin": "\\blet\\b",
87+
"beginCaptures": {
88+
"0": {
89+
"name": "storage.type.ng"
90+
}
91+
},
92+
"end": "(?=[$)])|(?<=;)",
93+
"patterns": [
94+
{
95+
"include": "expression.ng"
96+
}
97+
]
98+
},
99+
"blockExpressionTrackClause": {
100+
"begin": "\\btrack\\b",
101+
"beginCaptures": {
102+
"0": {
103+
"name": "keyword.control.track.ng"
104+
}
105+
},
106+
"end": "(?=[$)])|(?<=;)",
107+
"patterns": [
108+
{
109+
"include": "expression.ng"
110+
}
111+
]
112+
},
59113
"blockBody": {
60114
"begin": "\\{",
61115
"beginCaptures": {

syntaxes/test/data/template-blocks.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@
5252

5353
}
5454

55+
<!-- `track` is only a keyword at the start of the clause -->
56+
@for (item of items; let track = $index; track item.track) { }
57+
@for (track of tracks; track track) { }
58+
5559
<!-- Should not highlight -->
5660

5761

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

Lines changed: 69 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,16 @@
143143
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
144144
# ^ template.blocks.ng control.block.ng
145145
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
146-
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
146+
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ng
147147
# ^ template.blocks.ng control.block.ng control.block.expression.ng
148148
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
149149
# ^ template.blocks.ng control.block.ng control.block.expression.ng
150150
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ts
151151
# ^ template.blocks.ng control.block.ng control.block.expression.ng
152152
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
153-
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
154-
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
153+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
154+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
155+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
155156
# ^ template.blocks.ng control.block.ng control.block.expression.ng
156157
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
157158
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
@@ -173,13 +174,13 @@
173174
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
174175
> track $index;
175176
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
176-
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
177+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
177178
# ^ template.blocks.ng control.block.ng control.block.expression.ng
178179
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
179180
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
180181
> let o = $odd
181182
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
182-
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
183+
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ng
183184
# ^ template.blocks.ng control.block.ng control.block.expression.ng
184185
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
185186
# ^ template.blocks.ng control.block.ng control.block.expression.ng
@@ -216,13 +217,14 @@
216217
# ^^ template.blocks.ng control.block.ng
217218
>(item of items; track $index) { }
218219
#^ template.blocks.ng control.block.ng meta.brace.round.ts
219-
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
220+
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
220221
# ^ template.blocks.ng control.block.ng control.block.expression.ng
221-
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ts
222+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
222223
# ^ template.blocks.ng control.block.ng control.block.expression.ng
223224
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
224-
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
225-
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
225+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
226+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
227+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
226228
# ^ template.blocks.ng control.block.ng control.block.expression.ng
227229
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
228230
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
@@ -236,13 +238,14 @@
236238
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
237239
# ^ template.blocks.ng control.block.ng
238240
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
239-
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
241+
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
240242
# ^ template.blocks.ng control.block.ng control.block.expression.ng
241-
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ts
243+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
242244
# ^ template.blocks.ng control.block.ng control.block.expression.ng
243245
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
244-
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
245-
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
246+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
247+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
248+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
246249
# ^ template.blocks.ng control.block.ng control.block.expression.ng
247250
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
248251
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
@@ -263,6 +266,59 @@
263266
>}
264267
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
265268
>
269+
><!-- `track` is only a keyword at the start of the clause -->
270+
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
271+
>@for (item of items; let track = $index; track item.track) { }
272+
#^ template.blocks.ng control.block.ng keyword.control.block.transition.ng
273+
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
274+
# ^ template.blocks.ng control.block.ng
275+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
276+
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
277+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
278+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
279+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
280+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
281+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
282+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
283+
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ng
284+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
285+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
286+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
287+
# ^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.assignment.ts
288+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
289+
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
290+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng
291+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
292+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
293+
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.object.ts
294+
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.accessor.ts
295+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.property.ts
296+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
297+
# ^ template.blocks.ng control.block.ng
298+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
299+
# ^ template.blocks.ng control.block.ng control.block.body.ng
300+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
301+
>@for (track of tracks; track track) { }
302+
#^ template.blocks.ng control.block.ng keyword.control.block.transition.ng
303+
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
304+
# ^ template.blocks.ng control.block.ng
305+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
306+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
307+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
308+
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
309+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
310+
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
311+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
312+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
313+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
314+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
315+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
316+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
317+
# ^ template.blocks.ng control.block.ng
318+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
319+
# ^ template.blocks.ng control.block.ng control.block.body.ng
320+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
321+
>
266322
><!-- Should not highlight -->
267323
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
268324
>

0 commit comments

Comments
 (0)