require('plugins') require('keymaps') packer.use { 'https://github.com/neovim/nvim-lspconfig', requires = 'https://github.com/L3MON4D3/LuaSnip', config = function() map('n', '', vim.diagnostic.goto_prev) map('n', '', 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', '', vim.lsp.buf.signature_help) maplsp('n', 'wa', vim.lsp.buf.add_workspace_folder) maplsp('n', 'wr', vim.lsp.buf.remove_workspace_folder) maplsp('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end) maplsp('n', 'rn', vim.lsp.buf.rename) maplsp('n', 'ca', vim.lsp.buf.code_action) maplsp('n', 'gr', vim.lsp.buf.references) maplsp('n', '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 vim.api.nvim_create_autocmd("CursorHold", { buffer = bufnr, callback = function() local opts = { focusable = false, close_events = { "BufLeave", "CursorMoved", "InsertEnter", "FocusLost" }, border = 'rounded', source = 'always', prefix = ' ', scope = 'cursor', } vim.diagnostic.open_float(nil, opts) 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 } end }