From ad50027cd34b87b95f58bfa683f3eebda8b9334c Mon Sep 17 00:00:00 2001 From: Patrick Michl Date: Mon, 6 Sep 2021 09:56:36 +0200 Subject: [PATCH] refactor: Don't bind keys in global buffer Bind only when LSP is loaded in buffer. Remove unneeded plugins. general cleanup --- lua/keys.lua | 15 +------ lua/lsp.lua | 113 +++++++++++++++++++++-------------------------- lua/plugins.lua | 14 ++---- lua/settings.lua | 11 ++--- lua/utils.lua | 8 ++++ 5 files changed, 71 insertions(+), 90 deletions(-) diff --git a/lua/keys.lua b/lua/keys.lua index ccbe03f..b52d0df 100644 --- a/lua/keys.lua +++ b/lua/keys.lua @@ -7,16 +7,5 @@ vim.cmd([[autocmd BufNewFile,BufRead *.md setlocal filetype=notes]]) key('n', ';', ':Files', {}) key('', '', ':NERDTreeToggle', {}) --- LSP Key Config -local silent_opts = {silent = true} -key('n', '', ':lua vim.lsp.buf.definition()', silent_opts) -key('n', 'K', ':lua vim.lsp.buf.hover()', silent_opts) -key('n', 'gD', ':lua vim.lsp.buf.implementation()', silent_opts) -key('n', '', ':lua vim.lsp.buf.signature_help()', silent_opts) -key('n', '1gD', ':lua vim.lsp.buf.type_definition()', silent_opts) -key('n', 'gr', ':lua vim.lsp.buf.references()', silent_opts) -key('n', 'g0', ':lua vim.lsp.buf.document_symbol()', silent_opts) -key('n', 'gW', ':lua vim.lsp.buf.workspace_symbol()', silent_opts) -key('n', 'gd', ':lua vim.lsp.buf.definition()', silent_opts) -key('n', 'ga', ':lua vim.lsp.buf.code_action()', silent_opts) -key('n', 'ff', ':lua vim.lsp.buf.formatting()', silent_opts) +key('i', '', 'pumvisible() ? "" : ""', {expr = true, silent = true}) +key('i', '', 'pumvisible() ? "" : ""', {expr = true, silent = true}) diff --git a/lua/lsp.lua b/lua/lsp.lua index fcd8ab1..8db2b81 100644 --- a/lua/lsp.lua +++ b/lua/lsp.lua @@ -1,69 +1,58 @@ +require'lspinstall'.setup() +local u = require('utils') local nvim_lsp = require'lspconfig' -local function setup_servers() - require'lspinstall'.setup() - local servers = require'lspinstall'.installed_servers() - for _, lsp in pairs(servers) do - nvim_lsp[lsp].setup{} +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') + + local opts = { noremap=true, silent=true } + + buf_set_keymap('n', '', ':lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', ':lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gD', ':lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', ':lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', '1gD', ':lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'gr', ':lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'g0', ':lua vim.lsp.buf.document_symbol()', opts) + buf_set_keymap('n', 'gW', ':lua vim.lsp.buf.workspace_symbol()', opts) + buf_set_keymap('n', 'gd', ':lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'ga', ':lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'ff', ':lua vim.lsp.buf.formatting()', opts) + + require'completion'.on_attach(client) + + -- Set highlight colors + local highlights = { + Error = "Red", + Warning = "Yellow", + Information = "Blue", + Hint = "Green", + } + + for typ, color in pairs(highlights) do + u.hi('LspDiagnosticsDefault'..typ, {ctermfg = color}) + u.hi('LspDiagnosticsUnderline'..typ, {cterm = 'underline'}) end + + vim.lsp.handlers['textDocument/publishDiagnostics'] = vim.lsp.with( + vim.lsp.diagnostic.on_publish_diagnostics, + { + virtual_text = true, + signs = true, + update_in_insert = true, + underline = true + } + ) end -local opts = { - tools = { - autoSetHints = true, - hover_with_actions = true, - runnables = { - use_telescope = true - }, - inlay_hints = { - show_parameter_hints = false, - parameter_hints_prefix = "", - other_hints_prefix = "", - }, - }, - - -- all the opts to send to nvim-lspconfig - -- these override the defaults set by rust-tools.nvim - -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer - server = {}, -- rust-analyer options -} - -require('rust-tools').setup(opts) - -setup_servers() - -require'lspinstall'.post_install_hook = function () - setup_servers() - vim.cmd("bufdo e") +local servers = require'lspinstall'.installed_servers() +for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup{ + on_attach = on_attach, + flags = {debounce_text_changes = 150} + } end -local cmp = require'cmp' -cmp.setup({ - snippet = { - expand = function(args) - vim.fn["vsnip#anonymous"](args.body) - end, - }, - mapping = { - [''] = cmp.mapping.select_prev_item(), - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.select_prev_item(), - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.close(), - [''] = cmp.mapping.confirm({ - behavior = cmp.ConfirmBehavior.Insert, - select = true, - }) - }, - - -- Installed sources - sources = { - { name = 'nvim_lsp' }, - { name = 'vsnip' }, - { name = 'path' }, - { name = 'buffer' }, - }, -}) diff --git a/lua/plugins.lua b/lua/plugins.lua index 98e96e8..e8d9e0a 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -1,6 +1,8 @@ +local vim = vim -- Workaround to get rid of warnings vim.cmd([[autocmd BufWritePost plugins.lua source | PackerCompile]]) return require('packer').startup({function() + local use = use -- Packer can manage itself use 'wbthomason/packer.nvim' @@ -8,7 +10,6 @@ return require('packer').startup({function() use 'scrooloose/nerdtree' use 'Xuyuanp/nerdtree-git-plugin' use 'liuchengxu/space-vim-dark' - use 'tpope/vim-fugitive' use 'tpope/vim-commentary' use { 'tpope/vim-dispatch', opt = true, cmd = { 'Dispatch', 'Dispatch!' } } @@ -19,8 +20,6 @@ return require('packer').startup({function() use 'rodjek/vim-puppet' use 'tpope/vim-rails' use 'tpope/vim-haml' - use 'vim-scripts/bash-support.vim' - use "akinsho/nvim-toggleterm.lua" use 'xolox/vim-notes' use 'xolox/vim-misc' use 'jremmen/vim-ripgrep' @@ -28,15 +27,10 @@ return require('packer').startup({function() -- LSP Setup use 'neovim/nvim-lspconfig' use 'kabouzeid/nvim-lspinstall' - use 'hrsh7th/nvim-cmp' - use 'hrsh7th/cmp-nvim-lsp' - use 'hrsh7th/cmp-vsnip' - use 'hrsh7th/cmp-path' - use 'hrsh7th/cmp-buffer' - use 'simrat39/rust-tools.nvim' + use 'nvim-lua/lsp_extensions.nvim' + use 'nvim-lua/completion-nvim' use 'nvim-lua/popup.nvim' use 'nvim-lua/plenary.nvim' - use 'nvim-telescope/telescope.nvim' end, config = { display = { diff --git a/lua/settings.lua b/lua/settings.lua index d4e833d..602ba19 100644 --- a/lua/settings.lua +++ b/lua/settings.lua @@ -1,9 +1,13 @@ local o = vim.o local wo = vim.wo local bo = vim.bo +local cmd = vim.cmd + +cmd('syntax on') +cmd('set number') +cmd('set completeopt=menuone,noinsert,noselect') +cmd('set shortmess+=c') -vim.cmd('syntax on') -vim.cmd('set number') o.startofline = true wo.cursorline = true @@ -11,7 +15,6 @@ o.updatetime = 300 wo.signcolumn='yes' o.showcmd = true - o.shell = 'bash' o.mouse = 'a' @@ -22,5 +25,3 @@ bo.expandtab = true wo.relativenumber = true -vim.cmd('set completeopt=menuone,noinsert,noselect') -vim.cmd('set shortmess+=c') diff --git a/lua/utils.lua b/lua/utils.lua index 7c88756..2fb6f08 100644 --- a/lua/utils.lua +++ b/lua/utils.lua @@ -9,6 +9,14 @@ function M.create_augroup(autocmds, name) vim.cmd('augroup END') end +function M.hi(name, opts) + local options = "" + for k, v in pairs(opts) do + options = options.." "..k.."="..v + end + vim.cmd("highlight "..name..options) +end + function M.create_function(body, name) vim.cmd('function! ' .. name) for _, line in ipairs(body) do