return { 'neovim/nvim-lspconfig', event = { 'BufReadPost', 'BufWritePost', 'BufNewFile' }, dependencies = { 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', 'hrsh7th/cmp-nvim-lsp', { 'antosha417/nvim-lsp-file-operations', config = true }, { 'folke/neodev.nvim', config = true }, }, config = function() local lspconfig = require('lspconfig') local mason_lspconfig = require('mason-lspconfig') local cmp_nvim_lsp = require('cmp_nvim_lsp') local keymap = vim.keymap vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) local opts = { buffer = ev.buf, silent = true } opts.desc = 'Show LSP references' keymap.set('n', 'gR', 'Telescope lsp_references', opts) opts.desc = 'Go to declaration' keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) opts.desc = 'Show LSP definitions' keymap.set('n', 'gd', 'Telescope lsp_definitions', opts) opts.desc = 'Show LSP implementations' keymap.set('n', 'gi', 'Telescope lsp_implementations', opts) opts.desc = 'Show LSP type definitions' keymap.set('n', 'gt', 'Telescope lsp_type_definitions', opts) opts.desc = 'See available code actions' keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) opts.desc = 'Smart rename' keymap.set('n', 'rn', vim.lsp.buf.rename, opts) opts.desc = 'Show buffer diagnostics' keymap.set('n', 'D', 'Telescope diagnostics bufnf=0', opts) opts.desc = 'Show line diagnostics' keymap.set('n', 'd', vim.diagnostic.open_float, opts) opts.desc = 'Go to previous diagnostic' keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) opts.desc = 'Go to next diagnostic' keymap.set('n', ']d', vim.diagnostic.goto_next, opts) opts.desc = 'Show documentation for what is under cursor' keymap.set('n', 'K', vim.lsp.buf.hover, opts) opts.desc = 'Restart LSP' keymap.set('n', 'rs', ':LspRestart', opts) end, }) local capabilities = cmp_nvim_lsp.default_capabilities() -- local signs = { Error = ' ', Warn = ' ', Hint = '󰠠 ', Info = ' ' } -- for type, icon in pairs(signs) do -- local hl = 'DiagnosticSign' .. type -- vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' }) vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = ' ', [vim.diagnostic.severity.WARN] = ' ', [vim.diagnostic.severity.HINT] = '󰠠 ', [vim.diagnostic.severity.INFO] = ' ', }, texthl = { [vim.diagnostic.severity.ERROR] = 'Error', [vim.diagnostic.severity.WARN] = 'Error', [vim.diagnostic.severity.HINT] = 'Hint', [vim.diagnostic.severity.INFO] = 'Info', }, numhl = { [vim.diagnostic.severity.ERROR] = '', [vim.diagnostic.severity.WARN] = '', [vim.diagnostic.severity.HINT] = '', [vim.diagnostic.severity.INFO] = '', }, }, }) -- end mason_lspconfig.setup_handlers({ -- default handler for installed servers function(server_name) lspconfig[server_name].setup({ capabilities = capabilities, }) end, ['emmet_ls'] = function() -- configure emmet language server lspconfig['emmet_ls'].setup({ capabilities = capabilities, filetypes = { 'html', 'typescriptreact', 'javascriptreact', 'css', 'sass', 'scss', 'less', 'svelte' }, }) end, ['bashls'] = function() lspconfig['bashls'].setup({ capabilities = capabilities, filetypes = { 'sh', 'bash', 'zsh' }, }) end, ['lua_ls'] = function() -- configure lua server (with special settings) lspconfig['lua_ls'].setup({ capabilities = capabilities, settings = { Lua = { -- make the language server recognize "vim" global diagnostics = { globals = { 'vim' }, }, completion = { callSnippet = 'Replace', }, }, }, }) end, }) vim.diagnostic.config({ virtual_text = { prefix = '●', }, signs = { active = signs, }, update_in_insert = true, underline = true, severity_sort = true, float = { focusable = false, style = 'minimal', border = 'rounded', source = true, show_header = true, prefix = '', }, }) end, }