ex-cmds: :checkhealth

Built-in `:checkhealth` checks for valid $VIMRUNTIME by attempting to
autoload `health#check()`.

closes #2977
closes #3159
This commit is contained in:
Justin M. Keyes 2017-10-15 18:29:53 +02:00
parent 2f4647e77b
commit 5baeb4a49c
3 changed files with 59 additions and 2 deletions

View File

@ -22850,3 +22850,32 @@ void eval_format_source_name_line(char *buf, size_t bufsize)
(sourcing_name ? sourcing_name : (char_u *)"?"),
(sourcing_name ? sourcing_lnum : 0));
}
/// ":checkhealth [plugins]"
void ex_checkhealth(exarg_T *eap)
{
bool found = !!find_func((char_u *)"health#check");
if (!found
&& script_autoload("health#check", sizeof("health#check") - 1, false)) {
found = !!find_func((char_u *)"health#check");
}
if (!found) {
const char *vimruntime_env = os_getenv("VIMRUNTIME");
if (vimruntime_env == NULL) {
EMSG(_("E5009: $VIMRUNTIME is empty or unset"));
return;
} else {
EMSG2(_("E5009: Invalid $VIMRUNTIME: %s"), os_getenv("VIMRUNTIME"));
return;
}
}
size_t bufsize = STRLEN(eap->arg) + strlen("CheckHealth ") + 1;
char *buf = xmalloc(bufsize);
snprintf(buf, bufsize, "CheckHealth %s", eap->arg);
do_cmdline_cmd(buf);
xfree(buf);
}

View File

@ -450,6 +450,12 @@ return {
addr_type=ADDR_LINES,
func='ex_changes',
},
{
command='checkhealth',
flags=bit.bor(EXTRA, TRLBAR),
addr_type=ADDR_LINES,
func='ex_checkhealth',
},
{
command='checkpath',
flags=bit.bor(TRLBAR, BANG, CMDWIN),

View File

@ -2,7 +2,29 @@ local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local plugin_helpers = require('test.functional.plugin.helpers')
local clear = helpers.clear
local command = helpers.command
local eq = helpers.eq
describe(':checkhealth', function()
it("detects invalid $VIMRUNTIME", function()
clear({
env={ VIMRUNTIME='bogus', },
})
local status, err = pcall(command, 'checkhealth')
eq(false, status)
eq('Invalid $VIMRUNTIME: bogus', string.match(err, 'Invalid.*'))
end)
it("detects invalid $VIM", function()
clear({
env={ VIM='bogus', },
})
local status, err = pcall(command, 'checkhealth')
eq(false, status)
-- Invalid $VIM causes $VIMRUNTIME to be broken.
eq('Invalid $VIMRUNTIME: bogus', string.match(err, 'Invalid.*'))
end)
end)
describe('health.vim', function()
before_each(function()
@ -14,7 +36,7 @@ describe('health.vim', function()
command("set runtimepath+=test/functional/fixtures")
end)
it("reports", function()
it("health#report_*()", function()
helpers.source([[
let g:health_report = execute([
\ "call health#report_start('Check Bar')",
@ -44,7 +66,7 @@ describe('health.vim', function()
end)
describe(":CheckHealth", function()
describe(":checkhealth", function()
it("concatenates multiple reports", function()
command("CheckHealth success1 success2")
helpers.expect([[