From 4a218024294c2477b8a364d715a0295658e2c58f Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Tue, 9 Aug 2022 14:17:01 +0200 Subject: [PATCH] added python debug session with venv search --- lua/setup/my_dap.lua | 69 +++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/lua/setup/my_dap.lua b/lua/setup/my_dap.lua index 7b9ba0d..1926e06 100644 --- a/lua/setup/my_dap.lua +++ b/lua/setup/my_dap.lua @@ -18,33 +18,48 @@ vim.keymap.set('n', '', ":lua require('dap').step_out()", opts) -- detached = true; -- }; -- } --- dap.configurations.python = { --- { --- -- The first three options are required by nvim-dap --- type = 'python'; -- the type here established the link to the adapter definition: `dap.adapters.python` --- request = 'launch'; --- name = "Launch file"; --- --- -- Options below are for debugpy, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for supported options --- --- program = "${file}"; -- This configuration will launch the current file if used. --- pythonPath = function() --- -- debugpy supports launching an application with a different interpreter then the one used to launch debugpy itself. --- -- The code below looks for a `venv` or `.venv` folder in the current directly and uses the python within. --- -- You could adapt this - to for example use the `VIRTUAL_ENV` environment variable. --- local venv = os.getenv("VIRTUAL_ENV") --- return string.format("%s\\bin\\python.exe",venv) --- -- local cwd = vim.fn.getcwd() --- -- if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then --- -- return cwd .. '/venv/bin/python' --- -- elseif vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then --- -- return cwd .. '/.venv/bin/python' --- -- else --- -- return '/usr/bin/python' --- -- end --- 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 + +function getPythonEnv() + + local venv = os.getenv("VIRTUAL_ENV") + if venv ~= nil then + return string.format("%s\\bin\\python.exe",venv) + 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 + +dap.configurations.python = { + { + -- The first three options are required by nvim-dap + type = 'python'; -- the type here established the link to the adapter definition: `dap.adapters.python` + request = 'launch'; + name = "Launch file with venv"; + + -- Options below are for debugpy, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for supported options + + program = "${file}"; -- This configuration will launch the current file if used. + pythonPath = getPythonEnv() + }, +} require('dap-python').setup('C:\\Users\\oli\\AppData\\Local\\nvim\\venv_debugpy\\Scripts\\python') table.insert(require('dap').configurations.python, {