aboutsummaryrefslogtreecommitdiffstats
path: root/lua/pi/dap/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/pi/dap/init.lua')
-rw-r--r--lua/pi/dap/init.lua108
1 files changed, 108 insertions, 0 deletions
diff --git a/lua/pi/dap/init.lua b/lua/pi/dap/init.lua
new file mode 100644
index 0000000..327dedf
--- /dev/null
+++ b/lua/pi/dap/init.lua
@@ -0,0 +1,108 @@
+local dap, dapui, hydra = require "dap", require "dapui", require "hydra"
+
+dap.set_log_level('TRACE')
+
+-- Setup Virtual Text
+require("nvim-dap-virtual-text").setup {}
+
+for _, ft_path in ipairs(vim.api.nvim_get_runtime_file("lua/pi/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 = 50,
+ position = "right",
+ },
+ {
+ elements = {
+ "repl",
+ "console",
+ },
+ size = 7,
+ 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 ^
+ ^^ _<Esc>_
+]]
+
+hydra {
+ name = "dap",
+ hint = hint,
+ mode = "n",
+ config = {
+ color = "blue",
+ invoke_on_body = true,
+ hint = {
+ border = "rounded",
+ position = "bottom",
+ },
+ },
+ body = "<leader>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,
+ },
+
+ { "<Esc>", nil, { exit = true } },
+ },
+}