diff options
-rw-r--r-- | runtime/doc/lsp.txt | 9 | ||||
-rw-r--r-- | runtime/lua/vim/lsp.lua | 11 | ||||
-rw-r--r-- | test/functional/plugin/lsp_spec.lua | 3 |
3 files changed, 13 insertions, 10 deletions
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt index 4c3fdcee6a..fd0df42fe4 100644 --- a/runtime/doc/lsp.txt +++ b/runtime/doc/lsp.txt @@ -678,10 +678,11 @@ 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 + • {root_dir}? (`string|fun(bufnr: integer, cb:fun(root_dir?:string))`) + Directory where the LSP server will base its + workspaceFolders, rootUri, and rootPath on + initialization. If a function, it is passed the + buffer number and a 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. diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua index 83624234bc..91f2895f04 100644 --- a/runtime/lua/vim/lsp.lua +++ b/runtime/lua/vim/lsp.lua @@ -285,10 +285,11 @@ end --- rootUri, and rootPath on initialization. Unused if `root_dir` is provided. --- @field root_markers? 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. ---- @field 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 is passed the buffer number +--- and a 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. +--- @field root_dir? string|fun(bufnr: integer, cb:fun(root_dir?:string)) --- --- Predicate used to decide if a client should be re-used. Used on all --- running clients. The default implementation re-uses a client if name and @@ -462,7 +463,7 @@ local function lsp_enable_callback(bufnr) if type(config.root_dir) == 'function' then ---@param root_dir string - config.root_dir(function(root_dir) + config.root_dir(bufnr, function(root_dir) config.root_dir = root_dir vim.schedule(function() start(config) diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index 22c9e4658f..f402ac7e8c 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -6348,7 +6348,8 @@ describe('LSP', function() vim.lsp.config('foo', { cmd = server.cmd, filetypes = { 'foo' }, - root_dir = function(cb) + root_dir = function(bufnr, cb) + assert(tmp1 == vim.api.nvim_buf_get_name(bufnr)) vim.system({ 'sleep', '0' }, {}, function() cb('some_dir') end) |