mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00: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:
		@@ -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"
 | 
			
		||||
  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*
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,9 @@ endif
 | 
			
		||||
runtime! ftplugin/help.vim
 | 
			
		||||
 | 
			
		||||
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'
 | 
			
		||||
 | 
			
		||||
if exists("b:undo_ftplugin")
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,40 @@ local M = {}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
local function filepath_to_healthcheck(path)
 | 
			
		||||
  path = vim.fs.normalize(path)
 | 
			
		||||
 
 | 
			
		||||
@@ -136,7 +136,7 @@ describe('health.vim', function()
 | 
			
		||||
        Bar = { foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGrey },
 | 
			
		||||
      })
 | 
			
		||||
      command("checkhealth foo success1")
 | 
			
		||||
      command("set nowrap laststatus=0")
 | 
			
		||||
      command("set nofoldenable nowrap laststatus=0")
 | 
			
		||||
      screen:expect{grid=[[
 | 
			
		||||
        ^                                                  |
 | 
			
		||||
        {Bar:──────────────────────────────────────────────────}|
 | 
			
		||||
@@ -153,6 +153,22 @@ describe('health.vim', function()
 | 
			
		||||
      ]]}
 | 
			
		||||
    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()
 | 
			
		||||
      command("checkhealth non_existent_healthcheck")
 | 
			
		||||
      -- luacheck: ignore 613
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user