local use_google = require("utils").use_google local deps = { "hrsh7th/nvim-cmp", "nvim-lua/lsp-status.nvim", "VonHeikemen/lsp-zero.nvim", "rcarriga/nvim-notify", "ray-x/go.nvim", "ray-x/guihua.lua", } if not use_google() then table.insert(deps, "Exafunction/codeium.nvim") end return { { "neovim/nvim-lspconfig", dependencies = deps, keys = { { "rn", "lua vim.lsp.buf.rename()" }, { "ca", "lua vim.lsp.buf.code_action()" }, { "L", "lua vim.lsp.buf.hover()" }, { "g0", "lua vim.lsp.buf.document_symbol()" }, { "gr", "Telescope lsp_references" }, { "gW", "lua vim.lsp.buf.workspace_symbol()" }, { "gd", "lua vim.lsp.buf.definition()" }, { "gD", "tab split | lua vim.lsp.buf.definition()" }, { "gi", "lua vim.lsp.buf.implementation()" }, { "gI", "lua vim.lsp.buf.implementation()" }, { "gR", "lua vim.lsp.buf.references()" }, { "", "lua vim.lsp.buf.signature_help()" }, { "gt", "lua vim.lsp.buf.type_definition()" }, { "", "lua vim.lsp.buf.signature_help()", mode = "i" }, { "ca", "lua vim.lsp.buf.code_action()", mode = "v" }, }, config = function() local lsp_status = require("lsp-status") lsp_status.register_progress() vim.opt.spell = true vim.opt.spelllang = { "en_us" } local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) capabilities["codeLens"] = { dynamicRegistration = false } capabilities.textDocument.publishDiagnostics = { relatedInformation = true, versionSupport = false, tagSupport = { valueSet = { 1, 2, }, }, codeDescriptionSupport = true, dataSupport = true, -- layeredDiagnostics = true, } capabilities = vim.tbl_extend("keep", capabilities or {}, lsp_status.capabilities) require("config.lsp-google").setup(capabilities) -- Golang require("go").setup({ lsp_cfg = { capabilities = capabilities, }, }) local format_sync_grp = vim.api.nvim_create_augroup("GoFormat", {}) vim.api.nvim_create_autocmd("BufWritePre", { pattern = "*.go", callback = function() require("go.format").goimport() end, group = format_sync_grp, }) end, }, }