diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2021-02-07 07:32:19 +0100 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2021-02-10 18:58:46 +0100 |
commit | 94622ca66b553018c19fbbb615f2e1fee0a8074a (patch) | |
tree | ed6e5bab2647e1580490d5c4ada4560dbde7eedd /runtime/lua/vim | |
parent | fa5f583981276cb3767f74bec553cfa90e47a74e (diff) | |
download | rneovim-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.lua | 6 | ||||
-rw-r--r-- | runtime/lua/vim/treesitter/languagetree.lua | 16 |
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 |