aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/vim/lsp.lua')
-rw-r--r--runtime/lua/vim/lsp.lua33
1 files changed, 30 insertions, 3 deletions
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index cb3d4bbe9f..d45827b0d7 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -1179,11 +1179,38 @@ function lsp._vim_exit_handler()
client.stop()
end
- if not vim.wait(500, function() return tbl_isempty(active_clients) end, 50) then
- for _, client in pairs(active_clients) do
- client.stop(true)
+ local function wait_async(timeout, ms, predicate, cb)
+ local timer = uv.new_timer()
+ local time = 0
+
+ local function done(in_time)
+ timer:stop()
+ timer:close()
+ cb(in_time)
end
+
+ timer:start(0, ms, function()
+ if predicate() == true then
+ done(true)
+ return
+ end
+
+ if time == timeout then
+ done(false)
+ return
+ end
+
+ time = time + ms
+ end)
end
+
+ wait_async(500, 50, function() return tbl_isempty(active_clients) end, function(in_time)
+ if not in_time then
+ for _, client in pairs(active_clients) do
+ client.stop(true)
+ end
+ end
+ end)
end
nvim_command("autocmd VimLeavePre * lua vim.lsp._vim_exit_handler()")