feat: alternate between go and test files

This commit is contained in:
Aleksei Malykh 2025-07-14 16:22:34 +07:00
parent de585144eb
commit 41f619389e
No known key found for this signature in database
GPG key ID: 00FB366088A4D4CA
2 changed files with 57 additions and 0 deletions

44
lua/gopher/alternate.lua Normal file
View file

@ -0,0 +1,44 @@
local M = {}
function M.is_test_file()
local file = vim.fn.expand "%"
if #file <= 1 then
vim.notify("no buffer name", vim.log.levels.ERROR)
return nil, false, false
end
local is_test = string.find(file, "_test%.go$")
local is_source = string.find(file, "%.go$")
return file, (not is_test and is_source), is_test
end
function M.alternate()
local file, is_source, is_test = M.is_test_file()
if not file then
return nil
end
local alt_file = file
if is_test then
alt_file = string.gsub(file, "_test.go", ".go")
elseif is_source then
alt_file = vim.fn.expand "%:r" .. "_test.go"
else
vim.notify("not a go file", vim.log.levels.ERROR)
end
return alt_file
end
function M.switch(bang, cmd)
local alt_file = M.alternate()
if not vim.fn.filereadable(alt_file) and not vim.fn.bufexists(alt_file) and not bang then
vim.notify("couldn't find " .. alt_file, vim.log.levels.ERROR)
return
elseif #cmd <= 1 then
local ocmd = "e " .. alt_file
vim.cmd(ocmd)
else
local ocmd = cmd .. " " .. alt_file
vim.cmd(ocmd)
end
end
return M