aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorAriel D'Alessandro <dalessandro.ariel@gmail.com>2022-07-12 22:57:37 +0200
committerAriel D'Alessandro <dalessandro.ariel@gmail.com>2022-07-12 22:57:37 +0200
commitd9ec8b7e5cf9d37077686bc3733d9e99252b6d38 (patch)
treeb6d051512f4a6ac2259088346c4c9ef4686e246e /lua
parent9f7f27793f09f85141278c43d565b373987c28d1 (diff)
downloadnvim-conf-d9ec8b7e5cf9d37077686bc3733d9e99252b6d38.tar.gz
nvim-conf-d9ec8b7e5cf9d37077686bc3733d9e99252b6d38.zip
refactor the dap configuration
Diffstat (limited to 'lua')
-rw-r--r--lua/alpha/dap-fn.lua86
-rw-r--r--lua/alpha/dap.lua143
-rw-r--r--lua/alpha/plugins.lua1
3 files changed, 54 insertions, 176 deletions
diff --git a/lua/alpha/dap-fn.lua b/lua/alpha/dap-fn.lua
deleted file mode 100644
index a9d7666..0000000
--- a/lua/alpha/dap-fn.lua
+++ /dev/null
@@ -1,86 +0,0 @@
-local dap = require("dap")
-local dapui = require("dapui")
-local widgets = require('dap.ui.widgets')
-local ui = require('dap.ui')
-local api = vim.api
-
-local M = {}
-
-local function new_buf()
- local buf = api.nvim_create_buf(false, true)
- api.nvim_buf_set_option(buf, 'modifiable', false)
- api.nvim_buf_set_option(buf, 'buftype', 'nofile')
- api.nvim_buf_set_keymap(
- buf, "n", "<CR>", "<Cmd>lua require('dap.ui').trigger_actions({ mode = 'first' })<CR>", {})
- api.nvim_buf_set_keymap(
- buf, "n", "a", "<Cmd>lua require('dap.ui').trigger_actions()<CR>", {})
- return buf
-end
-
-local scopes = {
- refresh_listener = 'scopes',
- new_buf = function(view)
- local dap = require('dap')
- local function reset_tree()
- view.tree = nil
- end
- dap.listeners.after['event_terminated'][view] = reset_tree
- dap.listeners.after['event_exited'][view] = reset_tree
- local buf = new_buf()
- api.nvim_buf_attach(buf, false, {
- on_detach = function()
- dap.listeners.after['event_terminated'][view] = nil
- dap.listeners.after['event_exited'][view] = nil
- end
- })
- return buf
- end,
- render = function(view)
- local session = require('dap').session()
- local frame = session and session.current_frame or {}
- local tree = view.tree
- if not tree then
- local spec = vim.deepcopy(require('dap.entity').scope.tree_spec)
- spec.extra_context = { view = view }
- tree = ui.new_tree(spec)
- view.tree = tree
- end
- local layer = view.layer()
- local scopes = frame.scopes or {}
- local render
- render = function(idx, scope)
- if not scope then
- return
- end
-
- if scope.name ~= 'Locals' then
- return
- end
-
- tree.render(layer, scope, function()
- render(next(scopes, idx))
- end)
- end
- render(next(scopes))
- end,
-}
-
-M.scopes = function ()
- local a = widgets.centered_float(scopes)
- -- set cursor at top to make it easier to read
- vim.api.nvim_win_set_cursor(a.win, {1, 0})
-end
-
-M.fullscopes = function ()
- local a = widgets.centered_float(widgets.scopes)
- -- set cursor at top to make it easier to read
- vim.api.nvim_win_set_cursor(a.win, {1, 0})
-end
-
-M.stop = function ()
- dap.terminate()
- dapui.close()
- dap.clear_breakpoints()
-end
-
-return M
diff --git a/lua/alpha/dap.lua b/lua/alpha/dap.lua
index b69af61..4bf0782 100644
--- a/lua/alpha/dap.lua
+++ b/lua/alpha/dap.lua
@@ -1,30 +1,32 @@
-local dap, dapui, dap_install = require("dap"), require("dapui"), require("dap-install")
-local api = vim.api
+local dap, dapui, dap_install, dap_go = require("dap"), require("dapui"), require("dap-install"), require("dap-go")
+
+require("nvim-dap-virtual-text").setup()
dapui.setup({
- layouts = {
- {
- elements = {
- 'scopes',
- 'breakpoints',
- 'stacks',
- 'watches',
- },
- size = 80,
- position = 'right',
- },
- {
- elements = {
- 'repl',
- -- 'console',
- },
- size = 30,
- position = 'bottom',
- },
- },
+ icons = { expanded = "▾", collapsed = "▸" },
+ layouts = {
+ {
+ elements = {
+ "scopes",
+ "breakpoints",
+ "stacks",
+ "watches",
+ },
+ size = 80,
+ position = "left",
+ },
+ {
+ elements = {
+ "repl",
+ -- 'console',
+ },
+ size = 10,
+ position = "bottom",
+ },
+ },
})
-require("dap-go").setup()
+dap_go.setup()
vim.fn.sign_define("DapBreakpoint", { text = "ß", texthl = "", linehl = "", numhl = "" })
@@ -48,78 +50,39 @@ dap_install.config("php", {
-- Events Listeners
dap.listeners.after.event_initialized["dapui_config"] = function()
- dapui.open()
+ dapui.open({})
end
-local function with_win(win, fn, ...)
- local cur_win = api.nvim_get_current_win()
- api.nvim_set_current_win(win)
- local ok, err = pcall(fn, ...)
- api.nvim_set_current_win(cur_win)
- assert(ok, err)
-end
+-- command to start debugging
+-- run dap continue and enable the keybindings
+-- when finish delete all keybindings
-local function jump_to_location(bufnr, line, column)
- -- vscode-go sends columns with 0
- -- That would cause a "Column value outside range" error calling nvim_win_set_cursor
- -- nvim-dap says "columnsStartAt1 = true" on initialize :/
- if column == 0 then
- column = 1
- end
- for _, tab in pairs(api.nvim_list_tabpages()) do
- for _, win in pairs(api.nvim_tabpage_list_wins(tab)) do
- if api.nvim_win_get_buf(win) == bufnr then
- api.nvim_win_set_cursor(win, { line, column - 1 })
- api.nvim_set_current_tabpage(tab)
- api.nvim_set_current_win(win)
- return
- end
- end
- end
- -- TODO review
- -- Buffer isn't active in any window; use the first window that is not special
- -- (Don't want to move to code in the REPL...)
- for _, win in pairs(api.nvim_tabpage_list_wins(0)) do
- local winbuf = api.nvim_win_get_buf(win)
- if api.nvim_buf_get_option(winbuf, "buftype") == "" then
- local bufchanged, _ = pcall(api.nvim_win_set_buf, win, bufnr)
- if bufchanged then
- api.nvim_win_set_cursor(win, { line, column - 1 })
- with_win(win, api.nvim_command, "normal zv")
- return
- end
- end
- end
-end
+local bindings = {
+ { mode = "n", lhs = "<leader>dd", rhs = dap.continue },
+ { mode = "n", lhs = "<leader>dbp", rhs = dap.toggle_breakpoint },
+ { mode = "n", lhs = "<leader>dl", rhs = dap.step_into },
+ { mode = "n", lhs = "<leader>dj", rhs = dap.step_over },
+ { mode = "n", lhs = "<leader>dk", rhs = dap.step_out },
+ { mode = "n", lhs = "<leader>dc", rhs = dap.run_to_cursor },
+ { mode = "v", lhs = "<leader>dv", rhs = dapui.eval },
+}
-dap.listeners.after["event_stopped"]["alpha"] = function(session, body)
- if body.reason ~= "breakpoint" then
- return
- end
- if not session.current_frame then
- return
+vim.keymap.set("n", "<leader>dst", function()
+ dap.continue()
+ for _, bind in pairs(bindings) do
+ vim.keymap.set(bind.mode, bind.lhs, bind.rhs, { noremap = true })
end
- local path = session.current_frame.source.path
- local line = session.current_frame.line
- local column = session.current_frame.column
+end, { noremap = true })
- local bufnr = vim.uri_to_bufnr(vim.uri_from_fname(path))
- vim.fn.bufload(bufnr)
- jump_to_location(bufnr, line, column)
-end
+vim.keymap.set("n", "<leader>dsp", function()
+ dap.terminate()
+ dapui.close({})
+ dap.clear_breakpoints()
+
+ for _, bind in pairs(bindings) do
+ vim.keymap.del("n", bind.lhs)
+ end
+end, { noremap = true })
-vim.keymap.set("n", "<leader>dbp", require("dap").toggle_breakpoint, { noremap = true })
-vim.keymap.set("n", "<leader>dd", require("dap").continue, { noremap = true })
-vim.keymap.set("n", "<leader>de", require("alpha.dap-fn").stop, { noremap = true })
-vim.keymap.set("n", "<leader>dl", require("dap").step_into, { noremap = true })
-vim.keymap.set("n", "<leader>dj", require("dap").step_over, { noremap = true })
-vim.keymap.set("n", "<leader>dk", require("dap").step_out, { noremap = true })
-vim.keymap.set("n", "<leader>dt", require("dap").repl.toggle, { noremap = true })
-vim.keymap.set("n", "<leader>ds", require("alpha.dap-fn").scopes, { noremap = true })
-vim.keymap.set("n", "<leader>da", require("alpha.dap-fn").fullscopes, { noremap = true })
-vim.keymap.set("n", "<leader>dbl", require("dap").list_breakpoints, { noremap = true })
-vim.keymap.set("n", "<leader>dbc", require("dap").clear_breakpoints, { noremap = true })
-vim.keymap.set("n", "<leader>dc", require("dap").run_to_cursor, { noremap = true })
-vim.keymap.set("v", "<leader>dk", require("dapui").eval, { noremap = true })
-- can be skipped since I can do it running the continue and promt to use the "Debug test"
-vim.keymap.set("n", "<leader>dtt", require("dap-go").debug_test, { noremap = true })
+vim.keymap.set("n", "<leader>dtt", dap_go.debug_test, { noremap = true })
diff --git a/lua/alpha/plugins.lua b/lua/alpha/plugins.lua
index a1bf342..c8c7a1b 100644
--- a/lua/alpha/plugins.lua
+++ b/lua/alpha/plugins.lua
@@ -126,6 +126,7 @@ return require("packer").startup(function(use)
use({
"leoluz/nvim-dap-go",
requires = {
+ "theHamsta/nvim-dap-virtual-text",
"rcarriga/nvim-dap-ui",
"mfussenegger/nvim-dap",
{ "Pocco81/DAPInstall.nvim", branch = "dev" },