dotfiles/.config/nvim/lua/lsp.lua

93 lines
3.5 KiB
Lua

require('plugins')
require('keymaps')
packer.use {
'https://github.com/neovim/nvim-lspconfig',
requires = 'https://github.com/L3MON4D3/LuaSnip',
config = function()
map('n', '<f5>', vim.diagnostic.goto_prev)
map('n', '<f6>', vim.diagnostic.goto_next)
-- Only map the following keys after the language server attaches to the
-- current buffer
local on_attach = function(client, bufnr)
local function maplsp(mode, shortcut, command)
vim.keymap.set(mode, shortcut, command,
{ noremap = true, silent = true, buffer=bufnr })
end
maplsp('n', 'gD', vim.lsp.buf.declaration)
maplsp('n', 'gd', vim.lsp.buf.definition)
maplsp('n', 'K', vim.lsp.buf.hover)
maplsp('n', 'gi', vim.lsp.buf.implementation)
maplsp('n', '<C-k>', vim.lsp.buf.signature_help)
maplsp('n', '<Leader>wa', vim.lsp.buf.add_workspace_folder)
maplsp('n', '<Leader>wr', vim.lsp.buf.remove_workspace_folder)
maplsp('n', '<Leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end)
maplsp('n', '<Leader>rn', vim.lsp.buf.rename)
maplsp('n', '<Leader>ca', vim.lsp.buf.code_action)
maplsp('n', 'gr', vim.lsp.buf.references)
maplsp('n', '<Leader>f', vim.lsp.buf.formatting)
-- highlight symbol under cursor
if client.resolved_capabilities.document_highlight then
vim.cmd [[
hi! LspReferenceRead cterm=bold ctermbg=red guibg=#633466
hi! LspReferenceText cterm=bold ctermbg=red guibg=#633466
hi! LspReferenceWrite cterm=bold ctermbg=red guibg=#633466
]]
vim.api.nvim_create_augroup('lsp_document_highlight', {
clear = false
})
vim.api.nvim_clear_autocmds({
buffer = bufnr,
group = 'lsp_document_highlight',
})
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
group = 'lsp_document_highlight',
buffer = bufnr,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd('CursorMoved', {
group = 'lsp_document_highlight',
buffer = bufnr,
callback = vim.lsp.buf.clear_references,
})
end
end
-- setup servers
require'lspconfig'.clangd.setup{
cmd = {
'clangd',
'--compile-commands-dir=build',
'--clang-tidy', -- needs >=clangd-9
'--ranking-model=decision_forest' -- needs >=clangd-12
},
on_attach = on_attach
}
require'lspconfig'.sumneko_lua.setup {
settings = {
Lua = {
runtime = {
version = 'LuaJIT',
},
diagnostics = {
globals = {'vim'},
},
workspace = {
library = vim.api.nvim_get_runtime_file("", true),
},
telemetry = {
enable = false,
},
},
},
on_attach = on_attach
}
end
}