mirror of
https://github.com/neovim/neovim
synced 2025-07-19 10:41:48 +00:00
fix(lsp): check for valid buf before processing semantic tokens response
Problem: There is no check for buffer validity before processing semantic tokens response. This can lead to `Invalid buffer id` error if processing request takes a long time and the buffer is wiped out. For example, this can happen after by accident navigating to a buffer from different project which leads to first loading project's workspace and *then* processing semantic tokens. During that time a buffer can be wiped out, as navigation to it was by accident. Solution: Add extra check for buffer validity before processing semantic tokens response.
This commit is contained in:
committed by
Lewis Russell
parent
ad853d1df0
commit
a9cdf76e3a
@ -337,6 +337,10 @@ function STHighlighter:process_response(response, client, version)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if not api.nvim_buf_is_valid(self.bufnr) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- if we have a response to a delta request, update the state of our tokens
|
-- if we have a response to a delta request, update the state of our tokens
|
||||||
-- appropriately. if it's a full response, just use that
|
-- appropriately. if it's a full response, just use that
|
||||||
local tokens ---@type integer[]
|
local tokens ---@type integer[]
|
||||||
@ -376,8 +380,10 @@ function STHighlighter:process_response(response, client, version)
|
|||||||
current_result.highlights = highlights
|
current_result.highlights = highlights
|
||||||
current_result.namespace_cleared = false
|
current_result.namespace_cleared = false
|
||||||
|
|
||||||
-- redraw all windows displaying buffer
|
-- redraw all windows displaying buffer (if still valid)
|
||||||
api.nvim__redraw({ buf = self.bufnr, valid = true })
|
if api.nvim_buf_is_valid(self.bufnr) then
|
||||||
|
api.nvim__redraw({ buf = self.bufnr, valid = true })
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param bufnr integer
|
--- @param bufnr integer
|
||||||
|
Reference in New Issue
Block a user