angular/vscode-ng-language-service/syntaxes/template-blocks.json
Matthieu Riegler 640693da8e feat(compiler): Add support for multiple swich cases matching
consecutive `@case` blocks are now supported:

```ts
@switch (case) {
  @case (0)
  @case (1) {
    case 0 or 1
  }
  @case (2) {
    case 2
  }
  @default {
    default
  }
}
```

fixes #14659
2026-01-07 09:23:50 -05:00

175 lines
3.7 KiB
JSON

{
"scopeName": "template.blocks.ng",
"injectionSelector": "L:text.html -comment -expression.ng -meta.tag -source.css -source.js",
"patterns": [
{
"include": "#block"
}
],
"repository": {
"transition": {
"match": "@",
"name": "keyword.control.block.transition.ng"
},
"block": {
"begin": "(@)(if|else if|else|defer|placeholder|loading|error|switch|for|empty)(?:\\s*)",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#transition"
}
]
},
"2": {
"name": "keyword.control.block.kind.ng"
}
},
"patterns": [
{
"include": "#blockExpression"
},
{
"include": "#blockBody"
}
],
"name": "control.block.ng",
"end": "(?<=\\})"
},
"caseHeader": {
"begin": "(@)(case|default)(?:\\s*)",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#transition"
}
]
},
"2": {
"name": "keyword.control.block.kind.ng"
}
},
"patterns": [
{
"include": "#blockExpression"
}
],
"end": "(?=@|{)",
"name": "control.block.case.header.ng"
},
"caseBlock": {
"begin": "(?=@(?:case|default))",
"patterns": [
{
"include": "#caseHeader"
},
{
"include": "#blockBody"
}
],
"end": "(?<=\\})",
"name": "control.block.case.ng"
},
"blockExpression": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "meta.brace.round.ts"
}
},
"contentName": "control.block.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": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"contentName": "control.block.body.ng",
"patterns": [
{
"include": "#caseBlock"
},
{
"include": "text.html.derivative"
},
{
"include": "template.ng"
}
]
}
}
}