return { { "neovim/nvim-lspconfig", dependencies = { "hrsh7th/cmp-nvim-lsp", }, event = { "BufReadPre", "BufNewFile" }, config = function() local lspconfig = require("lspconfig") local capabilities = require("cmp_nvim_lsp").default_capabilities() local common = { capabilities = capabilities, } local lsps = { "gopls", "lua_ls", "pylsp", "ts_ls", "cssls", "html", } for _, lsp in ipairs(lsps) do lspconfig[lsp].setup(common) end local wk = require("which-key") wk.register({ { "[d", vim.diagnostic.goto_prev, desc = "Previous diagnostic" }, { "]d", vim.diagnostic.goto_next, desc = "Next diagnostic" }, }) vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) wk.register({ { "gD", vim.lsp.buf.declaration, desc = "Go to declaration" }, { "gd", vim.lsp.buf.definition, desc = "Go to definition" }, { "gr", vim.lsp.buf.references, desc = "Go to references" }, { "gi", vim.lsp.buf.implementation, desc = "Go to implementation" }, { "K", vim.lsp.buf.hover, desc = "Show LSP hover info" }, { "", vim.lsp.buf.signature_help, desc = "Show signature help" }, { "D", vim.lsp.buf.type_definition, desc = "Type definition" }, { "rn", vim.lsp.buf.rename, desc = "Rename" }, { "ca", vim.lsp.buf.code_action, desc = "Code action" }, { "F", function() vim.lsp.buf.format({ async = true }) end, desc = "Format buffer" }, ["w"] = { name = "+LSP workspace", a = { vim.lsp.buf.add_workspace_folder, "Add workspace folder" }, r = { vim.lsp.buf.remove_workspace_folder, "Remove workspace folder" }, l = { function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, "List workspace folders", }, }, }, {buffer=ev.buf}) end, }) end, }, }