vim.api.nvim_create_autocmd('LspAttach', { desc = 'LSP actions', callback = function(event) local opts = { buffer = event.buf } vim.keymap.set('n', 'i', 'lua vim.lsp.buf.hover()', opts) vim.keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.keymap.set('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.keymap.set('n', 'go', 'lua vim.lsp.buf.type_definition()', opts) vim.keymap.set('n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) vim.keymap.set('n', 'r', 'lua vim.lsp.buf.rename()', opts) vim.keymap.set('n', 'f', 'lua vim.lsp.buf.format({async=true})', opts) vim.keymap.set('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.keymap.set('n', 'gl', 'lua vim.diagnostic.open_float()', opts) vim.keymap.set('n', '[d', 'lua vim.diagnostic.goto_prev({float = {border = "rounded"}})', opts) vim.keymap.set('n', ']d', 'lua vim.diagnostic.goto_next({float = {border = "rounded"}})', opts) vim.keymap.set('n', 'vd', 'lua vim.diagnostic.open_float({border = "rounded"})', opts) end }) local handlers = { function(server) require('lspconfig')[server].setup({}) end, clangd = function() require('lspconfig').clangd.setup({ cmd = { "clangd", "--background-index", "--suggest-missing-includes", '--query-driver=/usr/bin/*gcc,/usr/bin/*g++', }, filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto" }, capabilities = { offsetEncoding = {"utf-8", "utf-16"}, textDocument = { completion = { editsNearCursor = true } } }, single_file_support = true, }) end, pylsp = function() vim.lsp.config.pylsp.setup({ settings = { pylsp = { plugins = { pyflakes = { enabled = false }, mccabe = { enabled = false }, pycodestyle = { enabled = false }, flake8 = { enabled = false }, pylint = { enabled = false }, autopep8 = { enabled = false }, yapf = { enabled = false }, ruff = { enabled = true, formatEnabled = true, }, }, }, }, }) end, texlab = function() vim.lsp.config.texlab.setup({ settings = { texlab = { build = { onSave = false, forwardSearchAfter = true, }, chktex = { onOpenAndSave = true, }, forwardSearch = { executable = 'zathura', args = { '--synctex-forward', '%l:1:%f', '%p', }, }, }, }, }) end, } vim.lsp.config('texlab', { settings = { texlab = { build = { onSave = false, forwardSearchAfter = true, }, chktex = { onOpenAndSave = true, }, forwardSearch = { executable = 'zathura', args = { '--synctex-forward', '%l:1:%f', '%p', }, }, }, }, }) return { { 'williamboman/mason.nvim', config = function() require('mason').setup({ ui = { border = 'rounded' } }) require('mason-registry'):on('package:install:success', require('plugins.lsp.python').mason_post_install) end }, { 'williamboman/mason-lspconfig.nvim', dependencies = { 'rcarriga/nvim-notify', }, opts = { handlers = handlers, ensure_installed = { 'lua_ls', 'clangd', 'pylsp', 'yamlls', 'esbonio', 'lemminx' }, }, }, { 'neovim/nvim-lspconfig' }, }