mirror of
https://github.com/neovim/neovim.git
synced 2025-09-05 19:08:15 +00:00
[Backport release-0.9] fix(treesitter): do not calc folds on unloaded buffers (#23440)
fix(treesitter): do not calc folds on unloaded buffers
Fixes #23423
(cherry picked from commit 2e08228a16
)
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
This commit is contained in:
![41898282+github-actions[bot]@users.noreply.github.com](/assets/img/avatar_default.png)
committed by
GitHub

parent
607237a20a
commit
76dd0f81b0
@@ -184,13 +184,25 @@ local function recompute_folds()
|
||||
vim._foldupdate()
|
||||
end
|
||||
|
||||
--- Schedule a function only if bufnr is loaded
|
||||
---@param bufnr integer
|
||||
---@param fn function
|
||||
local function schedule_if_loaded(bufnr, fn)
|
||||
vim.schedule(function()
|
||||
if not api.nvim_buf_is_loaded(bufnr) then
|
||||
return
|
||||
end
|
||||
fn()
|
||||
end)
|
||||
end
|
||||
|
||||
---@param bufnr integer
|
||||
---@param foldinfo TS.FoldInfo
|
||||
---@param tree_changes Range4[]
|
||||
local function on_changedtree(bufnr, foldinfo, tree_changes)
|
||||
-- For some reason, queries seem to use the old buffer state in on_bytes.
|
||||
-- Get around this by scheduling and manually updating folds.
|
||||
vim.schedule(function()
|
||||
schedule_if_loaded(bufnr, function()
|
||||
for _, change in ipairs(tree_changes) do
|
||||
local srow, _, erow = Range.unpack4(change)
|
||||
get_folds_levels(bufnr, foldinfo, srow, erow)
|
||||
@@ -212,7 +224,7 @@ local function on_bytes(bufnr, foldinfo, start_row, old_row, new_row)
|
||||
foldinfo:remove_range(end_row_new, end_row_old)
|
||||
elseif new_row > old_row then
|
||||
foldinfo:add_range(start_row, end_row_new)
|
||||
vim.schedule(function()
|
||||
schedule_if_loaded(bufnr, function()
|
||||
get_folds_levels(bufnr, foldinfo, start_row, end_row_new)
|
||||
recompute_folds()
|
||||
end)
|
||||
|
Reference in New Issue
Block a user