From 11d25933ad84a3b5ccc3e43d99c8afa0631a71ef Mon Sep 17 00:00:00 2001 From: ray-x Date: Fri, 18 Feb 2022 13:30:02 +1100 Subject: [PATCH 1/6] move capabilities checn around --- lua/navigator/lspclient/clients.lua | 52 +++++++++++++++++------------ 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/lua/navigator/lspclient/clients.lua b/lua/navigator/lspclient/clients.lua index 1dad255..bde9b8c 100644 --- a/lua/navigator/lspclient/clients.lua +++ b/lua/navigator/lspclient/clients.lua @@ -407,12 +407,8 @@ local function load_cfg(ft, client, cfg, loaded) -- need to verify the lsp server is up end --- run setup for lsp clients -local function lsp_startup(ft, retry, user_lsp_opts) - retry = retry or false - local clients = vim.lsp.get_active_clients() or {} +local function update_capabilities() - local loaded = {} local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true capabilities.textDocument.completion.completionItem.preselectSupport = true @@ -425,6 +421,17 @@ local function lsp_startup(ft, retry, user_lsp_opts) properties = { 'documentation', 'detail', 'additionalTextEdits' }, } capabilities.workspace.configuration = true + return capabilities + +end + +-- run setup for lsp clients +local function lsp_startup(ft, retry, user_lsp_opts) + retry = retry or false + local clients = vim.lsp.get_active_clients() or {} + + local loaded = {} + local capabilities = update_capabilities() for _, client in ipairs(clients) do if client ~= nil then @@ -490,24 +497,24 @@ local function lsp_startup(ft, retry, user_lsp_opts) goto continue end + local disable_fmt = false + -- if user provides override values cfg.capabilities = capabilities + log(lspclient, config.lsp.disable_format_cap) + if vim.tbl_contains(config.lsp.disable_format_cap or {}, lspclient) then + log('fileformat disabled for ', lspclient) + disable_fmt = true + end + + local enable_fmt = not disable_fmt if user_lsp_opts[lspclient] ~= nil then -- log(lsp_opts[lspclient], cfg) - local disable_fmt = false - - log(lspclient, config.lsp.disable_format_cap) - if vim.tbl_contains(config.lsp.disable_format_cap or {}, lspclient) then - log('fileformat disabled for ', lspclient) - disable_fmt = true - end cfg = vim.tbl_deep_extend('force', cfg, user_lsp_opts[lspclient]) if config.combined_attach == nil then cfg.on_attach = function(client, bufnr) on_attach(client, bufnr) - if disable_fmt then - client.resolved_capabilities.document_formatting = false - end + client.resolved_capabilities.document_formatting = enable_fmt end end if config.combined_attach == 'mine' then @@ -516,9 +523,7 @@ local function lsp_startup(ft, retry, user_lsp_opts) end cfg.on_attach = function(client, bufnr) config.on_attach(client, bufnr) - if disable_fmt then - client.resolved_capabilities.document_formatting = false - end + client.resolved_capabilities.document_formatting = enable_fmt end end if config.combined_attach == 'both' then @@ -531,9 +536,7 @@ local function lsp_startup(ft, retry, user_lsp_opts) else on_attach(client, bufnr) end - if disable_fmt then - client.resolved_capabilities.document_formatting = false - end + client.resolved_capabilities.document_formatting = enable_fmt end end cfg.on_init = function(client) @@ -545,6 +548,13 @@ 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 + end end log('loading', lspclient, 'name', lspconfig[lspclient].name, 'has lspinst', has_lspinst) From bf2e867354aeaa09eeaf80b65e86022e7c3be144 Mon Sep 17 00:00:00 2001 From: ray-x Date: Sat, 19 Feb 2022 10:51:27 +1100 Subject: [PATCH 2/6] lint --- lua/navigator/lspclient/clients.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lua/navigator/lspclient/clients.lua b/lua/navigator/lspclient/clients.lua index bde9b8c..859ca71 100644 --- a/lua/navigator/lspclient/clients.lua +++ b/lua/navigator/lspclient/clients.lua @@ -8,7 +8,6 @@ local warn = util.warn _NG_Loaded = {} _LoadedFiletypes = {} -local loader = nil packer_plugins = packer_plugins or nil -- suppress warnings -- packer only @@ -724,12 +723,12 @@ local function setup(user_opts) end -- append lsps to servers -function add_servers(lsps) +local function add_servers(lsps) vim.validate({ lsps = { lsps, 't' } }) vim.list_extend(servers, lsps) end -function on_filetype() +local function on_filetype() local bufnr = vim.api.nvim_get_current_buf() local uri = vim.uri_from_bufnr(bufnr) From 76e0c8d3ffde49d40467ee89e65decedb10268a5 Mon Sep 17 00:00:00 2001 From: ray-x Date: Sat, 19 Feb 2022 11:00:53 +1100 Subject: [PATCH 3/6] update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 40ba90f..982fff3 100644 --- a/README.md +++ b/README.md @@ -348,14 +348,14 @@ together. If you have multiple similar LSP installed and have trouble with the p Above servers covered a small part neovim lspconfig support, You can still use lspconfig to add and config servers not in the list. If you would like to add a server not in the list, you can check this PR https://github.com/ray-x/navigator.lua/pull/107 -Also, an option in setup: +Alternatively, update following option in setup(if you do not want a PR): ```lua require'navigator'setup{lsp={servers={'cmake', 'lexls'}}} ``` -Above example add cmake and lexls to the default server list +Above option add cmake and lexls to the default server list ### Disable a lsp client loading from navigator From 92f56ffe4b392c9e1c21d47bff01a0198dacae7f Mon Sep 17 00:00:00 2001 From: ray-x Date: Sat, 19 Feb 2022 14:54:24 +1100 Subject: [PATCH 4/6] update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 982fff3..b139752 100644 --- a/README.md +++ b/README.md @@ -758,3 +758,5 @@ end - Check console output - Check `LspInfo` and treesitter status with `checkhealth` - Turn on log and attach the log to your issue if possible you can remove any personal/company info in the log +- Submit Issue with minium vimrc. Please check playground/init.lua as a vimrc template. !!!Please DONOT use a packer vimrc +that installs everything to default folder!!! Also check this repo [navigator bug report](https://github.com/fky2015/navigator.nvim-bug-report) From ff57a1f916313fb07ac7ada0b3ba5784ad1ab390 Mon Sep 17 00:00:00 2001 From: ray-x Date: Mon, 21 Feb 2022 11:42:24 +1100 Subject: [PATCH 5/6] force keymap to be loaded when on_attach is not called it may releated to #130 --- lua/navigator.lua | 4 ++-- lua/navigator/lspclient/mapping.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/navigator.lua b/lua/navigator.lua index 380b659..31d01b5 100644 --- a/lua/navigator.lua +++ b/lua/navigator.lua @@ -33,7 +33,7 @@ _NgConfigValues = { transparency = 50, -- 0 ~ 100 blur the main window, 100: fully transparent, 0: opaque, set to nil to disable it lsp_signature_help = true, -- if you would like to hook ray-x/lsp_signature plugin in navigator -- setup here. if it is nil, navigator will not init signature help - signature_help_cfg = {debug=false}, -- if you would like to init ray-x/lsp_signature plugin in navigator, pass in signature help + signature_help_cfg = { debug = false }, -- if you would like to init ray-x/lsp_signature plugin in navigator, pass in signature help lsp = { code_action = { enable = true, @@ -224,7 +224,7 @@ M.setup = function(cfg) -- print("loading navigator") require('navigator.lazyloader').init() require('navigator.lspclient.clients').setup(_NgConfigValues) - -- require("navigator.lspclient.mapping").setup(_NgConfigValues) + require('navigator.lspclient.mapping').setup(_NgConfigValues) require('navigator.reference') require('navigator.definition') require('navigator.hierarchy') diff --git a/lua/navigator/lspclient/mapping.lua b/lua/navigator/lspclient/mapping.lua index 61190c3..7378c5c 100644 --- a/lua/navigator/lspclient/mapping.lua +++ b/lua/navigator/lspclient/mapping.lua @@ -172,7 +172,7 @@ local function set_mapping(user_opts) elseif fmtkey then del_keymap('n', fmtkey) end - if user_opts.cap.document_range_formatting then + if user_opts.cap and user_opts.cap.document_range_formatting then log('formatting enabled', user_opts.cap) end From 2232317b0a3d1ea880565f0023ce8813ebf02a12 Mon Sep 17 00:00:00 2001 From: ray-x Date: Mon, 21 Feb 2022 14:57:36 +1100 Subject: [PATCH 6/6] 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