diff --git a/syntaxes/src/template-blocks.ts b/syntaxes/src/template-blocks.ts index 4993aec348..435a809388 100644 --- a/syntaxes/src/template-blocks.ts +++ b/syntaxes/src/template-blocks.ts @@ -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: { diff --git a/syntaxes/template-blocks.json b/syntaxes/template-blocks.json index 55454cf473..71ca0efef1 100644 --- a/syntaxes/template-blocks.json +++ b/syntaxes/template-blocks.json @@ -45,6 +45,15 @@ }, "contentName": "control.block.expression.ng", "patterns": [ + { + "include": "#blockExpressionOfClause" + }, + { + "include": "#blockExpressionLetBinding" + }, + { + "include": "#blockExpressionTrackClause" + }, { "include": "expression.ng" } @@ -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": { diff --git a/syntaxes/test/data/template-blocks.html b/syntaxes/test/data/template-blocks.html index eaa24de21a..2a2c3a9c0e 100644 --- a/syntaxes/test/data/template-blocks.html +++ b/syntaxes/test/data/template-blocks.html @@ -52,6 +52,10 @@ } + +@for (item of items; let track = $index; track item.track) { } +@for (track of tracks; track track) { } + some.email@google.com ({}) {} diff --git a/syntaxes/test/data/template-blocks.html.snap b/syntaxes/test/data/template-blocks.html.snap index cb4efd8e31..39c56359fd 100644 --- a/syntaxes/test/data/template-blocks.html.snap +++ b/syntaxes/test/data/template-blocks.html.snap @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -266,6 +266,60 @@ >} #^ template.blocks.ng control.block.ng punctuation.definition.block.ts > +> +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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 +> > #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng >