Merge pull request 'Add Go Debugger' (#1) from SZUT-Dominik/Dotfiles:neo into neo

Reviewed-on: Snoweuph/Dotfiles#1
This commit is contained in:
Snoweuph 2024-05-31 16:13:54 +00:00
commit c829f44fed
5 changed files with 201 additions and 44 deletions

View file

@ -1 +1 @@
neovim lua gcc curl wget git unzip tar gzip ripgrep php composer go nodejs npm neovim lua gcc curl wget git unzip tar gzip ripgrep php composer go nodejs npm delve

View file

@ -0,0 +1,25 @@
return {
"leoluz/nvim-dap-go",
config = function()
require("dap-go").setup({
delve = {
cwd = require("utils.finder").find_project_dir(
"go.mod",
3,
{
"src",
"app",
"pkg"
},
{
"test"
},
true
)
}
})
end,
}

View file

@ -1,4 +1,5 @@
return { return {
{
"mfussenegger/nvim-dap", "mfussenegger/nvim-dap",
dependencies = { dependencies = {
"rcarriga/nvim-dap-ui", "rcarriga/nvim-dap-ui",
@ -9,21 +10,36 @@ return {
local dap = require("dap") local dap = require("dap")
-- Open UI on Debugging -- -- Open UI on Debugging --
local dapui = require("dapui").setup() 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() dap.listeners.before.attach.dapui_config = function()
dapui.open() dapui.open()
end end
dap.listeners.before.launch.dapui_config = function() dap.listeners.before.launch.dapui_config = function()
dapui.open() dapui.open()
end end
dap.listeners.before.event_terminated.dapui_config = function()
dapui.close()
end
dap.listeners.before.event_exited.dapui_config = function()
dapui.close()
end
-- Keybinding -- -- Keybinding --
vim.keymap.set("n", "<Leader>dt", dapui.toggle, { desc = "Toggle Debugger UI" })
vim.keymap.set("n", "<Leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" }) vim.keymap.set("n", "<Leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
vim.keymap.set("n", "<Leader>dc", dap.continue, { desc = "Debugger Continue" }) vim.keymap.set("n", "<Leader>dc", dap.continue, { desc = "Debugger Continue" })
vim.keymap.set("n", "<Leader>dx", dap.terminate, { desc = "Debugger Terminate" }) vim.keymap.set("n", "<Leader>dx", dap.terminate, { desc = "Debugger Terminate" })
@ -54,4 +70,6 @@ return {
{ text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" } { text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" }
) )
end, end,
},
require("plugins.editor.debugger.debugger_go"),
} }

View file

@ -22,7 +22,7 @@ return {
null_ls.builtins.diagnostics.twigcs, null_ls.builtins.diagnostics.twigcs,
-- JavaScript & Typescript -- JavaScript & Typescript
null_ls.builtins.formatting.eslint_d, --null_ls.builtins.formatting.eslint_d,
-- Lua -- -- Lua --
null_ls.builtins.formatting.stylua, null_ls.builtins.formatting.stylua,

View file

@ -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