feat(highlights)!: enforce documented captures (#6232)

Problem: Allowing undocumented "secret" (sub)captures makes it harder
to write comprehensive colorschemes and catch inconsistent captures.

Solution: Only allow captures listed in CONTRIBUTING.md. Add useful
(cross-language) subcaptures and drop language-specific or too niche
ones.

Follow-up: Adding further `*.builtin` captures and changing queries to
use them.

Language-specific subcaptures should instead be added in user config or
a custom language plugin.
This commit is contained in:
Christian Clason 2024-03-03 11:00:11 +01:00 committed by GitHub
parent 22c5a0d833
commit 99ddf57353
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
29 changed files with 108 additions and 112 deletions

View file

@ -1,4 +1,5 @@
#!/usr/bin/env -S nvim -l
vim.opt.rtp:prepend "./"
-- Equivalent to print(), but this will ensure consistent output regardless of
-- operating system.
@ -35,15 +36,6 @@ local function extract_captures()
return captures
end
local function list_any(list, predicate)
for _, v in pairs(list) do
if predicate(v) then
return true
end
end
return false
end
local function do_check()
local timings = {}
local queries = require "nvim-treesitter.query"
@ -72,9 +64,7 @@ local function do_check()
for _, capture in ipairs(query.captures) do
local is_valid = (
vim.startswith(capture, "_") -- Helpers.
or list_any(captures[query_type], function(documented_capture)
return vim.startswith(capture, documented_capture)
end)
or vim.tbl_contains(captures[query_type], capture)
)
if not is_valid then
local error = string.format("(x) Invalid capture @%s in %s for %s.", capture, query_type, lang)