mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 02:34:59 -07:00
fix(lsp): vim.lsp.start fails if existing client has no workspace_folders #31608
Problem: regression since https://github.com/neovim/neovim/pull/31340 `nvim -l repro.lua`: ```lua vim.lsp.start { cmd = { 'lua-language-server' }, name = 'lua_ls' } vim.lsp.start { cmd = { 'lua-language-server' }, name = 'lua_ls', root_dir = 'foo' } -- swapped case will be ok: -- vim.lsp.start { cmd = { 'lua-language-server' }, name = 'lua_ls', root_dir = 'foo' } -- vim.lsp.start { cmd = { 'lua-language-server' }, name = 'lua_ls' } ``` Failure: ``` E5113: Error while calling lua chunk: /…/lua/vim/lsp.lua:214: bad argument #1 to 'ipairs' (table expected, got nil) stack traceback: [C]: in function 'ipairs' /…/lua/vim/lsp.lua:214: in function 'reuse_client' /…/lua/vim/lsp.lua:629: in function 'start' repro.lua:34: in main chunk ```
This commit is contained in:
parent
07d5dc8938
commit
888a803755
@ -211,7 +211,7 @@ local function reuse_client_default(client, config)
|
||||
|
||||
for _, config_folder in ipairs(config_folders) do
|
||||
local found = false
|
||||
for _, client_folder in ipairs(client.workspace_folders) do
|
||||
for _, client_folder in ipairs(client.workspace_folders or {}) do
|
||||
if config_folder.uri == client_folder.uri then
|
||||
found = true
|
||||
break
|
||||
|
@ -1854,6 +1854,20 @@ describe('LSP', function()
|
||||
end,
|
||||
}
|
||||
end)
|
||||
|
||||
it('vim.lsp.start when existing client has no workspace_folders', function()
|
||||
exec_lua(create_server_definition)
|
||||
eq(
|
||||
{ 2, 'foo', 'foo' },
|
||||
exec_lua(function()
|
||||
local server = _G._create_server()
|
||||
vim.lsp.start { cmd = server.cmd, name = 'foo' }
|
||||
vim.lsp.start { cmd = server.cmd, name = 'foo', root_dir = 'bar' }
|
||||
local foos = vim.lsp.get_clients()
|
||||
return { #foos, foos[1].name, foos[2].name }
|
||||
end)
|
||||
)
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('parsing tests', function()
|
||||
|
Loading…
Reference in New Issue
Block a user