go.nvim/lua/go/project.lua

75 lines
2.1 KiB
Lua

-- this file allow a setup load per project
--[[
-- sample cfg
return {
go = "go", -- set to go1.18beta1 if necessary
goimport = "gopls", -- if set to 'gopls' will use gopls format, also goimport
fillstruct = "gopls",
gofmt = "gofumpt", -- if set to gopls will use gopls format
max_line_len = 120,
tag_transform = false,
test_dir = "",
gocoverage_sign_priority = 5,
launch_json = nil, -- the launch.json file path, default to .vscode/launch.json
-- launch_json = vfn.getcwd() .. "/.vscode/launch.json",
build_tags = "", --- you can provide extra build tags for tests or debugger
}
]]
-- if the file existed, load it into config
local vfn = vim.fn
local util = require("go.utils")
local log = util.log
local M = {}
local sep = require("go.utils").sep()
function M.project_existed()
local workfolder = vim.lsp.buf.list_workspace_folders()[1] or vfn.getcwd()
local gocfgfd = workfolder .. sep .. ".gonvim"
local gocfgbrks = gocfgfd .. sep .. "breakpoints.lua"
local gocfg = gocfgfd .. sep .. "init.lua"
if vfn.filereadable(gocfg) == 1 or vfn.filereadable(gocfgbrks) == 1 then
log("projects existed", gocfg, gocfgbrks)
return gocfg, gocfgbrks
end
end
function M.setup()
local workfolder = vim.lsp.buf.list_workspace_folders()[1] or vfn.getcwd()
local gocfgfd = workfolder .. sep .. ".gonvim"
local gocfg = gocfgfd .. sep .. "init.lua"
if vfn.isdirectory(gocfgfd) == 0 then
vfn.mkdir(gocfgfd)
end
if vfn.filereadable(gocfg) == 0 then
local f = io.open(gocfg, "w")
f:write("return {}")
f:close()
end
return gocfg, gocfgfd
end
function M.load_project()
local workfolder = vim.lsp.buf.list_workspace_folders()[1] or vfn.getcwd()
local gocfg = workfolder .. sep .. ".gonvim" .. sep .. "init.lua"
if _GO_NVIM_CFG.disable_per_project_cfg then
log("project setup existed but disabled")
return
end
if vfn.filereadable(gocfg) == 1 then
local f = assert(loadfile(gocfg))
log(f())
_GO_NVIM_CFG = vim.tbl_deep_extend("force", _GO_NVIM_CFG, f())
else
return false
end
end
M.load_project()
return M