diff options
author | Jaehwang Jung <tomtomjhj@gmail.com> | 2024-03-02 18:51:10 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-02 10:51:10 +0100 |
commit | 39cc38a87b29d61e7e5342bad2e5156446eb8649 (patch) | |
tree | c07628a57afa990518000be2ce9cfb03928ec93e /runtime/lua/vim/lsp/client.lua | |
parent | ee4bbc3af260d166cdeb4634616a978c3d51e33d (diff) | |
download | rneovim-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.lua | 12 |
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 |