diff options
Diffstat (limited to 'lua/lvim/lsp')
| -rw-r--r-- | lua/lvim/lsp/config.lua | 5 | ||||
| -rw-r--r-- | lua/lvim/lsp/manager.lua | 43 | ||||
| -rw-r--r-- | lua/lvim/lsp/utils.lua | 17 | 
3 files changed, 42 insertions, 23 deletions
| diff --git a/lua/lvim/lsp/config.lua b/lua/lvim/lsp/config.lua index 2d9104ea..ccc524ee 100644 --- a/lua/lvim/lsp/config.lua +++ b/lua/lvim/lsp/config.lua @@ -46,15 +46,20 @@ return {      "ansiblels",      "denols",      "ember", +    "emmet_ls",      "eslint",      "eslintls", +    "graphql",      "jedi_language_server", +    "ltex", +    "phpactor",      "pylsp",      "rome",      "sqlls",      "sqls",      "stylelint_lsp",      "tailwindcss", +    "tflint",      "volar",    },  } diff --git a/lua/lvim/lsp/manager.lua b/lua/lvim/lsp/manager.lua index a8544803..dbb7b87f 100644 --- a/lua/lvim/lsp/manager.lua +++ b/lua/lvim/lsp/manager.lua @@ -39,6 +39,12 @@ local function resolve_config(name, user_config)    return config  end +-- manually start the server and don't wait for the usual filetype trigger from lspconfig +local function buf_try_add(server_name, bufnr) +  bufnr = bufnr or vim.api.nvim_get_current_buf() +  require("lspconfig")[server_name].manager.try_add_wrapper(bufnr) +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 @@ -48,32 +54,37 @@ function M.setup(server_name, user_config)    if lvim_lsp_utils.is_client_active(server_name) then      return    end +  local servers = require "nvim-lsp-installer.servers"    local config = resolve_config(server_name, user_config) -  local server_available, requested_server = require("nvim-lsp-installer.servers").get_server(server_name) +  local server_available, requested_server = servers.get_server(server_name) -  local function ensure_installed(server) -    if server:is_installed() then -      return true -    end -    if not lvim.lsp.automatic_servers_installation then -      Log:debug(server.name .. " is not managed by the automatic installer") -      return false +  if server_available then +    local install_notification = false + +    if not requested_server:is_installed() then +      if lvim.lsp.automatic_servers_installation then +        Log:debug "Automatic server installation detected" +        requested_server:install() +        install_notification = true +      else +        Log:debug(requested_server.name .. " is not managed by the automatic installer") +      end      end -    Log:debug(string.format("Installing [%s]", server.name)) -    server:install() -    vim.schedule(function() -      vim.cmd [[LspStart]] -    end) -  end -  if server_available and ensure_installed(requested_server) then -    requested_server:setup(config) +    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) +      end +      install_notification = false +      requested_server:setup(config) +    end)    else      -- since it may not be installed, don't attempt to configure the LSP unless there is a custom provider      local has_custom_provider, _ = pcall(require, "lvim/lsp/providers/" .. server_name)      if has_custom_provider then        require("lspconfig")[server_name].setup(config) +      buf_try_add(server_name)      end    end  end diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua index a34fbf44..7cc8f54f 100644 --- a/lua/lvim/lsp/utils.lua +++ b/lua/lvim/lsp/utils.lua @@ -49,14 +49,17 @@ function M.get_client_capabilities(client_id)  end  function M.get_supported_filetypes(server_name) -  -- print("got filetypes query request for: " .. server_name) -  local configs = require "lspconfig/configs" -  pcall(require, ("lspconfig/" .. server_name)) -  for _, config in pairs(configs) do -    if config.name == server_name then -      return config.document_config.default_config.filetypes or {} -    end +  -- temporary workaround: https://github.com/neovim/nvim-lspconfig/pull/1358 +  if server_name == "dockerls" then +    return { "dockerfile" } +  end +  local lsp_installer_servers = require "nvim-lsp-installer.servers" +  local server_available, requested_server = lsp_installer_servers.get_server(server_name) +  if not server_available then +    return {}    end + +  return requested_server:get_supported_filetypes()  end  return M | 
