mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
feat(tests)!: new infrastructure based on makefile
Problem: Not easy to run all checks and tests locally. Redundant CI workflows. Solution: Separate CI into two workflows: * lint: Lua files (stylua, luals), query files (valid captures, predicates, directives using tsqueryls), docs (SUPPORTED_LANGUAGES.md) -- does not need parser installation * tests: parsers (ABI compatibility), query files (tsqueryls on Linux/macOS; nvim on Windows), highlight and indent tests (separated for better readability) -- needs parser installation (but only once) Switch to https://github.com/nvim-treesitter/highlight-assertions fork with ABI 15 support. Run all tests (on Linux and macOS) through `make` (`formatlua`, `checklua`, `lintquery`, `formatquery`, `checkquery`, `docs`, `tests`), which downloads and caches all necessary dependencies. Remove `update-readme` workflow (replaced by lint job on PRs).
This commit is contained in:
parent
4e906caca3
commit
53dccb3a77
19 changed files with 269 additions and 272 deletions
|
|
@ -6,29 +6,6 @@ local configs = require('nvim-treesitter.parsers')
|
|||
local parsers = #_G.arg > 0 and { unpack(_G.arg) }
|
||||
or require('nvim-treesitter.config').installed_parsers()
|
||||
|
||||
-- Extract captures from documentation for validation
|
||||
local captures = {} ---@type table[]
|
||||
do
|
||||
local current_query ---@type string
|
||||
|
||||
for line in io.lines('CONTRIBUTING.md') do
|
||||
if vim.startswith(line, '### ') then
|
||||
current_query = line:sub(5):lower() ---@type string
|
||||
elseif vim.startswith(line, '@') and current_query then
|
||||
if not captures[current_query] then
|
||||
captures[current_query] = {}
|
||||
end
|
||||
|
||||
table.insert(captures[current_query], vim.split(line:sub(2), ' ')[1])
|
||||
end
|
||||
end
|
||||
|
||||
-- Complete captures for injections.
|
||||
for lang, _ in pairs(configs) do
|
||||
table.insert(captures['injections'], lang)
|
||||
end
|
||||
end
|
||||
|
||||
-- Check queries for each installed parser in parsers
|
||||
local errors = {} ---@type string[]
|
||||
local timings = {} ---@type { duration: number, lang: string, query_type: string }[]
|
||||
|
|
@ -46,19 +23,6 @@ do
|
|||
print(string.format('Checking %s %s (%.02fms)', lang, query_type, duration * 1e-6))
|
||||
if not ok then
|
||||
errors[#errors + 1] = string.format('%s (%s): %s', lang, query_type, query)
|
||||
else
|
||||
if query then
|
||||
for _, capture in ipairs(query.captures) do
|
||||
local is_valid = (
|
||||
vim.startswith(capture, '_') -- Helpers.
|
||||
or vim.list_contains(captures[query_type], capture)
|
||||
)
|
||||
if not is_valid then
|
||||
errors[#errors + 1] =
|
||||
string.format('%s (%s): invalid capture "@%s"', lang, query_type, capture)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue