aboutsummaryrefslogtreecommitdiffstats
path: root/lua/alpha/dap-fn.lua
diff options
context:
space:
mode:
authorAriel D'Alessandro <dalessandro.ariel@gmail.com>2022-01-25 20:38:04 +0100
committerAriel D'Alessandro <dalessandro.ariel@gmail.com>2022-01-25 20:38:04 +0100
commitd45b90e28752b85c5973b0d8b7d1103812e7f675 (patch)
tree340061ee11611f194f0f2c299e2930a3ca6c1a49 /lua/alpha/dap-fn.lua
parent8618b74356e3ab036967639e580df5b93005d4ae (diff)
downloadnvim-conf-d45b90e28752b85c5973b0d8b7d1103812e7f675.tar.gz
nvim-conf-d45b90e28752b85c5973b0d8b7d1103812e7f675.zip
Change vimspector for dap
Diffstat (limited to 'lua/alpha/dap-fn.lua')
-rw-r--r--lua/alpha/dap-fn.lua72
1 files changed, 72 insertions, 0 deletions
diff --git a/lua/alpha/dap-fn.lua b/lua/alpha/dap-fn.lua
new file mode 100644
index 0000000..c1d1f1c
--- /dev/null
+++ b/lua/alpha/dap-fn.lua
@@ -0,0 +1,72 @@
+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
+
+return M