return { { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) opts.ensure_installed = opts.ensure_installed or {} vim.list_extend(opts.ensure_installed, { "go", "gomod", "gosum", "gotmpl", "gowork" }) end, }, { "williamboman/mason-lspconfig.nvim", opts = function(_, opts) opts.ensure_installed = opts.ensure_installed or {} vim.list_extend(opts.ensure_installed, { "gopls" }) end, }, { "pojokcodeid/auto-conform.nvim", event = "VeryLazy", opts = function(_, opts) local package = "gofumpt" vim.list_extend(opts.ensure_installed, { package }) opts.formatters_by_ft.gofumpt = { package } end, }, { "pojokcodeid/auto-lint.nvim", opts = function(_, opts) opts.linters_by_ft = opts.linters_by_ft or {} vim.list_extend(opts.ensure_installed, { "golangci-lint" }) opts.linters_by_ft.php = { "golangci-lint" } end, }, { "nvim-neotest/neotest", event = "VeryLazy", dependencies = { "nvim-lua/plenary.nvim", "antoinemadec/FixCursorHold.nvim", "nvim-treesitter/nvim-treesitter", "nvim-neotest/neotest-plenary", "nvim-neotest/neotest-vim-test", "nvim-neotest/nvim-nio", { "fredrikaverpil/neotest-golang", dependencies = { { "leoluz/nvim-dap-go", opts = {}, }, }, branch = "main", }, }, opts = function(_, opts) opts.adapters = opts.adapters or {} opts.adapters["neotest-golang"] = { go_test_args = { "-v", "-race", "-count=1", "-timeout=60s", "-coverprofile=" .. vim.fn.getcwd() .. "/coverage.out", }, dap_go_enabled = true, } end, config = function(_, opts) if opts.adapters then local adapters = {} for name, config in pairs(opts.adapters or {}) do if type(name) == "number" then if type(config) == "string" then config = require(config) end adapters[#adapters + 1] = config elseif config ~= false then local adapter = require(name) if type(config) == "table" and not vim.tbl_isempty(config) then local meta = getmetatable(adapter) if adapter.setup then adapter.setup(config) elseif meta and meta.__call then adapter(config) else error("Adapter " .. name .. " does not support setup") end end adapters[#adapters + 1] = adapter end end opts.adapters = adapters end require("neotest").setup(opts) end, -- stylua: ignore keys = { { "T","",desc="  Test"}, { "Ta", function() require("neotest").run.attach() end, desc = "[t]est [a]ttach" }, { "Tf", function() require("neotest").run.run(vim.fn.expand("%")) end, desc = "[t]est run [f]ile" }, { "TA", function() require("neotest").run.run(vim.uv.cwd()) end, desc = "[t]est [A]ll files" }, { "TS", function() require("neotest").run.run({ suite = true }) end, desc = "[t]est [S]uite" }, { "Tn", function() require("neotest").run.run() end, desc = "[t]est [n]earest" }, { "Tl", function() require("neotest").run.run_last() end, desc = "[t]est [l]ast" }, { "Ts", function() require("neotest").summary.toggle() end, desc = "[t]est [s]ummary" }, { "To", function() require("neotest").output.open({ enter = true, auto_close = true }) end, desc = "[t]est [o]utput" }, { "TO", function() require("neotest").output_panel.toggle() end, desc = "[t]est [O]utput panel" }, { "Tt", function() require("neotest").run.stop() end, desc = "[t]est [t]erminate" }, { "Td", function() require("neotest").run.run({ suite = false, strategy = "dap" }) end, desc = "Debug nearest test" }, }, }, { "rcarriga/nvim-dap-ui", lazy = true, event = "BufRead", dependencies = { { "mfussenegger/nvim-dap", lazy = true }, { "nvim-neotest/nvim-nio", lazy = true }, { "theHamsta/nvim-dap-virtual-text", opts = { virt_text_win_col = 80, }, }, }, config = function() require("pcode.user.dapui") end, keys = { { "d", "", desc = "  Debug" }, { "dt", "lua require'dap'.toggle_breakpoint()", desc = "Toggle Breakpoint" }, { "db", "lua require'dap'.step_back()", desc = "Step Back" }, { "dc", "lua require'dap'.continue()", desc = "Continue" }, { "dC", "lua require'dap'.run_to_cursor()", desc = "Run To Cursor" }, { "dd", "lua require'dap'.disconnect()", desc = "Disconnect" }, { "dg", "lua require'dap'.session()", desc = "Get Session" }, { "di", "lua require'dap'.step_into()", desc = "Step Into" }, { "do", "lua require'dap'.step_over()", desc = "Step Over" }, { "du", "lua require'dap'.step_out()", desc = "Step Out" }, { "dp", "lua require'dap'.pause()", desc = "Pause" }, { "dr", "lua require'dap'.repl.toggle()", desc = "Toggle Repl" }, { "ds", "lua require'dap'.continue()", desc = "Start" }, { "dq", "lua require'dap'.close()", desc = "Quit" }, { "dU", "lua require'dapui'.toggle({reset = true})", desc = "Toggle UI" }, }, }, { "jay-babu/mason-nvim-dap.nvim", lazy = true, event = "BufRead", dependencies = { "williamboman/mason.nvim", "mfussenegger/nvim-dap" }, config = function() require("mason-nvim-dap").setup({ automatic_installation = true, automatic_setup = true, handlers = {}, ensure_installed = { "delve" }, }) end, }, }