local M = { "neovim/nvim-lspconfig", commit = "649137cbc53a044bffde36294ce3160cb18f32c7", lazy = true, dependencies = { { "hrsh7th/cmp-nvim-lsp", commit = "0e6b2ed705ddcff9738ec4ea838141654f12eeef", }, }, } local cmp_nvim_lsp = require "cmp_nvim_lsp" function M.config() local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true capabilities = cmp_nvim_lsp.default_capabilities(M.capabilities) local function lsp_keymaps(bufnr) local opts = { noremap = true, silent = true } local keymap = vim.api.nvim_buf_set_keymap keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover()", opts) keymap(bufnr, "n", "gI", "lua vim.lsp.buf.implementation()", opts) keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) keymap(bufnr, "n", "gl", "lua vim.diagnostic.open_float()", opts) keymap(bufnr, "n", "li", "LspInfo", opts) keymap(bufnr, "n", "lI", "Mason", opts) keymap(bufnr, "n", "la", "lua vim.lsp.buf.code_action()", opts) keymap(bufnr, "n", "lj", "lua vim.diagnostic.goto_next({buffer=0})", opts) keymap(bufnr, "n", "lk", "lua vim.diagnostic.goto_prev({buffer=0})", opts) keymap(bufnr, "n", "lr", "lua vim.lsp.buf.rename()", opts) keymap(bufnr, "n", "ls", "lua vim.lsp.buf.signature_help()", opts) keymap(bufnr, "n", "lq", "lua vim.diagnostic.setloclist()", opts) end local lspconfig = require "lspconfig" local on_attach = function(client, bufnr) if client.name == "tsserver" then client.server_capabilities.documentFormattingProvider = false end if client.name == "sumneko_lua" then client.server_capabilities.documentFormattingProvider = false end lsp_keymaps(bufnr) require("illuminate").on_attach(client) end for _, server in pairs(require("utils").servers) do Opts = { on_attach = on_attach, capabilities = capabilities, } server = vim.split(server, "@")[1] local require_ok, conf_opts = pcall(require, "settings." .. server) if require_ok then Opts = vim.tbl_deep_extend("force", conf_opts, Opts) end lspconfig[server].setup(Opts) end local signs = { { name = "DiagnosticSignError", text = "" }, { name = "DiagnosticSignWarn", text = "" }, { name = "DiagnosticSignHint", text = "" }, { name = "DiagnosticSignInfo", text = "" }, } for _, sign in ipairs(signs) do vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) end local config = { -- disable virtual text virtual_text = false, -- show signs signs = { active = signs, }, update_in_insert = true, underline = true, severity_sort = true, float = { focusable = false, style = "minimal", border = "rounded", source = "always", header = "", prefix = "", suffix = "", }, } vim.diagnostic.config(config) vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "rounded", }) vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = "rounded", }) end return M