commit 39cc38a87b29d61e7e5342bad2e5156446eb8649
parent ee4bbc3af260d166cdeb4634616a978c3d51e33d
Author: Jaehwang Jung <tomtomjhj@gmail.com>
Date: Sat, 2 Mar 2024 18:51:10 +0900
fix(lsp): defer writing error msgs (#27688)
Context:
Nvim catches errors from the user's `on_exit` and rpc handler callbacks
and prints the error message.
Problem:
Printing the error message uses Nvim api functions. But callbacks
mentioned above run in `:h lua-loop-callbacks` where most of `vim.api`
is not allowed, so Nvim itself raises error.
Solution:
`vim.schedule()` the error reporting when necessary.
Diffstat:
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/runtime/lua/vim/lsp/client.lua b/runtime/lua/vim/lsp/client.lua
@@ -691,8 +691,16 @@ local wait_result_reason = { [-1] = 'timeout', [-2] = 'interrupted', [-3] = 'err
---
--- @param ... string List to write to the buffer
local function err_message(...)
- api.nvim_err_writeln(table.concat(vim.tbl_flatten({ ... })))
- api.nvim_command('redraw')
+ local message = table.concat(vim.tbl_flatten({ ... }))
+ if vim.in_fast_event() then
+ vim.schedule(function()
+ api.nvim_err_writeln(message)
+ api.nvim_command('redraw')
+ end)
+ else
+ api.nvim_err_writeln(message)
+ api.nvim_command('redraw')
+ end
end
--- @private