aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
authorJaehwang Jung <tomtomjhj@gmail.com>2023-08-24 17:32:43 +0900
committerChristian Clason <c.clason@uni-graz.at>2023-08-29 10:02:02 +0200
commitffb340bf63af42ac347e23e0488898adc4391328 (patch)
tree096e19c3b206be0e768395fd43d434f0ea42c3d4 /runtime/lua/vim
parent009c84322db3585c2bfb45a5994e2af14efb3013 (diff)
downloadrneovim-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.
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/treesitter/_fold.lua10
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,
})