diff options
-rw-r--r-- | runtime/doc/news.txt | 2 | ||||
-rw-r--r-- | runtime/lua/vim/health.lua | 28 | ||||
-rw-r--r-- | test/functional/plugin/health_spec.lua | 36 |
3 files changed, 44 insertions, 22 deletions
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index 5b614c1b47..d67c78adb5 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -165,7 +165,7 @@ TUI UI -• todo +• |:checkhealth| shows a summary in the header for every healthcheck. VIMSCRIPT diff --git a/runtime/lua/vim/health.lua b/runtime/lua/vim/health.lua index 294f2a357a..302cc6bc99 100644 --- a/runtime/lua/vim/health.lua +++ b/runtime/lua/vim/health.lua @@ -106,6 +106,7 @@ local M = {} local s_output = {} ---@type string[] +local check_summary = { warn = 0, error = 0 } -- From a path return a list [{name}, {func}, {type}] representing a healthcheck local function filepath_to_healthcheck(path) @@ -286,6 +287,7 @@ end function M.warn(msg, ...) local input = format_report_message('⚠️ WARNING', msg, ...) collect_output(input) + check_summary['warn'] = check_summary['warn'] + 1 end --- Reports an error. @@ -295,6 +297,7 @@ end function M.error(msg, ...) local input = format_report_message('❌ ERROR', msg, ...) collect_output(input) + check_summary['error'] = check_summary['error'] + 1 end local path2name = function(path) @@ -341,6 +344,23 @@ M._complete = function() return rv end +--- Gets the results heading for the current report section. +--- +---@return string +local function get_summary() + local s = '' + local errors = check_summary['error'] + local warns = check_summary['warn'] + + s = s .. (warns > 0 and (' %2d ⚠️'):format(warns) or '') + s = s .. (errors > 0 and (' %2d ❌'):format(errors) or '') + if errors == 0 and warns == 0 then + s = s .. '✅' + end + + return s +end + --- Runs the specified healthchecks. --- Runs all discovered healthchecks if plugin_names is empty. --- @@ -397,9 +417,9 @@ function M._check(mods, plugin_names) local func = value[1] local type = value[2] s_output = {} + check_summary = { warn = 0, error = 0 } if func == '' then - s_output = {} M.error('No healthcheck found for "' .. name .. '" plugin.') end if type == 'v' then @@ -420,10 +440,12 @@ function M._check(mods, plugin_names) M.error('The healthcheck report for "' .. name .. '" plugin is empty.') end + local report = get_summary() + local replen = vim.fn.strwidth(report) local header = { string.rep('=', 78), - -- Example: `foo.health: [ …] require("foo.health").check()` - ('%s: %s%s'):format(name, (' '):rep(76 - name:len() - func:len()), func), + -- Example: `foo.health: [ …] 1 ⚠️ 5 ❌` + ('%s: %s%s'):format(name, (' '):rep(76 - name:len() - replen), report), '', } diff --git a/test/functional/plugin/health_spec.lua b/test/functional/plugin/health_spec.lua index 58634460c8..1b14edce1e 100644 --- a/test/functional/plugin/health_spec.lua +++ b/test/functional/plugin/health_spec.lua @@ -91,7 +91,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - test_plug.full_render: require("test_plug.full_render.health").check() + test_plug.full_render: 1 ⚠️ 1 ❌ report 1 ~ - ✅ OK life is fine @@ -114,7 +114,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - test_plug: require("test_plug.health").check() + test_plug: ✅ report 1 ~ - ✅ OK everything is fine @@ -123,7 +123,7 @@ describe('vim.health', function() - ✅ OK nothing to see here ============================================================================== - test_plug.success1: require("test_plug.success1.health").check() + test_plug.success1: ✅ report 1 ~ - ✅ OK everything is fine @@ -132,7 +132,7 @@ describe('vim.health', function() - ✅ OK nothing to see here ============================================================================== - test_plug.success2: require("test_plug.success2.health").check() + test_plug.success2: ✅ another 1 ~ - ✅ OK ok @@ -144,7 +144,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - test_plug.submodule: require("test_plug.submodule.health").check() + test_plug.submodule: ✅ report 1 ~ - ✅ OK everything is fine @@ -159,7 +159,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - test_plug.submodule_empty: require("test_plug.submodule_empty.health").check() + test_plug.submodule_empty: 1 ❌ - ❌ ERROR The healthcheck report for "test_plug.submodule_empty" plugin is empty. ]]) @@ -185,7 +185,7 @@ describe('vim.health', function() - ❌ {Error:ERROR} No healthcheck found for "foo" plugin. | | {Bar: }| - {h1:test_plug.success1: require("test_pl}| + {h1:test_plug.success1: }| | {h2:report 1} | - ✅ {Ok:OK} everything is fine | @@ -200,7 +200,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - non_existent_healthcheck: + non_existent_healthcheck: 1 ❌ - ❌ ERROR No healthcheck found for "non_existent_healthcheck" plugin. ]]) @@ -218,7 +218,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - test_plug.lua: require("test_plug.lua.health").check() + test_plug.lua: ✅ nested lua/ directory ~ - ✅ OK everything is ok @@ -236,7 +236,7 @@ describe('vim.health', function() n.expect([[ ============================================================================== - nest: require("nest.health").check() + nest: ✅ healthy pack ~ - ✅ OK healthy ok @@ -281,14 +281,14 @@ describe(':checkhealth window', function() ^ | {14: }| {14: } | - {h1:test_plug.success1: }| - {h1:require("test_plug.success1.health").check()} | + {h1:test_plug. }| + {h1:success1: }| + {h1: ✅} | | {h2:report 1} | - ✅ {32:OK} everything is fine | | {h2:report 2} | - - ✅ {32:OK} nothing to see here | ## grid 3 | ]], @@ -324,8 +324,8 @@ describe(':checkhealth window', function() {14: } | {h1:test_plug. }| {h1:success1: }| - {h1:require("test_plug. }| - {h1:success1.health").check()}| + {h1: }| + {h1: ✅} | | {h2:report 1} | - ✅ {32:OK} everything is | @@ -383,15 +383,15 @@ describe(':checkhealth window', function() ^ | | | - test_plug.success1: | - require("test_plug.success1.health").check() | + test_plug. | + success1: | + ✅ | | report 1 | - ✅ OK everything is fine | | report 2 | - ✅ OK nothing to see here | - | ]]):format( top and [[ |