mirror of
https://github.com/neovim/neovim.git
synced 2026-03-31 21:02:11 +00:00
fix(lsp): wait to display exit message #37925
This commit is contained in:
@@ -1126,6 +1126,9 @@ function lsp.get_active_clients(filter)
|
||||
return lsp.get_clients(filter)
|
||||
end
|
||||
|
||||
-- Minimum time before warning about LSP exit_timeout on Nvim exit.
|
||||
local min_warn_exit_timeout = 100
|
||||
|
||||
api.nvim_create_autocmd('VimLeavePre', {
|
||||
desc = 'vim.lsp: exit handler',
|
||||
callback = function()
|
||||
@@ -1137,13 +1140,20 @@ api.nvim_create_autocmd('VimLeavePre', {
|
||||
max_timeout = math.max(max_timeout, tonumber(client.exit_timeout) or 0)
|
||||
client:stop(client.exit_timeout)
|
||||
end
|
||||
if max_timeout > 10 then
|
||||
api.nvim_echo({
|
||||
{
|
||||
string.format('Waiting %ss for lsp exit (Press Ctrl-C to force exit)', max_timeout / 1e3),
|
||||
'WarningMsg',
|
||||
},
|
||||
}, true, {})
|
||||
|
||||
local exit_warning_timer --- @type uv.uv_timer_t?
|
||||
if max_timeout > min_warn_exit_timeout then
|
||||
exit_warning_timer = vim.defer_fn(function()
|
||||
api.nvim_echo({
|
||||
{
|
||||
string.format(
|
||||
'Waiting %ss for LSP exit (Press Ctrl-C to force exit)',
|
||||
max_timeout / 1e3
|
||||
),
|
||||
'WarningMsg',
|
||||
},
|
||||
}, true, {})
|
||||
end, min_warn_exit_timeout)
|
||||
end
|
||||
|
||||
vim.wait(max_timeout, function()
|
||||
@@ -1151,6 +1161,10 @@ api.nvim_create_autocmd('VimLeavePre', {
|
||||
return client.rpc.is_closing()
|
||||
end)
|
||||
end)
|
||||
|
||||
if exit_warning_timer and not exit_warning_timer:is_closing() then
|
||||
exit_warning_timer:close()
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user