From a09e5f53c14478f99a1a7047cb2d46ce6a80c0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20S=C3=A4ume?= Date: Thu, 30 May 2024 16:31:02 +0200 Subject: [PATCH 1/2] Add Go Debugger --- .config/nvim/dependencies.dnf.txt | 2 +- .../plugins/editor/debugger/debugger_go.lua | 6 ++ .../lua/plugins/editor/editor_debugging.lua | 102 ++++++++++-------- 3 files changed, 67 insertions(+), 43 deletions(-) create mode 100644 .config/nvim/lua/plugins/editor/debugger/debugger_go.lua diff --git a/.config/nvim/dependencies.dnf.txt b/.config/nvim/dependencies.dnf.txt index 121b303..87ecbda 100644 --- a/.config/nvim/dependencies.dnf.txt +++ b/.config/nvim/dependencies.dnf.txt @@ -1 +1 @@ -neovim lua gcc curl wget git unzip tar gzip ripgrep php composer go nodejs npm \ No newline at end of file +neovim lua gcc curl wget git unzip tar gzip ripgrep php composer go nodejs npm delve diff --git a/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua b/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua new file mode 100644 index 0000000..b21dd1a --- /dev/null +++ b/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua @@ -0,0 +1,6 @@ +return { + "leoluz/nvim-dap-go", + config = function() + require("dap-go").setup() + end +} diff --git a/.config/nvim/lua/plugins/editor/editor_debugging.lua b/.config/nvim/lua/plugins/editor/editor_debugging.lua index b286ae0..1ff515e 100644 --- a/.config/nvim/lua/plugins/editor/editor_debugging.lua +++ b/.config/nvim/lua/plugins/editor/editor_debugging.lua @@ -1,57 +1,75 @@ return { - "mfussenegger/nvim-dap", - dependencies = { - "rcarriga/nvim-dap-ui", - "nvim-neotest/nvim-nio", - }, - config = function() - -- Setup Debugging -- - local dap = require("dap") + { + "mfussenegger/nvim-dap", + dependencies = { + "rcarriga/nvim-dap-ui", + "nvim-neotest/nvim-nio", + }, + config = function() + -- Setup Debugging -- + local dap = require("dap") - -- Open UI on Debugging -- - local dapui = require("dapui").setup() - dap.listeners.before.attach.dapui_config = function() - dapui.open() - end - dap.listeners.before.launch.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 + -- Open UI on Debugging -- + local dapui = require("dapui") + dapui.setup({ + layouts = { + { + elements = { + { id = "scopes", size = 0.65 }, + { id = "breakpoints", size = 0.35 }, + }, + position = "left", + size = 40, + }, + { + elements = { + { id = "repl", size = 0.5 }, + { id = "console", size = 0.5 }, + }, + position = "bottom", + size = 10, + }, + }, + }) + dap.listeners.before.attach.dapui_config = function() + dapui.open() + end + dap.listeners.before.launch.dapui_config = function() + dapui.open() + end - -- Keybinding -- - vim.keymap.set("n", "db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" }) - vim.keymap.set("n", "dc", dap.continue, { desc = "Debugger Continue" }) - vim.keymap.set("n", "dx", dap.terminate, { desc = "Debugger Terminate" }) - vim.keymap.set("n", "ds", dap.step_over, { desc = "Debugger Step Over" }) + -- Keybinding -- + vim.keymap.set("n", "dt", dapui.toggle, { desc = "Toggle Debugger UI" }) + vim.keymap.set("n", "db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" }) + vim.keymap.set("n", "dc", dap.continue, { desc = "Debugger Continue" }) + vim.keymap.set("n", "dx", dap.terminate, { desc = "Debugger Terminate" }) + vim.keymap.set("n", "ds", dap.step_over, { desc = "Debugger Step Over" }) - -- Breakpoints -- - vim.api.nvim_set_hl(0, "DapBreakpoint", { ctermbg = 0, fg = "#993939", bg = "#31353f" }) - vim.api.nvim_set_hl(0, "DapLogPoint", { ctermbg = 0, fg = "#61afef", bg = "#31353f" }) - vim.api.nvim_set_hl(0, "DapStopped", { ctermbg = 0, fg = "#98c379", bg = "#31353f" }) - vim.fn.sign_define( + -- Breakpoints -- + vim.api.nvim_set_hl(0, "DapBreakpoint", { ctermbg = 0, fg = "#993939", bg = "#31353f" }) + vim.api.nvim_set_hl(0, "DapLogPoint", { ctermbg = 0, fg = "#61afef", bg = "#31353f" }) + vim.api.nvim_set_hl(0, "DapStopped", { ctermbg = 0, fg = "#98c379", bg = "#31353f" }) + vim.fn.sign_define( "DapBreakpoint", { text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" } - ) - vim.fn.sign_define( + ) + vim.fn.sign_define( "DapBreakpointCondition", { text = "󰣏", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" } - ) - vim.fn.sign_define( + ) + vim.fn.sign_define( "DapBreakpointRejected", { text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" } - ) - vim.fn.sign_define( + ) + vim.fn.sign_define( "DapLogPoint", { text = "", texthl = "DapLogPoint", linehl = "DapLogPoint", numhl = "DapLogPoint" } - ) - vim.fn.sign_define( + ) + vim.fn.sign_define( "DapStopped", { text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" } - ) - end, + ) + end, + }, + require("plugins.editor.debugger.debugger_go"), } From ae43bd1be856080d01b8a600e6ff4a404ec83d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20S=C3=A4ume?= Date: Fri, 31 May 2024 10:31:44 +0200 Subject: [PATCH 2/2] Update Project Root Search --- .../plugins/editor/debugger/debugger_go.lua | 23 +++- .../language_server/language_server_extra.lua | 2 +- .config/nvim/lua/utils/finder.lua | 114 ++++++++++++++++++ 3 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 .config/nvim/lua/utils/finder.lua diff --git a/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua b/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua index b21dd1a..a24058a 100644 --- a/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua +++ b/.config/nvim/lua/plugins/editor/debugger/debugger_go.lua @@ -1,6 +1,25 @@ return { "leoluz/nvim-dap-go", config = function() - require("dap-go").setup() - end + + require("dap-go").setup({ + delve = { + cwd = require("utils.finder").find_project_dir( + "go.mod", + 3, + { + "src", + "app", + "pkg" + }, + { + "test" + }, + true + ) + } + }) + end, } + + diff --git a/.config/nvim/lua/plugins/editor/language_server/language_server_extra.lua b/.config/nvim/lua/plugins/editor/language_server/language_server_extra.lua index 3090232..c8ce015 100644 --- a/.config/nvim/lua/plugins/editor/language_server/language_server_extra.lua +++ b/.config/nvim/lua/plugins/editor/language_server/language_server_extra.lua @@ -22,7 +22,7 @@ return { null_ls.builtins.diagnostics.twigcs, -- JavaScript & Typescript - null_ls.builtins.formatting.eslint_d, + --null_ls.builtins.formatting.eslint_d, -- Lua -- null_ls.builtins.formatting.stylua, diff --git a/.config/nvim/lua/utils/finder.lua b/.config/nvim/lua/utils/finder.lua new file mode 100644 index 0000000..e0bb2fb --- /dev/null +++ b/.config/nvim/lua/utils/finder.lua @@ -0,0 +1,114 @@ +local Finder = {} + +Finder = {} + +local function is_ignored(entry, ignore_dot_dirs, ignored_dirs) + if entry == ".." or entry == "." then + return true + end + + if ignore_dot_dirs and string.match(entry, "^%.") then + return true + end + + for _, dir in ipairs(ignored_dirs) do + if entry == dir or string.find(entry, dir, 1, true) then + return true + end + end + + return false +end + +local function read_dir(dir) + local handle = io.popen('ls -a "' .. dir .. '"') + if not handle then + return nil + end + local result = handle:read("*a") + handle:close() + return result +end + +local function is_dir(path) + local f = io.open(path, "r") + if f == nil then + return false + end + local _, _, code = f:read(1) + f:close() + return code == 21 +end + +local function find_path_recursive(_dir, options) + -- Check max Depth + if options.current_depth > options.max_depth then + return nil + end + + local entries = read_dir(_dir) + if entries == nil then + return nil + end + + for entry in string.gmatch(entries, "[^\r\n]+") do + -- Check Ignored + if is_ignored(entry, options.ignore_dot_dirs, options.ignored_dirs) then + goto continue + end + + local full_path = _dir .. "/" .. entry + + -- Check for File + if entry == options.needle_file then + return full_path + end + + -- Check is Dir + if not is_dir(full_path) then + goto continue + end + + -- Recursive Call + options.current_depth = options.current_depth + 1 + local result = find_path_recursive(full_path, options) + if result ~= nil then + return result + end + + -- Cleanup + options.current_depth = options.current_depth - 1 + ::continue:: + end + return nil +end + +local function get_opened_folder() + local cwd = vim.fn.getcwd() + local file_path = vim.fn.expand('%:p:h') + + if file_path ~= '' then + return file_path + end + return cwd +end + +function Finder.find_project_dir(needle_file, max_depth, priority_dirs, ignored_dirs, ignore_dot_dirs) + local options = { + needle_file = needle_file, + max_depth = max_depth, + priority_dirs = priority_dirs, + ignored_dirs = ignored_dirs, + ignore_dot_dirs = ignore_dot_dirs, + current_depth = 0 + } + + local dir = get_opened_folder() + local file = find_path_recursive(dir, options) + if file == nil then + return nil + end + return file:match("(.*/)") +end + +return Finder