From 8fc48402953a9d91e5c05662c7fa6dfae8605fc9 Mon Sep 17 00:00:00 2001 From: adalessa Date: Sat, 4 Mar 2023 16:14:13 +0100 Subject: feat: improve dap --- lua/alpha/dap.lua | 175 ----------------------------------- lua/alpha/dap/configs/golang.lua | 1 + lua/alpha/dap/configs/javascript.lua | 45 +++++++++ lua/alpha/dap/configs/php.lua | 27 ++++++ lua/alpha/dap/configs/rust.lua | 57 ++++++++++++ lua/alpha/dap/init.lua | 106 +++++++++++++++++++++ lua/alpha/lsp/tools.lua | 2 + 7 files changed, 238 insertions(+), 175 deletions(-) delete mode 100644 lua/alpha/dap.lua create mode 100644 lua/alpha/dap/configs/golang.lua create mode 100644 lua/alpha/dap/configs/javascript.lua create mode 100644 lua/alpha/dap/configs/php.lua create mode 100644 lua/alpha/dap/configs/rust.lua create mode 100644 lua/alpha/dap/init.lua (limited to 'lua') diff --git a/lua/alpha/dap.lua b/lua/alpha/dap.lua deleted file mode 100644 index a89d72e..0000000 --- a/lua/alpha/dap.lua +++ /dev/null @@ -1,175 +0,0 @@ -local dap, dapui, dap_go = require "dap", require "dapui", require "dap-go" - -require("nvim-dap-virtual-text").setup {} --- dap.set_log_level('TRACE') - -dap_go.setup() - -dapui.setup { - icons = { expanded = "▾", collapsed = "▸" }, - layouts = { - { - elements = { - "scopes", - "breakpoints", - "stacks", - "watches", - }, - size = 80, - position = "left", - }, - { - elements = { - "repl", - "console", - }, - size = 10, - position = "bottom", - }, - }, -} - -vim.fn.sign_define("DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" }) -vim.fn.sign_define("DapStopped", { text = "▶", texthl = "", linehl = "", numhl = "" }) -vim.fn.sign_define("DapBreakpointRejected", { text = "🚫", texthl = "", linehl = "", numhl = "" }) -vim.fn.sign_define("DapBreakpointCondition", { text = "❓", texthl = "", linehl = "", numhl = "" }) -vim.fn.sign_define("DapLogPoint", { text = "💬", texthl = "", linehl = "", numhl = "" }) - -dap.adapters.php = { - type = "executable", - command = "php-debug-adapter", -} - -dap.configurations.php = { - { - type = "php", - request = "launch", - name = "Laravel", - port = 9003, - pathMappings = { - ["/var/www/html"] = "${workspaceFolder}", - }, - }, - { - type = "php", - request = "launch", - name = "Symfony", - port = 9003, - pathMappings = { - ["/app"] = "${workspaceFolder}", - }, - }, -} - -require("dap-vscode-js").setup { - debugger_cmd = { "js-debug-adapter" }, - adapters = { "pwa-node", "pwa-chrome", "node-terminal" }, -} - -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", - processId = require("dap.utils").pick_process, - cwd = "${workspaceFolder}", - }, - } -end - -for _, language in ipairs { "typescriptreact", "javascriptreact" } do - require("dap").configurations[language] = { - { - type = "pwa-chrome", - name = "Attach - Remote Debugging", - request = "attach", - program = "${file}", - cwd = vim.fn.getcwd(), - sourceMaps = true, - protocol = "inspector", - port = 9222, - webRoot = "${workspaceFolder}", - }, - { - type = "pwa-chrome", - name = "Launch Chrome", - request = "launch", - url = "http://localhost:3000", - }, - } -end - --- Events Listeners -dap.listeners.after.event_initialized["dapui_config"] = function() - dapui.open {} -end - -local hydra = require "hydra" -local hint = [[ - Nvim DAP - _d_: Start/Continue _j_: StepOver _k_: StepOut _l_: StepInto ^ - _bp_: Toogle Breakpoint _bc_: Conditional Breakpoint ^ - _?_: log point ^ - _c_: Run To Cursor ^ - _h_: Show information of the variable under the cursor ^ - _x_: Stop Debbuging ^ - ^^ __ -]] - -hydra { - name = "dap", - hint = hint, - mode = "n", - config = { - color = "blue", - invoke_on_body = true, - hint = { - border = "rounded", - position = "bottom", - }, - }, - body = "d", - heads = { - { "d", dap.continue }, - { "bp", dap.toggle_breakpoint }, - { "l", dap.step_into }, - { "j", dap.step_over }, - { "k", dap.step_out }, - { "h", dapui.eval }, - { "c", dap.run_to_cursor }, - { - "bc", - function() - vim.ui.input({ prompt = "Condition: " }, function(condition) - dap.set_breakpoint(condition) - end) - end, - }, - { - "?", - function() - vim.ui.input({ prompt = "Log: " }, function(log) - dap.set_breakpoint(nil, nil, log) - end) - end, - }, - { - "x", - function() - dap.terminate() - dapui.close {} - dap.clear_breakpoints() - end, - }, - - { "", nil, { exit = true } }, - }, -} diff --git a/lua/alpha/dap/configs/golang.lua b/lua/alpha/dap/configs/golang.lua new file mode 100644 index 0000000..1ec449a --- /dev/null +++ b/lua/alpha/dap/configs/golang.lua @@ -0,0 +1 @@ +require("dap-go").setup() diff --git a/lua/alpha/dap/configs/javascript.lua b/lua/alpha/dap/configs/javascript.lua new file mode 100644 index 0000000..b910f30 --- /dev/null +++ b/lua/alpha/dap/configs/javascript.lua @@ -0,0 +1,45 @@ +require("dap-vscode-js").setup { + debugger_cmd = { "js-debug-adapter" }, + adapters = { "pwa-node", "pwa-chrome", "node-terminal" }, +} + +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", + processId = require("dap.utils").pick_process, + cwd = "${workspaceFolder}", + }, + } +end + +for _, language in ipairs { "typescriptreact", "javascriptreact" } do + require("dap").configurations[language] = { + { + type = "pwa-chrome", + name = "Attach - Remote Debugging", + request = "attach", + program = "${file}", + cwd = vim.fn.getcwd(), + sourceMaps = true, + protocol = "inspector", + port = 9222, + webRoot = "${workspaceFolder}", + }, + { + type = "pwa-chrome", + name = "Launch Chrome", + request = "launch", + url = "http://localhost:3000", + }, + } +end diff --git a/lua/alpha/dap/configs/php.lua b/lua/alpha/dap/configs/php.lua new file mode 100644 index 0000000..968bb9d --- /dev/null +++ b/lua/alpha/dap/configs/php.lua @@ -0,0 +1,27 @@ +local dap = require("dap") + +dap.adapters.php = { + type = "executable", + command = "php-debug-adapter", +} + +dap.configurations.php = { + { + type = "php", + request = "launch", + name = "Laravel", + port = 9003, + pathMappings = { + ["/var/www/html"] = "${workspaceFolder}", + }, + }, + { + type = "php", + request = "launch", + name = "Symfony", + port = 9003, + pathMappings = { + ["/app"] = "${workspaceFolder}", + }, + }, +} diff --git a/lua/alpha/dap/configs/rust.lua b/lua/alpha/dap/configs/rust.lua new file mode 100644 index 0000000..9ca976f --- /dev/null +++ b/lua/alpha/dap/configs/rust.lua @@ -0,0 +1,57 @@ +local dap = require("dap") + +local rust_adapter = nil +local rust_adapters = { "lldb-vscode", "codelldb" } +for _, adapter in pairs(rust_adapters) do + if vim.fn.executable(adapter) then + rust_adapter = adapter + end +end + +if rust_adapter ~= nil then + dap.adapters.lldb = { + type = "executable", + command = rust_adapter, + name = "lldb", + } + + dap.configurations.rust = { + { + name = "launch", + type = "lldb", + request = "launch", + program = function() + local dir = vim.fn.getcwd() + return dir .. "/target/debug/" .. vim.fs.basename(dir) + end, + cwd = "${workspaceFolder}", + stopOnEntry = false, + args = function() + local resp = vim.fn.input "Arguments: " + if resp == "" then + return {} + end + + return vim.fn.split(resp, " ") + end, + }, + { + name = "custom", + type = "lldb", + request = "launch", + program = function() + return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file") + end, + cwd = "${workspaceFolder}", + stopOnEntry = false, + args = function() + local resp = vim.fn.input "Arguments: " + if resp == "" then + return {} + end + + return vim.fn.split(resp, " ") + end, + }, + } +end diff --git a/lua/alpha/dap/init.lua b/lua/alpha/dap/init.lua new file mode 100644 index 0000000..1d69cf9 --- /dev/null +++ b/lua/alpha/dap/init.lua @@ -0,0 +1,106 @@ +local dap, dapui, hydra = require "dap", require "dapui", require "hydra" + +-- Setup Virtual Text +require("nvim-dap-virtual-text").setup {} + +for _, ft_path in ipairs(vim.api.nvim_get_runtime_file("lua/alpha/dap/configs/*.lua", true)) do + loadfile(ft_path)() +end + +-- Signs +vim.fn.sign_define("DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" }) +vim.fn.sign_define("DapStopped", { text = "▶", texthl = "", linehl = "", numhl = "" }) +vim.fn.sign_define("DapBreakpointRejected", { text = "🚫", texthl = "", linehl = "", numhl = "" }) +vim.fn.sign_define("DapBreakpointCondition", { text = "❓", texthl = "", linehl = "", numhl = "" }) +vim.fn.sign_define("DapLogPoint", { text = "💬", texthl = "", linehl = "", numhl = "" }) + +-- UI structure +dapui.setup { + icons = { expanded = "▾", collapsed = "▸" }, + layouts = { + { + elements = { + "scopes", + "breakpoints", + "stacks", + "watches", + }, + size = 80, + position = "left", + }, + { + elements = { + "repl", + "console", + }, + size = 10, + position = "bottom", + }, + }, +} + +-- Events Listeners +dap.listeners.after.event_initialized["dapui_config"] = function() + dapui.open {} +end + +local hint = [[ + Nvim DAP + _d_: Start/Continue _j_: StepOver _k_: StepOut _l_: StepInto ^ + _bp_: Toogle Breakpoint _bc_: Conditional Breakpoint ^ + _?_: log point ^ + _c_: Run To Cursor ^ + _h_: Show information of the variable under the cursor ^ + _x_: Stop Debbuging ^ + ^^ __ +]] + +hydra { + name = "dap", + hint = hint, + mode = "n", + config = { + color = "blue", + invoke_on_body = true, + hint = { + border = "rounded", + position = "bottom", + }, + }, + body = "d", + heads = { + { "d", dap.continue }, + { "bp", dap.toggle_breakpoint }, + { "l", dap.step_into }, + { "j", dap.step_over }, + { "k", dap.step_out }, + { "h", dapui.eval }, + { "c", dap.run_to_cursor }, + { + "bc", + function() + vim.ui.input({ prompt = "Condition: " }, function(condition) + dap.set_breakpoint(condition) + end) + end, + }, + { + "?", + function() + vim.ui.input({ prompt = "Log: " }, function(log) + dap.set_breakpoint(nil, nil, log) + end) + end, + }, + { + "x", + function() + dap.terminate() + dapui.close {} + dap.clear_breakpoints() + end, + }, + + { "", nil, { exit = true } }, + }, +} diff --git a/lua/alpha/lsp/tools.lua b/lua/alpha/lsp/tools.lua index 68607d5..4eb40b3 100644 --- a/lua/alpha/lsp/tools.lua +++ b/lua/alpha/lsp/tools.lua @@ -1,4 +1,6 @@ return { "go-debug-adapter", "php-debug-adapter", + "js-debug-adapter", + "codelldb", } -- cgit v1.2.3