go.nvim/lua/go/install.lua

111 lines
2.7 KiB
Lua
Raw Normal View History

2021-03-10 12:15:06 +00:00
local uv = vim.loop
2022-06-01 14:47:00 +00:00
local DIR_SEP = package.config:sub(1, 1)
2021-12-06 10:32:23 +00:00
local log = require("go.utils").log
2021-03-10 12:15:06 +00:00
local url = {
2021-07-14 15:35:38 +00:00
gofumpt = "mvdan.cc/gofumpt",
golines = "github.com/segmentio/golines",
2022-01-15 11:14:56 +00:00
["golangci-lint"] = "github.com/golangci/golangci-lint/cmd/golangci-lint",
2021-08-24 04:53:37 +00:00
goimports = "golang.org/x/tools/cmd/goimports",
gorename = "golang.org/x/tools/cmd/gorename",
gomodifytags = "github.com/fatih/gomodifytags",
gopls = "golang.org/x/tools/gopls",
gotests = "github.com/cweill/gotests/...",
2021-12-06 10:32:23 +00:00
iferr = "github.com/koron/iferr",
2022-06-18 05:43:07 +00:00
callgraph = "golang.org/x/tools/cmd/callgraph",
guru = "golang.org/x/tools/cmd/guru",
2021-12-06 10:32:23 +00:00
impl = "github.com/josharian/impl",
fillstruct = "github.com/davidrjenni/reftools/cmd/fillstruct",
fillswitch = "github.com/davidrjenni/reftools/cmd/fillswitch",
dlv = "github.com/go-delve/delve/cmd/dlv",
ginkgo = "github.com/onsi/ginkgo/ginkgo",
richgo = "github.com/kyoh86/richgo",
2022-07-05 22:28:29 +00:00
gotestsum = "gotest.tools/gotestsum",
mockgen = "github.com/golang/mock"
2021-03-10 12:15:06 +00:00
}
2022-01-15 11:14:56 +00:00
local tools = {}
2021-12-06 10:32:23 +00:00
for tool, _ in pairs(url) do
2022-01-15 11:14:56 +00:00
table.insert(tools, tool)
2021-12-06 10:32:23 +00:00
end
2022-06-18 05:43:07 +00:00
local function is_installed(bin)
2021-07-14 15:35:38 +00:00
local env_path = os.getenv("PATH")
local base_paths = vim.split(env_path, ":", true)
2022-06-01 11:29:13 +00:00
for _, value in pairs(base_paths) do
2021-07-14 15:35:38 +00:00
if uv.fs_stat(value .. DIR_SEP .. bin) then
return true
end
2021-07-14 15:35:38 +00:00
end
return false
2021-03-10 12:15:06 +00:00
end
local function go_install(pkg)
local u = url[pkg]
2021-03-10 12:15:06 +00:00
if u == nil then
2022-01-15 11:14:56 +00:00
vim.notify(
"command " .. pkg .. " not supported, please update install.lua, or manually install it",
vim.lsp.log_levels.WARN
)
2021-03-10 12:15:06 +00:00
return
end
2021-04-23 06:31:00 +00:00
u = u .. "@latest"
2021-12-06 10:32:23 +00:00
local setup = { "go", "install", u }
2021-03-10 12:15:06 +00:00
2021-07-14 15:35:38 +00:00
vim.fn.jobstart(setup, {
2022-06-01 11:29:13 +00:00
on_stdout = function(_, data, _)
2021-12-06 10:32:23 +00:00
log(setup)
if type(data) == "table" and #data > 0 then
data = table.concat(data, " ")
end
local msg = "install " .. u .. " finished"
if #data > 1 then
msg = msg .. data
end
vim.notify(msg, vim.lsp.log_levels.INFO)
2021-12-06 10:32:23 +00:00
end,
2021-07-14 15:35:38 +00:00
})
2021-03-10 12:15:06 +00:00
end
local function install(bin, verbose)
2022-02-02 04:49:54 +00:00
if verbose == nil then
verbose = _GO_NVIM_CFG.verbose
end
if not is_installed(bin) then
vim.notify("installing " .. bin, vim.lsp.log_levels.INFO)
go_install(bin)
2021-12-06 10:32:23 +00:00
else
if verbose then
2022-02-02 04:49:54 +00:00
vim.notify(bin .. " already install, use GoUpdateBinary to update it", vim.lsp.log_levels.DEBUG)
end
end
return is_installed(bin)
end
local function update(bin)
2021-07-14 15:35:38 +00:00
go_install(bin)
end
2021-03-10 12:15:06 +00:00
local function install_all()
2022-06-01 11:29:13 +00:00
for key, _ in pairs(url) do
2021-03-10 12:15:06 +00:00
install(key)
end
end
2021-12-06 10:32:23 +00:00
local function update_all()
2022-06-01 11:29:13 +00:00
for key, _ in pairs(url) do
2021-12-06 10:32:23 +00:00
update(key)
end
end
return {
install = install,
update = update,
install_all = install_all,
update_all = update_all,
2022-01-15 11:14:56 +00:00
tools = tools,
2021-12-06 10:32:23 +00:00
}