diff options
author | Lewis Russell <lewis6991@gmail.com> | 2024-11-01 16:31:51 +0000 |
---|---|---|
committer | Lewis Russell <me@lewisr.dev> | 2024-12-10 17:16:01 +0000 |
commit | 3f1d09bc94d02266d6fa588a2ccd1be1ca084cf7 (patch) | |
tree | f296c9607155bffe75ebaa23e20b19c36ecb87f1 /runtime/lua/vim/lsp/client.lua | |
parent | ca760e645ba4d1fdb0b6fff3ac98231c3d683306 (diff) | |
download | rneovim-3f1d09bc94d02266d6fa588a2ccd1be1ca084cf7.tar.gz rneovim-3f1d09bc94d02266d6fa588a2ccd1be1ca084cf7.tar.bz2 rneovim-3f1d09bc94d02266d6fa588a2ccd1be1ca084cf7.zip |
feat(lsp): add vim.lsp.config and vim.lsp.enable
Design goals/requirements:
- Default configuration of a server can be distributed across multiple sources.
- And via RTP discovery.
- Default configuration can be specified for all servers.
- Configuration _can_ be project specific.
Solution:
- Two new API's:
- `vim.lsp.config(name, cfg)`:
- Used to define default configurations for servers of name.
- Can be used like a table or called as a function.
- Use `vim.lsp.confg('*', cfg)` to specify default config for all
servers.
- `vim.lsp.enable(name)`
- Used to enable servers of name. Uses configuration defined
via `vim.lsp.config()`.
Diffstat (limited to 'runtime/lua/vim/lsp/client.lua')
-rw-r--r-- | runtime/lua/vim/lsp/client.lua | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/runtime/lua/vim/lsp/client.lua b/runtime/lua/vim/lsp/client.lua index 5eefe4600e..72043c18dd 100644 --- a/runtime/lua/vim/lsp/client.lua +++ b/runtime/lua/vim/lsp/client.lua @@ -359,16 +359,6 @@ local function get_name(id, config) return tostring(id) end ---- @generic T ---- @param x elem_or_list<T>? ---- @return T[] -local function ensure_list(x) - if type(x) == 'table' then - return x - end - return { x } -end - --- @nodoc --- @param config vim.lsp.ClientConfig --- @return vim.lsp.Client? @@ -395,13 +385,13 @@ function Client.create(config) settings = config.settings or {}, flags = config.flags or {}, get_language_id = config.get_language_id or default_get_language_id, - capabilities = config.capabilities or lsp.protocol.make_client_capabilities(), + capabilities = config.capabilities, workspace_folders = lsp._get_workspace_folders(config.workspace_folders or config.root_dir), root_dir = config.root_dir, _before_init_cb = config.before_init, - _on_init_cbs = ensure_list(config.on_init), - _on_exit_cbs = ensure_list(config.on_exit), - _on_attach_cbs = ensure_list(config.on_attach), + _on_init_cbs = vim._ensure_list(config.on_init), + _on_exit_cbs = vim._ensure_list(config.on_exit), + _on_attach_cbs = vim._ensure_list(config.on_attach), _on_error_cb = config.on_error, _trace = get_trace(config.trace), @@ -417,6 +407,9 @@ function Client.create(config) messages = { name = name, messages = {}, progress = {}, status = {} }, } + self.capabilities = + vim.tbl_deep_extend('force', lsp.protocol.make_client_capabilities(), self.capabilities or {}) + --- @class lsp.DynamicCapabilities --- @nodoc self.dynamic_capabilities = { |