mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
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.
This commit is contained in:
parent
009c84322d
commit
ffb340bf63
@ -235,6 +235,8 @@ local M = {}
|
|||||||
---@type table<integer,TS.FoldInfo>
|
---@type table<integer,TS.FoldInfo>
|
||||||
local foldinfos = {}
|
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
|
--- 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).
|
--- 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
|
if api.nvim_get_mode().mode == 'i' then
|
||||||
-- foldUpdate() is guarded in insert mode. So update folds on InsertLeave
|
-- 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', {
|
api.nvim_create_autocmd('InsertLeave', {
|
||||||
|
group = group,
|
||||||
|
buffer = bufnr,
|
||||||
once = true,
|
once = true,
|
||||||
callback = do_update,
|
callback = do_update,
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user