feat(lsp): support function for client root_dir (#31630)

If root_dir is a function it is evaluated when the client is created to
determine the root directory.

This enables dynamically determining the root directory based on e.g.
project or directory structure (example: finding a parent Cargo.toml
file that contains "[workspace]" in a Rust project).
This commit is contained in:
Gregory Anders
2024-12-27 10:09:22 -06:00
committed by GitHub
parent 6d2c67350a
commit 35247b00a4
3 changed files with 62 additions and 5 deletions

View File

@@ -683,6 +683,13 @@ Lua module: vim.lsp *lsp-core*
the LSP server will base its workspaceFolders,
rootUri, and rootPath on initialization. Unused if
`root_dir` is provided.
• {root_dir}? (`string|fun(cb:fun(string))`) Directory where the
LSP server will base its workspaceFolders, rootUri,
and rootPath on initialization. If a function, it
accepts a single callback argument which must be
called with the value of root_dir to use. The LSP
server will not be started until the callback is
called.
• {reuse_client}? (`fun(client: vim.lsp.Client, config: vim.lsp.ClientConfig): boolean`)
Predicate used to decide if a client should be
re-used. Used on all running clients. The default