diff options
author | Lewis Russell <lewis6991@gmail.com> | 2023-04-30 16:11:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-30 17:11:38 +0200 |
commit | 19a793545f15bb7e0bac2fc8f705c600e8f9c9bb (patch) | |
tree | 9fd9adc5f9c321469acbf7631241bf929ad5c451 /runtime/lua/vim/treesitter/highlighter.lua | |
parent | 7e3d6ff4053b47a92067f7d68ba6f541ea89dee0 (diff) | |
download | rneovim-19a793545f15bb7e0bac2fc8f705c600e8f9c9bb.tar.gz rneovim-19a793545f15bb7e0bac2fc8f705c600e8f9c9bb.tar.bz2 rneovim-19a793545f15bb7e0bac2fc8f705c600e8f9c9bb.zip |
fix(treesitter): redraw added/removed injections properly (#23287)
When injections are added or removed make sure to:
- invoke 'changedtree' callbacks for when new trees are added.
- invoke 'changedtree' callbacks for when trees are invalidated
- redraw regions when languagetree children are removed
Diffstat (limited to 'runtime/lua/vim/treesitter/highlighter.lua')
-rw-r--r-- | runtime/lua/vim/treesitter/highlighter.lua | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/runtime/lua/vim/treesitter/highlighter.lua b/runtime/lua/vim/treesitter/highlighter.lua index ac2a929487..4bb764c5c6 100644 --- a/runtime/lua/vim/treesitter/highlighter.lua +++ b/runtime/lua/vim/treesitter/highlighter.lua @@ -76,9 +76,6 @@ function TSHighlighter.new(tree, opts) opts = opts or {} ---@type { queries: table<string,string> } self.tree = tree tree:register_cbs({ - on_changedtree = function(...) - self:on_changedtree(...) - end, on_bytes = function(...) self:on_bytes(...) end, @@ -87,6 +84,17 @@ function TSHighlighter.new(tree, opts) end, }) + tree:register_cbs({ + on_changedtree = function(...) + self:on_changedtree(...) + end, + on_child_removed = function(child) + child:for_each_tree(function(t) + self:on_changedtree(t:included_ranges(true)) + end) + end, + }, true) + self.bufnr = tree:source() --[[@as integer]] self.edit_count = 0 self.redraw_count = 0 @@ -177,10 +185,10 @@ function TSHighlighter:on_detach() end ---@package ----@param changes integer[][]? +---@param changes Range6[][] function TSHighlighter:on_changedtree(changes) - for _, ch in ipairs(changes or {}) do - api.nvim__buf_redraw_range(self.bufnr, ch[1], ch[3] + 1) + for _, ch in ipairs(changes) do + api.nvim__buf_redraw_range(self.bufnr, ch[1], ch[4] + 1) end end |