mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
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>
|
||
|---|---|---|
| .. | ||
| queries | ||