aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter/languagetree.lua
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2021-02-10 22:28:52 +0100
committerGitHub <noreply@github.com>2021-02-10 22:28:52 +0100
commit61aea004d7101e138794a337c03ef00a6b3994e6 (patch)
treeed6e5bab2647e1580490d5c4ada4560dbde7eedd /runtime/lua/vim/treesitter/languagetree.lua
parent230f2ff381d7bced4d1e19bd1853ce75cbde797a (diff)
parent94622ca66b553018c19fbbb615f2e1fee0a8074a (diff)
downloadrneovim-61aea004d7101e138794a337c03ef00a6b3994e6.tar.gz
rneovim-61aea004d7101e138794a337c03ef00a6b3994e6.tar.bz2
rneovim-61aea004d7101e138794a337c03ef00a6b3994e6.zip
Merge pull request #13895 from bfredl/ar2
buffer updates: fix autoread but for real this time
Diffstat (limited to 'runtime/lua/vim/treesitter/languagetree.lua')
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua24
1 files changed, 22 insertions, 2 deletions
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index 6d47ed8365..28a87f26c7 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -35,6 +35,7 @@ function LanguageTree.new(source, lang, opts)
_callbacks = {
changedtree = {},
bytes = {},
+ detach = {},
child_added = {},
child_removed = {}
},
@@ -45,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
@@ -397,6 +403,16 @@ 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(true)
+ self:_do_callback('detach', ...)
+end
+
--- Registers callbacks for the parser
-- @param cbs An `nvim_buf_attach`-like table argument with the following keys :
-- `on_bytes` : see `nvim_buf_attach`, but this will be called _after_ the parsers callback.
@@ -416,6 +432,10 @@ function LanguageTree:register_cbs(cbs)
table.insert(self._callbacks.bytes, cbs.on_bytes)
end
+ if cbs.on_detach then
+ table.insert(self._callbacks.detach, cbs.on_detach)
+ end
+
if cbs.on_child_added then
table.insert(self._callbacks.child_added, cbs.on_child_added)
end