diff options
author | Lewis Russell <lewis6991@gmail.com> | 2024-04-02 11:56:29 +0100 |
---|---|---|
committer | Lewis Russell <me@lewisr.dev> | 2024-04-02 16:47:17 +0100 |
commit | d9235efa76229708586d3c9db3dcbac46127ca0a (patch) | |
tree | 64a527f38bcf91edbcb0c738fed5b375984437b9 /runtime/lua/vim/lsp/client.lua | |
parent | ffe3002568f849df1b155b90d6ea0e1f48d8c6d5 (diff) | |
download | rneovim-d9235efa76229708586d3c9db3dcbac46127ca0a.tar.gz rneovim-d9235efa76229708586d3c9db3dcbac46127ca0a.tar.bz2 rneovim-d9235efa76229708586d3c9db3dcbac46127ca0a.zip |
refactor(lsp): move workspace folder logic into the client
- Changed `reuse_client` to check workspace folders in addition to
root_dir.
Diffstat (limited to 'runtime/lua/vim/lsp/client.lua')
-rw-r--r-- | runtime/lua/vim/lsp/client.lua | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/runtime/lua/vim/lsp/client.lua b/runtime/lua/vim/lsp/client.lua index 303fc55982..f73f97b8cd 100644 --- a/runtime/lua/vim/lsp/client.lua +++ b/runtime/lua/vim/lsp/client.lua @@ -420,7 +420,7 @@ local function get_workspace_folders(workspace_folders, root_dir) return { { uri = vim.uri_from_fname(root_dir), - name = string.format('%s', root_dir), + name = root_dir, }, } end @@ -1065,4 +1065,45 @@ function Client:_on_exit(code, signal) ) end +--- @package +--- Add a directory to the workspace folders. +--- @param dir string? +function Client:_add_workspace_folder(dir) + for _, folder in pairs(self.workspace_folders or {}) do + if folder.name == dir then + print(dir, 'is already part of this workspace') + return + end + end + + local wf = assert(get_workspace_folders(nil, dir)) + + self:_notify(ms.workspace_didChangeWorkspaceFolders, { + event = { added = wf, removed = {} }, + }) + + if not self.workspace_folders then + self.workspace_folders = {} + end + vim.list_extend(self.workspace_folders, wf) +end + +--- @package +--- Remove a directory to the workspace folders. +--- @param dir string? +function Client:_remove_workspace_folder(dir) + local wf = assert(get_workspace_folders(nil, dir)) + + self:_notify(ms.workspace_didChangeWorkspaceFolders, { + event = { added = {}, removed = wf }, + }) + + for idx, folder in pairs(self.workspace_folders) do + if folder.name == dir then + table.remove(self.workspace_folders, idx) + break + end + end +end + return Client |