--local lspconfig = require('lspconfig') --local lsp_defaults = lspconfig.util.default_config -- --lsp_defaults.capabilities = vim.tbl_deep_extend( -- 'force', -- lsp_defaults.capabilities, -- require('cmp_nvim_lsp').default_capabilities() --) --vim.api.nvim_create_autocmd('FileType', { -- pattern = 'tex', -- callback = function() -- require('cmp').setup.buffer { sources = {{ name = 'omni' }} } -- end, --}) 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() require('lspconfig').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, -- ruff_lsp = function() -- require('lspconfig').ruff_lsp.setup({ -- on_attach = function(client, bufnr) -- client.server_capabilities.hoverProvider = false -- client.server_capabilities.documentFormattingProvider = false -- end, -- }) -- end, texlab = function() require('lspconfig').texlab.setup({ settings = { texlab = { build = { onSave = false, forwardSearchAfter = true, }, chktex = { onOpenAndSave = true, }, forwardSearch = { executable = 'zathura', args = { '--synctex-forward', '%l:1:%f', '%p', }, }, }, }, }) end, } 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' }, }