-- diagnostics vim.diagnostic.config({ severity_sort = true, virtual_text = true, }) -- cmp setup local cmp = require('cmp') cmp.setup({ sources = { { name = 'nvim_lsp' }, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.complete(), [''] = cmp.mapping.confirm({ select = true }), }), }) -- shared capabilities (cmp + snippet support) local capabilities = require('cmp_nvim_lsp').default_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true -- shared keymaps when LSP attaches local on_attach = function(_, bufnr) local map = function(mode, lhs, rhs) vim.keymap.set(mode, lhs, rhs, { buffer = bufnr }) end map("n", "gd", vim.lsp.buf.definition) map("n", "gD", vim.lsp.buf.declaration) map("n", "gr", vim.lsp.buf.references) map("n", "K", vim.lsp.buf.hover) end -- helper to setup servers local lspconfig = require('lspconfig') local function setup(server, opts) opts = opts or {} opts.capabilities = capabilities opts.on_attach = on_attach lspconfig[server].setup(opts) end -- servers setup("pyright") setup("rust_analyzer") setup("lua_ls", { settings = { Lua = { diagnostics = { globals = { "vim" } } } } }) setup("html") setup("gopls", { settings = { gopls = { analyses = { unusedparams = true, nilness = true, unusedwrite = true, useany = true, }, staticcheck = true, gofumpt = true, }, }, }) setup("clangd", { cmd = { "clangd", "--background-index", "--query-driver=/usr/bin/gcc,/usr/bin/g++",}, })