lsp: fix blocking in closing of clients

This commit is contained in:
Brian Shu
2021-03-17 17:44:18 -04:00
parent 4d1fc167a8
commit 2e6c09838f

View File

@@ -1057,11 +1057,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()")