---@diagnostic disable: param-type-mismatch local function get_arguments() local function get() vim.ui.input({ prompt = "Args: " }, function(input) return vim.split(input or "", " ") ---@diagnostic disable-line: missing-parameter end) end local co = coroutine.running() if co then return coroutine.create(function() local args = get() coroutine.resume(co, args) end) else return get() end end return { adapter = function(callback, config) local handle, pid_or_err local stdout = vim.loop.new_pipe(false) local host = config.host or "127.0.0.1" local port = config.port or "38697" local addr = string.format("%s:%s", host, port) local opts = { stdio = { nil, stdout }, args = { "dap", "-l", addr }, detached = true, } handle, pid_or_err = vim.loop.spawn("dlv", opts, function(code) stdout:close() handle:close() if code ~= 0 then print("dlv exited with code", code) end end) assert(handle, "Error running dlv: " .. tostring(pid_or_err)) stdout:read_start(function(err, chunk) assert(not err, err) if chunk then vim.schedule(function() require("dap.repl").append(chunk) end) end end) -- Wait for delve to start vim.defer_fn(function() callback { type = "server", host = "127.0.0.1", port = port } end, 100) end, configuration = { { type = "go", name = "Debug", request = "launch", program = "${file}", }, { type = "go", name = "Debug (Arguments)", request = "launch", program = "${file}", args = get_arguments, }, { type = "go", name = "Debug Package", request = "launch", program = "${fileDirname}", }, { type = "go", name = "Attach", mode = "local", request = "attach", processId = require("dap.utils").pick_process, }, { type = "go", name = "Debug test", request = "launch", mode = "test", program = "${file}", }, { type = "go", name = "Debug test (go.mod)", request = "launch", mode = "test", program = "./${relativeFileDirname}", }, }, }