diff --git a/runtime/doc/treesitter.txt b/runtime/doc/treesitter.txt index ea3c75f802..9158a88f4f 100644 --- a/runtime/doc/treesitter.txt +++ b/runtime/doc/treesitter.txt @@ -573,7 +573,10 @@ parent tree. The language injection query allows you to specify these “injections” using the following captures: • `@injection.content` - indicates that the captured node should have its - contents re-parsed using another language. + contents re-parsed using another language. If there are multiple + `@injection.content` captures in one pattern, all ranges will be + collected and parsed as one tree. This allows query authors to create + "scoped" injections with injection query quantifiers. • `@injection.language` - indicates that the captured node’s text may contain the name of a language that should be used to re-parse the `@injection.content`. diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua index bea04ee605..440eadc6e0 100644 --- a/runtime/lua/vim/treesitter/languagetree.lua +++ b/runtime/lua/vim/treesitter/languagetree.lua @@ -956,7 +956,9 @@ function LanguageTree:_get_injection(match, metadata) local ft = vim.filetype.match({ filename = text }) lang = ft and resolve_lang(ft) elseif name == 'injection.content' then - ranges = get_node_ranges(node, self._source, metadata[id], include_children) + for _, range in ipairs(get_node_ranges(node, self._source, metadata[id], include_children)) do + ranges[#ranges + 1] = range + end end end end