Skip to content

Commit bbac5e0

Browse files
committed
fix(syntaxes): Support multiline block expressions
The block expression (.*) is currently inside a begin capture. TextMate captures are not able to be multiline. This commit updates the capturing groups so that the expression start capture is `(` and the end capture is `)`. This allows the start and end captures to appear on separate lines. fixes #1945
1 parent 769e209 commit bbac5e0

File tree

4 files changed

+65
-46
lines changed

4 files changed

+65
-46
lines changed

syntaxes/src/template-blocks.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,24 @@ export const TemplateBlocks: GrammarDefinition = {
3131
},
3232
2: {name: 'keyword.control.block.kind.ng'},
3333
},
34-
patterns: [{include: '#blockExpression'}],
35-
end: '(?<=\\})',
34+
patterns: [{include: '#blockExpression'}, {include: '#blockBody'}],
3635
contentName: 'control.block.ng',
36+
// The block ends at the close `}` but we don't capture it here because. It's captured instead
37+
// by the #blockBody.
38+
end: /(?<=\})/,
3739
},
3840

3941
blockExpression: {
40-
begin: /(?:(\()(.*)(\)))?\s*/,
42+
begin: /\(/,
4143
beginCaptures: {
42-
1: {name: 'meta.brace.round.ts'},
43-
2: {
44-
name: 'control.block.expression.ng',
45-
patterns: [
46-
{include: 'source.js'},
47-
]
48-
},
49-
3: {name: 'meta.brace.round.ts'},
44+
0: {name: 'meta.brace.round.ts'},
45+
},
46+
contentName: 'control.block.expression.ng',
47+
patterns: [{include: 'source.js'}],
48+
end: /\)/,
49+
endCaptures: {
50+
0: {name: 'meta.brace.round.ts'},
5051
},
51-
end: '(?<=\\})',
52-
patterns: [{include: '#blockBody'}]
5352
},
5453

5554
blockBody: {

syntaxes/template-blocks.json

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,35 +28,33 @@
2828
"patterns": [
2929
{
3030
"include": "#blockExpression"
31+
},
32+
{
33+
"include": "#blockBody"
3134
}
3235
],
33-
"end": "(?<=\\})",
34-
"contentName": "control.block.ng"
36+
"contentName": "control.block.ng",
37+
"end": "(?<=\\})"
3538
},
3639
"blockExpression": {
37-
"begin": "(?:(\\()(.*)(\\)))?\\s*",
40+
"begin": "\\(",
3841
"beginCaptures": {
39-
"1": {
40-
"name": "meta.brace.round.ts"
41-
},
42-
"2": {
43-
"name": "control.block.expression.ng",
44-
"patterns": [
45-
{
46-
"include": "source.js"
47-
}
48-
]
49-
},
50-
"3": {
42+
"0": {
5143
"name": "meta.brace.round.ts"
5244
}
5345
},
54-
"end": "(?<=\\})",
46+
"contentName": "control.block.expression.ng",
5547
"patterns": [
5648
{
57-
"include": "#blockBody"
49+
"include": "source.js"
5850
}
59-
]
51+
],
52+
"end": "\\)",
53+
"endCaptures": {
54+
"0": {
55+
"name": "meta.brace.round.ts"
56+
}
57+
}
6058
},
6159
"blockBody": {
6260
"begin": "\\{",

syntaxes/test/data/template-blocks.html

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@
2626
goodbye
2727
}
2828

29-
@for (let item of items; as thing; trackBy: $index) {
30-
{{item}}
29+
@for (let item of items; as thing; track: $index) {
30+
bla
31+
}
32+
33+
@if (
34+
items;
35+
track $index
36+
) {
37+
bla
3138
}

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

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
#^ template.blocks.ng keyword.control.block.transition.ng
33
# ^^^^^^ template.blocks.ng keyword.control.block.kind.ng
44
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
5-
# ^^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
6-
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
7-
# ^ template.blocks.ng control.block.ng
5+
# ^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
6+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
7+
# ^^ template.blocks.ng control.block.ng
88
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
99
> <a></a>
1010
#^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
@@ -108,18 +108,33 @@
108108
>}
109109
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
110110
>
111-
>@for (let item of items; as thing; trackBy: $index) {
111+
>@for (let item of items; as thing; track: $index) {
112112
#^ template.blocks.ng keyword.control.block.transition.ng
113113
# ^^^^ template.blocks.ng keyword.control.block.kind.ng
114114
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
115-
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
116-
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
117-
# ^ template.blocks.ng control.block.ng
118-
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
119-
> {{item}}
120-
#^^^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
121-
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
122-
# ^^ template.blocks.ng
115+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
116+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
117+
# ^ template.blocks.ng control.block.ng
118+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
119+
> bla
120+
#^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
123121
>}
124-
#^^ template.blocks.ng
122+
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
123+
>
124+
>@if (
125+
#^ template.blocks.ng keyword.control.block.transition.ng
126+
# ^^^ template.blocks.ng keyword.control.block.kind.ng
127+
# ^ template.blocks.ng control.block.ng meta.brace.round.ts
128+
> items;
129+
#^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
130+
> track $index
131+
#^^^^^^^^^^^^^^^^^ template.blocks.ng control.block.ng control.block.expression.ng
132+
>) {
133+
#^ template.blocks.ng control.block.ng meta.brace.round.ts
134+
# ^ template.blocks.ng control.block.ng
135+
# ^ template.blocks.ng control.block.ng punctuation.definition.block.ts
136+
> bla
137+
#^^^^^^^^ template.blocks.ng control.block.ng control.block.body.ng
138+
>}
139+
#^ template.blocks.ng control.block.ng punctuation.definition.block.ts
125140
>

0 commit comments

Comments
 (0)