fix(health): only check installed parsers

This is to avoid awfully long checkhealths. And not installed parsers
can be infered from the fact that they are not listed.
This commit is contained in:
Thomas Vigouroux 2020-08-27 20:53:45 +02:00 committed by Stephan Seitz
parent dee3c242d9
commit 34160bb6f2

View file

@ -2,7 +2,7 @@ local api = vim.api
local fn = vim.fn local fn = vim.fn
local queries = require'nvim-treesitter.query' local queries = require'nvim-treesitter.query'
local parsers = require'nvim-treesitter.parsers' local info = require'nvim-treesitter.info'
local health_start = vim.fn["health#report_start"] local health_start = vim.fn["health#report_start"]
local health_ok = vim.fn['health#report_ok'] local health_ok = vim.fn['health#report_ok']
@ -12,6 +12,7 @@ local health_error = vim.fn['health#report_error']
local M = {} local M = {}
local function install_health() local function install_health()
health_start('Installation')
if fn.executable('git') == 0 then if fn.executable('git') == 0 then
health_error('`git` executable not found.', { health_error('`git` executable not found.', {
'Install it with your package manager.', 'Install it with your package manager.',
@ -44,38 +45,24 @@ end
function M.checkhealth() function M.checkhealth()
-- Installation dependency checks -- Installation dependency checks
health_start('Installation')
install_health() install_health()
local missing_parsers = {}
-- Parser installation checks -- Parser installation checks
for _, parser_name in pairs(parsers.available_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 print informations about installed parsers
if installed == 1 then if installed >= 1 then
if installed > 1 then
health_warn(string.format("Multiple parsers found for %s, only %s will be used.", parser_name, installed[1]))
end
health_start(parser_name .. " parser healthcheck") health_start(parser_name .. " parser healthcheck")
health_ok(parser_name .. " parser found.") health_ok(parser_name .. " parser found.")
for _, query_group in pairs(queries.built_in_query_groups) do for _, query_group in pairs(queries.built_in_query_groups) do
query_health(parser_name, query_group) query_health(parser_name, query_group)
end end
elseif installed > 1 then
health_warn(string.format("Multiple parsers found for %s, only %s will be used.", parser_name, installed[1]))
else
table.insert(missing_parsers, parser_name)
end end
end end
-- Add informations on parsers we dont find
if #missing_parsers > 0 then
health_start('Missing parsers')
-- TODO(vigoux): The installation command should be changed so that its easier to find
health_warn('Some parsers are not installed:\n' .. table.concat(missing_parsers, '\n'), {
"Install them using `:TSInstall language"})
end
end end
return M return M