3 "nvim-neotest/neotest",
5 status = { virtual_text = true },
6 output = { open_on_run = true },
9 if require("lazyvim.util").has("trouble.nvim") then
10 require("trouble").open({ mode = "quickfix", focus = false })
17 config = function(_, opts)
18 local neotest_ns = vim.api.nvim_create_namespace("neotest")
19 vim.diagnostic.config({
21 format = function(diagnostic)
22 -- Replace newline and tab characters with space for more compact diagnostics
23 local message = diagnostic.message:gsub("\n", " "):gsub("\t", " "):gsub("%s+", " "):gsub("^%s+", "")
29 if require("lazyvim.util").has("trouble.nvim") then
30 opts.consumers = opts.consumers or {}
31 -- Refresh and auto close trouble after running tests
32 ---@type neotest.Consumer
33 opts.consumers.trouble = function(client)
34 client.listeners.results = function(adapter_id, results, partial)
38 local tree = assert(client:get_position(nil, { adapter = adapter_id }))
41 for pos_id, result in pairs(results) do
42 if result.status == "failed" and tree:get_key(pos_id) then
46 vim.schedule(function()
47 local trouble = require("trouble")
48 if trouble.is_open() then
62 for name, config in pairs(opts.adapters or {}) do
63 if type(name) == "number" then
64 if type(config) == "string" then
65 config = require(config)
67 adapters[#adapters + 1] = config
68 elseif config ~= false then
69 local adapter = require(name)
70 if type(config) == "table" and not vim.tbl_isempty(config) then
71 local meta = getmetatable(adapter)
74 elseif meta and meta.__call then
77 error("Adapter " .. name .. " does not support setup")
80 adapters[#adapters + 1] = adapter
83 opts.adapters = adapters
86 require("neotest").setup(opts)
90 { "<leader>tt", function() require("neotest").run.run(vim.fn.expand("%")) end, desc = "Run File" },
91 { "<leader>tT", function() require("neotest").run.run(vim.loop.cwd()) end, desc = "Run All Test Files" },
92 { "<leader>tr", function() require("neotest").run.run() end, desc = "Run Nearest" },
93 { "<leader>ts", function() require("neotest").summary.toggle() end, desc = "Toggle Summary" },
94 { "<leader>to", function() require("neotest").output.open({ enter = true, auto_close = true }) end, desc = "Show Output" },
95 { "<leader>tO", function() require("neotest").output_panel.toggle() end, desc = "Toggle Output Panel" },
96 { "<leader>tS", function() require("neotest").run.stop() end, desc = "Stop" },
100 "mfussenegger/nvim-dap",
103 { "<leader>td", function() require("neotest").run.run({strategy = "dap"}) end, desc = "Debug Nearest" },