diff options
author | Jaehwang Jung <tomtomjhj@gmail.com> | 2023-08-24 17:32:43 +0900 |
---|---|---|
committer | Christian Clason <c.clason@uni-graz.at> | 2023-08-29 10:02:02 +0200 |
commit | ffb340bf63af42ac347e23e0488898adc4391328 (patch) | |
tree | 096e19c3b206be0e768395fd43d434f0ea42c3d4 | |
parent | 009c84322db3585c2bfb45a5994e2af14efb3013 (diff) | |
download | rneovim-ffb340bf63af42ac347e23e0488898adc4391328.tar.gz rneovim-ffb340bf63af42ac347e23e0488898adc4391328.tar.bz2 rneovim-ffb340bf63af42ac347e23e0488898adc4391328.zip |
fix(treesitter): update folds only once on InsertLeave
Problem:
With treesitter fold, InsertLeave can be slow, because a single session
of insert mode may schedule multiple fold updates in on_bytes and
on_changedtree.
Solution:
Don't create duplicate autocmds.
-rw-r--r-- | runtime/lua/vim/treesitter/_fold.lua | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/runtime/lua/vim/treesitter/_fold.lua b/runtime/lua/vim/treesitter/_fold.lua index 912a6e8a9f..d82e04a5a8 100644 --- a/runtime/lua/vim/treesitter/_fold.lua +++ b/runtime/lua/vim/treesitter/_fold.lua @@ -235,6 +235,8 @@ local M = {} ---@type table<integer,TS.FoldInfo> local foldinfos = {} +local group = api.nvim_create_augroup('treesitter/fold', {}) + --- Update the folds in the windows that contain the buffer and use expr foldmethod (assuming that --- the user doesn't use different foldexpr for the same buffer). --- @@ -253,7 +255,15 @@ local function foldupdate(bufnr) if api.nvim_get_mode().mode == 'i' then -- foldUpdate() is guarded in insert mode. So update folds on InsertLeave + if #(api.nvim_get_autocmds({ + group = group, + buffer = bufnr, + })) > 0 then + return + end api.nvim_create_autocmd('InsertLeave', { + group = group, + buffer = bufnr, once = true, callback = do_update, }) |