diff options
Diffstat (limited to '.config/nvim/lua/plugins/dap.lua')
| -rw-r--r-- | .config/nvim/lua/plugins/dap.lua | 382 |
1 files changed, 319 insertions, 63 deletions
diff --git a/.config/nvim/lua/plugins/dap.lua b/.config/nvim/lua/plugins/dap.lua index 3d7059a..a3e40df 100644 --- a/.config/nvim/lua/plugins/dap.lua +++ b/.config/nvim/lua/plugins/dap.lua @@ -1,57 +1,208 @@ local dap = require('dap') -dap.adapters.lldb = { +--dap.defaults.fallback.external_terminal = { +-- command = '/usr/bin/wezterm'; +-- args = {'-e'}; +--} +--dap.adapters.lldb = { +-- type = 'executable', +-- --command = '/usr/bin/lldb-vscode', -- adjust as needed, must be absolute path +-- --command = '/usr/bin/vscode-lldb', -- adjust as needed, must be absolute path +-- command = 'codelldb', +-- --command = 'lldb', +-- --command = codelldb_root, +-- --command = vim.fn.stdpath("data") .. '/mason/bin/codelldb', +-- name = 'lldb', +-- host = '127.0.0.1', +-- port = 13000 +--} +-- +--local lldb = { +-- name = "Launch lldb", +-- type = "lldb", -- matches the adapter +-- request = "launch", -- could also attach to a currently running process +-- program = function() +-- return vim.fn.input( +-- "Path to executable: ", +-- vim.fn.getcwd() .. "/", +-- "file" +-- ) +-- end, +-- cwd = "${workspaceFolder}", +-- stopOnEntry = false, +-- args = {}, +-- runInTerminal = false, +-- --type = 'server', +-- port = "${port}", +-- executable = { +-- --command = vim.fn.stdpath("data") .. '/mason/bin/codelldb', +-- args = { "--port", "${port}" }, +-- } +--} +dap.adapters.cppdbg = { + id = 'cppdbg', type = 'executable', - --command = '/usr/bin/lldb-vscode', -- adjust as needed, must be absolute path - --command = '/usr/bin/vscode-lldb', -- adjust as needed, must be absolute path - command = 'codelldb', - --command = 'lldb', - --command = codelldb_root, - name = 'lldb' + --command = vim.fn.stdpath('data') .. '/mason/bin/OpenDebugAD7', + command = os.getenv("HOME") .. '/apps/cpptools/extension/debugAdapters/bin/OpenDebugAD7', } --- cpp (c,c++,rust) +dap.adapters.codelldb = { + type = 'server', + port = '${port}', + --host = "localhost", + --host = '127.0.0.1', + --port = 13000, -- 💀 Use the port printed out or specified with `--port` + executable = { + --command = os.getenv("HOME") .. '/apps/codelldb/extension/adapter/codelldb', + command = os.getenv("HOME") .. "/.vscode-oss/extensions/vadimcn.vscode-lldb-1.9.0-universal/adapter/codelldb", + args = {'--port', '${port}'}, + }, + --detached = true, +} + +dap.adapters.lldb = { + type = 'executable', + command = '/usr/bin/lldb-vscode', + name = "lldb" +} dap.configurations.cpp = { { - name = 'Launch', - type = 'lldb', - request = 'launch', - --program = function() - -- return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + name = "Launch file", + --type = "lldb", + --type = "cppdbg", + type = "codelldb", + request = "launch", + --request = "Attach", + --processId = function() + -- return tonumber(vim.fn.input({ prompt = "Pid: "})) --end, - terminal = 'integrated', - console = 'integratedTerminal', + cwd = '${workspaceFolder}', program = function() - return vim.fn.input('program: ', vim.loop.cwd() .. '/', 'file') + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, - cwd = "${workspaceFolder}", - stopOnEntry = false, + --program = function() + -- -- First, check if exists CMakeLists.txt + -- local cwd = vim.fn.getcwd() + -- if (file.exists(cwd, "CMakeLists.txt")) then + -- -- Todo. Then invoke cmake commands + -- -- Then ask user to provide execute file + -- return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file") + -- else + -- local fileName = vim.fn.expand("%:t:r") + -- if (not file.exists(cwd, "bin")) then + -- -- create this directory + -- os.execute("mkdir " .. "bin") + -- end + -- local cmd = "!gcc -g % -o bin/" .. fileName + -- -- First, compile it + -- vim.cmd(cmd) + -- -- Then, return it + -- return "${fileDirname}/bin/" .. fileName + -- end + --end, + stopAtEntry = true, args = {}, - }, + --runInTerminal = true, + --runInTerminal = false, + --console = 'integratedTerminal', + + --MIMode = 'gdb', + --miDebuggerServerAddress = 'localhost:1234', + --miDebuggerPath = 'gdb-oneapi', + --miDebuggerPath = '/usr/bin/gdb', + externalConsole = true, + --setupCommands = { + -- { + -- text = '-enable-pretty-printing', + -- description = 'enable pretty printing', + -- ignoreFailures = false + -- } + --}, +}, } +-- dap.adapters.cppdbg = { +-- name = 'cppdbg', +-- type = 'executable', +-- command = vim.fn.stdpath('data') .. '/mason/bin/OpenDebugAD7', +-- } +-- dap.configurations.cpp = { +-- { +-- name = 'Launch', +-- type = 'cppdbg', +-- request = 'launch', +-- --request = 'attach', +-- MIMode = 'gdb', +-- --cwd = '${workspaceFolder}', +-- -- udb='live', +-- -- miDebuggerPath = 'udb', +-- setupCommands= { +-- { +-- description= "Enable pretty-printing for gdb", +-- text= "-enable-pretty-printing", +-- ignoreFailures= true, +-- } +-- }, +-- program = '${file}', +-- cwd = vim.fn.getcwd(), +-- --attach = { +-- -- pidProperty = "processId", +-- -- pidSelect = "ask" +-- --}, +-- stopAtEntry = true, +-- --program = 'main', +-- --program = '${workspaceFolder}/main' +-- --program = '${file}', +-- --program = function() +-- -- return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') +-- --end, +-- }, +-- } + +--require('dap').configurations.c = { +-- lldb -- different debuggers or more configurations can be used here +--} + +-- cpp (c,c++,rust) +--dap.configurations.c = { +-- { +-- name = 'Launch', +-- type = 'lldb', +-- request = 'launch', +-- --program = function() +-- -- return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') +-- --end, +-- terminal = 'integrated', +-- console = 'integratedTerminal', +-- program = function() +-- return vim.fn.input('program: ', vim.loop.cwd() .. '/', 'file') +-- end, +-- cwd = "${workspaceFolder}", +-- stopOnEntry = false, +-- args = {}, +-- }, +--} -- If you want to use this for Rust and C, add something like this: dap.configurations.c = dap.configurations.cpp dap.configurations.rust = dap.configurations.cpp - -- javascript -dap.adapters.node2 = { - type = 'executable', - command = 'node-debug2-adapter', - args = {}, -} +--dap.adapters.node2 = { +-- type = 'executable', +-- command = 'node-debug2-adapter', +-- args = {}, +--} -dap.configurations.javascript = { - { - name = 'Launch', - type = 'node2', - request = 'attach', - program = '${file}', - cwd = vim.fn.getcwd(), - sourceMaps = true, - protocol = 'inspector', - console = 'integratedTerminal', - }, -} +--dap.configurations.javascript = { +-- { +-- name = 'Launch', +-- type = 'node2', +-- request = 'attach', +-- program = '${file}', +-- cwd = vim.fn.getcwd(), +-- sourceMaps = true, +-- protocol = 'inspector', +-- console = 'integratedTerminal', +-- }, +--} dap.adapters.python = { type = 'executable'; @@ -71,44 +222,149 @@ dap.configurations.python = { }, } -local dapui = require('dapui') +--local dapui = require('dapui') +local dap_ui_status_ok, dapui = pcall(require, "dapui") +if not dap_ui_status_ok then + return +end -- setup repl -dap.repl.commands = vim.tbl_extend('force', dap.repl.commands, { - exit = { 'q', 'exit' }, - custom_commands = { - ['.run_to_cursor'] = dap.run_to_cursor, - ['.restart'] = dap.run_last - } +--dap.repl.commands = vim.tbl_extend('force', dap.repl.commands, { +-- exit = { 'q', 'exit' }, +-- custom_commands = { +-- ['.run_to_cursor'] = dap.run_to_cursor, +-- ['.restart'] = dap.run_last +-- } +--}) + +dapui.setup({ + layouts = { + { + elements = { + "watches", + }, + size = 0.2, + position = "left", + }, + }, + controls = { + enabled = false, + }, + render = { + max_value_lines = 3, + }, + floating = { + max_height = nil, -- These can be integers or a float between 0 and 1. + max_width = nil, -- Floats will be treated as percentage of your screen. + border = "single", -- Border style. Can be "single", "double" or "rounded" + mappings = { + close = { "q", "<Esc>" }, + }, + }, }) -- setup dapui dapui.setup({ - mappings = { - expand = "<CR>", - open = "o", - remove = "D", - edit = "e", - repl = "r", - toggle = "t", + mappings = { + expand = "<CR>", + open = "o", + remove = "D", + edit = "e", + repl = "r", + toggle = "t", + }, + controls = { + enabled = false, + }, + layouts = { + { + elements = { + { id = "scopes", size = 0.5 }, + { id = "watches", size = 0.5 }, + }, + size = 40, + position = "left", + }, + { + elements = { "console", "repl" }, + position = "bottom", + size = 15, }, - layouts = { - { elements = { "scopes", "breakpoints", "stacks" }, size = 0.33, position = "right" }, - { elements = { "repl", "watches" }, size = 0.27, position = "bottom" }, + }, + render = { + max_value_lines = 3, + }, + floating = { + max_height = nil, -- These can be integers or a float between 0 and 1. + max_width = nil, -- Floats will be treated as percentage of your screen. + border = "single", -- Border style. Can be "single", "double" or "rounded" + mappings = { + close = { "q", "<Esc>" }, }, - icons = { expanded = "-", collapsed = "$" }, - controls = { enabled = false }, - floating = { border = "rounded", mappings = { close = { "q", "<esc>", "<c-o>" } } }, + }, + --icons = { expanded = "-", collapsed = "$" }, + icons = { + expanded = "", + collapsed = "", + current_frame = "", + }, }) -- signs -vim.fn.sign_define("DapStopped", { text = '=>', texthl = 'DiagnosticWarn', numhl = 'DiagnosticWarn' }) -vim.fn.sign_define("DapBreakpoint", { text = '<>', texthl = 'DiagnosticInfo', numhl = 'DiagnosticInfo' }) -vim.fn.sign_define("DapBreakpointRejected", { text = '!>', texthl = 'DiagnosticError', numhl = 'DiagnosticError' }) -vim.fn.sign_define("DapBreakpointCondition", { text = '?>', texthl = 'DiagnosticInfo', numhl = 'DiagnosticInfo' }) -vim.fn.sign_define("DapLogPoint", { text = '.>', texthl = 'DiagnosticInfo', numhl = 'DiagnosticInfo' }) +local sign = vim.fn.sign_define +sign("DapBreakpoint", { text = "●", texthl = "DapBreakpoint", linehl = "", numhl = "" }) +sign('DapStopped', { text = '', texthl = 'DiagnosticSignHint', numbhl = '', linehl = '' }) +sign("DapBreakpointRejected", { text = '!>', texthl = 'DiagnosticError', numhl = 'DiagnosticError' }) +sign("DapBreakpointCondition", { text = "●", texthl = "DapBreakpointCondition", linehl = "", numhl = "" }) +sign("DapLogPoint", { text = "◆", texthl = "DapLogPoint", linehl = "", numhl = "" }) +--sign('DapBreakpoint', { text = '', texthl = 'DiagnosticSignError', numbhl = '', linehl = '' }) +--sign("DapLogPoint", { text = '.>', texthl = 'DiagnosticInfo', numhl = 'DiagnosticInfo' }) +--vim.fn.sign_define("DapBreakpointCondition", { text = '?>', texthl = 'DiagnosticInfo', numhl = 'DiagnosticInfo' }) +--vim.fn.sign_define("DapStopped", { text = '=>', texthl = 'DiagnosticWarn', numhl = 'DiagnosticWarn' }) +--vim.fn.sign_define("DapBreakpoint", { text = '<>', texthl = 'DiagnosticInfo', numhl = 'DiagnosticInfo' }) + +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.listeners.before.disconnect["dapui_config"] = function() + dapui.close() +end + +local dap_virtual_text_status_ok, dap_virtual_text_status = pcall(require, "nvim-dap-virtual-text") +if not dap_virtual_text_status_ok then + return +end +--require("nvim-dap-virtual-text").setup() + +dap_virtual_text_status.setup({ + enabled = true, -- enable this plugin (the default) + enabled_commands = true, -- create commands DapVirtualTextEnable, DapVirtualTextDisable, DapVirtualTextToggle, (DapVirtualTextForceRefresh for refreshing when debug adapter did not notify its termination) + highlight_changed_variables = true, -- highlight changed values with NvimDapVirtualTextChanged, else always NvimDapVirtualText + highlight_new_as_changed = false, -- highlight new variables in the same way as changed variables (if highlight_changed_variables) + show_stop_reason = true, -- show stop reason when stopped for exceptions + commented = true, -- prefix virtual text with comment string + only_first_definition = true, -- only show virtual text at first definition (if there are multiple) + all_references = false, -- show virtual text on all all references of the variable (not only definitions) + filter_references_pattern = "<module", -- filter references (not definitions) pattern when all_references is activated (Lua gmatch pattern, default filters out Python modules) + -- experimental features: + virt_text_pos = "eol", -- position of virtual text, see `:h nvim_buf_set_extmark()` + all_frames = false, -- show virtual text for all stack frames not only current. Only works for debugpy on my machine. + virt_lines = false, -- show virtual lines instead of virtual text (will flicker!) + virt_text_win_col = nil -- position the virtual text at a fixed window column (starting from the first text column) , + -- e.g. 80 to position at column 80, see `:h nvim_buf_set_extmark()` +}) + +vim.cmd([[ + autocmd TermClose * if !v:event.status | exe 'bdelete! '..expand('<abuf>') | endif +]]) -- options +--dap.set_exception_breakpoints("default") dap.defaults.fallback.focus_terminal = false dap.defaults.fallback.terminal_win_cmd = '10split new' - |
