From 8d6d4b5c738e2407cc7b66e19d6e01ff7ea2e671 Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Fri, 10 Sep 2021 23:46:00 +0200 Subject: [PATCH] Own configuration file for lsp and some small fixes --- init.lua | 102 ++------------------------------------------ lua/keymappings.lua | 2 +- lua/mylsp.lua | 82 +++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 100 deletions(-) create mode 100644 lua/mylsp.lua diff --git a/init.lua b/init.lua index 7757a9e..a126cd5 100644 --- a/init.lua +++ b/init.lua @@ -75,111 +75,15 @@ utils.map('n', 'b', 'Telescope buffers') utils.map('n', 'r', 'Telescope lsp_references') utils.map('n', '', 'Telescope lsp_document_symbols') utils.map('n', '', 'Telescope lsp_document_symbols') +utils.map('n', 'v', 'Telescope lsp_document_diagnostics') -------------------- LSP ----------------------------------- -local nvim_lsp = require 'lspconfig' - --- We use the default settings for ccls and pylsp: the option table can stay empty -nvim_lsp.ccls.setup {} -nvim_lsp.pyright.setup{} -nvim_lsp.clangd.setup{} - -utils.map('n', ',', 'lua vim.lsp.diagnostic.goto_prev()') -utils.map('n', ';', 'lua vim.lsp.diagnostic.goto_next()') -utils.map('n', 'a', 'lua vim.lsp.buf.code_action()') -utils.map('n', 'd', 'lua vim.lsp.buf.definition()') -utils.map('n', 'e', 'lua vim.lsp.buf.declaration()') -utils.map('n', 'f', 'lua vim.lsp.buf.formatting()') -utils.map('v', 'f', 'lua vim.lsp.buf.formatting()') -utils.map('n', 'h', 'lua vim.lsp.buf.hover()') -utils.map('n', 'm', 'lua vim.lsp.buf.rename()') --- utils.map('n', 'r', 'lua vim.lsp.buf.references()') -utils.map('n', 's', 'lua vim.lsp.buf.document_symbol()') -utils.map('n', '', 'lua vim.lsp.buf.workspace_symbol()') -utils.map('n', 'D', 'lua vim.lsp.buf.type_definition()') -utils.map('n', '', 'lua vim.lsp.buf.signature_help()') - -utils.map('n', '', ':ClangdSwitchSourceHeader') - --- Add additional capabilities supported by nvim-cmp -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' } -capabilities.textDocument.completion.completionItem.snippetSupport = true -capabilities.textDocument.completion.completionItem.preselectSupport = true -capabilities.textDocument.completion.completionItem.insertReplaceSupport = true -capabilities.textDocument.completion.completionItem.labelDetailsSupport = true -capabilities.textDocument.completion.completionItem.deprecatedSupport = true -capabilities.textDocument.completion.completionItem.commitCharactersSupport = true -capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } } -capabilities.textDocument.completion.completionItem.resolveSupport = { - properties = { - 'documentation', - 'detail', - 'additionalTextEdits', - }, -} - -local on_attach = function(client, bufnr) - local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end - local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end - - buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - - -- Mappings. - local opts = { noremap=true, silent=true } - buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) - buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) - buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) - buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) - buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) - buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) - buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) - buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) - buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) - buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) - buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) - buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) - buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) - buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) - buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) - buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) - - -- Set some keybinds conditional on server capabilities - if client.resolved_capabilities.document_formatting then - buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) - end - if client.resolved_capabilities.document_range_formatting then - buf_set_keymap("v", "f", "lua vim.lsp.buf.range_formatting()", opts) - end - - -- Set autocommands conditional on server_capabilities - if client.resolved_capabilities.document_highlight then - vim.api.nvim_exec([[ - hi LspReferenceRead cterm=bold ctermbg=red guibg=DarkGreen - hi LspReferenceText cterm=bold ctermbg=Black guibg=DarkYellow guifg=Black - hi LspReferenceWrite cterm=bold ctermbg=red guibg=DarkRed - augroup lsp_document_highlight - autocmd! * - autocmd CursorHold lua vim.lsp.buf.document_highlight() - autocmd CursorHoldI lua vim.lsp.buf.document_highlight() - autocmd CursorMoved lua vim.lsp.buf.clear_references() - augroup END - ]], false) - end -end - --- Enable some language servers with the additional completion capabilities offered by nvim-cmp -local servers = { 'clangd', 'pyright', 'rust_analyzer', 'tsserver' } -for _, lsp in ipairs(servers) do - nvim_lsp[lsp].setup { - on_attach = on_attach, - capabilities = capabilities, - } -end +require('mylsp') -------------------- GITSIGNS ------------------------------ -- require('gitsigns').setup() -------------------- LIGHTBULB ----------------------------- require('nvim-lightbulb').update_lightbulb() +vim.cmd [[autocmd CursorHold,CursorHoldI * lua require'nvim-lightbulb'.update_lightbulb()]] -------------------- CMP ----------------------------------- require('cmp_plug') -------------------- NVIM-TREE ----------------------------- diff --git a/lua/keymappings.lua b/lua/keymappings.lua index 1c69c98..545d995 100644 --- a/lua/keymappings.lua +++ b/lua/keymappings.lua @@ -32,4 +32,4 @@ utils.map('i', '', ':split .') utils.map('n', '', ':wa') -utils.map('n', '', '') + diff --git a/lua/mylsp.lua b/lua/mylsp.lua new file mode 100644 index 0000000..15433fc --- /dev/null +++ b/lua/mylsp.lua @@ -0,0 +1,82 @@ +local nvim_lsp = require 'lspconfig' +local utils = require('utils') + +-- We use the default settings for ccls and pylsp: the option table can stay empty +nvim_lsp.ccls.setup {} +nvim_lsp.pyright.setup{} +nvim_lsp.clangd.setup{} + + +-- Add additional capabilities supported by nvim-cmp +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' } +capabilities.textDocument.completion.completionItem.snippetSupport = true +capabilities.textDocument.completion.completionItem.preselectSupport = true +capabilities.textDocument.completion.completionItem.insertReplaceSupport = true +capabilities.textDocument.completion.completionItem.labelDetailsSupport = true +capabilities.textDocument.completion.completionItem.deprecatedSupport = true +capabilities.textDocument.completion.completionItem.commitCharactersSupport = true +capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } } +capabilities.textDocument.completion.completionItem.resolveSupport = { + properties = { + 'documentation', + 'detail', + 'additionalTextEdits', + }, +} + +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + utils.map('n', ',', 'lua vim.lsp.diagnostic.goto_prev()') + utils.map('n', ';', 'lua vim.lsp.diagnostic.goto_next()') + utils.map('n', 'a', 'lua vim.lsp.buf.code_action()') + utils.map('n', 'd', 'lua vim.lsp.buf.definition()') + utils.map('n', 'e', 'lua vim.lsp.buf.declaration()') + utils.map('n', 'h', 'lua vim.lsp.buf.hover()') + utils.map('n', 'm', 'lua vim.lsp.buf.rename()') + -- utils.map('n', 'r', 'lua vim.lsp.buf.references()') + utils.map('n', 's', 'lua vim.lsp.buf.document_symbol()') + utils.map('n', '', 'lua vim.lsp.buf.workspace_symbol()') + utils.map('n', 'D', 'lua vim.lsp.buf.type_definition()') + utils.map('n', '', 'lua vim.lsp.buf.signature_help()') + + utils.map('n', '', ':ClangdSwitchSourceHeader') + + -- Set some keybinds conditional on server capabilities + if client.resolved_capabilities.document_formatting then + utils.map('n', 'f', 'lua vim.lsp.buf.formatting()') + end + if client.resolved_capabilities.document_range_formatting then + utils.map('v', 'f', 'lua vim.lsp.buf.range_formatting()') + end + + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec([[ + hi LspReferenceRead cterm=bold ctermbg=red guibg=DarkGreen + hi LspReferenceText cterm=bold ctermbg=Black guibg=DarkYellow guifg=Black + hi LspReferenceWrite cterm=bold ctermbg=red guibg=DarkRed + augroup lsp_document_highlight + autocmd! * + autocmd CursorHold lua vim.lsp.buf.document_highlight() + autocmd CursorHoldI lua vim.lsp.buf.document_highlight() + autocmd CursorMoved lua vim.lsp.buf.clear_references() + augroup END + ]], false) + end +end + +-- Enable some language servers with the additional completion capabilities offered by nvim-cmp +local servers = { 'clangd', 'pyright', 'rust_analyzer', 'tsserver' } +for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { + on_attach = on_attach, + capabilities = capabilities, + } +end