fix(lsp): don't monitor files if workspace_folders is nil (#22531)

Fixes:

    Error SERVER_REQUEST_HANDLER_ERROR: "...di/dev/neovim/neovim/runtime/lua/vim/lsp/_watchfiles.lua
    :200: bad argument #1 to 'ipairs' (table expected, got nil)"

Language servers can be started without root_dir or workspace_folders.
This commit is contained in:
Mathias Fußenegger 2023-03-05 08:42:15 +01:00 committed by GitHub
parent ac69ba5fa0
commit ed05d38d9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -168,11 +168,11 @@ end
M._watchfunc = (vim.fn.has('win32') == 1 or vim.fn.has('mac') == 1) and watch.watch or watch.poll
---@type table<number, table<number, function()>> client id -> registration id -> cancel function
---@type table<number, table<number, function[]>> client id -> registration id -> cancel function
local cancels = vim.defaulttable()
local queue_timeout_ms = 100
---@type table<number, uv_timer_t> client id -> libuv timer which will send queued changes at its timeout
---@type table<number, uv.uv_timer_t> client id -> libuv timer which will send queued changes at its timeout
local queue_timers = {}
---@type table<number, lsp.FileEvent[]> client id -> set of queued changes to send in a single LSP notification
local change_queues = {}
@ -193,6 +193,9 @@ local to_lsp_change_type = {
function M.register(reg, ctx)
local client_id = ctx.client_id
local client = vim.lsp.get_client_by_id(client_id)
if not client.workspace_folders then
return
end
local watch_regs = {}
for _, w in ipairs(reg.registerOptions.watchers) do
local glob_patterns = {}