diff --git a/lua/navigator/lspclient/clients.lua b/lua/navigator/lspclient/clients.lua index 2e87cb5..6ccb487 100644 --- a/lua/navigator/lspclient/clients.lua +++ b/lua/navigator/lspclient/clients.lua @@ -115,17 +115,17 @@ local setups = { elixirls = { on_attach = on_attach, - filetypes = { 'elixir', 'eelixir'}, - cmd = {'elixir-ls'}, + filetypes = { 'elixir', 'eelixir' }, + cmd = { 'elixir-ls' }, message_level = vim.lsp.protocol.MessageType.error, settings = { elixirLS = { - dialyzerEnabled = true, fetchDeps = false - } + dialyzerEnabled = true, + fetchDeps = false, + }, }, root_dir = function(fname) - return util.root_pattern('mix.exs', '.git')(fname) - or util.path.dirname(fname) + return util.root_pattern('mix.exs', '.git')(fname) or util.path.dirname(fname) end, }, @@ -294,13 +294,13 @@ local setups = { cmd = { 'omnisharp', '--languageserver', '--hostPID', tostring(vim.fn.getpid()) }, }, terraformls = { - filetypes = { 'terraform', 'tf'}, + filetypes = { 'terraform', 'tf' }, }, sourcekit = { - cmd = { 'sourcekit-lsp' }, - filetypes = { 'swift' } -- This is recommended if you have separate settings for clangd. - } + cmd = { 'sourcekit-lsp' }, + filetypes = { 'swift' }, -- This is recommended if you have separate settings for clangd. + }, } setups.sumneko_lua = vim.tbl_deep_extend('force', luadev, setups.sumneko_lua) @@ -347,7 +347,7 @@ local servers = { 'sourcekit', 'fsautocomplete', 'vls', - 'hls' + 'hls', } local lsp_installer_servers = {} @@ -439,7 +439,6 @@ local function load_cfg(ft, client, cfg, loaded) end local function update_capabilities() - trace(ft, 'lsp startup') local loaded = {} local capabilities = vim.lsp.protocol.make_client_capabilities() @@ -455,7 +454,6 @@ local function update_capabilities() } capabilities.workspace.configuration = true return capabilities - end -- run setup for lsp clients @@ -511,6 +509,7 @@ local function lsp_startup(ft, retry, user_lsp_opts) 'lspclient' .. vim.inspect(lspclient) .. 'no longer support by lspconfig, please submit an issue', vim.lsp.log_levels.WARN ) + log('lspclient', lspclient, 'not supported') goto continue end @@ -616,7 +615,7 @@ local function lsp_startup(ft, retry, user_lsp_opts) if has_lspinst and _NgConfigValues.lsp_installer then local installed, installer_cfg = require('nvim-lsp-installer.servers').get_server(lspconfig[lspclient].name) - log('lsp installer server config' .. lspconfig[lspclient].name , installer_cfg) + log('lsp installer server config' .. lspconfig[lspclient].name, installer_cfg) if installed and installer_cfg then log('options', installer_cfg:get_default_options()) -- if cfg.cmd / {lsp_server_name, arg} not present or lsp_server_name is not in PATH @@ -676,6 +675,12 @@ local function lsp_startup(ft, retry, user_lsp_opts) end end +-- append lsps to servers +local function add_servers(lsps) + vim.validate({ lsps = { lsps, 't' } }) + vim.list_extend(servers, lsps) +end + local function get_cfg(client) local ng_cfg = ng_default_cfg if setups[client] ~= nil then @@ -696,11 +701,13 @@ local function setup(user_opts) local ext = vim.fn.expand('%:e') if ext ~= '' then local opts = vim.deepcopy(user_opts) - return vim.defer_fn(function() + vim.defer_fn(function() + log('defer_fn', ext, ft) setup(opts) end, 200) + return else - log("no filetype, no ext return") + log('no filetype, no ext return') end end local uri = vim.uri_from_bufnr(bufnr) @@ -709,8 +716,8 @@ local function setup(user_opts) log('skip loading for ft ', ft, uri) return end - if _LoadedFiletypes[ft .. tostring(bufnr)] then - log('navigator was loaded for ft', ft) + if _LoadedFiletypes[ft .. tostring(bufnr)] == true then + log('navigator was loaded for ft', ft, bufnr) return end local disable_ft = { @@ -735,20 +742,23 @@ local function setup(user_opts) return end end + if _NgConfigValues.lsp.servers then + add_servers(_NgConfigValues.lsp.servers) + _NgConfigValues.lsp.servers = nil + end trace(debug.traceback()) local clients = vim.lsp.buf_get_clients(bufnr) for key, client in pairs(clients) do - if client.name ~= "null_ls" and client.name ~= "efm" then + if client.name ~= 'null_ls' and client.name ~= 'efm' then if vim.tbl_contains(client.filetypes or {}, vim.o.ft) then log('client already loaded', client.name) end end end - _LoadedFiletypes[ft..tostring(bufnr)] = true - user_opts = vim.tbl_extend("keep", user_opts, config) -- incase setup was triggered from autocmd + user_opts = vim.tbl_extend('keep', user_opts, config) -- incase setup was triggered from autocmd log(user_opts) local retry = true @@ -780,12 +790,7 @@ local function setup(user_opts) require('navigator.codelens').setup() end -end - --- append lsps to servers -local function add_servers(lsps) - vim.validate({ lsps = { lsps, 't' } }) - vim.list_extend(servers, lsps) + -- _LoadedFiletypes[ft .. tostring(bufnr)] = true end local function on_filetype() @@ -807,7 +812,7 @@ local function on_filetype() if empty(wids) then log('buf not shown return') end - setup({bufnr=bufnr}) + setup({ bufnr = bufnr }) end return { setup = setup, get_cfg = get_cfg, lsp = servers, add_servers = add_servers, on_filetype = on_filetype }