-- Debug Adapter Protocol (DAP) configuration for Go -- Uses delve for Go debugging return { -- nvim-dap configuration { "mfussenegger/nvim-dap", dependencies = { -- Go-specific DAP configuration { "leoluz/nvim-dap-go", opts = { -- Delve configurations delve = { -- Path to delve (uses Mason-installed by default) path = "dlv", -- Initialize with default args initialize_timeout_sec = 20, -- Whether to use debug adapter mode port = "${port}", -- Build flags for delve build_flags = "", }, -- DAP configurations for Go dap_configurations = { { type = "go", name = "Debug", request = "launch", program = "${file}", }, { type = "go", name = "Debug Package", request = "launch", program = "${fileDirname}", }, { type = "go", name = "Debug test", request = "launch", mode = "test", program = "${file}", }, { type = "go", name = "Debug test (go.mod)", request = "launch", mode = "test", program = "./${relativeFileDirname}", }, { type = "go", name = "Attach", request = "attach", mode = "local", processId = require("dap.utils").pick_process, }, }, }, }, }, keys = { -- Debug keymaps { "dB", function() require("dap").set_breakpoint(vim.fn.input("Breakpoint condition: ")) end, desc = "Breakpoint Condition" }, { "db", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" }, { "dc", function() require("dap").continue() end, desc = "Continue" }, { "dC", function() require("dap").run_to_cursor() end, desc = "Run to Cursor" }, { "dg", function() require("dap").goto_() end, desc = "Go to Line (No Execute)" }, { "di", function() require("dap").step_into() end, desc = "Step Into" }, { "dj", function() require("dap").down() end, desc = "Down" }, { "dk", function() require("dap").up() end, desc = "Up" }, { "dl", function() require("dap").run_last() end, desc = "Run Last" }, { "do", function() require("dap").step_out() end, desc = "Step Out" }, { "dO", function() require("dap").step_over() end, desc = "Step Over" }, { "dp", function() require("dap").pause() end, desc = "Pause" }, { "dr", function() require("dap").repl.toggle() end, desc = "Toggle REPL" }, { "ds", function() require("dap").session() end, desc = "Session" }, { "dt", function() require("dap").terminate() end, desc = "Terminate" }, { "dw", function() require("dap.ui.widgets").hover() end, desc = "Widgets" }, -- Go-specific { "dT", function() require("dap-go").debug_test() end, desc = "Debug Go Test" }, { "dL", function() require("dap-go").debug_last_test() end, desc = "Debug Last Go Test" }, }, }, -- DAP UI for better debugging experience { "rcarriga/nvim-dap-ui", dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio", }, keys = { { "du", function() require("dapui").toggle({}) end, desc = "Dap UI" }, { "de", function() require("dapui").eval() end, desc = "Eval", mode = { "n", "v" } }, }, opts = { layouts = { { elements = { { id = "scopes", size = 0.25 }, { id = "breakpoints", size = 0.25 }, { id = "stacks", size = 0.25 }, { id = "watches", size = 0.25 }, }, position = "left", size = 40, }, { elements = { { id = "repl", size = 0.5 }, { id = "console", size = 0.5 }, }, position = "bottom", size = 10, }, }, }, config = function(_, opts) local dap = require("dap") local dapui = require("dapui") dapui.setup(opts) -- Auto open/close DAP UI dap.listeners.after.event_initialized["dapui_config"] = function() dapui.open({}) end dap.listeners.before.event_terminated["dapui_config"] = function() dapui.close({}) end dap.listeners.before.event_exited["dapui_config"] = function() dapui.close({}) end end, }, -- Virtual text for debugging { "theHamsta/nvim-dap-virtual-text", opts = { enabled = true, enabled_commands = true, highlight_changed_variables = true, highlight_new_as_changed = false, show_stop_reason = true, commented = false, only_first_definition = true, all_references = false, filter_references_pattern = "