feat: add checkhealth

This commit is contained in:
kiyan42
2020-04-20 22:33:13 +02:00
committed by Thomas Vigouroux
parent 8b01b9caee
commit 698453e50c
4 changed files with 93 additions and 1 deletions

View File

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

View File

@@ -0,0 +1,49 @@
local api = vim.api
local install = require'nvim-treesitter.install'
local queries = require'nvim-treesitter.query'
local locals = require'nvim-treesitter.locals'
local health_start = vim.fn["health#report_start"]
local health_ok = vim.fn['health#report_ok']
local health_info = vim.fn['health#report_info']
local health_warn = vim.fn['health#report_warn']
local health_error = vim.fn['health#report_error']
local M = {}
-- TODO(vigoux): Maybe we should move each check to be perform in its own module
function M.checkhealth()
-- Installation dependency checks
health_start('Installation')
install.checkhealth()
local missing_parsers = {}
-- Parser installation checks
for parser_name, repo in pairs(install.repositories) do
local installed = #api.nvim_get_runtime_file('parser/'..parser_name..'.so', false)
-- Only print informations about installed parsers
if installed == 1 then
health_start(parser_name .. " parser healthcheck")
health_ok(parser_name .. " parser found.")
locals.checkhealth(parser_name)
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
-- 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 `:lua require'nvim-treesitter'.install_parser('language')`"})
end
end
return M

View File

@@ -3,7 +3,7 @@ local fn = vim.fn
local luv = vim.loop
local M = {}
local repositories = {
M.repositories = {
javascript = {
url = "https://github.com/tree-sitter/tree-sitter-javascript",
files = { "src/parser.c", "src/scanner.c" },
@@ -198,4 +198,28 @@ function M.install_parser(ft)
run_install(cache_folder, package_path, ft, repository)
end
function M.checkhealth()
local health_ok = vim.fn['health#report_ok']
local health_info = vim.fn['health#report_info']
local health_warn = vim.fn['health#report_warn']
local health_error = vim.fn['health#report_error']
if fn.executable('git') == 0 then
health_error('`git` executable not found.', {
'Install it with your package manager.',
'Check that your `$PATH` is set correctly.'})
else
health_ok('`git` executable found.')
end
if fn.executable('cc') == 0 then
health_error('`cc` executable not found.', {
'Install `gcc` with your package manager.',
'Install `clang` with your package manager.',
'Check that your `$PATH` is set correctly.'})
else
health_ok('`cc` executable found.')
end
end
return M

View File

@@ -10,6 +10,22 @@ local M = {
locals={}
}
function M.checkhealth(lang)
local health_start = vim.fn["health#report_start"]
local health_ok = vim.fn['health#report_ok']
local health_info = vim.fn['health#report_info']
local health_warn = vim.fn['health#report_warn']
local health_error = vim.fn['health#report_error']
if not queries.get_query(lang, "locals") then
health_warn("No `locals.scm` query found for " .. lang, {
"Open an issue at https://github.com/nvim-treesitter/nvim-treesitter"
})
else
health_ok("`locals.scm` found.")
end
end
function M.collect_locals(bufnr)
local ft = api.nvim_buf_get_option(bufnr, "ft")
if not ft then return end