neovim/lua/plugins/lsp.lua
2025-09-26 19:46:42 +00:00

99 lines
3.6 KiB
Lua

-- 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', '<leader>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '<leader>[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', '<leader>]d', vim.diagnostic.goto_next, opts)
-- def viewing/rename
vim.keymap.set('n', '<leader>gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', '<leader>gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set('n', '<leader>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
}
}