nvim-treesitter/runtime
Benny Powers 605ba7428f fix(injections): use string_fragment for template literal injections
Template literal injection queries previously captured the entire
`template_string` node with `injection.include-children`, which caused
template substitutions (e.g. `${expr}`) to be included in the injected
language's parse input. This broke highlighting in cases like:

    html`<p class="static ${classMap({ dynamic })} after"></p>`

where the HTML parser's attribute_value node would span across the
template substitution gap, and the lit-html `${` injection query
(in html_tags) would match the buffer text at that range, injecting
JS at the wrong offset.

Two fixes:

1. ecma/injections.scm: capture `string_fragment` nodes instead of
   `template_string`, and use `injection.combined` to merge them. This
   aligns with upstream tree-sitter-javascript's approach. The `#offset!`
   directives are removed since `string_fragment` already excludes the
   backticks.

2. html_tags/injections.scm: anchor the lit-html `${` pattern with `^`
   so it only matches attribute values that *start* with `${`, not
   attribute values whose buffer text happens to contain `${` in the
   middle (which occurs when the attribute_value node spans a template
   substitution gap).

Assisted-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 22:04:12 +03:00
..
queries fix(injections): use string_fragment for template literal injections 2026-03-28 22:04:12 +03:00