Skip to content

Commit

Permalink
feat(dap): fist naive implementaion
Browse files Browse the repository at this point in the history
  • Loading branch information
olexsmir committed Sep 22, 2022
1 parent 80d0659 commit 413efcc
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 0 deletions.
8 changes: 8 additions & 0 deletions lua/gopher/_utils/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,12 @@ return {
vim.notify(msg, l)
end, 0)
end,

---safe require
---@param name string module name
sreq = function(name)
local ok, m = pcall(require, name)
assert(ok, string.format("gopher.nvim dependency error: %s not installed", name))
return m
end,
}
98 changes: 98 additions & 0 deletions lua/gopher/dap/config.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
local function get_arguments()
local co = coroutine.running()
if co then
return coroutine.create(function()
local args = {}
vim.ui.input({ prompt = "Args: " }, function(input)
args = vim.split(input or "", " ")
end)
coroutine.resume(co, args)
end)
else
local args = {}
vim.ui.input({ prompt = "Args: " }, function(input)
args = vim.split(input or "", " ")
end)
return args
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}",
},
},
}
12 changes: 12 additions & 0 deletions lua/gopher/dap/init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
local cfg = require "gopher.dap.config"
local u = require "gopher._utils"
local M = {}

---setup nvim-dap for golang using
function M.setup()
local dap = u.sreq "dap"
dap.adapters.go = cfg.adapter
dap.configurations.go = cfg.configuration
end

return M

0 comments on commit 413efcc

Please sign in to comment.