mirror of
https://github.com/neovim/neovim.git
synced 2026-08-28 01:51:52 +00:00
fix(health): emit Progress message #37123
Problem: The `"Running healthchecks..."` message doesn't inform the user much and is a hack from before we got a way to emit actual progress messages. Solution: Use `nvim_echo` to emit progress messages showing the name of the report that is currently running.
This commit is contained in:
committed by
GitHub
parent
445cb751e6
commit
f19653e370
@@ -371,6 +371,24 @@ local function get_summary()
|
|||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Emit progress messages
|
||||||
|
---@param len integer
|
||||||
|
---@return fun(status: 'success'|'running', idx: integer, fmt: string, ...: any): nil
|
||||||
|
local function progress_report(len)
|
||||||
|
local progress = { kind = 'progress', title = 'checkhealth' }
|
||||||
|
|
||||||
|
return function(status, idx, fmt, ...)
|
||||||
|
progress.status = status
|
||||||
|
progress.percent = status == 'success' and nil or math.floor(idx / len * 100)
|
||||||
|
-- percent=0 omits the reporting of percentage, so use 1% instead
|
||||||
|
-- progress.percent = progress.percent == 0 and 1 or progress.percent
|
||||||
|
progress.id = vim.api.nvim_echo({ { fmt:format(...) } }, false, progress)
|
||||||
|
-- extui/ui2 shows all messages at once after the healthchecks are finished.
|
||||||
|
-- This 1ms wait ensures the messages are shown separately
|
||||||
|
vim.wait(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--- Runs the specified healthchecks.
|
--- Runs the specified healthchecks.
|
||||||
--- Runs all discovered healthchecks if plugin_names is empty.
|
--- Runs all discovered healthchecks if plugin_names is empty.
|
||||||
---
|
---
|
||||||
@@ -419,10 +437,13 @@ function M._check(mods, plugin_names)
|
|||||||
vim.fn.setline(1, 'ERROR: No healthchecks found.')
|
vim.fn.setline(1, 'ERROR: No healthchecks found.')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
vim.cmd.redraw()
|
|
||||||
vim.print('Running healthchecks...')
|
|
||||||
|
|
||||||
|
local total_checks = #vim.tbl_keys(healthchecks)
|
||||||
|
local progress_msg = progress_report(total_checks)
|
||||||
|
local check_idx = 1
|
||||||
for name, value in vim.spairs(healthchecks) do
|
for name, value in vim.spairs(healthchecks) do
|
||||||
|
progress_msg('running', check_idx, 'checking %s', name)
|
||||||
|
check_idx = check_idx + 1
|
||||||
local func = value[1]
|
local func = value[1]
|
||||||
local type = value[2]
|
local type = value[2]
|
||||||
s_output = {}
|
s_output = {}
|
||||||
@@ -475,9 +496,7 @@ function M._check(mods, plugin_names)
|
|||||||
vim.cmd.redraw()
|
vim.cmd.redraw()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Clear the 'Running healthchecks...' message.
|
progress_msg('success', 0, 'checks done')
|
||||||
vim.cmd.redraw()
|
|
||||||
vim.print('')
|
|
||||||
|
|
||||||
-- Quit with 'q' inside healthcheck buffers.
|
-- Quit with 'q' inside healthcheck buffers.
|
||||||
vim._with({ buf = bufnr }, function()
|
vim._with({ buf = bufnr }, function()
|
||||||
|
|||||||
@@ -228,6 +228,7 @@ describe('vim.health', function()
|
|||||||
h2 = { foreground = tonumber('0x6a0dad') },
|
h2 = { foreground = tonumber('0x6a0dad') },
|
||||||
Ok = { foreground = Screen.colors.LightGreen },
|
Ok = { foreground = Screen.colors.LightGreen },
|
||||||
Error = { foreground = Screen.colors.Red },
|
Error = { foreground = Screen.colors.Red },
|
||||||
|
Done = { foreground = Screen.colors.NvimDarkGreen },
|
||||||
Bar = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGrey },
|
Bar = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGrey },
|
||||||
})
|
})
|
||||||
command('checkhealth foo success1')
|
command('checkhealth foo success1')
|
||||||
@@ -245,7 +246,7 @@ describe('vim.health', function()
|
|||||||
|
|
|
|
||||||
{h2:report 1} |
|
{h2:report 1} |
|
||||||
- ✅ {Ok:OK} everything is fine |
|
- ✅ {Ok:OK} everything is fine |
|
||||||
|
|
{Done:checkhealth}: checks done |
|
||||||
]],
|
]],
|
||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
@@ -312,6 +313,7 @@ describe(':checkhealth window', function()
|
|||||||
screen:set_default_attr_ids {
|
screen:set_default_attr_ids {
|
||||||
h1 = { reverse = true },
|
h1 = { reverse = true },
|
||||||
h2 = { foreground = tonumber('0x6a0dad') },
|
h2 = { foreground = tonumber('0x6a0dad') },
|
||||||
|
Done = { foreground = Screen.colors.NvimDarkGreen },
|
||||||
[1] = { foreground = Screen.colors.Blue, bold = true },
|
[1] = { foreground = Screen.colors.Blue, bold = true },
|
||||||
[14] = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray },
|
[14] = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray },
|
||||||
[32] = { foreground = Screen.colors.PaleGreen2 },
|
[32] = { foreground = Screen.colors.PaleGreen2 },
|
||||||
@@ -335,7 +337,7 @@ describe(':checkhealth window', function()
|
|||||||
|
|
|
|
||||||
{h2:report 2} |
|
{h2:report 2} |
|
||||||
## grid 3
|
## grid 3
|
||||||
|
|
{Done:checkhealth}: checks done |
|
||||||
]],
|
]],
|
||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
@@ -345,6 +347,7 @@ describe(':checkhealth window', function()
|
|||||||
screen:set_default_attr_ids {
|
screen:set_default_attr_ids {
|
||||||
h1 = { reverse = true },
|
h1 = { reverse = true },
|
||||||
h2 = { foreground = tonumber('0x6a0dad') },
|
h2 = { foreground = tonumber('0x6a0dad') },
|
||||||
|
Done = { foreground = Screen.colors.NvimDarkGreen },
|
||||||
[1] = { foreground = Screen.colors.Blue, bold = true },
|
[1] = { foreground = Screen.colors.Blue, bold = true },
|
||||||
[14] = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray },
|
[14] = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray },
|
||||||
[32] = { foreground = Screen.colors.PaleGreen2 },
|
[32] = { foreground = Screen.colors.PaleGreen2 },
|
||||||
@@ -362,7 +365,7 @@ describe(':checkhealth window', function()
|
|||||||
%s |
|
%s |
|
||||||
{1:~ }|*18
|
{1:~ }|*18
|
||||||
## grid 3
|
## grid 3
|
||||||
|
|
{Done:checkhealth}: checks done |
|
||||||
## grid 4
|
## grid 4
|
||||||
^ |
|
^ |
|
||||||
{14: }|*3
|
{14: }|*3
|
||||||
@@ -423,7 +426,7 @@ describe(':checkhealth window', function()
|
|||||||
%s |
|
%s |
|
||||||
~ |*10
|
~ |*10
|
||||||
## grid 3
|
## grid 3
|
||||||
|
|
checkhealth: checks done |
|
||||||
## grid 4
|
## grid 4
|
||||||
^ |
|
^ |
|
||||||
|
|
|
|
||||||
|
|||||||
Reference in New Issue
Block a user