mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04:00
backport: fix(lua): verify buffer in highlight.on_yank (#15482)
Resolve an issue with deferred clearing of highlight failing if the buffer is deleted before the timeout by checking whether the buffer is valid first.
This commit is contained in:
parent
6bda2f56eb
commit
f7002337c0
@ -85,7 +85,11 @@ function highlight.on_yank(opts)
|
||||
highlight.range(bufnr, yank_ns, higroup, pos1, pos2, event.regtype, event.inclusive)
|
||||
|
||||
vim.defer_fn(
|
||||
function() api.nvim_buf_clear_namespace(bufnr, yank_ns, 0, -1) end,
|
||||
function()
|
||||
if api.nvim_buf_is_valid(bufnr) then
|
||||
api.nvim_buf_clear_namespace(bufnr, yank_ns, 0, -1)
|
||||
end
|
||||
end,
|
||||
timeout
|
||||
)
|
||||
end
|
||||
|
26
test/functional/lua/highlight_spec.lua
Normal file
26
test/functional/lua/highlight_spec.lua
Normal file
@ -0,0 +1,26 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local funcs = helpers.funcs
|
||||
local exec_lua = helpers.exec_lua
|
||||
local command = helpers.command
|
||||
local clear = helpers.clear
|
||||
|
||||
describe('vim.highlight.on_yank', function()
|
||||
|
||||
before_each(function()
|
||||
clear()
|
||||
end)
|
||||
|
||||
it('does not show errors even if buffer is wiped before timeout', function()
|
||||
command('new')
|
||||
local bufnr = funcs.bufnr("%")
|
||||
exec_lua[[
|
||||
vim.highlight.on_yank({timeout = 10, on_macro = true, event = {operator = "y", regtype = "v"}})
|
||||
vim.cmd('bwipeout!')
|
||||
]]
|
||||
exec_lua[[vim.wait(10)]]
|
||||
local pattern = [[vim/highlight.lua:%d+: Invalid buffer id: ]] .. bufnr
|
||||
local exists = pcall(helpers.assert_log, pattern)
|
||||
assert.is_false(exists, string.format("%q should not be in log", pattern))
|
||||
end)
|
||||
|
||||
end)
|
Loading…
Reference in New Issue
Block a user