mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
fix(treesitter.foldexpr): robustness against ctrl-c
Problem: Exiting the insert mode with ctrl-c does not trigger InsertLeave autocmd. This may lead to nil error in treesitter foldexpr. Solution: Check nil. Folds still can be stale after exiting the insert mode with ctrl-c, but it will be eventually updated correctly. An alternative solution would be to ensure that exiting the insert mode always triggers do_foldupdate. This can be done either by "fixing" ctrl-c or with on_key callback that checks ctrl-c (nvim-cmp does this).
This commit is contained in:
parent
bf92d423a9
commit
8474f52978
@ -264,6 +264,15 @@ end
|
|||||||
|
|
||||||
---@package
|
---@package
|
||||||
function FoldInfo:do_foldupdate(bufnr)
|
function FoldInfo:do_foldupdate(bufnr)
|
||||||
|
-- InsertLeave is not executed when <C-C> is used for exiting the insert mode, leaving
|
||||||
|
-- do_foldupdate untouched. If another execution of foldupdate consumes foldupdate_range, the
|
||||||
|
-- InsertLeave do_foldupdate gets nil foldupdate_range. In that case, skip the update. This is
|
||||||
|
-- correct because the update that consumed the range must have incorporated the range that
|
||||||
|
-- InsertLeave meant to update.
|
||||||
|
if not self.foldupdate_range then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local srow, erow = self.foldupdate_range[1], self.foldupdate_range[2]
|
local srow, erow = self.foldupdate_range[1], self.foldupdate_range[2]
|
||||||
self.foldupdate_range = nil
|
self.foldupdate_range = nil
|
||||||
for _, win in ipairs(vim.fn.win_findbuf(bufnr)) do
|
for _, win in ipairs(vim.fn.win_findbuf(bufnr)) do
|
||||||
|
Loading…
Reference in New Issue
Block a user