-- language server setup return { { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, dependencies = { }, config = function() -- Go vim.lsp.config["gopls"] = { cmd = {"gopls", "serve"}, filetypes = {"go", "gomod"}, settings = { gopls = { analyses = { unusedparams = true, }, staticcheck = true, }, }, } -- C/C++ vim.lsp.config["clangd"] = {} -- Arduino (C) vim.lsp.config["arduino_language_server"] = {} -- Lua vim.lsp.config["lua_ls"] = { cmd = {"lua-language-server" }, settings = { Lua = { diagnostics = {globals = {'vim', 'opts'}}, }, telemetry = { enable = false, }, }, } -- Rust vim.lsp.config["rust_analyzer"] = {} -- Python vim.lsp.config["pylsp"] = {} -- TypeScript vim.lsp.config["tsls"] = {} -- Fix virtual text going off screen vim.diagnostic.config({ virtual_text = false, signs = true, underline = true, update_in_insert = false, severity_sort = false, }) -- creating key mappings 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, }) end } }