diff --git a/term/.config/nvim/lua/plugins/debugging.lua b/term/.config/nvim/lua/plugins/debugging.lua index 3e1dbbe..485c218 100644 --- a/term/.config/nvim/lua/plugins/debugging.lua +++ b/term/.config/nvim/lua/plugins/debugging.lua @@ -1,67 +1,141 @@ ---[[ - DEBUGGING.LUA - nvim-dap for Python and JavaScript/TypeScript debugging - Requirements: - Python: pip install debugpy - JS/TS: Build vscode-js-debug manually (see below) -]] - return { - { "mfussenegger/nvim-dap" }, - { "nvim-neotest/nvim-nio" }, - { - "rcarriga/nvim-dap-ui", - dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" }, - config = function() - local dap, dapui = require("dap"), require("dapui") - dapui.setup() - dap.listeners.after.event_initialized["dapui_config"] = dapui.open - vim.keymap.set("n", "", dap.continue, { desc = "Continue" }) - vim.keymap.set("n", "", dap.step_over, { desc = "Step over" }) - vim.keymap.set("n", "", dap.step_into, { desc = "Step into" }) - vim.keymap.set("n", "", dap.step_out, { desc = "Step out" }) - vim.keymap.set("n", "", dap.toggle_breakpoint, { desc = "Breakpoint" }) - vim.keymap.set("n", "du", dapui.toggle, { desc = "DAP UI" }) - end, - }, - { "mfussenegger/nvim-dap-python", dependencies = { "mfussenegger/nvim-dap" } }, + { + "mfussenegger/nvim-dap", + }, + { + "rcarriga/nvim-dap-ui", + dependencies = "nvim-neotest/nvim-nio", + }, + { + "theHamsta/nvim-dap-virtual-text", + dependencies = "mfussenegger/nvim-dap", + }, + { + "mfussenegger/nvim-dap-python", + dependencies = "mfussenegger/nvim-dap", + config = function() + local dap = require("dap") + local dapui = require("dapui") + require("dap-python").setup() + + dapui.setup({ + icons = { expanded = "▾", collapsed = "▸", current_frame = "▸" }, + mappings = { + expand = { "", "<2-LeftMouse>" }, + open = "o", + remove = "d", + edit = "e", + repl = "r", + toggle = "t", + }, + expand_lines = vim.fn.has("nvim-0.7") == 1, + layouts = { + { + elements = { + { id = "scopes", size = 0.25 }, + { id = "breakpoints", size = 0.25 }, + { id = "stacks", size = 0.25 }, + { id = "watches", size = 0.25 }, + }, + size = 0.25, + position = "right", + }, + { + elements = { + { id = "repl", size = 0.5 }, + { id = "console", size = 0.5 }, + }, + position = "bottom", + size = 0.25, + }, + }, + floating = { + max_height = nil, + max_width = nil, + border = "rounded", + mappings = { + close = { "q", "" }, + }, + }, + windows = { indent = 1 }, + }) + + dap.listeners.after.event_initialized["dapui_config"] = function() + dapui.open() + end + dap.listeners.before.event_terminated["dapui_config"] = function() + dapui.close() + end + dap.listeners.before.event_exited["dapui_config"] = function() + dapui.close() + end + + dap.configurations.python = { + { + type = "python", + request = "launch", + name = "Launch file", + program = "${file}", + pythonPath = function() + return vim.fn.exepath("python3") or "python" + end, + }, + { + type = "python", + request = "launch", + name = "Debug current file (integrated terminal)", + program = "${file}", + console = "integratedTerminal", + pythonPath = function() + return vim.fn.exepath("python3") or "python" + end, + }, + { + type = "python", + request = "launch", + name = "Debug with arguments", + program = "${file}", + args = function() + local args = vim.fn.input("Args: ", ""):split(" ") + return args + end, + console = "integratedTerminal", + pythonPath = function() + return vim.fn.exepath("python3") or "python" + end, + }, + { + type = "python", + request = "launch", + name = "Debug test_api.py", + module = "unittest", + args = { "test.test_api", "-v" }, + cwd = "${workspaceFolder}", + pythonPath = function() + return vim.fn.exepath("python3") or "python" + end, + }, + { + type = "python", + request = "launch", + name = "Debug all tests", + module = "unittest", + args = { "discover", "-s", "test", "-v" }, + cwd = "${workspaceFolder}", + pythonPath = function() + return vim.fn.exepath("python3") or "python" + end, + }, + } + + vim.keymap.set("n", "db", dap.toggle_breakpoint, { desc = "Toggle breakpoint" }) + vim.keymap.set("n", "dc", dap.continue, { desc = "Continue" }) + 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", "dr", dap.repl.open, { desc = "Open REPL" }) + vim.keymap.set("n", "dl", dap.run_last, { desc = "Run last debug config" }) + vim.keymap.set("n", "du", dapui.toggle, { desc = "Toggle DAP UI" }) + end, + }, } - ---[[ - To enable JS/TS debugging: - - 1. Build vscode-js-debug: - git clone https://github.com/microsoft/vscode-js-debug - cd vscode-js-debug - npm install --legacy-peer-deps - npx gulp vsDebugServerBundle && mv dist out - - 2. Add this plugin (uncomment inside the return block above): - { - "mxsdev/nvim-dap-vscode-js", - dependencies = { "mfussenegger/nvim-dap" }, - config = function() - require("dap-vscode-js").setup({ - adapters = { "pwa-node", "pwa-chrome" }, - }) - for _, language in ipairs({ "typescript", "javascript" }) do - require("dap").configurations[language] = { - { - type = "pwa-node", - request = "launch", - name = "Launch file", - program = "${file}", - cwd = "${workspaceFolder}", - }, - { - type = "pwa-node", - request = "attach", - name = "Attach to process", - processId = require("dap.utils").pick_process, - cwd = "${workspaceFolder}", - }, - } - end - end, - }, ---]]