Files
nvim/lua/rakshit/lsp/main.lua

79 lines
1.6 KiB
Lua

-- 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({
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = 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++",},
})