go.nvim/lua/go/health.lua
2023-01-13 01:16:50 +11:00

145 lines
3.3 KiB
Lua

local M = {}
local util = require('go.utils')
local log = util.log
local sep = util.sep()
local health = vim.health
if not vim.health then
health = require('health')
end
local tools = require('go.install').tools
local start = health.report_start
local ok = health.report_ok
local error = health.report_error
local warn = health.report_warn
local info = health.report_info
local vfn = vim.fn
local function binary_check()
health.report_start('Binaries')
local no_err = true
local go_bin = 'go'
if vfn.executable(go_bin) == 1 then
info(go_bin .. ' installed.')
else
error(go_bin .. ' is not installed.')
no_err = false
end
for _, val in ipairs(tools) do
log(val)
if vfn.executable(val) == 1 then
info('Tool installed: ' .. val)
else
warn('Missing tool: ' .. val)
no_err = false
end
end
if vfn.executable('sed') == 1 then
info('sed installed.')
else
no_err = false
warn('sed is not installed. gotests may not fully work')
end
if vfn.executable('curl') == 1 then
info('curl installed.')
else
no_err = false
warn('curl is not installed, gocheat will not work.')
end
local parser_path = vim.api.nvim_get_runtime_file('parser' .. sep .. 'go.so', false)[1]
if not parser_path then
warn('go treesitter parser not found, please Run `:TSInstallSync go`')
no_err = false
end
if no_err then
ok('All binaries installed')
else
warn('Some binaries are not installed, please check if your $HOME/go/bin or $GOBIN $exists and in your $PATH')
end
end
local function plugin_check()
start('Go Plugin Check')
local plugins = {
'lspconfig',
'nvim-treesitter',
'guihua',
'nvim-dap-virtual-text',
'telescope',
}
local any_warn = false
local ts_installed = false
for _, plugin in ipairs(plugins) do
local pi = util.load_plugin(plugin)
if pi ~= nil then
ok(string.format('%s: plugin is installed', plugin))
if plugin == 'nvim-treesitter' then
ts_installed = true
end
else
any_warn = true
warn(string.format('%s: not installed/loaded', plugin))
end
end
if ts_installed then
local _info = require('nvim-treesitter.info').installed_parsers()
if vim.tbl_contains(_info, 'go') then
ok('nvim-treesitter-go is installed')
else
warn('nvim-treesitter-go is not installed, Please run TSInstall go to install')
any_warn = true
end
end
plugins = {
['nvim-dap'] = 'dap',
['nvim-dap-ui'] = 'dapui',
}
for name, req in pairs(plugins) do
local pi = util.load_plugin(name, req)
if pi ~= nil then
ok(string.format('%s: plugin is installed', name))
else
any_warn = true
warn(string.format('%s: not installed/loaded', name))
end
end
if any_warn then
warn('Not all plugin installed')
else
ok('All plugin installed')
end
end
local function env_check()
local envs = { 'GOPATH', 'GOROOT', 'GOBIN' }
local any_warn = false
for _, env in ipairs(envs) do
if vim.env[env] == nil then
info(string.format('%s is not set', env))
any_warn = true
else
ok(string.format('%s is set', env))
end
end
if any_warn then
info('Not all enviroment variables set')
else
ok('All enviroment variables set')
end
end
function M.check()
binary_check()
plugin_check()
env_check()
end
return M