mirror of
https://github.com/neovim/neovim
synced 2025-07-16 17:21:49 +00:00
fix(lsp): avoid attaching to unloaded buffers (#16726)
Closes https://github.com/neovim/neovim/issues/16562 https://github.com/neovim/neovim/issues/16249 https://github.com/neovim/neovim/issues/16297
* buf_attach_client can be called on an unloaded buffer
* on_attach will prematurely fail, while the language server client
tracks this buffer as attached
* The language server client will track this buffer as attached despite
textDocument/didChange notifications not being sent to the server
* Instead, check if the buffer is loaded and return early, warning via
the lsp logger that buf_attach_client was called on an invalid buffer
(cherry picked from commit 6d63cb8f6a
)
Co-authored-by: Michael Lingelbach <m.j.lbach@gmail.com>
This commit is contained in:
committed by
GitHub
parent
1bb861c7a1
commit
00889948dd
@ -1155,6 +1155,12 @@ function lsp.buf_attach_client(bufnr, client_id)
|
|||||||
client_id = {client_id, 'n'};
|
client_id = {client_id, 'n'};
|
||||||
}
|
}
|
||||||
bufnr = resolve_bufnr(bufnr)
|
bufnr = resolve_bufnr(bufnr)
|
||||||
|
if not vim.api.nvim_buf_is_loaded(bufnr) then
|
||||||
|
local _ = log.warn() and log.warn(
|
||||||
|
string.format("buf_attach_client called on unloaded buffer (id: %d): ", bufnr)
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
end
|
||||||
local buffer_client_ids = all_buffer_active_clients[bufnr]
|
local buffer_client_ids = all_buffer_active_clients[bufnr]
|
||||||
-- This is our first time attaching to this buffer.
|
-- This is our first time attaching to this buffer.
|
||||||
if not buffer_client_ids then
|
if not buffer_client_ids then
|
||||||
|
Reference in New Issue
Block a user