aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/client.lua
diff options
context:
space:
mode:
authorJaehwang Jung <tomtomjhj@gmail.com>2024-03-02 18:51:10 +0900
committerGitHub <noreply@github.com>2024-03-02 10:51:10 +0100
commit39cc38a87b29d61e7e5342bad2e5156446eb8649 (patch)
treec07628a57afa990518000be2ce9cfb03928ec93e /runtime/lua/vim/lsp/client.lua
parentee4bbc3af260d166cdeb4634616a978c3d51e33d (diff)
downloadrneovim-39cc38a87b29d61e7e5342bad2e5156446eb8649.tar.gz
rneovim-39cc38a87b29d61e7e5342bad2e5156446eb8649.tar.bz2
rneovim-39cc38a87b29d61e7e5342bad2e5156446eb8649.zip
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 (limited to 'runtime/lua/vim/lsp/client.lua')
-rw-r--r--runtime/lua/vim/lsp/client.lua12
1 files changed, 10 insertions, 2 deletions
diff --git a/runtime/lua/vim/lsp/client.lua b/runtime/lua/vim/lsp/client.lua
index dfb5137e2a..0f47c57cd5 100644
--- 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