summaryrefslogtreecommitdiff
path: root/config/nvim/lua/plugins/dap.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--config/nvim/lua/plugins/dap.lua129
1 files changed, 109 insertions, 20 deletions
diff --git a/config/nvim/lua/plugins/dap.lua b/config/nvim/lua/plugins/dap.lua
index 7340da6..6a17265 100644
--- a/config/nvim/lua/plugins/dap.lua
+++ b/config/nvim/lua/plugins/dap.lua
@@ -11,26 +11,115 @@ return {
args = { "dap", "-l", "127.0.0.1:${port}" },
},
}
- -- Стандартные конфигурации для Go
- dap.configurations.go = {
- {
- type = "go",
- name = "Debug cur file",
- request = "launch",
- program = "${file}",
- cwd = "${workspaceFolder}",
- envFile = "${workspaceFolder}/.env",
- buildFlags = "",
- outputMode = "remote",
- },
- {
+
+ -- Хранение истории аргументов для каждой точки входа
+ local _args_history = {}
+
+ -- Функция для запроса аргументов у пользователя с историей (возвращает строку для парсинга)
+ local function get_args(entry_point)
+ local cache_key = entry_point
+ local default = _args_history[cache_key] or ""
+ local prompt = "Arguments for " .. entry_point .. ": "
+ local input = vim.fn.input(prompt, default)
+ if input and #input > 0 then
+ _args_history[cache_key] = input
+ end
+ return _args_history[cache_key]
+ end
+
+ -- Генерация конфигураций для Go на основе точек входа
+ local function generate_go_configs()
+ local workspace_folder = vim.fn.getcwd()
+
+ -- Проверка существования .env файла в корне проекта
+ local env_file = nil
+ if vim.fn.filereadable(workspace_folder .. "/.env") == 1 then
+ env_file = "${workspaceFolder}/.env"
+ end
+
+ local configs = {}
+ local entry_points = {}
+
+ -- Поиск точки входа: main.go в корне или cmd/*/main.go
+ if vim.fn.filereadable(workspace_folder .. "/main.go") == 1 then
+ table.insert(entry_points, {
+ name = "main",
+ path = "${workspaceFolder}",
+ })
+ end
+
+ -- Поиск cmd/*/main.go
+ local cmd_dirs = vim.fn.glob(workspace_folder .. "/cmd/*", 0, 1)
+ for _, cmd_dir in ipairs(cmd_dirs) do
+ local main_path = cmd_dir .. "/main.go"
+ if vim.fn.filereadable(main_path) == 1 then
+ local entry_name = vim.fn.fnamemodify(cmd_dir, ":t")
+ table.insert(entry_points, {
+ name = entry_name,
+ path = cmd_dir,
+ })
+ end
+ end
+
+ -- Генерация конфигураций для каждой точки входа
+ for _, entry in ipairs(entry_points) do
+ -- Базовая конфигурация без аргументов
+ table.insert(configs, {
+ type = "go",
+ name = "Debug " .. entry.name,
+ request = "launch",
+ program = entry.path,
+ cwd = "${workspaceFolder}",
+ envFile = env_file,
+ buildFlags = "",
+ outputMode = "remote",
+ })
+
+ -- Конфигурация с аргументами (функция для запроса при запуске)
+ table.insert(configs, {
+ type = "go",
+ name = "Debug " .. entry.name .. " (args)",
+ request = "launch",
+ program = entry.path,
+ cwd = "${workspaceFolder}",
+ envFile = env_file,
+ buildFlags = "",
+ outputMode = "remote",
+ args = function()
+ local args_str = get_args(entry.name)
+ -- Разбиваем строку аргументов на массив
+ local args = {}
+ for arg in args_str:gmatch("%S+") do
+ table.insert(args, arg)
+ end
+ return args
+ end,
+ })
+ end
+
+ -- Remote attach конфигурация для подключения к уже запущенному delve
+ table.insert(configs, {
type = "go",
- name = "Debug test",
- request = "launch",
- mode = "test",
- program = "${file}",
- },
- }
+ name = "Remote attach (127.0.0.1:43000)",
+ request = "attach",
+ mode = "remote",
+ port = "43000",
+ host = "127.0.0.1",
+ })
+
+ return configs
+ end
+
+ -- Установка конфигураций Go
+ dap.configurations.go = generate_go_configs()
+
+ -- Автообновление конфигураций при открытии Go файла
+ vim.api.nvim_create_autocmd("BufReadPost", {
+ pattern = "*.go",
+ callback = function()
+ dap.configurations.go = generate_go_configs()
+ end,
+ })
end,
keys = {
{
@@ -175,7 +264,7 @@ return {
"leoluz/nvim-dap-go",
dependencies = { "mfussenegger/nvim-dap" },
ft = "go",
- config = true,
+ -- Не используем автоconfig - конфигурации управляются в nvim-dap
keys = {
{
"<leader>dt",