mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 05:05:00 -07:00
feat(health): fold successful healthchecks #22866
Problem: checkhealth can be noisy, but we don't want to omit info. Solution: Fold OK results by default, if 'foldenable' is enabled. Resolves #22796
This commit is contained in:
parent
9d9af4fe27
commit
4382d2ed56
@ -106,6 +106,9 @@ The following changes to existing APIs or features add new behavior.
|
|||||||
• `:source` without arguments treats a buffer with its 'filetype' set to "lua"
|
• `:source` without arguments treats a buffer with its 'filetype' set to "lua"
|
||||||
as Lua code regardless of its extension.
|
as Lua code regardless of its extension.
|
||||||
|
|
||||||
|
• |:checkhealth| buffer now implements |folding|. The initial folding status is
|
||||||
|
defined by the 'foldenable' option.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
REMOVED FEATURES *news-removed*
|
REMOVED FEATURES *news-removed*
|
||||||
|
|
||||||
|
@ -9,6 +9,9 @@ endif
|
|||||||
runtime! ftplugin/help.vim
|
runtime! ftplugin/help.vim
|
||||||
|
|
||||||
setlocal wrap breakindent linebreak
|
setlocal wrap breakindent linebreak
|
||||||
|
setlocal foldexpr=getline(v:lnum-1)=~'^=\\{78}$'?'>1':(getline(v:lnum)=~'^=\\{78}'?0:'=')
|
||||||
|
setlocal foldmethod=expr
|
||||||
|
setlocal foldtext=v:lua.require('vim.health').foldtext()
|
||||||
let &l:iskeyword='!-~,^*,^|,^",192-255'
|
let &l:iskeyword='!-~,^*,^|,^",192-255'
|
||||||
|
|
||||||
if exists("b:undo_ftplugin")
|
if exists("b:undo_ftplugin")
|
||||||
|
@ -2,6 +2,40 @@ local M = {}
|
|||||||
|
|
||||||
local s_output = {}
|
local s_output = {}
|
||||||
|
|
||||||
|
-- Returns the fold text of the current healthcheck section
|
||||||
|
function M.foldtext()
|
||||||
|
local foldtext = vim.fn.foldtext()
|
||||||
|
|
||||||
|
if vim.bo.filetype ~= 'checkhealth' then
|
||||||
|
return foldtext
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.b.failedchecks == nil then
|
||||||
|
vim.b.failedchecks = vim.empty_dict()
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.b.failedchecks[foldtext] == nil then
|
||||||
|
local warning = '- WARNING '
|
||||||
|
local warninglen = string.len(warning)
|
||||||
|
local err = '- ERROR '
|
||||||
|
local errlen = string.len(err)
|
||||||
|
local failedchecks = vim.b.failedchecks
|
||||||
|
failedchecks[foldtext] = false
|
||||||
|
|
||||||
|
local foldcontent = vim.api.nvim_buf_get_lines(0, vim.v.foldstart - 1, vim.v.foldend, false)
|
||||||
|
for _, line in ipairs(foldcontent) do
|
||||||
|
if string.sub(line, 1, warninglen) == warning or string.sub(line, 1, errlen) == err then
|
||||||
|
failedchecks[foldtext] = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.b.failedchecks = failedchecks
|
||||||
|
end
|
||||||
|
|
||||||
|
return vim.b.failedchecks[foldtext] and '+WE' .. foldtext:sub(4) or foldtext
|
||||||
|
end
|
||||||
|
|
||||||
-- From a path return a list [{name}, {func}, {type}] representing a healthcheck
|
-- From a path return a list [{name}, {func}, {type}] representing a healthcheck
|
||||||
local function filepath_to_healthcheck(path)
|
local function filepath_to_healthcheck(path)
|
||||||
path = vim.fs.normalize(path)
|
path = vim.fs.normalize(path)
|
||||||
|
@ -136,7 +136,7 @@ describe('health.vim', function()
|
|||||||
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")
|
||||||
command("set nowrap laststatus=0")
|
command("set nofoldenable nowrap laststatus=0")
|
||||||
screen:expect{grid=[[
|
screen:expect{grid=[[
|
||||||
^ |
|
^ |
|
||||||
{Bar:──────────────────────────────────────────────────}|
|
{Bar:──────────────────────────────────────────────────}|
|
||||||
@ -153,6 +153,22 @@ describe('health.vim', function()
|
|||||||
]]}
|
]]}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("fold healthchecks", function()
|
||||||
|
local screen = Screen.new(50, 7)
|
||||||
|
screen:attach()
|
||||||
|
command("checkhealth foo success1")
|
||||||
|
command("set nowrap laststatus=0")
|
||||||
|
screen:expect{grid=[[
|
||||||
|
^ |
|
||||||
|
──────────────────────────────────────────────────|
|
||||||
|
+WE 4 lines: foo: ·······························|
|
||||||
|
──────────────────────────────────────────────────|
|
||||||
|
+-- 8 lines: test_plug.success1: require("test_pl|
|
||||||
|
~ |
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
it("gracefully handles invalid healthcheck", function()
|
it("gracefully handles invalid healthcheck", function()
|
||||||
command("checkhealth non_existent_healthcheck")
|
command("checkhealth non_existent_healthcheck")
|
||||||
-- luacheck: ignore 613
|
-- luacheck: ignore 613
|
||||||
|
Loading…
Reference in New Issue
Block a user