mirror of
https://github.com/neovim/neovim.git
synced 2025-10-21 09:12:07 +00:00
fix(lsp): avoid indexing vim.NIL for null workspaceFolders (#16404)
* internally represent no workspaceFolders as nil instead of vim.NIL * rename workspaceFolders -> workspace_folders for consistency
This commit is contained in:

committed by
GitHub

parent
cfa5d06801
commit
33ce02ee4d
@@ -369,7 +369,7 @@ end
|
||||
function M.list_workspace_folders()
|
||||
local workspace_folders = {}
|
||||
for _, client in pairs(vim.lsp.buf_get_clients()) do
|
||||
for _, folder in pairs(client.workspaceFolders or {}) do
|
||||
for _, folder in pairs(client.workspace_folders or {}) do
|
||||
table.insert(workspace_folders, folder.name)
|
||||
end
|
||||
end
|
||||
@@ -389,7 +389,7 @@ function M.add_workspace_folder(workspace_folder)
|
||||
local params = util.make_workspace_params({{uri = vim.uri_from_fname(workspace_folder); name = workspace_folder}}, {{}})
|
||||
for _, client in pairs(vim.lsp.buf_get_clients()) do
|
||||
local found = false
|
||||
for _, folder in pairs(client.workspaceFolders or {}) do
|
||||
for _, folder in pairs(client.workspace_folders or {}) do
|
||||
if folder.name == workspace_folder then
|
||||
found = true
|
||||
print(workspace_folder, "is already part of this workspace")
|
||||
@@ -398,10 +398,10 @@ function M.add_workspace_folder(workspace_folder)
|
||||
end
|
||||
if not found then
|
||||
vim.lsp.buf_notify(0, 'workspace/didChangeWorkspaceFolders', params)
|
||||
if not client.workspaceFolders then
|
||||
client.workspaceFolders = {}
|
||||
if not client.workspace_folders then
|
||||
client.workspace_folders = {}
|
||||
end
|
||||
table.insert(client.workspaceFolders, params.event.added[1])
|
||||
table.insert(client.workspace_folders, params.event.added[1])
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -415,10 +415,10 @@ function M.remove_workspace_folder(workspace_folder)
|
||||
if not (workspace_folder and #workspace_folder > 0) then return end
|
||||
local params = util.make_workspace_params({{}}, {{uri = vim.uri_from_fname(workspace_folder); name = workspace_folder}})
|
||||
for _, client in pairs(vim.lsp.buf_get_clients()) do
|
||||
for idx, folder in pairs(client.workspaceFolders) do
|
||||
for idx, folder in pairs(client.workspace_folders) do
|
||||
if folder.name == workspace_folder then
|
||||
vim.lsp.buf_notify(0, 'workspace/didChangeWorkspaceFolders', params)
|
||||
client.workspaceFolders[idx] = nil
|
||||
client.workspace_folders[idx] = nil
|
||||
return
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user