Files
aparziale 1d9e445d1a fix(vscode-extension): handle escaped delimiters in inline template and styles highlighting
The TextMate grammars for inline templates and inline styles ended the
string at the first occurrence of the delimiter, so an escaped delimiter
(e.g. \`) terminated the highlighting prematurely and the rest of the
template was no longer highlighted as HTML.

Escape sequences are now consumed before delegating to the HTML/CSS
grammars, so escaped delimiters no longer end the string. Also removes
the stray pipes from the string delimiter character class, which
unintentionally matched a literal '|'.

Fixes #65493
2026-09-01 14:40:44 -07:00

185 lines
8.6 KiB
Plaintext

>/* clang-format off */
#^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>
>/* Inline template recognition tests */
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>@Component({
#^^^^^^^^^^^^^ inline-template.ng
> //// Property key/value test
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: '<div></div>',
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
>
> //// String delimiter tests
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: `<div></div>`,
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
> template: "<div></div>",
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
> template: '<div></div>',
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
>
> //// Parenthesization tests
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: ( (( '<div></div>' )) ),
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng meta.brace.round.ts
# ^ inline-template.ng
# ^ inline-template.ng meta.brace.round.ts
# ^ inline-template.ng meta.brace.round.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^ inline-template.ng
# ^ inline-template.ng meta.brace.round.ts
# ^ inline-template.ng meta.brace.round.ts
# ^ inline-template.ng
# ^ inline-template.ng meta.brace.round.ts
# ^^ inline-template.ng
>
> //// Comments tests
#^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> // template: '<div></div>'
#^^^^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
> /*
#^^^^^ inline-template.ng
> * template: '<div></div>'
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> */
#^^^^^^ inline-template.ng
> /**
#^^^^^^ inline-template.ng
> * template: '<div></div>'
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> */
#^^^^^^ inline-template.ng
>})
#^^^ inline-template.ng
>export class TMComponent{}
#^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>
>/* Template syntax tests */
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>@Component({
#^^^^^^^^^^^^^ inline-template.ng
> // Interpolation test
#^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: '{{property}}',
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^ inline-template.ng text.html.derivative punctuation.definition.block.ts
# ^^^^^^^^ inline-template.ng text.html.derivative expression.ng variable.other.readwrite.ts
# ^^ inline-template.ng text.html.derivative punctuation.definition.block.ts
# ^ inline-template.ng string
# ^^ inline-template.ng
>})
#^^^ inline-template.ng
>export class TMComponent{}
#^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>
>/* Escaped delimiter tests */
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>@Component({
#^^^^^^^^^^^^^ inline-template.ng
> //// Escaped backtick test
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: `<button title="\`code\`">Hello</button>`,
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^^ inline-template.ng text.html.derivative constant.character.escape.ts
# ^^^^ inline-template.ng text.html.derivative
# ^^ inline-template.ng text.html.derivative constant.character.escape.ts
# ^^^^^^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
>
> //// Escaped quote tests
#^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: '<div title="it\'s">Hello</div>',
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^^ inline-template.ng text.html.derivative constant.character.escape.ts
# ^^^^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
> template: "<div title=\"quoted\">Hello</div>",
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^^ inline-template.ng text.html.derivative constant.character.escape.ts
# ^^^^^^ inline-template.ng text.html.derivative
# ^^ inline-template.ng text.html.derivative constant.character.escape.ts
# ^^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
>
> //// Escaped backslash before the closing delimiter
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
> template: `<div>backslash \\</div>`,
#^^ inline-template.ng
# ^^^^^^^^ inline-template.ng meta.object-literal.key.ts
# ^ inline-template.ng meta.object-literal.key.ts punctuation.separator.key-value.ts
# ^ inline-template.ng
# ^ inline-template.ng string
# ^^^^^^^^^^^^^^^ inline-template.ng text.html.derivative
# ^^ inline-template.ng text.html.derivative constant.character.escape.ts
# ^^^^^^ inline-template.ng text.html.derivative
# ^ inline-template.ng string
# ^^ inline-template.ng
>})
#^^^ inline-template.ng
>export class TMComponent{}
#^^^^^^^^^^^^^^^^^^^^^^^^^^^ inline-template.ng
>