Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 70 additions & 1 deletion lua/kickstart/plugins/debug.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,76 @@ return {
{ '<F2>', function() require('dap').step_over() end, desc = 'Debug: Step Over' },
{ '<F3>', function() require('dap').step_out() end, desc = 'Debug: Step Out' },
{ '<leader>b', function() require('dap').toggle_breakpoint() end, desc = 'Debug: Toggle Breakpoint' },
{ '<leader>B', function() require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') end, desc = 'Debug: Set Breakpoint' },
{
'<leader>B',
function()
require 'dap.protocol'
local dap = require 'dap'
-- Search for an existing breakpoint 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
for _, candidate in ipairs(buf_bps) do
if candidate.line and candidate.line == vim.fn.line '.' then
return candidate
end
end
return { condition = '', logMessage = '', hitCondition = '', line = vim.fn.line '.' }
end

-- Elicit customization via a UI prompt
---@param bp dap.SourceBreakpoint a breakpoint
local function customize_bp(bp)
local props = {
['Condition'] = {
value = bp.condition,
setter = function(v)
bp.condition = v
end,
},
['Hit Condition'] = {
value = bp.hitCondition,
setter = function(v)
bp.hitCondition = v
end,
},
['Log Message'] = {
value = bp.logMessage,
setter = function(v)
bp.logMessage = v
end,
},
}
local menu_options = {}
for k, _ in pairs(props) do
table.insert(menu_options, k)
end
vim.ui.select(menu_options, {
prompt = 'Edit Breakpoint',
format_item = function(item)
return ('%s: %s'):format(item, props[item].value)
end,
}, function(choice)
if choice == nil then
-- User cancelled the selection
return
end

props[choice].setter(vim.fn.input {
prompt = ('[%s] '):format(choice),
default = props[choice].value,
})

-- 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,
desc = 'Debug: Edit Breakpoint',
},
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{ '<F7>', function() require('dapui').toggle() end, desc = 'Debug: See last session result.' },
},
Expand Down