aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter/highlighter.lua
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-04-30 16:11:38 +0100
committerGitHub <noreply@github.com>2023-04-30 17:11:38 +0200
commit19a793545f15bb7e0bac2fc8f705c600e8f9c9bb (patch)
tree9fd9adc5f9c321469acbf7631241bf929ad5c451 /runtime/lua/vim/treesitter/highlighter.lua
parent7e3d6ff4053b47a92067f7d68ba6f541ea89dee0 (diff)
downloadrneovim-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.lua20
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