lsp: Fix "client has shut down" errors during initializing (#13103)

Language servers can already send log messages to the client while the
server is still being initialized.

This currently leads to "client has shut down" messages which are
confusing to the user as the server is properly starting.

To fix this this changes the `get_client_by_id` method to also return a
client if it is still initializing.
This commit is contained in:
Mathias Fußenegger 2020-10-22 20:59:17 +02:00 committed by GitHub
parent 78cd1b9f5a
commit df726408d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 9 deletions

View File

@ -488,8 +488,8 @@ get_active_clients() *vim.lsp.get_active_clients()*
Table of |vim.lsp.client| objects Table of |vim.lsp.client| objects
get_client_by_id({client_id}) *vim.lsp.get_client_by_id()* get_client_by_id({client_id}) *vim.lsp.get_client_by_id()*
Gets an active client by id, or nil if the id is invalid or Gets a client by id, or nil if the id is invalid.
the client is not yet initialized. The returned client may not yet be fully initialized.
Parameters: ~ Parameters: ~
{client_id} client id number {client_id} client id number

View File

@ -397,9 +397,8 @@ end
--@param trace: "off" | "messages" | "verbose" | nil passed directly to the language --@param trace: "off" | "messages" | "verbose" | nil passed directly to the language
--- server in the initialize request. Invalid/empty values will default to "off" --- server in the initialize request. Invalid/empty values will default to "off"
--- ---
--@returns Client id. |vim.lsp.get_client_by_id()| Note: client is only --@returns Client id. |vim.lsp.get_client_by_id()| Note: client may not be
--- available after it has been initialized, which may happen after a small --- fully initialized. Use `on_init` to do any actions once
--- delay (or never if there is an error). Use `on_init` to do any actions once
--- the client has been initialized. --- the client has been initialized.
function lsp.start_client(config) function lsp.start_client(config)
local cleaned_config = validate_client_config(config) local cleaned_config = validate_client_config(config)
@ -910,14 +909,14 @@ function lsp.buf_is_attached(bufnr, client_id)
return (all_buffer_active_clients[bufnr] or {})[client_id] == true return (all_buffer_active_clients[bufnr] or {})[client_id] == true
end end
--- Gets an active client by id, or nil if the id is invalid or the --- Gets a client by id, or nil if the id is invalid.
--- client is not yet initialized. --- The returned client may not yet be fully initialized.
--- --
--@param client_id client id number --@param client_id client id number
--- ---
--@returns |vim.lsp.client| object, or nil --@returns |vim.lsp.client| object, or nil
function lsp.get_client_by_id(client_id) function lsp.get_client_by_id(client_id)
return active_clients[client_id] return active_clients[client_id] or uninitialized_clients[client_id]
end end
--- Stops a client(s). --- Stops a client(s).