-- language server setup local lspconfig = require('lspconfig') -- Go lspconfig.gopls.setup{ cmd = {"gopls", "serve"}, filetypes = {"go", "gomod"}, settings = { gopls = { analyses = { unusedparams = true, }, staticcheck = true, }, }, } -- C/C++ lspconfig.clangd.setup{} -- Arduino (C) lspconfig.arduino_language_server.setup{} -- Lua lspconfig.lua_ls.setup{ settings = { Lua = { diagnostics = {globals = {'vim', 'opts'}}, }, telemetry = { enable = false, }, }, } -- Rust lspconfig.rust_analyzer.setup{} -- Python lspconfig.pylsp.setup{} -- TypeScript lspconfig.tsserver.setup{} -- Fix virtual text going off screen vim.diagnostic.config({ virtual_text = false, signs = true, underline = true, update_in_insert = false, severity_sort = false, }) vim.api.nvim_create_autocmd('LspAttach', { callback = function(ev) -- custom colors vim.cmd('hi DiagnosticUnderlineError cterm=undercurl') vim.cmd('hi DiagnosticUnderlineWarn cterm=undercurl') vim.cmd('hi DiagnosticUnderlineInfo cterm=undercurl') vim.cmd('hi DiagnosticUnderlineHint cterm=undercurl') vim.cmd('hi DiagnosticUnderlineOk cterm=undercurl') -- key mappings local opts = { buffer = ev.buf,} -- error viewing vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) -- def viewing/rename vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) vim.keymap.set('n', 'H', vim.lsp.buf.hover, opts) -- auto hover for error viewing vim.api.nvim_create_autocmd("CursorHold", { callback = function() opts = { buffer = ev.buf, focusable = false, border = 'rounded', source = 'always', prefix = ' ', scope = 'cursor', close_events = { "BufLeave","CursorMoved","InsertEnter","FocusLost" }, } vim.diagnostic.open_float(nil, opts) end }) end, })