diff --git a/build.zig b/build.zig index c51ab40..8e73488 100644 --- a/build.zig +++ b/build.zig @@ -49,6 +49,7 @@ pub fn build(b: *std.Build) void { ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-c/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-cpp/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-css/queries/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "queries/d/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-diff/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-dockerfile/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-elixir/queries/highlights.scm"); @@ -70,7 +71,7 @@ pub fn build(b: *std.Build) void { ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-julia/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-kdl/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-lua/queries/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-mail/queries/mail/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-mail/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-make/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-markdown/tree-sitter-markdown/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-markdown/tree-sitter-markdown-inline/queries/highlights.scm"); @@ -92,8 +93,10 @@ pub fn build(b: *std.Build) void { ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-proto/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-python/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-purescript/queries/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-query/queries/query/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-regex/queries/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-rpmspec/queries/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-rpmspec/rpmbash/queries/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-rpmspec/rpmspec/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-ruby/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-rust/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-ssh-config/queries/highlights.scm"); @@ -113,16 +116,20 @@ pub fn build(b: *std.Build) void { ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-zig/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-ziggy/tree-sitter-ziggy/queries/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-ziggy/tree-sitter-ziggy-schema/queries/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/verilog/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/commonlisp/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/latex/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/hcl/highlights.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/rst/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/systemverilog/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/comment/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/commonlisp/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/latex/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/llvm/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/hcl/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/hurl/highlights.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/rst/highlights.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "queries/cmake/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-asm/queries/asm/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-astro/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-cpp/queries/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "queries/d/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-elixir/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-elm/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-fsharp/queries/injections.scm"); @@ -147,6 +154,8 @@ pub fn build(b: *std.Build) void { ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-po/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-purescript/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-purescript/vim_queries/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-query/queries/query/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-rpmspec/rpmspec/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-rust/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-superhtml/tree-sitter-superhtml/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-swift/queries/injections.scm"); @@ -154,11 +163,13 @@ pub fn build(b: *std.Build) void { ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-uxntal/queries/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-vim/queries/vim/injections.scm"); ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "tree-sitter-zig/queries/injections.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/verilog/injections.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/commonlisp/injections.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/latex/injections.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/hcl/injections.scm"); - ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/queries/rst/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/systemverilog/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/commonlisp/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/latex/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/llvm/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/hcl/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/hurl/injections.scm"); + ts_queryfile(b, tree_sitter_dep, ts_bin_query_gen, "nvim-treesitter/runtime/queries/rst/injections.scm"); const syntax_mod = b.addModule("syntax", .{ .root_source_file = b.path("src/syntax.zig"), diff --git a/build.zig.zon b/build.zig.zon index aea837a..0ac1327 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,8 +6,8 @@ .dependencies = .{ .tree_sitter = .{ - .url = "https://github.com/neurocyte/tree-sitter/releases/download/master-772776d4a090b2d08b10834ab623d8d40c75a3b0/source.tar.gz", - .hash = "tree_sitter-0.22.4-150-g7e3f5726-z0LhyLF0iTBSKlZFqwf9kbYT1ENCbCFYp9XoKpZUrm2v", + .url = "https://github.com/neurocyte/tree-sitter/releases/download/master-4f6c39ab6e313122b43957bc555377318bfa51f0/source.tar.gz", + .hash = "tree_sitter-0.26.7-z0LhyEjBnzDRrCtuKtQrrkdtSIO5v8dE8ildxwOrWcGt", }, .cbor = .{ .url = "git+https://github.com/neurocyte/cbor?ref=master#7d2eeb68c8a2fb3f4d6baad6cc04c521b92974c0", diff --git a/src/file_types.zig b/src/file_types.zig index 60ca3ea..e74fe16 100644 --- a/src/file_types.zig +++ b/src/file_types.zig @@ -54,6 +54,14 @@ pub const @"c-sharp" = .{ .comment = "//", }; +pub const comment = .{ + .description = "Comment tags", + .icon = "#", + .extensions = .{}, + .comment = "#", + .highlights = "nvim-treesitter/runtime/queries/comment/highlights.scm", +}; + pub const conf = .{ .description = "Config", .color = 0x000000, @@ -105,6 +113,16 @@ pub const css = .{ .comment = "//", }; +pub const d = .{ + .description = "D", + .color = 0xF54927, + .icon = "", + .extensions = .{ "d", "di" }, + .comment = "//", + .highlights = "queries/d/highlights.scm", + .injections = "queries/d/injections.scm", +}; + pub const diff = .{ .description = "Diff", .extensions = .{ "diff", "patch", "rej" }, @@ -214,8 +232,8 @@ pub const hcl = .{ .icon = "", .extensions = .{ "hcl", "tf", "tfvars" }, .comment = "#", - .highlights = "nvim-treesitter/queries/hcl/highlights.scm", - .injections = "nvim-treesitter/queries/hcl/injections.scm", + .highlights = "nvim-treesitter/runtime/queries/hcl/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/hcl/injections.scm", }; pub const html = .{ @@ -243,7 +261,8 @@ pub const hurl = .{ .icon = "", .extensions = .{"hurl"}, .comment = "#", - .injections = "tree-sitter-hurl/queries/injections.scm", + .highlights = "nvim-treesitter/runtime/queries/hurl/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/hurl/injections.scm", }; pub const java = .{ @@ -299,8 +318,8 @@ pub const latex = .{ .icon = "", .extensions = .{ "tex", "aux", "sty", "cls" }, .comment = "%", - .highlights = "nvim-treesitter/queries/latex/highlights.scm", - .injections = "nvim-treesitter/queries/latex/injections.scm", + .highlights = "nvim-treesitter/runtime/queries/latex/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/latex/injections.scm", }; pub const commonlisp = .{ @@ -309,8 +328,17 @@ pub const commonlisp = .{ .icon = "", .extensions = .{ "lisp", "ls", "el" }, .comment = ";", - .highlights = "nvim-treesitter/queries/commonlisp/highlights.scm", - .injections = "nvim-treesitter/queries/commonlisp/injections.scm", + .highlights = "nvim-treesitter/runtime/queries/commonlisp/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/commonlisp/injections.scm", +}; + +pub const llvm = .{ + .description = "Llvm", + .icon = "", + .extensions = .{ "llvm", "ll" }, + .comment = ";", + .highlights = "nvim-treesitter/runtime/queries/llvm/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/llvm/injections.scm", }; pub const lua = .{ @@ -328,7 +356,6 @@ pub const mail = .{ .icon = "󰇮", .extensions = .{ "eml", "mbox" }, .comment = ">", - .highlights = "tree-sitter-mail/queries/mail/highlights.scm", .first_line_matches = FirstLineMatch{ .prefix = "From" }, }; @@ -535,20 +562,31 @@ pub const regex = .{ .comment = "#", }; +pub const rpmbash = .{ + .description = "RPM spec (bash)", + .color = 0xff0000, + .icon = "󱄛", + .extensions = .{}, + .comment = "#", + .highlights = "tree-sitter-rpmspec/rpmbash/queries/highlights.scm", +}; + pub const rpmspec = .{ .description = "RPM spec", .color = 0xff0000, .icon = "󱄛", .extensions = .{"spec"}, .comment = "#", + .highlights = "tree-sitter-rpmspec/rpmspec/queries/highlights.scm", + .injections = "tree-sitter-rpmspec/rpmspec/queries/injections.scm", }; pub const rst = .{ .description = "reStructuredText", .extensions = .{"rst"}, .comment = "..", - .highlights = "nvim-treesitter/queries/rst/highlights.scm", - .injections = "nvim-treesitter/queries/rst/injections.scm", + .highlights = "nvim-treesitter/runtime/queries/rst/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/rst/injections.scm", }; pub const ruby = .{ @@ -568,9 +606,17 @@ pub const rust = .{ .injections = "tree-sitter-rust/queries/injections.scm", }; +pub const query = .{ + .description = "Query (tree-sitter)", + .extensions = .{"scm"}, + .comment = ";", + .highlights = "tree-sitter-query/queries/query/highlights.scm", + .injections = "tree-sitter-query/queries/query/injections.scm", +}; + pub const scheme = .{ .description = "Scheme", - .extensions = .{ "scm", "ss" }, + .extensions = .{ "scm", "ss", "scheme" }, .comment = ";", }; @@ -595,12 +641,12 @@ pub const swift = .{ .comment = "//", }; -pub const verilog = .{ +pub const systemverilog = .{ .description = "SystemVerilog", .extensions = .{ "sv", "svh", "v", "vh" }, .comment = "//", - .highlights = "nvim-treesitter/queries/verilog/highlights.scm", - .injections = "nvim-treesitter/queries/verilog/injections.scm", + .highlights = "nvim-treesitter/runtime/queries/systemverilog/highlights.scm", + .injections = "nvim-treesitter/runtime/queries/systemverilog/injections.scm", }; pub const toml = .{ diff --git a/src/ts_bin_query_gen.zig b/src/ts_bin_query_gen.zig index a618a58..a265abe 100644 --- a/src/ts_bin_query_gen.zig +++ b/src/ts_bin_query_gen.zig @@ -33,10 +33,28 @@ 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); + var error_offset: u32 = 0; + const highlights_in = treez.Query.create(lang, file_type.highlights, &error_offset) catch |e| switch (e) { + error.InvalidLanguage => std.debug.panic("tree-sitter invalid language error: {s}", .{file_type.name}), + else => |e_| std.debug.panic("tree-sitter failed to read highlights: {s} -> {t} at pos {d}", .{ file_type.name, e_, error_offset }), + }; const ts_highlights_in: *tss.TSQuery = @ptrCast(@alignCast(highlights_in)); const highlights_cb = try tss.toCbor(ts_highlights_in, allocator); @@ -47,7 +65,7 @@ pub fn main() anyerror!void { if (verbose) std.log.info("file_type {s} highlights {d} bytes", .{ file_type.name, highlights_cb.len }); - const errors_in = try treez.Query.create(lang, "(ERROR) @error"); + const errors_in = try treez.Query.create(lang, "(ERROR) @error", &error_offset); const ts_errors_in: *tss.TSQuery = @ptrCast(@alignCast(errors_in)); const errors_cb = try tss.toCbor(ts_errors_in, allocator); @@ -59,7 +77,10 @@ pub fn main() anyerror!void { std.log.info("file_type {s} errors {d} bytes", .{ file_type.name, errors_cb.len }); if (file_type.injections) |injections| { - const injections_in = try treez.Query.create(lang, injections); + const injections_in = treez.Query.create(lang, injections, &error_offset) catch |e| switch (e) { + error.InvalidLanguage => std.debug.panic("tree-sitter invalid language error: {s}", .{file_type.name}), + else => |e_| std.debug.panic("tree-sitter failed to read injections: {s} -> {t} at pos {d}", .{ file_type.name, e_, error_offset }), + }; const ts_injections_in: *tss.TSQuery = @ptrCast(@alignCast(injections_in)); const injections_cb = try tss.toCbor(ts_injections_in, allocator); diff --git a/src/ts_serializer.zig b/src/ts_serializer.zig index 02c6daa..79a1a70 100644 --- a/src/ts_serializer.zig +++ b/src/ts_serializer.zig @@ -171,11 +171,12 @@ pub const QueryStep = extern struct { // is_last_child: u1, // is_pass_through: u1, // is_dead_end: u1, - // alternative_is_immediate: u1, + // is_inside_alternation: u1, // contains_captures: u1, // root_pattern_guaranteed: u1, flags8: u8, // parent_pattern_guaranteed: u1, + // is_missing: u1, flags16: u8, pub fn cborEncode(self: *const @This(), writer: *Io.Writer) !void {