diff options
| author | yuukibarns <yuukibarns@gmail.com> | 2025-03-30 23:06:16 +0800 |
|---|---|---|
| committer | Lewis Russell <me@lewisr.dev> | 2025-04-16 15:03:28 +0100 |
| commit | 284b0e4fa25c0acc12a88398112fc35aec8791ee (patch) | |
| tree | a694561766ecb2de57697d4ff760a8293b076005 /runtime/lua/vim/treesitter/dev.lua | |
| parent | 223ac7782e24c3d662185b5f1fc63d718c4376bc (diff) | |
| download | rneovim-284b0e4fa25c0acc12a88398112fc35aec8791ee.tar.gz rneovim-284b0e4fa25c0acc12a88398112fc35aec8791ee.tar.bz2 rneovim-284b0e4fa25c0acc12a88398112fc35aec8791ee.zip | |
fix(treesitter): fix `:InspectTree` incorrect injections
Diffstat (limited to 'runtime/lua/vim/treesitter/dev.lua')
| -rw-r--r-- | runtime/lua/vim/treesitter/dev.lua | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/runtime/lua/vim/treesitter/dev.lua b/runtime/lua/vim/treesitter/dev.lua index 41ecf07aa1..8a12bb438e 100644 --- a/runtime/lua/vim/treesitter/dev.lua +++ b/runtime/lua/vim/treesitter/dev.lua @@ -1,5 +1,7 @@ local api = vim.api +local Range = require('vim.treesitter._range') + local M = {} ---@class (private) vim.treesitter.dev.TSTreeView @@ -96,16 +98,20 @@ function TSTreeView:new(bufnr, lang) parser:for_each_tree(function(parent_tree, parent_ltree) local parent = parent_tree:root() + local parent_range = { parent:range() } for _, child in pairs(parent_ltree:children()) do for _, tree in pairs(child:trees()) do local r = tree:root() - local node = assert(parent:named_descendant_for_range(r:range())) - local id = node:id() - if not injections[id] or r:byte_length() > injections[id].root:byte_length() then - injections[id] = { - lang = child:lang(), - root = r, - } + local r_range = { r:range() } + if Range.contains(parent_range, r_range) then + local node = assert(parent:named_descendant_for_range(r:range())) + local id = node:id() + if not injections[id] or r:byte_length() > injections[id].root:byte_length() then + injections[id] = { + lang = child:lang(), + root = r, + } + end end end end |