From 9055e4e8768e04fd5035d94d51986fa74b5c79c9 Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Wed, 28 Dec 2022 20:44:18 +0100 Subject: [PATCH] dap and leap --- lua/plugins/dap.lua | 249 ++++++++++++++++++++++++++++++++++++++++++ lua/plugins/init.lua | 34 ------ lua/plugins/leap.lua | 8 ++ lua/setup/my_dap.lua | 185 ------------------------------- lua/setup/my_leap.lua | 1 - 5 files changed, 257 insertions(+), 220 deletions(-) create mode 100644 lua/plugins/dap.lua create mode 100644 lua/plugins/leap.lua delete mode 100644 lua/setup/my_dap.lua delete mode 100644 lua/setup/my_leap.lua diff --git a/lua/plugins/dap.lua b/lua/plugins/dap.lua new file mode 100644 index 0000000..b62079e --- /dev/null +++ b/lua/plugins/dap.lua @@ -0,0 +1,249 @@ +return { + 'mfussenegger/nvim-dap', + dependencies = { + 'mfussenegger/nvim-dap-python', + 'theHamsta/nvim-dap-virtual-text', + { + 'nvim-telescope/telescope-dap.nvim', + dependencies = 'telescope.nvim', + }, + 'rcarriga/nvim-dap-ui', + 'rcarriga/cmp-dap', + }, + keys = { + { + '', + function() + require('dap').continue() + end, + desc = 'DAP continue' + }, + { + '', + function() + loadConfigs() + end, + desc = 'DAP configs' + }, + { + '', + function() + require('dap').goto_() + end, + desc = 'DAP goto' + }, + { + '', + function() + require('dap.ui.widgets').hover() + end, + desc = 'DAP Hover' + }, + { + '', + function() + require('dap').toggle_breakpoint() + end, + desc = 'DAP breakpoint' + }, + { + '', + function() + require('dap').step_over() + end, + desc = 'DAP step_over' + }, + { + '', + function() + require('dap').step_into() + end, + desc = 'DAP step_into' + }, + { + '', + function() + require('dap').step_out() + end, + desc = 'DAP step_out' + }, + }, + config = function() + local dap = require('dap') + + require("cmp_dap").is_dap_buffer() + + + -- make sure we can exit the terminal with esc + vim.api.nvim_create_autocmd({ "TermOpen" }, { + pattern = { '*dap-terminal*' }, + callback = function() + local opts = { noremap = true } + vim.api.nvim_buf_set_keymap(0, 't', '', [[]], opts) + end + }) + + local function getVenvSuffix() + if vim.loop.os_uname().sysname == 'Linux' then + return 'bin/python' + elseif vim.loop.os_uname().sysname == 'Windows_NT' then + return 'Scripts/python.exe' + end + end + + local function getPythonEnv() + local venv = os.getenv("VIRTUAL_ENV") + if venv ~= nil then + return string.format("%s/%s", venv, getVenvSuffix()) + end + local conda = os.getenv("CONDA_PREFIX") + if conda ~= nil then + return string.format("%s/%s", conda, 'python.exe') + end + + local cwd = vim.fn.getcwd() + if vim.fn.executable(cwd .. '/venv/' .. getVenvSuffix()) == 1 then + return cwd .. '/venv/' .. getVenvSuffix() + elseif vim.fn.executable(cwd .. '/.venv/' .. getVenvSuffix()) == 1 then + return cwd .. '/.venv/' .. getVenvSuffix() + else + if vim.loop.os_uname().sysname == 'Linux' then + return '/usr/bin/python' + elseif vim.loop.os_uname().sysname == 'Windows_NT' then + return os.getenv('SCOOP') .. '/apps/python/current/python.exe' + end + end + end + + function loadConfigs() + require('dap.ext.vscode').load_launchjs() + -- Make sure we use the correct python env even for the configs from launch.json + for nr, config in pairs(dap.configurations.python) do + config.pythonPath = getPythonEnv() + config.cwd = vim.fn.getcwd() + end + require 'telescope'.extensions.dap.configurations {} + end + + local initDir = vim.api.nvim_list_runtime_paths()[1] + local masonpath = vim.fn.stdpath('data') .. '/mason' + + -- PYTHON + dap.adapters.python = { + type = 'executable'; + command = masonpath .. '/packages/debugpy/venv/' .. getVenvSuffix(); + args = { '-m', 'debugpy.adapter' }; + options = { + detached = true; + }; + } + + local dap = require("dap") + local dapui = require("dapui") + dapui.setup() + 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.configurations.python = { + { + type = 'python'; + request = 'launch'; + name = "Launch file with venv"; + justMyCode = false; + program = "${file}"; + cwd = vim.fn.getcwd(); + pythonPath = getPythonEnv + }, + } + + -- require('dap-python').setup('C:\\Users\\oli\\AppData\\Local\\nvim\\venv_debugpy\\Scripts\\python') + -- table.insert(require('dap').configurations.python, { + -- -- type = 'python', + -- -- request = 'launch', + -- -- name = 'My custom launch configuration', + -- -- program = '${file}', + -- justMyCode = false + -- -- ... more options, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings + -- }) + -- require('dap-python').setup('C:/Users/oli/AppData/Local/nvim-data/mason/packages/debugpy/venv/Scripts/python.exe') + + -- CPP + dap.adapters.codelldb = { + type = 'server', + port = "${port}", + executable = { + -- CHANGE THIS to your path! + command = masonpath .. '/bin/codelldb.cmd', + args = { '--port', '${port}' }, + + -- On windows you may have to uncomment this: + detached = false, + } + } + + dap.adapters.lldb = { + type = 'executable', + command = function() + if vim.loop.os_uname().sysname == 'Linux' then + return 'lldb-vscode' + else + return os.getenv('SCOOP') .. '/apps/llvm/current/bin/lldb-vscode.exe' + end + end, + name = 'lldb' + } + + dap.configurations.cpp = { + { + name = "Launch codelldb", + type = "codelldb", + request = "launch", + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/build_nvim/', 'file') + end, + cwd = '${workspaceFolder}', + stopOnEntry = true, + }, + } + + dap.configurations.cpp = { + { + name = 'Launch lldb', + type = 'lldb', + request = 'launch', + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/build_nvim', 'file') + end, + cwd = '${workspaceFolder}', + stopOnEntry = false, + args = {}, + + -- 💀 + -- if you change `runInTerminal` to true, you might need to change the yama/ptrace_scope setting: + -- + -- echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope + -- + -- Otherwise you might get the following error: + -- + -- Error on launch: Failed to attach to the target process + -- + -- But you should be aware of the implications: + -- https://www.kernel.org/doc/html/latest/admin-guide/LSM/Yama.html + -- runInTerminal = false, + }, + } + + -- EXTENSIONS + + require('nvim-dap-virtual-text').setup() + require('telescope').load_extension('dap') + + end, +} diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index b5d6341..882f71e 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -29,40 +29,6 @@ return { require('setup/my_gruvbox_flat') end }, - { - 'ggandor/leap.nvim', - dependencies = { 'tpope/vim-repeat' }, - config = function() - require('setup/my_leap') - end, - event = 'VeryLazy' - }, - { - 'mfussenegger/nvim-dap', - dependencies = { - 'mfussenegger/nvim-dap-python', - 'theHamsta/nvim-dap-virtual-text', - { - 'nvim-telescope/telescope-dap.nvim', - dependencies = 'telescope.nvim', - }, - 'rcarriga/nvim-dap-ui', - 'rcarriga/cmp-dap', - }, - keys = { - { '' }, - { '' }, - { '' }, - { '' }, - { '' }, - { '' }, - { '' }, - { '' } - }, - config = function() - require('setup/my_dap') - end, - }, { 'sindrets/diffview.nvim', dependencies = 'nvim-lua/plenary.nvim', diff --git a/lua/plugins/leap.lua b/lua/plugins/leap.lua new file mode 100644 index 0000000..830b40d --- /dev/null +++ b/lua/plugins/leap.lua @@ -0,0 +1,8 @@ +return { + 'ggandor/leap.nvim', + dependencies = { 'tpope/vim-repeat' }, + config = function() + require('leap').set_default_keymaps() + end, + event = 'VeryLazy' +} diff --git a/lua/setup/my_dap.lua b/lua/setup/my_dap.lua deleted file mode 100644 index a064311..0000000 --- a/lua/setup/my_dap.lua +++ /dev/null @@ -1,185 +0,0 @@ -dap = require('dap') - -require("cmp_dap").is_dap_buffer() - - --- make sure we can exit the terminal with esc -vim.api.nvim_create_autocmd({ "TermOpen" }, { - pattern = { '*dap-terminal*' }, - callback = function() - local opts = { noremap = true } - vim.api.nvim_buf_set_keymap(0, 't', '', [[]], opts) - end -}) - -local function getVenvSuffix() - if vim.loop.os_uname().sysname == 'Linux' then - return 'bin/python' - elseif vim.loop.os_uname().sysname == 'Windows_NT' then - return 'Scripts/python.exe' - end -end - -local function getPythonEnv() - local venv = os.getenv("VIRTUAL_ENV") - if venv ~= nil then - return string.format("%s/%s", venv, getVenvSuffix()) - end - local conda = os.getenv("CONDA_PREFIX") - if conda ~= nil then - return string.format("%s/%s", conda, 'python.exe') - end - - local cwd = vim.fn.getcwd() - if vim.fn.executable(cwd .. '/venv/' .. getVenvSuffix()) == 1 then - return cwd .. '/venv/' .. getVenvSuffix() - elseif vim.fn.executable(cwd .. '/.venv/' .. getVenvSuffix()) == 1 then - return cwd .. '/.venv/' .. getVenvSuffix() - else - if vim.loop.os_uname().sysname == 'Linux' then - return '/usr/bin/python' - elseif vim.loop.os_uname().sysname == 'Windows_NT' then - return os.getenv('SCOOP') .. '/apps/python/current/python.exe' - end - end -end - -local function loadConfigs () - require('dap.ext.vscode').load_launchjs() - -- Make sure we use the correct python env even for the configs from launch.json - for nr,config in pairs(dap.configurations.python) do - config.pythonPath = getPythonEnv() - config.cwd = vim.fn.getcwd() - end - require'telescope'.extensions.dap.configurations{} -end -local opts = { noremap = true, silent = false } -vim.keymap.set('n', '', dap.continue, opts) -vim.keymap.set('n', '', loadConfigs, opts) -vim.keymap.set('n', '', dap.goto_, opts) -vim.keymap.set('n', '', require('dap.ui.widgets').hover, opts) -vim.keymap.set('n', '', dap.toggle_breakpoint, opts) -vim.keymap.set('n', '', dap.step_over, opts) -vim.keymap.set('n', '', dap.step_into, opts) -vim.keymap.set('n', '', dap.step_out, opts) - -local initDir = vim.api.nvim_list_runtime_paths()[1] -local masonpath = vim.fn.stdpath('data') .. '/mason' - --- PYTHON -dap.adapters.python = { - type = 'executable'; - command = masonpath .. '/packages/debugpy/venv/' .. getVenvSuffix(); - args = { '-m', 'debugpy.adapter' }; - options = { - detached = true; - }; -} - -local dap= require("dap") -local dapui = require("dapui") -dapui.setup() -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.configurations.python = { - { - type = 'python'; - request = 'launch'; - name = "Launch file with venv"; - justMyCode = false; - program = "${file}"; - cwd = vim.fn.getcwd(); - pythonPath = getPythonEnv - }, -} - --- require('dap-python').setup('C:\\Users\\oli\\AppData\\Local\\nvim\\venv_debugpy\\Scripts\\python') --- table.insert(require('dap').configurations.python, { --- -- type = 'python', --- -- request = 'launch', --- -- name = 'My custom launch configuration', --- -- program = '${file}', --- justMyCode = false --- -- ... more options, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings --- }) --- require('dap-python').setup('C:/Users/oli/AppData/Local/nvim-data/mason/packages/debugpy/venv/Scripts/python.exe') - --- CPP -dap.adapters.codelldb = { - type = 'server', - port = "${port}", - executable = { - -- CHANGE THIS to your path! - command = masonpath .. '/bin/codelldb.cmd', - args = { '--port', '${port}' }, - - -- On windows you may have to uncomment this: - detached = false, - } -} - -dap.adapters.lldb = { - type = 'executable', - command = function() - if vim.loop.os_uname().sysname == 'Linux' then - return 'lldb-vscode' - else - return os.getenv('SCOOP') .. '/apps/llvm/current/bin/lldb-vscode.exe' - end - end, - name = 'lldb' -} - -dap.configurations.cpp = { - { - name = "Launch codelldb", - type = "codelldb", - request = "launch", - program = function() - return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/build_nvim/', 'file') - end, - cwd = '${workspaceFolder}', - stopOnEntry = true, - }, -} - -dap.configurations.cpp = { - { - name = 'Launch lldb', - type = 'lldb', - request = 'launch', - program = function() - return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/build_nvim', 'file') - end, - cwd = '${workspaceFolder}', - stopOnEntry = false, - args = {}, - - -- 💀 - -- if you change `runInTerminal` to true, you might need to change the yama/ptrace_scope setting: - -- - -- echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope - -- - -- Otherwise you might get the following error: - -- - -- Error on launch: Failed to attach to the target process - -- - -- But you should be aware of the implications: - -- https://www.kernel.org/doc/html/latest/admin-guide/LSM/Yama.html - -- runInTerminal = false, - }, -} - --- EXTENSIONS - -require('nvim-dap-virtual-text').setup() -require('telescope').load_extension('dap') - diff --git a/lua/setup/my_leap.lua b/lua/setup/my_leap.lua deleted file mode 100644 index 08d46e0..0000000 --- a/lua/setup/my_leap.lua +++ /dev/null @@ -1 +0,0 @@ -require('leap').set_default_keymaps()