-- ~/.config/nvim/lua/plugins/custom-lsp.lua return { { 'neovim/nvim-lspconfig', dependencies = { 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', 'hrsh7th/cmp-nvim-lsp', }, config = function() -- Setup Mason require('mason').setup() require('mason-lspconfig').setup() -- LSPs to enable local servers = { 'lua_ls', 'ols', 'zls', 'clangd', 'jsonls', 'html', 'rust_analyzer', 'jdtls', 'eslint', 'pyright', } local lspconfig = require 'lspconfig' local capabilities = require('cmp_nvim_lsp').default_capabilities() for _, server in ipairs(servers) do lspconfig[server].setup { capabilities = capabilities, } end -- Autocommand for keymaps vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) local map = function(keys, func, desc) vim.keymap.set('n', keys, func, { buffer = ev.buf, desc = 'Lsp: ' .. desc }) end local tele = require 'telescope.builtin' map('gd', tele.lsp_definitions, 'Goto Definition') map('fs', tele.lsp_document_symbols, 'Doc Symbols') map('fS', tele.lsp_dynamic_workspace_symbols, 'Dynamic Symbols') map('ft', tele.lsp_type_definitions, 'Goto Type') map('fr', tele.lsp_references, 'Goto References') map('fi', tele.lsp_implementations, 'Goto Impl') map('K', vim.lsp.buf.hover, 'Hover Docs') map('E', vim.diagnostic.open_float, 'Diagnostics') map('k', vim.lsp.buf.signature_help, 'Signature Help') map('rn', vim.lsp.buf.rename, 'Rename') map('ca', vim.lsp.buf.code_action, 'Code Action') map('wf', function() vim.lsp.buf.format { async = true } end, 'Format') vim.keymap.set('v', 'ca', vim.lsp.buf.code_action, { buffer = ev.buf, desc = 'Lsp: Code Action' }) end, }) end, }, }