aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorStephan Seitz <stephan.seitz@fau.de>2021-03-23 20:44:17 +0100
committerStephan Seitz <stephan.lauf@yahoo.de>2021-03-23 21:25:37 +0100
commit1375cc5c1f575b924a22664eba343a8dded309ac (patch)
tree631a490ff83c5758b2c66602f1ce908909e3d454 /lua
parentUpdate lockfile.json (diff)
downloadnvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.tar
nvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.tar.gz
nvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.tar.bz2
nvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.tar.lz
nvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.tar.xz
nvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.tar.zst
nvim-treesitter-1375cc5c1f575b924a22664eba343a8dded309ac.zip
fix(checkhealth): display error messages of failed queries
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-treesitter/health.lua21
-rw-r--r--lua/nvim-treesitter/query.lua16
2 files changed, 25 insertions, 12 deletions
diff --git a/lua/nvim-treesitter/health.lua b/lua/nvim-treesitter/health.lua
index 326c75f12..86784a5ac 100644
--- a/lua/nvim-treesitter/health.lua
+++ b/lua/nvim-treesitter/health.lua
@@ -43,10 +43,10 @@ local function install_health()
end
local function query_status(lang, query_group)
- local ok, found_query = pcall(queries.get_query, lang, query_group)
+ local ok, err = pcall(queries.get_query, lang, query_group)
if not ok then
- return "x"
- elseif not found_query then
+ return "x", err
+ elseif not err then
return "."
else
return "✓"
@@ -54,8 +54,10 @@ local function query_status(lang, query_group)
end
function M.checkhealth()
+ local error_collection = {}
-- Installation dependency checks
install_health()
+ queries.invalidate_query_cache()
health_start("Parser/Features H L F I")
-- Parser installation checks
for _, parser_name in pairs(info.installed_parsers()) do
@@ -66,7 +68,11 @@ function M.checkhealth()
local multiple_parsers = installed > 1 and "+" or ""
local out = " - "..parser_name..multiple_parsers..string.rep(" ", 15 - (#parser_name + #multiple_parsers))
for _, query_group in pairs(queries.built_in_query_groups) do
- out = out..query_status(parser_name, query_group).." "
+ local status, err = query_status(parser_name, query_group)
+ out = out..status.." "
+ if err then
+ table.insert(error_collection, {parser_name, query_group, err})
+ end
end
print(out)
end
@@ -76,6 +82,13 @@ function M.checkhealth()
Legend: H[ighlight], L[ocals], F[olds], I[ndents]
+) multiple parsers found, only one will be used
x) errors found in the query, try to run :TSUpdate {lang}]])
+ if #error_collection > 0 then
+ print('\nThe following errors have been detected:')
+ for _, p in ipairs(error_collection) do
+ local lang, type, err = unpack(p)
+ health_error(lang..'('..type..'): '..err)
+ end
+ end
end
return M
diff --git a/lua/nvim-treesitter/query.lua b/lua/nvim-treesitter/query.lua
index c8c003353..df3e70805 100644
--- a/lua/nvim-treesitter/query.lua
+++ b/lua/nvim-treesitter/query.lua
@@ -66,27 +66,27 @@ do
--- Same as `vim.treesitter.query` except will return cached values
function M.get_query(lang, query_name)
if cache[lang][query_name] == nil then
- M.reload_file_cache(lang, query_name)
+ cache[lang][query_name] = tsq.get_query(lang, query_name)
end
return cache[lang][query_name]
end
- --- Reloads the query file cache.
+ --- Invalidates the query file cache.
--- If lang and query_name is both present, will reload for only the lang and query_name.
--- If only lang is present, will reload all query_names for that lang
--- If none are present, will reload everything
- function M.reload_file_cache(lang, query_name)
+ function M.invalidate_query_cache(lang, query_name)
if lang and query_name then
- cache[lang][query_name] = tsq.get_query(lang, query_name)
+ cache[lang][query_name] = nil
elseif lang and not query_name then
for query_name, _ in pairs(cache[lang]) do
- M.reload_file_cache(lang, query_name)
+ M.invalidate_query_cache(lang, query_name)
end
elseif not lang and not query_name then
for lang, _ in pairs(cache) do
for query_name, _ in pairs(cache[lang]) do
- M.reload_file_cache(lang, query_name)
+ M.invalidate_query_cache(lang, query_name)
end
end
else
@@ -96,9 +96,9 @@ do
end
--- This function is meant for an autocommand and not to be used. Only use if file is a query file.
-function M.reload_file_cache_on_write(fname)
+function M.invalidate_query_file(fname)
local fnamemodify = vim.fn.fnamemodify
- M.reload_file_cache(fnamemodify(fname, ':p:h:t'), fnamemodify(fname, ':t:r'))
+ M.invalidate_query_cache(fnamemodify(fname, ':p:h:t'), fnamemodify(fname, ':t:r'))
end
function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)