From e95f1ad04901ef5274cdf4c5c70ce3f9e5e4c09d Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 17 Mar 2026 18:34:01 +0100 Subject: [PATCH] build: add version check of tree-sitter parsers --- src/ts_bin_query_gen.zig | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/ts_bin_query_gen.zig b/src/ts_bin_query_gen.zig index a618a58..b6bc168 100644 --- a/src/ts_bin_query_gen.zig +++ b/src/ts_bin_query_gen.zig @@ -33,10 +33,27 @@ pub fn main() anyerror!void { for (file_types) |file_type| { const lang = file_type.lang_fn() orelse std.debug.panic("tree-sitter parser function failed for language: {s}", .{file_type.name}); + const lang_abi = lang.getLanguageAbiVersion(); + if (lang_abi < treez.TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION) + std.debug.panic("tree-sitter language '{s}' API is too old: {d} (our MIN API:{d})", .{ + lang.getLanguageName(), + lang_abi, + treez.TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION, + }); + if (lang_abi > treez.TREE_SITTER_LANGUAGE_VERSION) + std.debug.panic("tree-sitter language '{s}' API is too new: {d} (our API:{d})", .{ + lang.getLanguageName(), + lang_abi, + treez.TREE_SITTER_LANGUAGE_VERSION, + }); + try cbor.writeValue(writer, file_type.name); try cbor.writeMapHeader(writer, if (file_type.injections) |_| 3 else 2); - const highlights_in = try treez.Query.create(lang, file_type.highlights); + const highlights_in = treez.Query.create(lang, file_type.highlights) catch |e| switch (e) { + error.InvalidLanguage => std.debug.panic("tree-sitter invalid language error: {s}", .{file_type.name}), + else => |e_| return e_, + }; const ts_highlights_in: *tss.TSQuery = @ptrCast(@alignCast(highlights_in)); const highlights_cb = try tss.toCbor(ts_highlights_in, allocator);