diff options
| author | jdrouhard <john@jmdtech.org> | 2022-05-04 10:26:54 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-04 08:26:54 -0700 |
| commit | b6d9e427c9fafca5b84a1f429bef4df3ef63244b (patch) | |
| tree | 36a777d24f061f87801bcb4e5ebc0cfc3b57fd66 /lua/lspconfig/util.lua | |
| parent | docs: update server_configurations.md (diff) | |
| download | nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.tar nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.tar.gz nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.tar.bz2 nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.tar.lz nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.tar.xz nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.tar.zst nvim-lspconfig-b6d9e427c9fafca5b84a1f429bef4df3ef63244b.zip | |
feat(configs): use client capabilities by default, deep-extend user-provided capabilities #1889
Previously, vim.lsp.protocol.make_client_capabilities() was used if no
capabilities were specified in either the user-provided config or the
default config (base or server).
Now, the base default config table has a capabilities key with the value
of make_client_capabilities(). When creating the finalized configuration
for a server, it simply uses the finalized config which is the
user-provided config deep extended by the default config (which now
contains the default capabilities).
This means that users will no longer have to create their own customized
capabilities tables seeded from
vim.lsp.protocol.make_client_capabilities(). They simply need to create
the parts that are new or different from the defaults and pass that as
the capabilities. The rest of the defaults are filled in automatically.
For this to work properly, some tbl_extend calls were changed to
tbl_deep_extend. tbl_extend will not recursively update nested tables,
so using it wipes out any server provided defaults in nested config keys
(such as capabilities) and won't properly fill in the "rest" of the
capabilities if the user provided a smaller capabilities key in their
config.
Changing to tbl_deep_extend ensures server-specific configuration values
are preserved and that the finalized config at least contains defaults
for all client-supported capabilities.
For example, clangd's config default has:
```
local default_capabilities = {
textDocument = {
completion = {
editsNearCursor = true,
},
},
offsetEncoding = { 'utf-8', 'utf-16' },
}
```
Prior to this commit, this was the full
vim.lsp.protocol.make_client_capabilities() extended with those extra
values. However, if a user provided their _own_ capabilities to the
setup() function, tbl_extend wiped these extra values out and replaced
it with the users' capabilities, which was likely only
vim.lsp.protocol.make_client_capabilities() with some _other_ tweaks.
Now, clangd can simply provide the extras, and the setup() function will
normalize the config with all of user-provided, server-specific, and
base default capabilities.
Diffstat (limited to 'lua/lspconfig/util.lua')
| -rw-r--r-- | lua/lspconfig/util.lua | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/lua/lspconfig/util.lua b/lua/lspconfig/util.lua index 3febafc0..dec80d95 100644 --- a/lua/lspconfig/util.lua +++ b/lua/lspconfig/util.lua @@ -14,6 +14,7 @@ M.default_config = { init_options = vim.empty_dict(), handlers = {}, autostart = true, + capabilities = lsp.protocol.make_client_capabilities(), } -- global on_setup hook |
