mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
refactor(vscode-extension): Add support for exhaustive type check in the syntax
`@default never` will be considered a keyword on its own.
(cherry picked from commit db11e74b3d)
This commit is contained in:
parent
1a151f2dae
commit
787cd875b0
4 changed files with 65 additions and 2 deletions
|
|
@ -39,7 +39,7 @@ export const TemplateBlocks: GrammarDefinition = {
|
|||
2: {name: 'keyword.control.block.kind.ng'},
|
||||
},
|
||||
patterns: [{include: '#blockExpression'}],
|
||||
end: /(?=@|{)/,
|
||||
end: /(?=@|{|})/,
|
||||
name: 'control.block.case.header.ng',
|
||||
},
|
||||
caseBlock: {
|
||||
|
|
@ -48,6 +48,15 @@ export const TemplateBlocks: GrammarDefinition = {
|
|||
end: /(?<=\})/,
|
||||
name: 'control.block.case.ng',
|
||||
},
|
||||
caseExhaustive: {
|
||||
match: /(@)(default\s+never)\s*(;)/,
|
||||
captures: {
|
||||
1: {patterns: [{include: '#transition'}]},
|
||||
2: {name: 'keyword.control.block.kind.ng'},
|
||||
3: {name: 'punctuation.terminator.statement.ng'},
|
||||
},
|
||||
name: 'control.block.case.ng',
|
||||
},
|
||||
blockExpression: {
|
||||
begin: /\(/,
|
||||
beginCaptures: {
|
||||
|
|
@ -105,6 +114,7 @@ export const TemplateBlocks: GrammarDefinition = {
|
|||
},
|
||||
contentName: 'control.block.body.ng',
|
||||
patterns: [
|
||||
{include: '#caseExhaustive'},
|
||||
{include: '#caseBlock'},
|
||||
{include: 'text.html.derivative'},
|
||||
{include: 'template.ng'},
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
"include": "#blockExpression"
|
||||
}
|
||||
],
|
||||
"end": "(?=@|{)",
|
||||
"end": "(?=@|{|})",
|
||||
"name": "control.block.case.header.ng"
|
||||
},
|
||||
"caseBlock": {
|
||||
|
|
@ -71,6 +71,25 @@
|
|||
"end": "(?<=\\})",
|
||||
"name": "control.block.case.ng"
|
||||
},
|
||||
"caseExhaustive": {
|
||||
"match": "(@)(default\\s+never)\\s*(;)",
|
||||
"captures": {
|
||||
"1": {
|
||||
"patterns": [
|
||||
{
|
||||
"include": "#transition"
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"name": "keyword.control.block.kind.ng"
|
||||
},
|
||||
"3": {
|
||||
"name": "punctuation.terminator.statement.ng"
|
||||
}
|
||||
},
|
||||
"name": "control.block.case.ng"
|
||||
},
|
||||
"blockExpression": {
|
||||
"begin": "\\(",
|
||||
"beginCaptures": {
|
||||
|
|
@ -160,6 +179,9 @@
|
|||
},
|
||||
"contentName": "control.block.body.ng",
|
||||
"patterns": [
|
||||
{
|
||||
"include": "#caseExhaustive"
|
||||
},
|
||||
{
|
||||
"include": "#caseBlock"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -18,6 +18,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
@switch(aOrb) {
|
||||
@case(a) {}
|
||||
@default never;
|
||||
}
|
||||
|
||||
@if (a==b) { hello } @else { goodbye }
|
||||
|
||||
@if (a==b) {
|
||||
|
|
|
|||
|
|
@ -104,6 +104,32 @@
|
|||
>}
|
||||
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
|
||||
>
|
||||
>@switch(aOrb) {
|
||||
#^ 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 meta.brace.round.ts
|
||||
# ^^^^ 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
|
||||
> @case(a) {}
|
||||
#^^^^ template.blocks.ng control.block.ng control.block.body.ng
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng control.block.case.header.ng keyword.control.block.transition.ng
|
||||
# ^^^^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng control.block.case.header.ng keyword.control.block.kind.ng
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng control.block.case.header.ng meta.brace.round.ts
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng control.block.case.header.ng control.block.expression.ng variable.other.readwrite.ts
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng control.block.case.header.ng meta.brace.round.ts
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng control.block.case.header.ng
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng punctuation.definition.block.ts
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng punctuation.definition.block.ts
|
||||
> @default never;
|
||||
#^^^^ template.blocks.ng control.block.ng control.block.body.ng
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng keyword.control.block.transition.ng
|
||||
# ^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng keyword.control.block.kind.ng
|
||||
# ^ template.blocks.ng control.block.ng control.block.body.ng control.block.case.ng punctuation.terminator.statement.ng
|
||||
>}
|
||||
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
|
||||
>
|
||||
>@if (a==b) { hello } @else { goodbye }
|
||||
#^ template.blocks.ng control.block.ng keyword.control.block.transition.ng
|
||||
# ^^ template.blocks.ng control.block.ng keyword.control.block.kind.ng
|
||||
|
|
|
|||
Loading…
Reference in a new issue