Skip to content

Commit dceedb6

Browse files
authored
fix(syntaxes): Only match known block names (#2034)
This updates the syntaxes to only match known block names instead of requiring a `{` at the end of the line when the block syntax is used. fixes angular/angular#53483
1 parent 13d9776 commit dceedb6

File tree

4 files changed

+103
-29
lines changed

4 files changed

+103
-29
lines changed

syntaxes/src/template-blocks.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,8 @@ export const TemplateBlocks: GrammarDefinition = {
2222
},
2323

2424
block: {
25-
// @ followed by words and spaces. Also require a { or ( on the same line but don't capture
26-
// it.
27-
// The parser doesn't require this but we do for syntax highlighting to be more exclusive
28-
// since
29-
// the extension can be used for older versions of Angular.
30-
begin: /(@)((?:\w+\s*)+)(?=\(|\{)/,
25+
begin:
26+
/(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)(?:\s*)/,
3127
beginCaptures: {
3228
1: {
3329
patterns: [

syntaxes/template-blocks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"name": "keyword.control.block.transition.ng"
1313
},
1414
"block": {
15-
"begin": "(@)((?:\\w+\\s*)+)(?=\\(|\\{)",
15+
"begin": "(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)(?:\\s*)",
1616
"beginCaptures": {
1717
"1": {
1818
"patterns": [

syntaxes/test/data/template-blocks.html

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,21 @@
3838
{{o}}
3939
}
4040

41-
<!-- Should not highlight -->
4241
@if
4342
(items) {}
4443

44+
@for
45+
(item of items; track $index) { }
46+
47+
@for (item of items; track $index) {
48+
49+
}
50+
@empty
51+
{
52+
53+
}
54+
55+
<!-- Should not highlight -->
56+
4557
4658

47-
@for
48-
(let item of items; track $index) { }

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

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
>@defer (doSomething({111})) {
22
#^ template.blocks.ng keyword.control.block.transition.ng
3-
# ^^^^^^ template.blocks.ng keyword.control.block.kind.ng
3+
# ^^^^^ template.blocks.ng keyword.control.block.kind.ng
4+
# ^ template.blocks.ng
45
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
56
# ^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng entity.name.function.ts
67
# ^ template.blocks.ng control.block.ng control.block.expression.ng meta.brace.round.ts
@@ -18,7 +19,8 @@
1819
>
1920
>@defer {
2021
#^ template.blocks.ng keyword.control.block.transition.ng
21-
# ^^^^^^ template.blocks.ng keyword.control.block.kind.ng
22+
# ^^^^^ template.blocks.ng keyword.control.block.kind.ng
23+
# ^ template.blocks.ng
2224
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
2325
> <a></a>
2426
#^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
@@ -27,7 +29,8 @@
2729
>
2830
>@switch (a) {
2931
#^ template.blocks.ng keyword.control.block.transition.ng
30-
# ^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
32+
# ^^^^^^ template.blocks.ng keyword.control.block.kind.ng
33+
# ^ template.blocks.ng
3134
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
3235
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
3336
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
@@ -48,7 +51,8 @@
4851
> @case (2) {
4952
#^^^^ template.blocks.ng
5053
# ^ template.blocks.ng keyword.control.block.transition.ng
51-
# ^^^^^ template.blocks.ng keyword.control.block.kind.ng
54+
# ^^^^ template.blocks.ng keyword.control.block.kind.ng
55+
# ^ template.blocks.ng
5256
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
5357
# ^ template.blocks.ng control.block.ng control.block.expression.ng constant.numeric.decimal.ts
5458
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
@@ -69,7 +73,8 @@
6973
> @default {
7074
#^^^^ template.blocks.ng
7175
# ^ template.blocks.ng keyword.control.block.transition.ng
72-
# ^^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
76+
# ^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
77+
# ^ template.blocks.ng
7378
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
7479
> default case
7580
#^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
@@ -81,7 +86,8 @@
8186
>
8287
>@if (a==b) { hello } @else { goodbye }
8388
#^ template.blocks.ng keyword.control.block.transition.ng
84-
# ^^^ template.blocks.ng keyword.control.block.kind.ng
89+
# ^^ template.blocks.ng keyword.control.block.kind.ng
90+
# ^ template.blocks.ng
8591
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
8692
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
8793
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.comparison.ts
@@ -93,14 +99,16 @@
9399
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
94100
# ^ template.blocks.ng
95101
# ^ template.blocks.ng keyword.control.block.transition.ng
96-
# ^^^^^^ template.blocks.ng keyword.control.block.kind.ng
102+
# ^^^^ template.blocks.ng keyword.control.block.kind.ng
103+
# ^^ template.blocks.ng
97104
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
98105
# ^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
99106
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
100107
>
101108
>@if (a==b) {
102109
#^ template.blocks.ng keyword.control.block.transition.ng
103-
# ^^^ template.blocks.ng keyword.control.block.kind.ng
110+
# ^^ template.blocks.ng keyword.control.block.kind.ng
111+
# ^ template.blocks.ng
104112
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
105113
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
106114
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.comparison.ts
@@ -115,7 +123,8 @@
115123
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
116124
# ^ template.blocks.ng
117125
# ^ template.blocks.ng keyword.control.block.transition.ng
118-
# ^^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
126+
# ^^^^^^^ template.blocks.ng keyword.control.block.kind.ng
127+
# ^ template.blocks.ng
119128
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
120129
# ^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
121130
# ^^ template.blocks.ng control.block.ng control.block.expression.ng keyword.operator.comparison.ts
@@ -131,7 +140,8 @@
131140
>
132141
>@for (let item of items; track $index) {
133142
#^ template.blocks.ng keyword.control.block.transition.ng
134-
# ^^^^ template.blocks.ng keyword.control.block.kind.ng
143+
# ^^^ template.blocks.ng keyword.control.block.kind.ng
144+
# ^ template.blocks.ng
135145
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
136146
# ^^^ template.blocks.ng control.block.ng control.block.expression.ng storage.type.ts
137147
# ^ template.blocks.ng control.block.ng control.block.expression.ng
@@ -154,7 +164,8 @@
154164
>
155165
>@if (
156166
#^ template.blocks.ng keyword.control.block.transition.ng
157-
# ^^^ template.blocks.ng keyword.control.block.kind.ng
167+
# ^^ template.blocks.ng keyword.control.block.kind.ng
168+
# ^ template.blocks.ng
158169
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
159170
> items;
160171
#^^^^ template.blocks.ng control.block.ng control.block.expression.ng
@@ -187,18 +198,75 @@
187198
>}
188199
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
189200
>
190-
><!-- Should not highlight -->
191-
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
192201
>@if
193-
#^^^^^ template.blocks.ng
202+
#^ template.blocks.ng keyword.control.block.transition.ng
203+
# ^^ template.blocks.ng keyword.control.block.kind.ng
204+
# ^^ template.blocks.ng
194205
>(items) {}
195-
#^^^^^^^^^^^ template.blocks.ng
206+
#^ template.blocks.ng control.block.ng meta.brace.round.ts
207+
# ^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
208+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
209+
# ^ template.blocks.ng control.block.ng
210+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
211+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
212+
>
213+
>@for
214+
#^ template.blocks.ng keyword.control.block.transition.ng
215+
# ^^^ template.blocks.ng keyword.control.block.kind.ng
216+
# ^^ template.blocks.ng
217+
>(item of items; track $index) { }
218+
#^ 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
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
223+
# ^^^^^ 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
226+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
227+
# ^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng variable.other.readwrite.ts
228+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
229+
# ^ template.blocks.ng control.block.ng
230+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
231+
# ^ template.blocks.ng control.block.ng control.block.body.ng
232+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
233+
>
234+
>@for (item of items; track $index) {
235+
#^ template.blocks.ng keyword.control.block.transition.ng
236+
# ^^^ template.blocks.ng keyword.control.block.kind.ng
237+
# ^ template.blocks.ng
238+
# ^ 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
240+
# ^ 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
242+
# ^ template.blocks.ng control.block.ng control.block.expression.ng
243+
# ^^^^^ 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 variable.other.readwrite.ts
248+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
249+
# ^ template.blocks.ng control.block.ng
250+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
251+
# ^^ template.blocks.ng control.block.ng control.block.body.ng
252+
>
253+
>}
254+
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
255+
# ^^ template.blocks.ng
256+
>@empty
257+
#^ template.blocks.ng keyword.control.block.transition.ng
258+
# ^^^^^ template.blocks.ng keyword.control.block.kind.ng
259+
# ^^ template.blocks.ng
260+
>{
261+
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
262+
>
263+
>}
264+
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
265+
>
266+
><!-- Should not highlight -->
267+
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
196268
>
197269
>some.email@google.com ({}) {}
198270
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
199271
>
200-
>@for
201-
#^^^^^^ template.blocks.ng
202-
>(let item of items; track $index) { }
203-
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng
204272
>

0 commit comments

Comments
 (0)