From a365bcb6b553b1269f9a55985ce0b93099f83dc2 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Sat, 25 May 2024 13:14:05 +0100 Subject: [PATCH] Don't repeat yourself in custom lspconfigs --- lua/plugins/completions.lua | 77 ++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/lua/plugins/completions.lua b/lua/plugins/completions.lua index 6106c04..adf0cac 100644 --- a/lua/plugins/completions.lua +++ b/lua/plugins/completions.lua @@ -72,57 +72,48 @@ return { }, config = function() - local capabilities = vim.lsp.protocol.make_client_capabilities() - capabilities = vim.tbl_deep_extend( - 'force', capabilities, require('cmp_nvim_lsp').default_capabilities()) + local lspconfig_default_opts = { + -- Broadcast full client capabilities to language servers + capabilities = vim.tbl_deep_extend( + 'force', vim.lsp.protocol.make_client_capabilities(), + require('cmp_nvim_lsp').default_capabilities()), + } + + local lspconfig_custom_opts = { + clangd = { + cmd = { 'clangd', '--completion-style=detailed' }, + }, + + lua_ls = { + settings = { + Lua = { + diagnostics = { + disable = { 'missing-fields', }, + globals = { 'vim', }, + }, + }, + }, + }, + + pyright = { + settings = { + pyright = { + disableOrganizeImports = true, + }, + }, + }, + } require('mason').setup() require('mason-lspconfig').setup({ automatic_installation = false, ensure_installed = ensure_installed, - handlers = { - -- Default handler, sets up everything unless a custom language server - -- setup handler is defined below function(server_name) - require('lspconfig')[server_name].setup({ - capabilities = capabilities, - }) + local opts = vim.tbl_deep_extend("force", + lspconfig_default_opts, lspconfig_custom_opts[server_name] or {}) + require('lspconfig')[server_name].setup(opts) end, - - ['clangd'] = function() - require('lspconfig').clangd.setup({ - capabilities = capabilities, - cmd = { 'clangd', '--completion-style=detailed' } - }) - end, - - ['lua_ls'] = function() - require('neodev').setup() - require('lspconfig').lua_ls.setup({ - capabilities = capabilities, - settings = { - Lua = { - diagnostics = { - disable = { 'missing-fields', }, - globals = { 'vim', }, - } - } - } - }) - end, - - ['pyright'] = function() - require('lspconfig').pyright.setup({ - capabilities = capabilities, - settings = { - pyright = { - disableOrganizeImports = true, -- Use ruff import sorter instead - }, - } - }) - end, - }, })