feat(healthcheck): support native lua healthchecks, and fixes

After neovim/neovim#15259 lua healthchecks are called directly and are
prefered over neovim autoload ones. The discover of Lua ones requires
the function to be named "check()".

Also the mentioned PR changed the design of healthchecks to not use
output capturing, therefore avoid printing and instead concatenate and
call the health functions.
This commit is contained in:
Javier López 2021-10-06 09:29:08 -05:00 committed by Thomas Vigouroux
parent ea0f6614b7
commit 66f1873213
3 changed files with 12 additions and 9 deletions

View file

@ -41,7 +41,7 @@ body:
- type: textarea - type: textarea
attributes: attributes:
label: Output of `:checkhealth nvim_treesitter` label: Output of `:checkhealth nvim-treesitter`
render: markdown render: markdown
validations: validations:
required: true required: true

View file

@ -1,3 +1,3 @@
function! health#nvim_treesitter#check() function! health#nvim_treesitter#check()
lua require 'nvim-treesitter.health'.checkhealth() lua require 'nvim-treesitter.health'.check()
endfunction endfunction

View file

@ -109,17 +109,17 @@ local function query_status(lang, query_group)
end end
end end
function M.checkhealth() function M.check()
local error_collection = {} local error_collection = {}
-- Installation dependency checks -- Installation dependency checks
install_health() install_health()
queries.invalidate_query_cache() queries.invalidate_query_cache()
health_start "Parser/Features H L F I J"
-- Parser installation checks -- Parser installation checks
local parser_installation = { "Parser/Features H L F I J" }
for _, parser_name in pairs(info.installed_parsers()) do for _, parser_name in pairs(info.installed_parsers()) do
local installed = #api.nvim_get_runtime_file("parser/" .. parser_name .. ".so", false) local installed = #api.nvim_get_runtime_file("parser/" .. parser_name .. ".so", false)
-- Only print informations about installed parsers -- Only append information about installed parsers
if installed >= 1 then if installed >= 1 then
local multiple_parsers = installed > 1 and "+" or "" local multiple_parsers = installed > 1 and "+" or ""
local out = " - " .. parser_name .. multiple_parsers .. string.rep(" ", 15 - (#parser_name + #multiple_parsers)) local out = " - " .. parser_name .. multiple_parsers .. string.rep(" ", 15 - (#parser_name + #multiple_parsers))
@ -130,16 +130,19 @@ function M.checkhealth()
table.insert(error_collection, { parser_name, query_group, err }) table.insert(error_collection, { parser_name, query_group, err })
end end
end end
print(out) table.insert(parser_installation, out)
end end
end end
print [[ local legend = [[
Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
+) multiple parsers found, only one will be used +) multiple parsers found, only one will be used
x) errors found in the query, try to run :TSUpdate {lang}]] x) errors found in the query, try to run :TSUpdate {lang}]]
table.insert(parser_installation, legend)
-- Finally call the report function
health_start(table.concat(parser_installation, "\n"))
if #error_collection > 0 then if #error_collection > 0 then
print "\nThe following errors have been detected:" health_start "The following errors have been detected:"
for _, p in ipairs(error_collection) do for _, p in ipairs(error_collection) do
local lang, type, err = unpack(p) local lang, type, err = unpack(p)
health_error(lang .. "(" .. type .. "): " .. err) health_error(lang .. "(" .. type .. "): " .. err)