From 9d89929d9bb47d1f78c2d3945b761da2f24a5643 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Sat, 31 Jul 2021 06:06:08 +0200 Subject: Enable querying lang-server formatting capabilities (#1078) --- lua/lsp/init.lua | 98 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 61 insertions(+), 37 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 62c42fd8..67007e81 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -1,55 +1,79 @@ -local utils = require "utils" -local service = require "lsp.service" -local null_ls = require "lsp.null-ls" local M = {} - +local u = require "utils" function M.config() require("lsp.kind").setup() require("lsp.handlers").setup() require("lsp.signs").setup() - require("lsp.keybinds").setup() end -function M.setup(lang) - local lang_server = lvim.lang[lang].lsp - local provider = lang_server.provider - if utils.check_lsp_client_active(provider) then - return +local function lsp_highlight_document(client) + if lvim.lsp.document_highlight == false then + return -- we don't need further + end + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec( + [[ + hi LspReferenceRead cterm=bold ctermbg=red guibg=#464646 + hi LspReferenceText cterm=bold ctermbg=red guibg=#464646 + hi LspReferenceWrite cterm=bold ctermbg=red guibg=#464646 + augroup lsp_document_highlight + autocmd! * + autocmd CursorHold lua vim.lsp.buf.document_highlight() + autocmd CursorMoved lua vim.lsp.buf.clear_references() + augroup END + ]], + false + ) end +end - local overrides = lvim.lsp.override +local function formatter_handler(client) + local buffer_filetype = vim.bo.filetype + local ext_provider = lvim.lang[buffer_filetype].formatter.exe - if utils.is_table(overrides) then - if utils.has_value(overrides, lang) then - return - end + if ext_provider then + client.resolved_capabilities.document_formatting = false + u.lvim_log( + string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, ext_provider) + ) end +end - if utils.is_string(overrides) then - if overrides == lang then - return - end +function M.common_capabilities() + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities.textDocument.completion.completionItem.snippetSupport = true + capabilities.textDocument.completion.completionItem.resolveSupport = { + properties = { + "documentation", + "detail", + "additionalTextEdits", + }, + } + return capabilities +end + +function M.common_on_init(client, bufnr) + if lvim.lsp.on_init_callback then + lvim.lsp.on_init_callback(client, bufnr) + return end - local sources = null_ls.setup(lang) - - for _, source in pairs(sources) do - local method = source.method - local format_method = "NULL_LS_FORMATTING" - - if utils.is_table(method) then - if utils.has_value(method, format_method) then - lang_server.setup.on_attach = service.no_formatter_on_attach - end - end - - if utils.is_string(method) then - if method == format_method then - lang_server.setup.on_attach = service.no_formatter_on_attach - end - end + formatter_handler(client) +end + +function M.common_on_attach(client, bufnr) + if lvim.lsp.on_attach_callback then + lvim.lsp.on_attach_callback(client, bufnr) end + lsp_highlight_document(client) + require("lsp.keybinds").setup() + require("lsp.null-ls").setup(vim.bo.filetype) +end - if provider == "" or provider == nil then +function M.setup(lang) + local lang_server = lvim.lang[lang].lsp + local provider = lang_server.provider + if require("utils").check_lsp_client_active(provider) then return end -- cgit v1.2.3 From 5646462a50c9e537952fba6c2faca518c3f04139 Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 31 Jul 2021 00:07:47 -0400 Subject: fix format_handler --- lua/lsp/init.lua | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 67007e81..b24d62f2 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -29,13 +29,12 @@ local function lsp_highlight_document(client) end local function formatter_handler(client) - local buffer_filetype = vim.bo.filetype - local ext_provider = lvim.lang[buffer_filetype].formatter.exe - - if ext_provider then + local formatter_exe = lvim.lang[vim.bo.filetype].formatters[1].exe + if formatter_exe and formatter_exe ~= "" then client.resolved_capabilities.document_formatting = false + __FORMATTER_OVERRIDE = true u.lvim_log( - string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, ext_provider) + string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, formatter_exe) ) end end -- cgit v1.2.3 From 2db171eee417de8916237c053244d7a44deac5c1 Mon Sep 17 00:00:00 2001 From: Abouzar Parvan Date: Sat, 31 Jul 2021 12:15:01 +0430 Subject: fix luacheck issues (#1184) --- lua/lsp/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index b24d62f2..d7109ac3 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -32,7 +32,8 @@ local function formatter_handler(client) local formatter_exe = lvim.lang[vim.bo.filetype].formatters[1].exe if formatter_exe and formatter_exe ~= "" then client.resolved_capabilities.document_formatting = false - __FORMATTER_OVERRIDE = true + -- NOTE: do we still need __FORMATTER_OVERRIDE? + -- __FORMATTER_OVERRIDE = true u.lvim_log( string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, formatter_exe) ) -- cgit v1.2.3 From d977e7384e8ad449e1ffc039618910a9c780e0cf Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Sat, 31 Jul 2021 10:19:57 +0200 Subject: cleanup formatting handler (#1185) --- lua/lsp/init.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index d7109ac3..1488aec0 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -29,13 +29,11 @@ local function lsp_highlight_document(client) end local function formatter_handler(client) - local formatter_exe = lvim.lang[vim.bo.filetype].formatters[1].exe - if formatter_exe and formatter_exe ~= "" then + local formatters = lvim.lang[vim.bo.filetype].formatters + if not vim.tbl_isempty(formatters) then client.resolved_capabilities.document_formatting = false - -- NOTE: do we still need __FORMATTER_OVERRIDE? - -- __FORMATTER_OVERRIDE = true u.lvim_log( - string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, formatter_exe) + string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, formatters[1].exe) ) end end -- cgit v1.2.3 From fe5daa722fb75ad85c24936cbb645018bb9d655b Mon Sep 17 00:00:00 2001 From: Luc Sinet Date: Sat, 31 Jul 2021 16:12:29 +0200 Subject: [Feature] Expose lsp config (#1156) --- lua/lsp/init.lua | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 1488aec0..13b64dac 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -1,9 +1,14 @@ local M = {} local u = require "utils" + function M.config() - require("lsp.kind").setup() + vim.lsp.protocol.CompletionItemKind = lvim.lsp.completion.item_kind + + for _, sign in ipairs(lvim.lsp.diagnostics.signs.values) do + vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = sign.name }) + end + require("lsp.handlers").setup() - require("lsp.signs").setup() end local function lsp_highlight_document(client) @@ -28,16 +33,6 @@ local function lsp_highlight_document(client) end end -local function formatter_handler(client) - local formatters = lvim.lang[vim.bo.filetype].formatters - if not vim.tbl_isempty(formatters) then - client.resolved_capabilities.document_formatting = false - u.lvim_log( - string.format("Overriding [%s] formatting if exists, Using provider [%s] instead", client.name, formatters[1].exe) - ) - end -end - function M.common_capabilities() local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true @@ -56,7 +51,12 @@ function M.common_on_init(client, bufnr) lvim.lsp.on_init_callback(client, bufnr) return end - formatter_handler(client) + + local formatters = lvim.lang[vim.bo.filetype].formatters + if not vim.tbl_isempty(formatters) then + client.resolved_capabilities.document_formatting = false + u.lvim_log(string.format("Overriding [%s] formatter with [%s]", client.name, formatters[1].exe)) + end end function M.common_on_attach(client, bufnr) @@ -64,18 +64,17 @@ function M.common_on_attach(client, bufnr) lvim.lsp.on_attach_callback(client, bufnr) end lsp_highlight_document(client) - require("lsp.keybinds").setup() require("lsp.null-ls").setup(vim.bo.filetype) end function M.setup(lang) - local lang_server = lvim.lang[lang].lsp - local provider = lang_server.provider - if require("utils").check_lsp_client_active(provider) then + local lsp = lvim.lang[lang].lsp + if require("utils").check_lsp_client_active(lsp.provider) then return end - require("lspconfig")[provider].setup(lang_server.setup) + local lspconfig = require "lspconfig" + lspconfig[lsp.provider].setup(lsp.setup) end return M -- cgit v1.2.3 From 0e05f05e9d584eec3764593a53eeeff2272718a0 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 1 Aug 2021 15:13:56 -0400 Subject: respect override table --- lua/lsp/init.lua | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 13b64dac..03efbd00 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -73,6 +73,15 @@ function M.setup(lang) return end + local overrides = lvim.lsp.override + + if type(overrides) == "table" then + if u.has_value(overrides, lang) then + return + end + end + + local lspconfig = require "lspconfig" lspconfig[lsp.provider].setup(lsp.setup) end -- cgit v1.2.3 From fbbf1b22a4ab48e19a33a5b10322253ebbca7b8f Mon Sep 17 00:00:00 2001 From: Abouzar Parvan Date: Mon, 2 Aug 2021 01:21:53 +0430 Subject: fix the formatting :pepehands: (#1208) --- lua/lsp/init.lua | 1 - 1 file changed, 1 deletion(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 03efbd00..3373ac46 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -81,7 +81,6 @@ function M.setup(lang) end end - local lspconfig = require "lspconfig" lspconfig[lsp.provider].setup(lsp.setup) end -- cgit v1.2.3 From 77e283bd9c33166937756250918b12e349caf050 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Mon, 2 Aug 2021 23:42:56 +0200 Subject: [Refactor] Allow editing default keymaps (#1213) --- lua/lsp/init.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 3373ac46..b85dfcd2 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -33,6 +33,24 @@ local function lsp_highlight_document(client) end end +local function add_lsp_buffer_keybindings(bufnr) + local wk = require "which-key" + local keys = { + ["K"] = { "lua vim.lsp.buf.hover()", "Show hover" }, + ["gd"] = { "lua vim.lsp.buf.definition()", "Goto Definition" }, + ["gD"] = { "lua vim.lsp.buf.declaration()", "Goto declaration" }, + ["gr"] = { "lua vim.lsp.buf.references()", "Goto references" }, + ["gi"] = { "lua vim.lsp.buf.implementation()", "Goto implementation" }, + ["gs"] = { "lua vim.lsp.buf.signature_help()", "show signature help" }, + ["gp"] = { "lua require'lsp.peek'.Peek('definition')", "Peek definition" }, + ["gl"] = { + "lua vim.lsp.diagnostic.show_line_diagnostics({ show_header = false, border = 'single' })", + "Show line diagnostics", + }, + } + wk.register(keys, { mode = "n", buffer = bufnr }) +end + function M.common_capabilities() local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true @@ -64,6 +82,7 @@ function M.common_on_attach(client, bufnr) lvim.lsp.on_attach_callback(client, bufnr) end lsp_highlight_document(client) + add_lsp_buffer_keybindings(bufnr) require("lsp.null-ls").setup(vim.bo.filetype) end -- cgit v1.2.3 From 4c3c3f388557a182794bffdbf923129c66af885a Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Tue, 3 Aug 2021 18:10:54 +0200 Subject: feat: add lvim.lsp.smart_cwd (#1218) - Enable querying the language-server for the `root_dir` - Use `root_dir` to set the current working-directory (CWD) - Make vim-rooter configurable and add an option to disable it Inspired by "ahmedkhalf/lsp-rooter.nvim" --- lua/lsp/init.lua | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index b85dfcd2..66efdafc 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -83,6 +83,10 @@ function M.common_on_attach(client, bufnr) end lsp_highlight_document(client) add_lsp_buffer_keybindings(bufnr) + if lvim.lsp.smart_cwd then + vim.api.nvim_set_current_dir(client.config.root_dir) + require("core.nvimtree").change_tree_dir(client.config.root_dir) + end require("lsp.null-ls").setup(vim.bo.filetype) end -- cgit v1.2.3 From db19d4c13c3b2cf15150e7c51c05cff07a316247 Mon Sep 17 00:00:00 2001 From: Pasi Bergman Date: Wed, 4 Aug 2021 16:12:01 +0300 Subject: [Bugfix]: Don't override formatter with empty exe (#1224) * fix(lsp): don't override formatter with empty exe * Check for nil value --- lua/lsp/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 66efdafc..a12fc648 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -71,7 +71,7 @@ function M.common_on_init(client, bufnr) end local formatters = lvim.lang[vim.bo.filetype].formatters - if not vim.tbl_isempty(formatters) then + if not vim.tbl_isempty(formatters) and formatters[1]["exe"] ~= nil and formatters[1].exe ~= "" then client.resolved_capabilities.document_formatting = false u.lvim_log(string.format("Overriding [%s] formatter with [%s]", client.name, formatters[1].exe)) end -- cgit v1.2.3 From 67de24227f7244dc0f8a7ba90ad9d594e9bf4717 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Thu, 5 Aug 2021 16:35:58 +0200 Subject: chore: remove unncessary logic from utils (#1238) --- lua/lsp/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index a12fc648..a219fb1b 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -99,7 +99,7 @@ function M.setup(lang) local overrides = lvim.lsp.override if type(overrides) == "table" then - if u.has_value(overrides, lang) then + if vim.tbl_contains(overrides, lang) then return end end -- cgit v1.2.3 From 47ebd70817c99c657271e399c0b98b920f765f29 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Fri, 6 Aug 2021 16:27:19 +0200 Subject: Add LunarVim info panel (Experimental) (#1241) * feat: lunarvim info (Experimental) * Add missing providers info * Use nvim api directly to create the popup * width tweaks --- lua/lsp/init.lua | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index a219fb1b..29676214 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -64,6 +64,36 @@ function M.common_capabilities() return capabilities end +function M.get_ls_capabilities(client_id) + local client + if not client_id then + local buf_clients = vim.lsp.buf_get_clients() + for _, buf_client in ipairs(buf_clients) do + if buf_client.name ~= "null-ls" then + client_id = buf_client.id + break + end + end + end + if not client_id then + error "Unable to determine client_id" + end + + client = vim.lsp.get_client_by_id(tonumber(client_id)) + + local enabled_caps = {} + + for k, v in pairs(client.resolved_capabilities) do + if v == true then + -- print("got cap: ", vim.inspect(caps)) + table.insert(enabled_caps, k) + -- vim.list_extend(enabled_caps, cap) + end + end + + return enabled_caps +end + function M.common_on_init(client, bufnr) if lvim.lsp.on_init_callback then lvim.lsp.on_init_callback(client, bufnr) -- cgit v1.2.3 From 6b98bc137894492ecbe5dfa03bc149e8760a6453 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Mon, 9 Aug 2021 07:58:22 +0200 Subject: avoid using smart_cwd if root_dir is not found --- lua/lsp/init.lua | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 29676214..020c4313 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -51,6 +51,14 @@ local function add_lsp_buffer_keybindings(bufnr) wk.register(keys, { mode = "n", buffer = bufnr }) end +local function set_smart_cwd(client) + local proj_dir = client.config.root_dir + if lvim.lsp.smart_cwd and proj_dir ~= "/" then + vim.api.nvim_set_current_dir(proj_dir) + require("core.nvimtree").change_tree_dir(proj_dir) + end +end + function M.common_capabilities() local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true @@ -113,10 +121,7 @@ function M.common_on_attach(client, bufnr) end lsp_highlight_document(client) add_lsp_buffer_keybindings(bufnr) - if lvim.lsp.smart_cwd then - vim.api.nvim_set_current_dir(client.config.root_dir) - require("core.nvimtree").change_tree_dir(client.config.root_dir) - end + set_smart_cwd(client) require("lsp.null-ls").setup(vim.bo.filetype) end -- cgit v1.2.3 From 405423108fc31981c40116a827e845a1179c9053 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Mon, 9 Aug 2021 19:02:37 +0200 Subject: feat: Add an async logger using plenary (#1207) Co-authored-by: rebuilt --- lua/lsp/init.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 020c4313..0d08ecee 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -1,6 +1,5 @@ local M = {} -local u = require "utils" - +local Log = require "core.log" function M.config() vim.lsp.protocol.CompletionItemKind = lvim.lsp.completion.item_kind @@ -93,9 +92,7 @@ function M.get_ls_capabilities(client_id) for k, v in pairs(client.resolved_capabilities) do if v == true then - -- print("got cap: ", vim.inspect(caps)) table.insert(enabled_caps, k) - -- vim.list_extend(enabled_caps, cap) end end @@ -105,19 +102,23 @@ end function M.common_on_init(client, bufnr) if lvim.lsp.on_init_callback then lvim.lsp.on_init_callback(client, bufnr) + Log:get_default().info "Called lsp.on_init_callback" return end local formatters = lvim.lang[vim.bo.filetype].formatters if not vim.tbl_isempty(formatters) and formatters[1]["exe"] ~= nil and formatters[1].exe ~= "" then client.resolved_capabilities.document_formatting = false - u.lvim_log(string.format("Overriding [%s] formatter with [%s]", client.name, formatters[1].exe)) + Log:get_default().info( + string.format("Overriding language server [%s] with format provider [%s]", client.name, formatters[1].exe) + ) end end function M.common_on_attach(client, bufnr) if lvim.lsp.on_attach_callback then lvim.lsp.on_attach_callback(client, bufnr) + Log:get_default().info "Called lsp.on_init_callback" end lsp_highlight_document(client) add_lsp_buffer_keybindings(bufnr) -- cgit v1.2.3 From b26b61e3041b860967640e7172eac87f16b258d9 Mon Sep 17 00:00:00 2001 From: Abouzar Parvan Date: Wed, 11 Aug 2021 14:50:01 +0430 Subject: fix nil exception for langs without providers (#1290) --- lua/lsp/init.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lua/lsp/init.lua') diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 0d08ecee..e4ea02db 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -140,8 +140,10 @@ function M.setup(lang) end end - local lspconfig = require "lspconfig" - lspconfig[lsp.provider].setup(lsp.setup) + if lsp.provider ~= nil and lsp.provider ~= "" then + local lspconfig = require "lspconfig" + lspconfig[lsp.provider].setup(lsp.setup) + end end return M -- cgit v1.2.3