From 140623d2797f79ab4aecbb4db349207127ff09bc Mon Sep 17 00:00:00 2001 From: Mitchell Riedstra Date: Sun, 1 Jan 2023 14:42:32 -0500 Subject: Full blown rewrite of my Neovim configuration --- after/plugin/lsp.lua | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 after/plugin/lsp.lua (limited to 'after/plugin/lsp.lua') diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua new file mode 100644 index 0000000..8056dfa --- /dev/null +++ b/after/plugin/lsp.lua @@ -0,0 +1,101 @@ +local lsp = require("lsp-zero") + +lsp.preset("recommended") + +lsp.ensure_installed({ + 'tsserver', + 'eslint', + 'sumneko_lua', + 'rust_analyzer', + 'gopls', + 'clangd', +}) + +-- Fix Undefined global 'vim' +lsp.configure('sumneko_lua', { + settings = { + Lua = { + diagnostics = { + globals = { 'vim' } + } + } + } +}) + + +local cmp = require('cmp') +local cmp_select = {behavior = cmp.SelectBehavior.Select} +local cmp_mappings = lsp.defaults.cmp_mappings({ + [''] = cmp.mapping.select_prev_item(cmp_select), + [''] = cmp.mapping.select_next_item(cmp_select), + [''] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping.complete(), +}) + +-- disable completion with tab +-- this helps with copilot setup +cmp_mappings[''] = nil +cmp_mappings[''] = nil + +lsp.setup_nvim_cmp({ + mapping = cmp_mappings +}) + +lsp.set_preferences({ + suggest_lsp_servers = false, + sign_icons = { + error = 'E', + warn = 'W', + hint = 'H', + info = 'I' + } +}) + +lsp.on_attach(function(client, bufnr) + local opts = {buffer = bufnr, remap = false} + + if client.name == "eslint" then + vim.cmd.LspStop('eslint') + return + end + + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + -- goto defintion + -- vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + -- hover docs + vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) + + nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + nmap("gr", vim.lsp.buf.references, '[G]oto [R]eferences') + nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + + nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') + nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + + + -- vim.keymap.set("n", "vws", vim.lsp.buf.workspace_symbol, opts) + -- vim.keymap.set("n", "vd", vim.diagnostic.open_float, opts) + -- vim.keymap.set("n", "[d", vim.diagnostic.goto_next, opts) + -- vim.keymap.set("n", "]d", vim.diagnostic.goto_prev, opts) + -- vim.keymap.set("n", "vca", vim.lsp.buf.code_action, opts) + -- vim.keymap.set("n", "vrn", vim.lsp.buf.rename, opts) + -- vim.keymap.set("i", "", vim.lsp.buf.signature_help, opts) +end) + +lsp.setup() + +vim.diagnostic.config({ + virtual_text = true, +}) + -- cgit v1.2.3