fix(lsp): detach all clients on_reload to force buf_state reload (#28875)

Problem:  The changetracking state can de-sync when reloading a buffer
          with more than one LSP client attached.
Solution: Fully detach all clients from the buffer to force buf_state to
          be re-created.
This commit is contained in:
Ilia Choly 2024-05-21 14:02:48 -04:00 committed by GitHub
parent 56b7a18995
commit 879d17ea8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -556,12 +556,15 @@ local function buf_attach(bufnr)
end,
on_reload = function()
local clients = lsp.get_clients({ bufnr = bufnr })
local params = { textDocument = { uri = uri } }
for _, client in ipairs(lsp.get_clients({ bufnr = bufnr })) do
for _, client in ipairs(clients) do
changetracking.reset_buf(client, bufnr)
if vim.tbl_get(client.server_capabilities, 'textDocumentSync', 'openClose') then
client.notify(ms.textDocument_didClose, params)
end
end
for _, client in ipairs(clients) do
client:_text_document_did_open_handler(bufnr)
end
end,