return { { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) vim.list_extend(opts.ensure_installed, { "go", "gomod", "gowork", "gosum", }) end, }, { "neovim/nvim-lspconfig", opts = { servers = { gopls = { settings = { gopls = { semanticTokens = true, }, }, }, }, setup = { gopls = function() -- workaround for gopls not supporting semantictokensprovider -- https://github.com/golang/go/issues/54531#issuecomment-1464982242 require("lazyvim.util").on_attach(function(client, _) if client.name == "gopls" then if not client.server_capabilities.semanticTokensProvider then local semantic = client.config.capabilities.textDocument.semanticTokens client.server_capabilities.semanticTokensProvider = { full = true, legend = { tokenTypes = semantic.tokenTypes, tokenModifiers = semantic.tokenModifiers, }, range = true, } end end end) -- end workaround end, }, }, }, { "mfussenegger/nvim-dap", optional = true, dependencies = { { "mason.nvim", opts = function(_, opts) opts.ensure_installed = opts.ensure_installed or {} table.insert(opts.ensure_installed, "delve") end, }, }, }, { "nvim-neotest/neotest", optional = true, dependencies = { "nvim-neotest/neotest-go", }, opts = { adapters = { ["neotest-go"] = { -- Here we can set options for neotest-go, e.g. -- args = { "-tags=integration" } }, }, }, }, }