-- lua/plugins/debug.lua -- DAP debugging: Go + PHP/Xdebug support return { 'mfussenegger/nvim-dap', dependencies = { 'rcarriga/nvim-dap-ui', 'nvim-neotest/nvim-nio', 'mason-org/mason.nvim', 'jay-babu/mason-nvim-dap.nvim', 'leoluz/nvim-dap-go', 'nvim-telescope/telescope-dap.nvim', }, keys = { { '', function() require('dap').continue() end, desc = 'Debug: Start/Continue', }, { '', function() require('dap').step_into() end, desc = 'Debug: Step Into', }, { '', function() require('dap').step_over() end, desc = 'Debug: Step Over', }, { '', function() require('dap').step_out() end, desc = 'Debug: Step Out', }, { '', function() require('dapui').toggle() end, desc = 'Debug: Toggle UI', }, { 'b', function() require('dap').toggle_breakpoint() end, desc = 'Debug: Toggle Breakpoint', }, { 'B', function() require('dap').set_breakpoint(vim.fn.input 'Condition: ') end, desc = 'Debug: Set Conditional Breakpoint', }, { 'dv', function() require('telescope').extensions.dap.variables() end, desc = 'Debug: Find [V]ariables', }, { 'df', function() require('telescope').extensions.dap.frames() end, desc = 'Debug: Find [F]rames', }, { 'dc', function() require('telescope').extensions.dap.commands() end, desc = 'Debug: Find [C]ommands', }, { 'db', function() require('telescope').extensions.dap.list_breakpoints() end, desc = 'Debug: List [B]reakpoints', }, }, config = function() local dap = require 'dap' local dapui = require 'dapui' require('mason-nvim-dap').setup { automatic_installation = true, handlers = {}, ensure_installed = { 'delve', 'php-debug-adapter' }, } dapui.setup { icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, controls = { icons = { pause = '⏸', play = '▶', step_into = '⏎', step_over = '⏭', step_out = '⏮', step_back = 'b', run_last = '▶▶', terminate = '⏹', disconnect = '⏏', }, }, } -- Auto-open/close dapui with debug sessions dap.listeners.after.event_initialized['dapui_config'] = dapui.open dap.listeners.before.event_terminated['dapui_config'] = dapui.close dap.listeners.before.event_exited['dapui_config'] = dapui.close -- Go require('dap-go').setup { delve = { detached = vim.fn.has 'win32' == 0 }, } -- PHP / Xdebug dap.adapters.php = { type = 'executable', command = 'node', args = { vim.fn.stdpath 'data' .. '/mason/packages/php-debug-adapter/extension/out/phpDebug.js' }, } dap.configurations.php = { { type = 'php', request = 'launch', name = 'Listen for Xdebug', port = 9003 }, { type = 'php', request = 'launch', name = 'Listen for Xdebug (DDEV)', port = 9003, pathMappings = { ['/var/www/html'] = '${workspaceFolder}' } }, { type = 'php', request = 'launch', name = 'Run current script', port = 9003, cwd = '${fileDirname}', program = '${file}', runtimeExecutable = 'php', }, } -- Telescope DAP extension require('telescope').load_extension 'dap' end, }