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:
		
							parent
							
								
									6ba2408cdf
								
							
						
					
					
						commit
						479cb6e4d9
					
				| 
						 | 
					@ -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.
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue