feat: Enhances breakpoint editing

The keymapping `<leader>B` is now configured to guide users through the
process of adding a `condition`, `hitCondition`, and `logMessage` to a
breakpoint.
This commit is contained in:
Brian Lehrer 2025-05-13 01:46:02 -07:00
parent 6ba2408cdf
commit 479cb6e4d9
1 changed files with 51 additions and 2 deletions

View File

@ -64,9 +64,58 @@ return {
{ {
'<leader>B', '<leader>B',
function() function()
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') local dap = require 'dap'
-- Search for an existing breakpoing on this line in this buffer
---@return dap.SourceBreakpoint bp that was either found, or an empty placeholder
local function find_bp()
local buf_bps = require('dap.breakpoints').get(vim.fn.bufnr())[vim.fn.bufnr()]
---@type dap.SourceBreakpoint
local bp = { condition = '', logMessage = '', hitCondition = '', line = vim.fn.line '.' }
for _, candidate in ipairs(buf_bps) do
if candidate.line and candidate.line == vim.fn.line '.' then
bp = candidate
break
end
end
return bp
end
-- Elicit customization via a UI prompt
---@param bp dap.SourceBreakpoint a breakpoint
local function customize_bp(bp)
local fields = {
('Condition: (%s)\n'):format(bp.condition),
('Hit Condition: (%s)\n'):format(bp.hitCondition),
('Log Message: (%s)\n'):format(bp.logMessage),
}
vim.ui.select(fields, {
prompt = 'Edit breakpoint',
}, function(choice)
if choice == fields[1] then
bp.condition = vim.fn.input {
prompt = 'Condition: ',
default = bp.condition,
}
elseif choice == fields[2] then
bp.hitCondition = vim.fn.input {
prompt = 'Hit Condition: ',
default = bp.hitCondition,
}
elseif choice == fields[3] then
bp.logMessage = vim.fn.input {
prompt = 'Log Message: ',
default = bp.logMessage,
}
end
-- Set breakpoint for current line, with customizations (see h:dap.set_breakpoint())
dap.set_breakpoint(bp.condition, bp.hitCondition, bp.logMessage)
end)
end
customize_bp(find_bp())
end, end,
desc = 'Debug: Set Breakpoint', desc = 'Debug: Edit Breakpoint',
}, },
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{ {