return { "neovim/nvim-lspconfig", event = "VeryLazy", dependencies = { "williamboman/mason-lspconfig.nvim", "hrsh7th/nvim-cmp", "folke/neodev.nvim" }, config = function() local capabilities = require("cmp_nvim_lsp").default_capabilities() local whichKey = require("which-key") 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 = hl }) end local on_attach = function(_, buffer) whichKey.add({ { "l", group = "LSP" }, { "lb", group = "LSP Buffer" }, { "lbD", function() vim.lsp.buf.declaration() end, buffer = 1, desc = "Go to symbol declaration" }, { "lbR", function() vim.lsp.buf.references() end, buffer = 1, desc = "Go to symbol references" }, { "lbc", function() vim.lsp.buf.code_action() end, buffer = 1, desc = "LSP code action" }, { "lbd", function() vim.lsp.buf.definition() end, buffer = 1, desc = "Go to symbol definition" }, { "lbf", function() vim.lsp.buf.format() end, buffer = 1, desc = "Format file" }, { "lbh", function() vim.lsp.buf.hover() end, buffer = 1, desc = "Hover symbol documentation" }, { "lbi", function() vim.lsp.buf.implementation() end, buffer = 1, desc = "Go to symbol implementation" }, { "lbr", function() vim.lsp.buf.rename() end, buffer = 1, desc = "Rename symbol" }, { "lbs", function() vim.lsp.buf.signature_help() end, buffer = 1, desc = "Go to symbol signature" }, { "lbt", function() vim.lsp.buf.type_definition() end, buffer = 1, desc = "Go to symbol type definition" }, { "ld", group = "LSP Diagnostic" }, { "ldn", function() vim.diagnostic.goto_next() end, desc = "Next LSP diagnostic" }, { "ldo", function() vim.diagnostic.open_float() end, desc = "Open LSP diagnostic" }, { "ldp", function() vim.diagnostic.goto_prev() end, desc = "Previous LSP diagnostic" }, }) end -- Needed in order to get more completion in Lua files for Vim/Neovim require("neodev").setup() local languageServers = { "angularls", "ansiblels", "bashls", "biome", "cssls", --"denols", "docker_compose_language_service", "dockerls", "elmls", "emmet_language_server", "eslint", "gopls", "graphql", "html", "intelephense", "jsonls", "lua_ls", "marksman", "nginx_language_server", "prismals", "rust_analyzer", "sqlls", "svelte", "templ", "ts_ls", "vls", "vuels", "yamlls", } for _, languageServerName in pairs(languageServers) do vim.lsp.config(languageServerName, { capabilities = capabilities, on_attach = on_attach }) end end, }