diff options
author | kylo252 <[email protected]> | 2022-04-28 14:38:32 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2022-04-28 14:38:32 +0200 |
commit | dd65e285656a5c46c52144f4e082c8e2d1d95757 (patch) | |
tree | 1e8d78e16183f44df92a2fa967d9778aea4f0484 /lua/lvim/lsp/manager.lua | |
parent | 3de829e76ed3d90b25250b1ab76f6425146af9d2 (diff) |
refactor(lsp): decouple the installer setup-hook (#2536)
* chore(lsp): update plugins
* refactor(lsp): decouple the installer setup-hook
- remove the deprecated `server:setup()`
- set up the server manually with lspconfig once `server:on_ready()`
has been triggered
* chore: use the new lsp_installer.setup()
Diffstat (limited to 'lua/lvim/lsp/manager.lua')
-rw-r--r-- | lua/lvim/lsp/manager.lua | 63 |
1 files changed, 33 insertions, 30 deletions
diff --git a/lua/lvim/lsp/manager.lua b/lua/lvim/lsp/manager.lua index 09369d48..2f24298d 100644 --- a/lua/lvim/lsp/manager.lua +++ b/lua/lvim/lsp/manager.lua @@ -16,29 +16,27 @@ function M.init_defaults(languages) end end ----Resolve the configuration for a server based on both common and user configuration ----@param name string ----@param user_config table [optional] +---Resolve the configuration for a server by merging with the default config +---@param server_name string +---@vararg any config table [optional] ---@return table -local function resolve_config(name, user_config) - local config = { +local function resolve_config(server_name, ...) + local defaults = { on_attach = require("lvim.lsp").common_on_attach, on_init = require("lvim.lsp").common_on_init, on_exit = require("lvim.lsp").common_on_exit, capabilities = require("lvim.lsp").common_capabilities(), } - local has_custom_provider, custom_config = pcall(require, "lvim/lsp/providers/" .. name) + local has_custom_provider, custom_config = pcall(require, "lvim/lsp/providers/" .. server_name) if has_custom_provider then - Log:debug("Using custom configuration for requested server: " .. name) - config = vim.tbl_deep_extend("force", config, custom_config) + Log:debug("Using custom configuration for requested server: " .. server_name) + defaults = vim.tbl_deep_extend("force", defaults, custom_config) end - if user_config then - config = vim.tbl_deep_extend("force", config, user_config) - end + defaults = vim.tbl_deep_extend("force", defaults, ...) - return config + return defaults end -- manually start the server and don't wait for the usual filetype trigger from lspconfig @@ -62,47 +60,52 @@ local function client_is_configured(server_name, ft) return false end +local function launch_server(server_name, config) + pcall(function() + require("lspconfig")[server_name].setup(config) + buf_try_add(server_name) + end) +end + ---Setup a language server by providing a name ---@param server_name string name of the language server ----@param user_config table [optional] when available it will take predence over any default configurations +---@param user_config table? when available it will take predence over any default configurations function M.setup(server_name, user_config) vim.validate { name = { server_name, "string" } } + user_config = user_config or {} if lvim_lsp_utils.is_client_active(server_name) or client_is_configured(server_name) then return end - local config = resolve_config(server_name, user_config) - local servers = require "nvim-lsp-installer.servers" - local server_available, requested_server = servers.get_server(server_name) + local server_available, server = servers.get_server(server_name) if not server_available then - pcall(function() - require("lspconfig")[server_name].setup(config) - buf_try_add(server_name) - end) + local config = resolve_config(server_name, user_config) + launch_server(server_name, config) return end - local install_notification = false + local install_in_progress = false - if not requested_server:is_installed() then + if not server:is_installed() then if lvim.lsp.automatic_servers_installation then Log:debug "Automatic server installation detected" - requested_server:install() - install_notification = true + server:install() + install_in_progress = true else - Log:debug(requested_server.name .. " is not managed by the automatic installer") + Log:debug(server.name .. " is not managed by the automatic installer") end end - requested_server:on_ready(function() - if install_notification then - vim.notify(string.format("Installation complete for [%s] server", requested_server.name), vim.log.levels.INFO) + server:on_ready(function() + if install_in_progress then + vim.notify(string.format("Installation complete for [%s] server", server.name), vim.log.levels.INFO) end - install_notification = false - requested_server:setup(config) + install_in_progress = false + local config = resolve_config(server_name, server:get_default_options(), user_config) + launch_server(server_name, config) end) end |