dotfiles/dot_config/nvim/after/plugin/dap.lua
2026-02-06 09:15:12 +01:00

81 lines
2.5 KiB
Lua

-- English comments only.
local ok_dap, dap = pcall(require, "dap")
if not ok_dap then return end
local ok_dapui, dapui = pcall(require, "dapui")
if not ok_dapui then return end
dapui.setup({
layouts = {
{
elements = {
{ id = "scopes", size = 0.35 },
{ id = "breakpoints", size = 0.20 },
{ id = "stacks", size = 0.25 },
{ id = "watches", size = 0.20 },
},
position = "left",
size = 45,
},
{
elements = {
{ id = "repl", size = 0.50 },
{ id = "console", size = 0.50 },
},
position = "bottom",
size = 12,
},
},
})
-- Auto open/close dapui
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
-- Visible signs in gutter
vim.fn.sign_define("DapBreakpoint", { text = "", texthl = "DiagnosticError" })
vim.fn.sign_define("DapBreakpointCondition", { text = "", texthl = "DiagnosticWarn" })
vim.fn.sign_define("DapLogPoint", { text = "", texthl = "DiagnosticInfo" })
vim.fn.sign_define("DapStopped", { text = "", texthl = "DiagnosticOk" })
-- Keymaps
vim.keymap.set("n", "<F5>", dap.continue, { desc = "DAP continue" })
vim.keymap.set("n", "<F10>", dap.step_over, { desc = "DAP step over" })
vim.keymap.set("n", "<F11>", dap.step_into, { desc = "DAP step into" })
vim.keymap.set("n", "<F12>", dap.step_out, { desc = "DAP step out" })
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "DAP toggle breakpoint" })
vim.keymap.set("n", "<leader>dB", function()
dap.set_breakpoint(vim.fn.input("Breakpoint condition: "))
end, { desc = "DAP conditional breakpoint" })
vim.keymap.set("n", "<leader>dc", dap.clear_breakpoints, { desc = "DAP clear breakpoints" })
vim.keymap.set("n", "<leader>dl", function()
dap.run_last()
end, { desc = "DAP run last" })
vim.keymap.set("n", "<leader>dr", dap.repl.open, { desc = "DAP REPL" })
vim.keymap.set("n", "<leader>du", dapui.toggle, { desc = "DAP UI toggle" })
-- Evaluate helpers
vim.keymap.set("n", "<leader>de", function()
dapui.eval()
end, { desc = "DAP eval under cursor" })
vim.keymap.set("v", "<leader>de", function()
dapui.eval()
end, { desc = "DAP eval selection" })
-- Optional: hover to eval during debug (nice IDE behavior)
vim.keymap.set("n", "<leader>dh", function()
dapui.eval()
end, { desc = "DAP hover eval" })