aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/client.lua
diff options
context:
space:
mode:
authornotomo <18519692+notomo@users.noreply.github.com>2025-09-09 09:52:25 +0900
committerGitHub <noreply@github.com>2025-09-08 17:52:25 -0700
commitbbfcde3ab20e0a490c9cce9afce97412cb1fde32 (patch)
tree96daa42a8939771df508c8f2493543701846d483 /runtime/lua/vim/lsp/client.lua
parenta7b8102f20d5f36c63ec747b40c44cff100da8e3 (diff)
downloadrneovim-bbfcde3ab20e0a490c9cce9afce97412cb1fde32.tar.gz
rneovim-bbfcde3ab20e0a490c9cce9afce97412cb1fde32.tar.bz2
rneovim-bbfcde3ab20e0a490c9cce9afce97412cb1fde32.zip
fix(lsp): check if buffer is valid in scheduled client:on_attach() #35672
Problem: lsp._capability.is_enabled() can raise error if buffer is invalid in client:on_attach(). - error ``` ./build/bin/nvim --clean --headless +"source ./minimal.lua" vim.schedule callback: ...omo/workspace/neovim/runtime/lua/vim/lsp/_capability.lua:209: scoped variable: Invalid buffer id: 2 stack traceback: [C]: in function '__index' ...omo/workspace/neovim/runtime/lua/vim/lsp/_capability.lua:209: in function 'is_enabled' ...e/notomo/workspace/neovim/runtime/lua/vim/lsp/client.lua:1108: in function <...e/notomo/workspace/neovim/runtime/lua/vim/lsp/client.lua:1101> ``` - reproduction minimal.lua ```lua vim.opt.runtimepath:append("/path/to/nvim-lspconfig/") vim.lsp.enable("lua_ls") vim.cmd.tabedit("runtime/lua/vim/_defaults.lua") vim.api.nvim_create_autocmd({ "LspAttach" }, { group = vim.api.nvim_create_augroup("test", {}), callback = function() vim.cmd.tabedit("runtime/lua/vim/_defaults.lua") local bufnr = vim.api.nvim_get_current_buf() vim.api.nvim_buf_delete(bufnr, { force = true }) end, }) ``` Solution: Check whether buffer is valid.
Diffstat (limited to 'runtime/lua/vim/lsp/client.lua')
-rw-r--r--runtime/lua/vim/lsp/client.lua3
1 files changed, 3 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp/client.lua b/runtime/lua/vim/lsp/client.lua
index 7605d8fd44..1b49d946e9 100644
--- a/runtime/lua/vim/lsp/client.lua
+++ b/runtime/lua/vim/lsp/client.lua
@@ -1099,6 +1099,9 @@ function Client:on_attach(bufnr)
-- on_attach and LspAttach callbacks the ability to schedule wrap the
-- opt-out (deleting the semanticTokensProvider from capabilities)
vim.schedule(function()
+ if not vim.api.nvim_buf_is_valid(bufnr) then
+ return
+ end
for _, Capability in pairs(lsp._capability.all) do
if
self:supports_method(Capability.method)