aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2021-02-07 07:32:19 +0100
committerBjörn Linse <bjorn.linse@gmail.com>2021-02-10 18:58:46 +0100
commit94622ca66b553018c19fbbb615f2e1fee0a8074a (patch)
treeed6e5bab2647e1580490d5c4ada4560dbde7eedd /runtime/lua/vim
parentfa5f583981276cb3767f74bec553cfa90e47a74e (diff)
downloadrneovim-94622ca66b553018c19fbbb615f2e1fee0a8074a.tar.gz
rneovim-94622ca66b553018c19fbbb615f2e1fee0a8074a.tar.bz2
rneovim-94622ca66b553018c19fbbb615f2e1fee0a8074a.zip
buffer updates: add on_reload callback and handle it in treesitter parser
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/treesitter.lua6
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua16
2 files changed, 18 insertions, 4 deletions
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua
index 70051636ec..3af66b134c 100644
--- a/runtime/lua/vim/treesitter.lua
+++ b/runtime/lua/vim/treesitter.lua
@@ -51,7 +51,11 @@ function M._create_parser(bufnr, lang, opts)
self:_on_detach(...)
end
- a.nvim_buf_attach(self:source(), false, {on_bytes=bytes_cb, on_detach=detach_cb, preview=true})
+ local function reload_cb(_, ...)
+ self:_on_reload(...)
+ end
+
+ a.nvim_buf_attach(self:source(), false, {on_bytes=bytes_cb, on_detach=detach_cb, on_reload=reload_cb, preview=true})
self:parse()
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index a374974dca..28a87f26c7 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -46,11 +46,16 @@ function LanguageTree.new(source, lang, opts)
end
-- Invalidates this parser and all its children
-function LanguageTree:invalidate()
+function LanguageTree:invalidate(reload)
self._valid = false
+ -- buffer was reloaded, reparse all trees
+ if reload then
+ self._trees = {}
+ end
+
for _, child in ipairs(self._children) do
- child:invalidate()
+ child:invalidate(reload)
end
end
@@ -398,8 +403,13 @@ function LanguageTree:_on_bytes(bufnr, changed_tick,
new_row, new_col, new_byte)
end
+function LanguageTree:_on_reload()
+ self:invalidate(true)
+end
+
+
function LanguageTree:_on_detach(...)
- self:invalidate()
+ self:invalidate(true)
self:_do_callback('detach', ...)
end