From 8c0feb8acca04b8c5ea9996cb185dc52a94dcf1d Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sun, 8 Sep 2024 13:32:28 +0200 Subject: [PATCH] nvim: lsp: add support for lsp functionalites. --- nvim/lua/user/plugins/lsp.lua | 28 ++++++++++++++++++++++++---- nvim/lua/user/utils/lsp.lua | 8 ++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/nvim/lua/user/plugins/lsp.lua b/nvim/lua/user/plugins/lsp.lua index 254c1ff..561f215 100644 --- a/nvim/lua/user/plugins/lsp.lua +++ b/nvim/lua/user/plugins/lsp.lua @@ -42,22 +42,41 @@ return { enabled = true, }, codelens = { - enabled = false, + enabled = true, }, inlay_hints = { - enabled = false, + enabled = true, exclude = {}, }, servers = {}, }, config = function(_, opts) local lspconfig = require("lspconfig") + local utils = require("user.utils.lsp") local augroup = vim.api.nvim_create_augroup("Lsp", {}) + local has_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp") + local capabilities = vim.tbl_deep_extend('force', + vim.lsp.protocol.make_client_capabilities() or {}, + has_cmp and cmp_lsp.default_capabilities() or {}) for name, server_opts in pairs(opts.servers) do - local on_attach = function(_, bufnr) + ---@param client vim.lsp.Client + ---@param bufnr number + local on_attach = function(client, bufnr) vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + if (opts.inlay_hints.enabled or false) and client.server_capabilities.inlayHintProvider then + vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) + end + + if opts.codelens.enabled and client.server_capabilities.codeLensProvider then + utils.codelens(augroup, bufnr) + end + + if opts.document_highlight.enabled and client.server_capabilities.documentHighlightProvider then + utils.document_highlight(bufnr) + end + -- Setup on save handler if server_opts.on_save then vim.api.nvim_create_autocmd("BufWritePre", { @@ -69,7 +88,8 @@ return { end server_opts = vim.tbl_deep_extend("force", { - on_attach = on_attach + on_attach = on_attach, + capabilities = capabilities }, server_opts or {}) lspconfig[name].setup(server_opts) diff --git a/nvim/lua/user/utils/lsp.lua b/nvim/lua/user/utils/lsp.lua index f5cf897..b29a074 100644 --- a/nvim/lua/user/utils/lsp.lua +++ b/nvim/lua/user/utils/lsp.lua @@ -29,4 +29,12 @@ function M.signature_help_on_hover(bufnr) }) end +function M.codelens(augroup, bufnr) + vim.api.nvim_create_autocmd({ "BufEnter", "CursorHold", "InsertLeave" }, { + group = augroup, + buffer = bufnr, + callback = vim.lsp.codelens.refresh, + }) +end + return M