mirror of
https://github.com/neovim/neovim.git
synced 2024-12-26 14:11:15 -07:00
0e8186bdd8
Steps to reproduce:
1. setting `vim.highlight.on_yank`
```
vim.api.nvim_create_autocmd({ "TextYankPost" }, {
pattern = { "*" },
callback = function()
vim.highlight.on_yank({ timeout = 200 })
end,
})
```
2. repeat typing `yeye` ...
3. causes the following error.
```
Error executing vim.schedule lua callback: vim/_editor.lua:0: handle 0x01e96970 is already closing
stack traceback:
[C]: in function 'close'
vim/_editor.lua: in function ''
vim/_editor.lua: in function <vim/_editor.lua:0>
```
📝 Test result before fix:
[----------] Global test environment setup.
[----------] Running tests from test/functional/lua/highlight_spec.lua
[ RUN ] vim.highlight.on_yank does not show errors even if buffer is wiped before timeout: 15.07 ms OK
[ RUN ] vim.highlight.on_yank does not show errors even if executed between timeout and clearing highlight: 15.07 ms ERR
test/helpers.lua:73: Expected objects to be the same.
Passed in:
(string) 'Error executing vim.schedule lua callback: vim/_editor.lua:0: handle 0x02025260 is already closing
stack traceback:
[C]: in function 'close'
vim/_editor.lua: in function ''
vim/_editor.lua: in function <vim/_editor.lua:0>'
Expected:
(string) ''
35 lines
1021 B
Lua
35 lines
1021 B
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local exec_lua = helpers.exec_lua
|
|
local eq = helpers.eq
|
|
local eval = helpers.eval
|
|
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')
|
|
exec_lua([[
|
|
vim.highlight.on_yank({timeout = 10, on_macro = true, event = {operator = "y", regtype = "v"}})
|
|
vim.cmd('bwipeout!')
|
|
]])
|
|
helpers.sleep(10)
|
|
helpers.feed('<cr>') -- avoid hang if error message exists
|
|
eq('', eval('v:errmsg'))
|
|
end)
|
|
|
|
it('does not close timer twice', function()
|
|
exec_lua([[
|
|
vim.highlight.on_yank({timeout = 10, on_macro = true, event = {operator = "y"}})
|
|
vim.loop.sleep(10)
|
|
vim.schedule(function()
|
|
vim.highlight.on_yank({timeout = 0, on_macro = true, event = {operator = "y"}})
|
|
end)
|
|
]])
|
|
eq('', eval('v:errmsg'))
|
|
end)
|
|
end)
|