fix(lsp): call config on_exit handler before context is cleared (#16781)

The on_exit handler provided to the client configuration is called after
the client's context is cleared (e.g. which buffers the client was
attached to). Calling the handler sooner allows these handlers to access
the client object and do their own cleanup with the full context.

(cherry picked from commit 5ab49430ee)

Co-authored-by: Gregory Anders <greg@gpanders.com>
This commit is contained in:
github-actions[bot] 2021-12-25 10:10:18 -05:00 committed by GitHub
parent 37a00be7c0
commit 571609fb89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -776,6 +776,10 @@ function lsp.start_client(config)
---@param code (number) exit code of the process ---@param code (number) exit code of the process
---@param signal (number) the signal used to terminate (if any) ---@param signal (number) the signal used to terminate (if any)
function dispatch.on_exit(code, signal) function dispatch.on_exit(code, signal)
if config.on_exit then
pcall(config.on_exit, code, signal, client_id)
end
active_clients[client_id] = nil active_clients[client_id] = nil
uninitialized_clients[client_id] = nil uninitialized_clients[client_id] = nil
@ -791,10 +795,6 @@ function lsp.start_client(config)
vim.notify(msg, vim.log.levels.WARN) vim.notify(msg, vim.log.levels.WARN)
end) end)
end end
if config.on_exit then
pcall(config.on_exit, code, signal, client_id)
end
end end
-- Start the RPC client. -- Start the RPC client.