Skip to content
This repository was archived by the owner on Nov 21, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion syntaxes/src/template-blocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,46 @@ export const TemplateBlocks: GrammarDefinition = {
0: {name: 'meta.brace.round.ts'},
},
contentName: 'control.block.expression.ng',
patterns: [{include: 'expression.ng'}],
patterns: [
{include: '#blockExpressionOfClause'},
{include: '#blockExpressionLetBinding'},
{include: '#blockExpressionTrackClause'},
{include: 'expression.ng'},
],
end: /\)/,
endCaptures: {
0: {name: 'meta.brace.round.ts'},
},
},

blockExpressionOfClause: {
begin: /([_$[:alpha:]][_$[:alnum:]]*)\s+(of)\b/,
beginCaptures: {
1: {name: 'variable.other.constant.ng'},
2: {name: 'keyword.operator.expression.of.ng'},
},
end: /(?=[$)])|(?<=;)/,
patterns: [{include: 'expression.ng'}],
},

blockExpressionLetBinding: {
begin: /\blet\b/,
beginCaptures: {
0: {name: 'storage.type.ng'},
},
end: /(?=[$)])|(?<=;)/,
patterns: [{include: 'expression.ng'}],
},

blockExpressionTrackClause: {
begin: /\btrack\b/,
beginCaptures: {
0: {name: 'keyword.control.track.ng'},
},
end: /(?=[$)])|(?<=;)/,
patterns: [{include: 'expression.ng'}],
},

blockBody: {
begin: /\{/,
beginCaptures: {
Expand Down
54 changes: 54 additions & 0 deletions syntaxes/template-blocks.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@
},
"contentName": "control.block.expression.ng",
"patterns": [
{
"include": "#blockExpressionOfClause"
},
{
"include": "#blockExpressionLetBinding"
},
{
"include": "#blockExpressionTrackClause"
},
{
"include": "expression.ng"
}
Expand All @@ -56,6 +65,51 @@
}
}
},
"blockExpressionOfClause": {
"begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s+(of)\\b",
"beginCaptures": {
"1": {
"name": "variable.other.constant.ng"
},
"2": {
"name": "keyword.operator.expression.of.ng"
}
},
"end": "(?=[$)])|(?<=;)",
"patterns": [
{
"include": "expression.ng"
}
]
},
"blockExpressionLetBinding": {
"begin": "\\blet\\b",
"beginCaptures": {
"0": {
"name": "storage.type.ng"
}
},
"end": "(?=[$)])|(?<=;)",
"patterns": [
{
"include": "expression.ng"
}
]
},
"blockExpressionTrackClause": {
"begin": "\\btrack\\b",
"beginCaptures": {
"0": {
"name": "keyword.control.track.ng"
}
},
"end": "(?=[$)])|(?<=;)",
"patterns": [
{
"include": "expression.ng"
}
]
},
"blockBody": {
"begin": "\\{",
"beginCaptures": {
Expand Down
4 changes: 4 additions & 0 deletions syntaxes/test/data/template-blocks.html
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@

}

<!-- `track` is only a keyword at the start of the clause -->
@for (item of items; let track = $index; track item.track) { }
@for (track of tracks; track track) { }

<!-- Should not highlight -->

[email protected] ({}) {}
Expand Down
74 changes: 64 additions & 10 deletions syntaxes/test/data/template-blocks.html.snap
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
# ^ template.blocks.ng control.block.ng
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
Expand All @@ -152,7 +152,7 @@
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
Expand All @@ -174,13 +174,13 @@
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
> track $index;
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
> let o = $odd
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
Expand Down Expand Up @@ -217,14 +217,14 @@
# ^^ template.blocks.ng control.block.ng
>(item of items; track $index) { }
#^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ts
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
Expand All @@ -238,14 +238,14 @@
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
# ^ template.blocks.ng control.block.ng
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ts
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
Expand All @@ -266,6 +266,60 @@
>}
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
>
><!-- `track` is only a keyword at the start of the clause -->
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
>@for (item of items; let track = $index; track item.track) { }
#^ template.blocks.ng control.block.ng keyword.control.block.transition.ng
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
# ^ template.blocks.ng control.block.ng
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.assignment.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.object.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.accessor.ts
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.property.ts
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^ template.blocks.ng control.block.ng
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
# ^ template.blocks.ng control.block.ng control.block.body.ng
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
>@for (track of tracks; track track) { }
#^ template.blocks.ng control.block.ng keyword.control.block.transition.ng
# ^^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
# ^ template.blocks.ng control.block.ng
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.constant.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.expression.of.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng punctuation.terminator.statement.ts
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.control.track.ng
# ^ template.blocks.ng control.block.ng control.block.expression.ng
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
# ^ template.blocks.ng control.block.ng
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
# ^ template.blocks.ng control.block.ng control.block.body.ng
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
>
><!-- Should not highlight -->
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
>
Expand Down
Loading