Add Go Debugger #1
5 changed files with 201 additions and 44 deletions
|
@ -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
|
||||||
|
|
25
.config/nvim/lua/plugins/editor/debugger/debugger_go.lua
Normal file
25
.config/nvim/lua/plugins/editor/debugger/debugger_go.lua
Normal 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,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,57 +1,75 @@
|
||||||
return {
|
return {
|
||||||
"mfussenegger/nvim-dap",
|
{
|
||||||
dependencies = {
|
"mfussenegger/nvim-dap",
|
||||||
"rcarriga/nvim-dap-ui",
|
dependencies = {
|
||||||
"nvim-neotest/nvim-nio",
|
"rcarriga/nvim-dap-ui",
|
||||||
},
|
"nvim-neotest/nvim-nio",
|
||||||
config = function()
|
},
|
||||||
-- Setup Debugging --
|
config = function()
|
||||||
local dap = require("dap")
|
-- Setup Debugging --
|
||||||
|
local dap = require("dap")
|
||||||
|
|
||||||
-- Open UI on Debugging --
|
-- Open UI on Debugging --
|
||||||
local dapui = require("dapui").setup()
|
local dapui = require("dapui")
|
||||||
dap.listeners.before.attach.dapui_config = function()
|
dapui.setup({
|
||||||
dapui.open()
|
layouts = {
|
||||||
end
|
{
|
||||||
dap.listeners.before.launch.dapui_config = function()
|
elements = {
|
||||||
dapui.open()
|
{ id = "scopes", size = 0.65 },
|
||||||
end
|
{ id = "breakpoints", size = 0.35 },
|
||||||
dap.listeners.before.event_terminated.dapui_config = function()
|
},
|
||||||
dapui.close()
|
position = "left",
|
||||||
end
|
size = 40,
|
||||||
dap.listeners.before.event_exited.dapui_config = function()
|
},
|
||||||
dapui.close()
|
{
|
||||||
end
|
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 --
|
-- Keybinding --
|
||||||
vim.keymap.set("n", "<Leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
|
vim.keymap.set("n", "<Leader>dt", dapui.toggle, { desc = "Toggle Debugger UI" })
|
||||||
vim.keymap.set("n", "<Leader>dc", dap.continue, { desc = "Debugger Continue" })
|
vim.keymap.set("n", "<Leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
|
||||||
vim.keymap.set("n", "<Leader>dx", dap.terminate, { desc = "Debugger Terminate" })
|
vim.keymap.set("n", "<Leader>dc", dap.continue, { desc = "Debugger Continue" })
|
||||||
vim.keymap.set("n", "<Leader>ds", dap.step_over, { desc = "Debugger Step Over" })
|
vim.keymap.set("n", "<Leader>dx", dap.terminate, { desc = "Debugger Terminate" })
|
||||||
|
vim.keymap.set("n", "<Leader>ds", dap.step_over, { desc = "Debugger Step Over" })
|
||||||
|
|
||||||
-- Breakpoints --
|
-- Breakpoints --
|
||||||
vim.api.nvim_set_hl(0, "DapBreakpoint", { ctermbg = 0, fg = "#993939", bg = "#31353f" })
|
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, "DapLogPoint", { ctermbg = 0, fg = "#61afef", bg = "#31353f" })
|
||||||
vim.api.nvim_set_hl(0, "DapStopped", { ctermbg = 0, fg = "#98c379", bg = "#31353f" })
|
vim.api.nvim_set_hl(0, "DapStopped", { ctermbg = 0, fg = "#98c379", bg = "#31353f" })
|
||||||
vim.fn.sign_define(
|
vim.fn.sign_define(
|
||||||
"DapBreakpoint",
|
"DapBreakpoint",
|
||||||
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
||||||
)
|
)
|
||||||
vim.fn.sign_define(
|
vim.fn.sign_define(
|
||||||
"DapBreakpointCondition",
|
"DapBreakpointCondition",
|
||||||
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
||||||
)
|
)
|
||||||
vim.fn.sign_define(
|
vim.fn.sign_define(
|
||||||
"DapBreakpointRejected",
|
"DapBreakpointRejected",
|
||||||
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
{ text = "", texthl = "DapBreakpoint", linehl = "DapBreakpoint", numhl = "DapBreakpoint" }
|
||||||
)
|
)
|
||||||
vim.fn.sign_define(
|
vim.fn.sign_define(
|
||||||
"DapLogPoint",
|
"DapLogPoint",
|
||||||
{ text = "", texthl = "DapLogPoint", linehl = "DapLogPoint", numhl = "DapLogPoint" }
|
{ text = "", texthl = "DapLogPoint", linehl = "DapLogPoint", numhl = "DapLogPoint" }
|
||||||
)
|
)
|
||||||
vim.fn.sign_define(
|
vim.fn.sign_define(
|
||||||
"DapStopped",
|
"DapStopped",
|
||||||
{ text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" }
|
{ text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" }
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
|
},
|
||||||
|
require("plugins.editor.debugger.debugger_go"),
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
114
.config/nvim/lua/utils/finder.lua
Normal file
114
.config/nvim/lua/utils/finder.lua
Normal 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
|
Loading…
Reference in a new issue