From 3fe4aa1205a7f09a4fedc4bdd8ecd086c9768473 Mon Sep 17 00:00:00 2001 From: "Radu Macocian (admac)" Date: Fri, 26 Jun 2026 10:29:35 +0200 Subject: [PATCH] added go dap --- .config/nvim/after/plugin/dap.lua | 9 +++++- .config/nvim/lua/dap/dap-go.lua | 53 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 .config/nvim/lua/dap/dap-go.lua diff --git a/.config/nvim/after/plugin/dap.lua b/.config/nvim/after/plugin/dap.lua index 48bc41e..70e8b83 100644 --- a/.config/nvim/after/plugin/dap.lua +++ b/.config/nvim/after/plugin/dap.lua @@ -10,6 +10,7 @@ dap.listeners.after.event_exited["dapui_config"] = function() dapui.close() end local dotnet = require("dap.dap-dotnet") local odoo = require("dap.dap-odoo") local haskell = require("dap.dap-haskell") +local go = require("dap.dap-go") vim.keymap.set("n", "5", function() @@ -18,6 +19,10 @@ vim.keymap.set("n", "5", function() return end local ft = vim.bo.filetype + if ft == "go" then + go.debug_go() + return + end if ft == "cs" or ft == "fsharp" or ft == "vb" then dotnet.debug_dotnet_from_sln() return @@ -39,7 +44,9 @@ vim.keymap.set("n", "b", function() dap.toggle_breakpoint() end) vim.keymap.set("n", "B", function() dap.set_breakpoint(vim.fn.input("Breakpoint condition: ")) end) vim.keymap.set("n", "qd", function() dap.terminate() end) vim.keymap.set("n", "rd", function() dap.restart() end) -vim.keymap.set("n", "dt", odoo.run_odoo_test_at_cursor, { desc = "Debug Odoo Test unde Cursor" }) +vim.keymap.set("n", "dt", function() + odoo.run_odoo_test_at_cursor() +end, { desc = "Debug Test under Cursor" }) dap.configurations.python = { { diff --git a/.config/nvim/lua/dap/dap-go.lua b/.config/nvim/lua/dap/dap-go.lua new file mode 100644 index 0000000..46f8ab2 --- /dev/null +++ b/.config/nvim/lua/dap/dap-go.lua @@ -0,0 +1,53 @@ +local dap = require("dap") + +local M = {} + +-- Locate the delve binary (prefer mason, fall back to PATH). +local function dlv_command() + local mason = vim.fn.expand("$HOME/.local/share/nvim/mason/bin/dlv") + if vim.fn.filereadable(mason) == 1 then + return mason + end + return "dlv" +end + +-- Adapter: run delve in DAP server mode on a free port. +dap.adapters.go = { + type = "server", + port = "${port}", + executable = { + command = dlv_command(), + args = { "dap", "-l", "127.0.0.1:${port}" }, + }, +} + +-- Walk upwards from the current file to find the Go module root (go.mod). +local function find_go_root() + local start = vim.fn.expand("%:p:h") + if start == "" then + start = vim.fn.getcwd() + end + local found = vim.fs.find("go.mod", { upward = true, path = start })[1] + if found then + return vim.fn.fnamemodify(found, ":h") + end + return nil +end + +-- Find the module root and launch a delve debug session of the whole project. +function M.debug_go() + local root = find_go_root() + if not root then + vim.notify("No go.mod found upwards from current file.", vim.log.levels.ERROR) + return + end + dap.run({ + type = "go", + request = "launch", + name = "Debug project", + program = root, + cwd = root, + }) +end + +return M