258 lines
5.3 KiB
Lua
258 lines
5.3 KiB
Lua
local default_config = {
|
|
delve = {
|
|
path = "dlv",
|
|
initialize_timeout_sec = 20,
|
|
port = "${port}",
|
|
args = {},
|
|
build_flags = "",
|
|
-- Automatically handle the issue on delve Windows versions < 1.24.0
|
|
-- where delve needs to be run in attched mode or it will fail (actually crashes).
|
|
detached = vim.fn.has("win32") == 0,
|
|
output_mode = "remote",
|
|
},
|
|
tests = {
|
|
verbose = false,
|
|
},
|
|
}
|
|
|
|
local function setup_go_configuration(dap, configs)
|
|
local common_debug_configs = {
|
|
{
|
|
type = "go",
|
|
name = "Debug",
|
|
request = "launch",
|
|
program = "${file}",
|
|
buildFlags = configs.delve.build_flags,
|
|
outputMode = configs.delve.output_mode,
|
|
},
|
|
{
|
|
type = "go",
|
|
name = "Debug (Arguments)",
|
|
request = "launch",
|
|
program = "${file}",
|
|
args = get_arguments,
|
|
buildFlags = configs.delve.build_flags,
|
|
outputMode = configs.delve.output_mode,
|
|
},
|
|
{
|
|
type = "go",
|
|
name = "Debug (Arguments & Build Flags)",
|
|
request = "launch",
|
|
program = "${file}",
|
|
args = get_arguments,
|
|
buildFlags = get_build_flags,
|
|
outputMode = configs.delve.output_mode,
|
|
},
|
|
{
|
|
type = "go",
|
|
name = "Debug Package",
|
|
request = "launch",
|
|
program = "${fileDirname}",
|
|
buildFlags = configs.delve.build_flags,
|
|
outputMode = configs.delve.output_mode,
|
|
},
|
|
{
|
|
type = "go",
|
|
name = "Attach",
|
|
mode = "local",
|
|
request = "attach",
|
|
processId = filtered_pick_process,
|
|
buildFlags = configs.delve.build_flags,
|
|
},
|
|
{
|
|
type = "go",
|
|
name = "Debug test",
|
|
request = "launch",
|
|
mode = "test",
|
|
program = "${file}",
|
|
buildFlags = configs.delve.build_flags,
|
|
outputMode = configs.delve.output_mode,
|
|
},
|
|
{
|
|
type = "go",
|
|
name = "Debug test (go.mod)",
|
|
request = "launch",
|
|
mode = "test",
|
|
program = "./${relativeFileDirname}",
|
|
buildFlags = configs.delve.build_flags,
|
|
outputMode = configs.delve.output_mode,
|
|
},
|
|
}
|
|
|
|
if dap.configurations.go == nil then
|
|
dap.configurations.go = {}
|
|
end
|
|
|
|
for _, config in ipairs(common_debug_configs) do
|
|
table.insert(dap.configurations.go, config)
|
|
end
|
|
|
|
if configs == nil or configs.dap_configurations == nil then
|
|
return
|
|
end
|
|
|
|
for _, config in ipairs(configs.dap_configurations) do
|
|
if config.type == "go" then
|
|
table.insert(dap.configurations.go, config)
|
|
end
|
|
end
|
|
end
|
|
|
|
return {
|
|
"leoluz/nvim-dap-go",
|
|
dependencies = { "mfussenegger/nvim-dap" },
|
|
opts = true,
|
|
config = function()
|
|
local dap, dapui = require("dap"), require("dapui")
|
|
|
|
dap.adapters.go = {
|
|
type = "server",
|
|
port = "${port}",
|
|
executable = {
|
|
command = "dlv",
|
|
args = { "dap", "-l", "127.0.0.1:${port}" },
|
|
},
|
|
}
|
|
|
|
setup_go_configuration(dap, default_config)
|
|
|
|
dap.defaults.fallback.terminal_win_cmd = "enew | set filetype=dap-terminal"
|
|
dap.listeners.before.attach.dapui_config = function()
|
|
dapui.open()
|
|
end
|
|
dap.listeners.before.launch.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
|
|
|
|
vim.api.nvim_set_hl(0, "DapBreakpoint", { ctermbg = 0, fg = "#993939", bg = "#31353f" })
|
|
vim.api.nvim_set_hl(0, "DapLogPoint", { ctermbg = 0, fg = "#61afef", bg = "#31353f" })
|
|
vim.api.nvim_set_hl(0, "DapStopped", { ctermbg = 0, fg = "#98c379", bg = "#31353f" })
|
|
|
|
vim.fn.sign_define(
|
|
"DapBreakpoint",
|
|
{ text = "!", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DapBreakpointCondition",
|
|
{ text = "?", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DapBreakpointRejected",
|
|
{ text = "RJ", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DapLogPoint",
|
|
{ text = "i", texthl = "DapLogPoint", linehl = "DapLogPoint", numhl = "DapLogPoint" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DapStopped",
|
|
{ text = "→", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" }
|
|
)
|
|
end,
|
|
keys = {
|
|
{
|
|
"<F5>",
|
|
function()
|
|
require("dap").continue()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<F10>",
|
|
function()
|
|
require("dap").step_over()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<F11>",
|
|
function()
|
|
require("dap").step_into()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<F12>",
|
|
function()
|
|
require("dap").step_out()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<leader>dc",
|
|
function()
|
|
require("dap").continue()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<leader>so",
|
|
function()
|
|
require("dap").step_over()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<leader>si",
|
|
function()
|
|
require("dap").step_into()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<leader>st",
|
|
function()
|
|
require("dap").step_out()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<leader>b",
|
|
function()
|
|
require("dap").toggle_breakpoint()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<A-b>",
|
|
function()
|
|
require("dap").toggle_breakpoint()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<Leader>B",
|
|
function()
|
|
require("dap").set_breakpoint()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<Leader>lp",
|
|
function()
|
|
require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point message: "))
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<Leader>dr",
|
|
function()
|
|
require("dap").repl.open()
|
|
end,
|
|
silent = true,
|
|
},
|
|
{
|
|
"<Leader>dl",
|
|
function()
|
|
require("dap").run_last()
|
|
end,
|
|
silent = true,
|
|
},
|
|
},
|
|
}
|