From 2232317b0a3d1ea880565f0023ce8813ebf02a12 Mon Sep 17 00:00:00 2001 From: ray-x Date: Mon, 21 Feb 2022 14:57:36 +1100 Subject: [PATCH] combine on_attach --- lua/navigator.lua | 3 ++- lua/navigator/lazyloader.lua | 26 +++++++++---------- lua/navigator/lspclient/clients.lua | 39 +++++++++++++++++++++-------- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/lua/navigator.lua b/lua/navigator.lua index 31d01b5..249c86d 100644 --- a/lua/navigator.lua +++ b/lua/navigator.lua @@ -224,7 +224,8 @@ M.setup = function(cfg) -- print("loading navigator") require('navigator.lazyloader').init() require('navigator.lspclient.clients').setup(_NgConfigValues) - require('navigator.lspclient.mapping').setup(_NgConfigValues) + -- keymaps should be added to on_attach. in case on_attach is not called + -- require('navigator.lspclient.mapping').setup(_NgConfigValues) require('navigator.reference') require('navigator.definition') require('navigator.hierarchy') diff --git a/lua/navigator/lazyloader.lua b/lua/navigator/lazyloader.lua index 55db12a..c72022f 100644 --- a/lua/navigator/lazyloader.lua +++ b/lua/navigator/lazyloader.lua @@ -2,43 +2,42 @@ return { init = function() local loader = nil local packer_plugins = packer_plugins or nil -- suppress warnings - local log = require'navigator.util'.log + local log = require('navigator.util').log -- packer only if packer_plugins ~= nil then -- packer install local lazy_plugins = { - ["nvim-lspconfig"] = "neovim/nvim-lspconfig", - ["guihua.lua"] = "ray-x/guihua.lua" + ['nvim-lspconfig'] = 'neovim/nvim-lspconfig', + ['guihua.lua'] = 'ray-x/guihua.lua', } if _NgConfigValues.lsp_installer == true then - lazy_plugins["nvim-lsp-installer"] = "williamboman/nvim-lsp-installer" + lazy_plugins['nvim-lsp-installer'] = 'williamboman/nvim-lsp-installer' end -- packer installed - loader = require"packer".loader + loader = require('packer').loader for plugin, url in pairs(lazy_plugins) do if not packer_plugins[url] or not packer_plugins[url].loaded then -- log("loading ", plugin) loader(plugin) end end - end if _NgConfigValues.lsp_installer == true then - local has_lspinst, lspinst = pcall(require, "lsp_installer") + local has_lspinst, lspinst = pcall(require, 'lsp_installer') log('lsp_installer installed', has_lspinst) if has_lspinst then lspinst.setup() - local configs = require "lspconfig/configs" - local servers = require'nvim-lsp-installer'.get_installed_servers() + local configs = require('lspconfig/configs') + local servers = require('nvim-lsp-installer').get_installed_servers() for _, server in pairs(servers) do - local cfg = require'navigator.lspclient.clients'.get_cfg(server) + local cfg = require('navigator.lspclient.clients').get_cfg(server) local lsp_inst_cfg = configs[server] if lsp_inst_cfg and lsp_inst_cfg.document_config.default_config then lsp_inst_cfg = lsp_inst_cfg.document_config.default_config lsp_inst_cfg = vim.tbl_deep_extend('keep', lsp_inst_cfg, cfg) - require'lspconfig'[server].setup(lsp_inst_cfg) + require('lspconfig')[server].setup(lsp_inst_cfg) end end end @@ -51,7 +50,7 @@ return { if packer_plugins ~= nil then -- packer install local lazy_plugins = {} lazy_plugins[plugin_name] = path - loader = require"packer".loader + loader = require('packer').loader for plugin, url in pairs(lazy_plugins) do if packer_plugins[plugin] and packer_plugins[plugin].loaded == false then -- log("loading ", plugin) @@ -59,6 +58,5 @@ return { end end end - - end + end, } diff --git a/lua/navigator/lspclient/clients.lua b/lua/navigator/lspclient/clients.lua index 859ca71..3dcee65 100644 --- a/lua/navigator/lspclient/clients.lua +++ b/lua/navigator/lspclient/clients.lua @@ -1,4 +1,3 @@ --- todo allow config passed in local util = require('navigator.util') local log = util.log local trace = util.trace @@ -415,7 +414,7 @@ local function update_capabilities() capabilities.textDocument.completion.completionItem.labelDetailsSupport = true capabilities.textDocument.completion.completionItem.deprecatedSupport = true capabilities.textDocument.completion.completionItem.commitCharactersSupport = true - capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } } + -- capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } } capabilities.textDocument.completion.completionItem.resolveSupport = { properties = { 'documentation', 'detail', 'additionalTextEdits' }, } @@ -506,7 +505,7 @@ local function lsp_startup(ft, retry, user_lsp_opts) disable_fmt = true end - local enable_fmt = not disable_fmt + local enable_fmt = not disable_fmt if user_lsp_opts[lspclient] ~= nil then -- log(lsp_opts[lspclient], cfg) cfg = vim.tbl_deep_extend('force', cfg, user_lsp_opts[lspclient]) @@ -523,11 +522,29 @@ local function lsp_startup(ft, retry, user_lsp_opts) cfg.on_attach = function(client, bufnr) config.on_attach(client, bufnr) client.resolved_capabilities.document_formatting = enable_fmt + require('navigator.lspclient.mapping').setup({ + client = client, + bufnr = bufnr, + cap = capabilities, + }) + end + end + if config.combined_attach == 'their' then + cfg.on_attach = function(client, bufnr) + on_attach(client, bufnr) + config.on_attach(client, bufnr) + client.resolved_capabilities.document_formatting = enable_fmt + require('navigator.lspclient.mapping').setup({ + client = client, + bufnr = bufnr, + cap = capabilities, + }) end end if config.combined_attach == 'both' then cfg.on_attach = function(client, bufnr) - if config.on_attach then + client.resolved_capabilities.document_formatting = enable_fmt + if config.on_attach and type(config.on_attach) == 'function' then config.on_attach(client, bufnr) end if setups[lspclient] and setups[lspclient].on_attach then @@ -535,7 +552,11 @@ local function lsp_startup(ft, retry, user_lsp_opts) else on_attach(client, bufnr) end - client.resolved_capabilities.document_formatting = enable_fmt + require('navigator.lspclient.mapping').setup({ + client = client, + bufnr = bufnr, + cap = capabilities, + }) end end cfg.on_init = function(client) @@ -548,11 +569,9 @@ local function lsp_startup(ft, retry, user_lsp_opts) end end else - if disable_fmt then - cfg.on_attach = function(client, bufnr) - on_attach(client, bufnr) - client.resolved_capabilities.document_formatting = enable_fmt - end + cfg.on_attach = function(client, bufnr) + on_attach(client, bufnr) + client.resolved_capabilities.document_formatting = enable_fmt end end