mirror of
https://github.com/neovim/neovim.git
synced 2025-09-05 19:08:15 +00:00
lsp(start_client): Allow passing custom workspaceFolders to the LSP (#15132)
Some language servers *cough*rust-analyzer*cough* need an empty/custom workspaceFolders for certain usecases. For example, rust-analyzer needs an empty workspaceFolders table for standalone file support (See https://github.com/rust-analyzer/rust-analyzer/pull/8955). This can also be useful for other languages that need to commonly open a certain directory (like flutter or lua), which would help prevent spinning up a new language server altogether. In case no workspaceFolders are passed, we fallback to what we had before.
This commit is contained in:
@@ -590,6 +590,10 @@ end
|
|||||||
--- as `initializationOptions`. See `initialize` in the LSP spec.
|
--- as `initializationOptions`. See `initialize` in the LSP spec.
|
||||||
---
|
---
|
||||||
--@param name (string, default=client-id) Name in log messages.
|
--@param name (string, default=client-id) Name in log messages.
|
||||||
|
--
|
||||||
|
--@param workspace_folders (table) List of workspace folders passed to the
|
||||||
|
--- language server. Defaults to root_dir if not set. See `workspaceFolders` in
|
||||||
|
--- the LSP spec
|
||||||
---
|
---
|
||||||
--@param get_language_id function(bufnr, filetype) -> language ID as string.
|
--@param get_language_id function(bufnr, filetype) -> language ID as string.
|
||||||
--- Defaults to the filetype.
|
--- Defaults to the filetype.
|
||||||
@@ -775,6 +779,14 @@ function lsp.start_client(config)
|
|||||||
off = 'off'; messages = 'messages'; verbose = 'verbose';
|
off = 'off'; messages = 'messages'; verbose = 'verbose';
|
||||||
}
|
}
|
||||||
local version = vim.version()
|
local version = vim.version()
|
||||||
|
|
||||||
|
if not config.workspace_folders then
|
||||||
|
config.workspace_folders = {{
|
||||||
|
uri = vim.uri_from_fname(config.root_dir);
|
||||||
|
name = string.format("%s", config.root_dir);
|
||||||
|
}};
|
||||||
|
end
|
||||||
|
|
||||||
local initialize_params = {
|
local initialize_params = {
|
||||||
-- The process Id of the parent process that started the server. Is null if
|
-- The process Id of the parent process that started the server. Is null if
|
||||||
-- the process has not been started by another process. If the parent
|
-- the process has not been started by another process. If the parent
|
||||||
@@ -815,10 +827,7 @@ function lsp.start_client(config)
|
|||||||
-- -- workspace folder in the user interface.
|
-- -- workspace folder in the user interface.
|
||||||
-- name
|
-- name
|
||||||
-- }
|
-- }
|
||||||
workspaceFolders = {{
|
workspaceFolders = config.workspace_folders,
|
||||||
uri = vim.uri_from_fname(config.root_dir);
|
|
||||||
name = string.format("%s", config.root_dir);
|
|
||||||
}};
|
|
||||||
}
|
}
|
||||||
if config.before_init then
|
if config.before_init then
|
||||||
-- TODO(ashkan) handle errors here.
|
-- TODO(ashkan) handle errors here.
|
||||||
|
Reference in New Issue
Block a user