local function setupListeners() local dap = require("dap") local areSet = false dap.listeners.after["event_initialized"]["me"] = function() if not areSet then areSet = true vim.keymap.set("n", "dc", dap.continue, { desc = "Continue", noremap = true }) vim.keymap.set("n", "dC", dap.run_to_cursor, { desc = "Run To Cursor" }) vim.keymap.set("n", "ds", dap.step_over, { desc = "Step Over" }) vim.keymap.set("n", "di", dap.step_into, { desc = "Step Into" }) vim.keymap.set("n", "do", dap.step_out, { desc = "Step Out" }) vim.keymap.set({ "n", "v" }, "dh", require("dap.ui.widgets").hover, { desc = "Hover" }) vim.keymap.set({ "n", "v" }, "de", require("dapui").eval, { desc = "Eval" }) end end dap.listeners.after["event_terminated"]["me"] = function() if areSet then areSet = false vim.keymap.del("n", "dc") vim.keymap.del("n", "dC") vim.keymap.del("n", "ds") vim.keymap.del("n", "di") vim.keymap.del("n", "do") vim.keymap.del({ "n", "v" }, "dh") vim.keymap.del({ "n", "v" }, "de") end end end return { "mfussenegger/nvim-dap", dependencies = { "wojciech-kulik/xcodebuild.nvim", }, config = function() local xcodebuild = require("xcodebuild.integrations.dap") -- TODO: make sure to set path to your codelldb local codelldbPath = os.getenv("HOME") .. "/tools/codelldb-aarch64-darwin/extension/adapter/codelldb" xcodebuild.setup(codelldbPath) local define = vim.fn.sign_define define("DapBreakpoint", { text = "", texthl = "DiagnosticError", linehl = "", numhl = "" }) define("DapBreakpointRejected", { text = "", texthl = "DiagnosticError", linehl = "", numhl = "" }) define("DapStopped", { text = "", texthl = "DiagnosticOk", linehl = "", numhl = "" }) define("DapLogPoint", { text = "", texthl = "DiagnosticInfo", linehl = "", numhl = "" }) define("DapLogPoint", { text = "", texthl = "DiagnosticInfo", linehl = "", numhl = "" }) setupListeners() --when breakpoint is hit, it sets the focus to the buffer with the breakpoint require("dap").defaults.fallback.switchbuf = "usetab,uselast" --stylua: ignore start vim.keymap.set("n", "dd", xcodebuild.build_and_debug, { desc = "Build & Debug" }) vim.keymap.set("n", "dr", xcodebuild.debug_without_build, { desc = "Debug Without Building" }) vim.keymap.set("n", "dt", xcodebuild.debug_tests, { desc = "Debug Tests" }) vim.keymap.set("n", "dT", xcodebuild.debug_class_tests, { desc = "Debug Class Tests" }) vim.keymap.set("n", "b", xcodebuild.toggle_breakpoint, { desc = "Toggle Breakpoint" }) vim.keymap.set("n", "B", xcodebuild.toggle_message_breakpoint, { desc = "Toggle Message Breakpoint" }) --stylua: ignore end vim.keymap.set("n", "dx", function() xcodebuild.terminate_session() require("dap").listeners.after["event_terminated"]["me"]() end, { desc = "Terminate debugger" }) end, }