Squashed 'src/syntax/' changes from 3619572..d5b5da5
d5b5da5 feat: add nu 9e943df feat: add vimscript support 3aa9e32 fix: make cpp highlights inherit from c highlights f516cca feat: update tree-sitter bc10ea1 feat: format json with hjson 0b9e4ac refactor: change a -> allocator bd5240d fix: update color for typst file_type 302b343 feat: add typst file type 97b6432 feat: update tree-sitter to add typst 5637dc8 refactor: prefer orelse to if(pred) |x| x else y 4818cc1 build: add the options to build entirely without tree-sitter 4106496 feat: add language server for openscad file type fcd12e6 refactor: re-format file_types.zig 8536e19 feat: add elixir file type d04f957 Add OCaml Formatter and LS (#23) 945a58d feat: add ini as a toml file extension git-subtree-dir: src/syntax git-subtree-split: d5b5da509350ef946b33cfb5c04ede68e288545b
This commit is contained in:
		
							parent
							
								
									f94c567994
								
							
						
					
					
						commit
						fc44208892
					
				
					 6 changed files with 293 additions and 96 deletions
				
			
		
							
								
								
									
										157
									
								
								build.zig
									
										
									
									
									
								
							
							
						
						
									
										157
									
								
								build.zig
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,11 @@
 | 
			
		|||
const std = @import("std");
 | 
			
		||||
 | 
			
		||||
pub fn build(b: *std.Build) void {
 | 
			
		||||
    const use_tree_sitter = b.option(bool, "use_tree_sitter", "Enable tree-sitter (default: yes)") orelse true;
 | 
			
		||||
    const options = b.addOptions();
 | 
			
		||||
    options.addOption(bool, "use_tree_sitter", use_tree_sitter);
 | 
			
		||||
    const options_mod = options.createModule();
 | 
			
		||||
 | 
			
		||||
    const target = b.standardTargetOptions(.{});
 | 
			
		||||
    const optimize = b.standardOptimizeOption(.{});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -9,79 +14,91 @@ pub fn build(b: *std.Build) void {
 | 
			
		|||
        .optimize = optimize,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const imports: []const std.Build.Module.Import = if (use_tree_sitter) &.{
 | 
			
		||||
        .{ .name = "build_options", .module = options_mod },
 | 
			
		||||
        .{ .name = "treez", .module = tree_sitter_dep.module("treez") },
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-agda/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-bash/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-c-sharp/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-c/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-cpp/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-css/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-diff/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-dockerfile/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-elixir/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-git-rebase/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-gitcommit/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-go/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-fish/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-haskell/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-html/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-java/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-javascript/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-jsdoc/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-json/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-kdl/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-lua/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-make/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown-inline/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nasm/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nim/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-ninja/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nix/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nu/queries/nu/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-ocaml/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-openscad/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-org/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-php/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-python/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-purescript/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-regex/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-ruby/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-rust/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-ssh-config/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-scala/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-scheme/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-superhtml/tree-sitter-superhtml/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-toml/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-typescript/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-typst/queries/typst/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-vim/queries/vim/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-xml/queries/dtd/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-xml/queries/xml/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-yaml/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-zig/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-ziggy/tree-sitter-ziggy/queries/highlights.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-ziggy/tree-sitter-ziggy-schema/queries/highlights.scm"),
 | 
			
		||||
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-cpp/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-elixir/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-gitcommit/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-html/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-javascript/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-kdl/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-lua/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown-inline/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nasm/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nix/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-nu/queries/nu/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-openscad/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-php/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-purescript/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-purescript/vim_queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-rust/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-superhtml/tree-sitter-superhtml/queries/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-typst/queries/typst/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-vim/queries/vim/injections.scm"),
 | 
			
		||||
        ts_queryfile(b, tree_sitter_dep, "tree-sitter-zig/queries/injections.scm"),
 | 
			
		||||
    } else &.{
 | 
			
		||||
        .{ .name = "build_options", .module = options_mod },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    _ = b.addModule("syntax", .{
 | 
			
		||||
        .root_source_file = b.path("src/syntax.zig"),
 | 
			
		||||
        .imports = &.{
 | 
			
		||||
            .{ .name = "treez", .module = tree_sitter_dep.module("treez") },
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-agda/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-bash/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-c-sharp/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-c/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-cpp/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-css/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-diff/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-dockerfile/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-git-rebase/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-gitcommit/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-go/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-fish/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-haskell/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-html/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-java/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-javascript/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-jsdoc/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-json/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-kdl/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-lua/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-make/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown-inline/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-nasm/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-nim/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-ninja/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-nix/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-ocaml/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-openscad/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-org/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-php/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-python/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-purescript/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-regex/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-ruby/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-rust/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-ssh-config/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-scala/queries/scala/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-scheme/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-superhtml/tree-sitter-superhtml/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-toml/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-typescript/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-xml/queries/dtd/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-xml/queries/xml/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-yaml/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-zig/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-ziggy/tree-sitter-ziggy/queries/highlights.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-ziggy/tree-sitter-ziggy-schema/queries/highlights.scm"),
 | 
			
		||||
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-cpp/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-gitcommit/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-html/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-javascript/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-kdl/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-lua/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown-inline/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-markdown/tree-sitter-markdown/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-nasm/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-nix/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-openscad/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-php/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-purescript/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-purescript/vim_queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-rust/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-superhtml/tree-sitter-superhtml/queries/injections.scm"),
 | 
			
		||||
            ts_queryfile(b, tree_sitter_dep, "tree-sitter-zig/queries/injections.scm"),
 | 
			
		||||
        },
 | 
			
		||||
        .imports = imports,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn ts_queryfile(b: *std.Build, dep: *std.Build.Dependency, comptime sub_path: []const u8) std.Build.Module.Import {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,8 +4,8 @@
 | 
			
		|||
 | 
			
		||||
    .dependencies = .{
 | 
			
		||||
        .@"tree-sitter" = .{
 | 
			
		||||
            .url = "https://github.com/neurocyte/tree-sitter/releases/download/master-eda7be4e1fa1ef5046153e1ad6a3e5097d7746f3/source.tar.gz",
 | 
			
		||||
            .hash = "1220d69c4591a68ab00731fa9becda325da182851afeef30b41011a86f1fba6c19e6",
 | 
			
		||||
            .url = "https://github.com/neurocyte/tree-sitter/releases/download/master-876cc5a125cb822d44a9f94f6bde64fac66272ce/source.tar.gz",
 | 
			
		||||
            .hash = "12208efbfead8c57adeabbd2293d6ed19e00f769e1d8aba0d544270479587c9f694a",
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    .paths = .{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,11 @@
 | 
			
		|||
const std = @import("std");
 | 
			
		||||
const treez = @import("treez");
 | 
			
		||||
const build_options = @import("build_options");
 | 
			
		||||
 | 
			
		||||
const treez = if (build_options.use_tree_sitter)
 | 
			
		||||
    @import("treez")
 | 
			
		||||
else
 | 
			
		||||
    @import("treez_dummy.zig");
 | 
			
		||||
 | 
			
		||||
pub const FileType = @This();
 | 
			
		||||
 | 
			
		||||
color: u24,
 | 
			
		||||
| 
						 | 
				
			
			@ -63,8 +69,12 @@ pub fn Parser(comptime lang: []const u8) LangFn {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
fn get_parser(comptime lang: []const u8) LangFn {
 | 
			
		||||
    const language_name = ft_func_name(lang);
 | 
			
		||||
    return @extern(?LangFn, .{ .name = "tree_sitter_" ++ language_name }) orelse @compileError(std.fmt.comptimePrint("Cannot find extern tree_sitter_{s}", .{language_name}));
 | 
			
		||||
    if (build_options.use_tree_sitter) {
 | 
			
		||||
        const language_name = ft_func_name(lang);
 | 
			
		||||
        return @extern(?LangFn, .{ .name = "tree_sitter_" ++ language_name }) orelse @compileError(std.fmt.comptimePrint("Cannot find extern tree_sitter_{s}", .{language_name}));
 | 
			
		||||
    } else {
 | 
			
		||||
        return treez.Language.LangFn;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn ft_func_name(comptime lang: []const u8) []const u8 {
 | 
			
		||||
| 
						 | 
				
			
			@ -112,8 +122,22 @@ fn load_file_types(comptime Namespace: type) []const FileType {
 | 
			
		|||
                    .lang_fn = if (@hasField(@TypeOf(args), "parser")) args.parser else get_parser(lang),
 | 
			
		||||
                    .extensions = vec(args.extensions),
 | 
			
		||||
                    .comment = args.comment,
 | 
			
		||||
                    .highlights = if (@hasField(@TypeOf(args), "highlights")) @embedFile(args.highlights) else @embedFile("tree-sitter-" ++ lang ++ "/queries/highlights.scm"),
 | 
			
		||||
                    .injections = if (@hasField(@TypeOf(args), "injections")) @embedFile(args.injections) else null,
 | 
			
		||||
                    .highlights = if (build_options.use_tree_sitter)
 | 
			
		||||
                        if (@hasField(@TypeOf(args), "highlights"))
 | 
			
		||||
                            @embedFile(args.highlights)
 | 
			
		||||
                        else if (@hasField(@TypeOf(args), "highlights_list"))
 | 
			
		||||
                            @embedFile(args.highlights_list[0]) ++ "\n" ++ @embedFile(args.highlights_list[1])
 | 
			
		||||
                        else
 | 
			
		||||
                            @embedFile("tree-sitter-" ++ lang ++ "/queries/highlights.scm")
 | 
			
		||||
                    else
 | 
			
		||||
                        "",
 | 
			
		||||
                    .injections = if (build_options.use_tree_sitter)
 | 
			
		||||
                        if (@hasField(@TypeOf(args), "injections"))
 | 
			
		||||
                            @embedFile(args.injections)
 | 
			
		||||
                        else
 | 
			
		||||
                            null
 | 
			
		||||
                    else
 | 
			
		||||
                        null,
 | 
			
		||||
                    .first_line_matches = if (@hasField(@TypeOf(args), "first_line_matches")) args.first_line_matches else null,
 | 
			
		||||
                    .formatter = if (@hasField(@TypeOf(args), "formatter")) vec(args.formatter) else null,
 | 
			
		||||
                    .language_server = if (@hasField(@TypeOf(args), "language_server")) vec(args.language_server) else null,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,10 @@ pub const cpp = .{
 | 
			
		|||
    .icon = "",
 | 
			
		||||
    .extensions = .{ "cc", "cpp", "cxx", "hpp", "hxx", "h", "ipp", "ixx" },
 | 
			
		||||
    .comment = "//",
 | 
			
		||||
    .highlights_list = .{
 | 
			
		||||
        "tree-sitter-c/queries/highlights.scm",
 | 
			
		||||
        "tree-sitter-cpp/queries/highlights.scm",
 | 
			
		||||
    },
 | 
			
		||||
    .injections = "tree-sitter-cpp/queries/injections.scm",
 | 
			
		||||
    .formatter = .{"clang-format"},
 | 
			
		||||
    .language_server = .{"clangd"},
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +78,16 @@ pub const dtd = .{
 | 
			
		|||
    .highlights = "tree-sitter-xml/queries/dtd/highlights.scm",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const elixir = .{
 | 
			
		||||
    .color = 0x4e2a8e,
 | 
			
		||||
    .icon = "",
 | 
			
		||||
    .extensions = .{ "ex", "exs" },
 | 
			
		||||
    .comment = "#",
 | 
			
		||||
    .injections = "tree-sitter-elixir/queries/injections.scm",
 | 
			
		||||
    .formatter = .{ "mix", "format", "-" },
 | 
			
		||||
    .language_server = .{"elixir-ls"},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const fish = .{
 | 
			
		||||
    .extensions = .{"fish"},
 | 
			
		||||
    .comment = "#",
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +123,7 @@ pub const haskell = .{
 | 
			
		|||
    .icon = "",
 | 
			
		||||
    .extensions = .{"hs"},
 | 
			
		||||
    .comment = "--",
 | 
			
		||||
    .language_server = .{"haskell-language-server-wrapper", "lsp"},
 | 
			
		||||
    .language_server = .{ "haskell-language-server-wrapper", "lsp" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const html = .{
 | 
			
		||||
| 
						 | 
				
			
			@ -153,6 +167,7 @@ pub const json = .{
 | 
			
		|||
    .extensions = .{"json"},
 | 
			
		||||
    .comment = "//",
 | 
			
		||||
    .language_server = .{ "deno", "lsp" },
 | 
			
		||||
    .formatter = .{ "hjson", "-j" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const kdl = .{
 | 
			
		||||
| 
						 | 
				
			
			@ -232,11 +247,23 @@ pub const nix = .{
 | 
			
		|||
    .injections = "tree-sitter-nix/queries/injections.scm",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const nu = .{
 | 
			
		||||
    .color = 0x3AA675,
 | 
			
		||||
    .icon = ">",
 | 
			
		||||
    .extensions = .{ "nu", "nushell" },
 | 
			
		||||
    .comment = "#",
 | 
			
		||||
    .language_server = .{"nu", "--lsp"},
 | 
			
		||||
    .highlights = "tree-sitter-nu/queries/nu/highlights.scm",
 | 
			
		||||
    .injections = "tree-sitter-nu/queries/nu/injections.scm",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const ocaml = .{
 | 
			
		||||
    .color = 0xF18803,
 | 
			
		||||
    .icon = "",
 | 
			
		||||
    .extensions = .{ "ml", "mli" },
 | 
			
		||||
    .comment = "(*",
 | 
			
		||||
    .formatter = .{ "ocamlformat", "--profile=ocamlformat", "-" },
 | 
			
		||||
    .language_server = .{ "ocamllsp", "--fallback-read-dot-merlin" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const openscad = .{
 | 
			
		||||
| 
						 | 
				
			
			@ -245,6 +272,7 @@ pub const openscad = .{
 | 
			
		|||
    .extensions = .{"scad"},
 | 
			
		||||
    .comment = "//",
 | 
			
		||||
    .injections = "tree-sitter-openscad/queries/injections.scm",
 | 
			
		||||
    .language_server = .{"openscad-lsp"},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const org = .{
 | 
			
		||||
| 
						 | 
				
			
			@ -310,7 +338,7 @@ pub const @"ssh-config" = .{
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
pub const toml = .{
 | 
			
		||||
    .extensions = .{"toml"},
 | 
			
		||||
    .extensions = .{ "toml", "ini" },
 | 
			
		||||
    .comment = "#",
 | 
			
		||||
    .highlights = "tree-sitter-toml/queries/highlights.scm",
 | 
			
		||||
    .parser = @import("file_type.zig").Parser("toml"),
 | 
			
		||||
| 
						 | 
				
			
			@ -324,6 +352,25 @@ pub const typescript = .{
 | 
			
		|||
    .language_server = .{ "deno", "lsp" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const typst = .{
 | 
			
		||||
    .color = 0x23b6bc,
 | 
			
		||||
    .icon = "t",
 | 
			
		||||
    .extensions = .{ "typst", "typ" },
 | 
			
		||||
    .comment = "//",
 | 
			
		||||
    .language_server = .{"tinymist"},
 | 
			
		||||
    .highlights = "tree-sitter-typst/queries/typst/highlights.scm",
 | 
			
		||||
    .injections = "tree-sitter-typst/queries/typst/injections.scm",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const vim = .{
 | 
			
		||||
    .color = 0x007f00,
 | 
			
		||||
    .icon = "",
 | 
			
		||||
    .extensions = .{"vim"},
 | 
			
		||||
    .comment = "\"",
 | 
			
		||||
    .highlights = "tree-sitter-vim/queries/vim/highlights.scm",
 | 
			
		||||
    .injections = "tree-sitter-vim/queries/vim/injections.scm",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const xml = .{
 | 
			
		||||
    .icon = "",
 | 
			
		||||
    .extensions = .{"xml"},
 | 
			
		||||
| 
						 | 
				
			
			@ -335,7 +382,7 @@ pub const xml = .{
 | 
			
		|||
pub const yaml = .{
 | 
			
		||||
    .color = 0x000000,
 | 
			
		||||
    .icon = "",
 | 
			
		||||
    .extensions = .{"yaml", "yml"},
 | 
			
		||||
    .extensions = .{ "yaml", "yml" },
 | 
			
		||||
    .comment = "#",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,10 @@
 | 
			
		|||
const std = @import("std");
 | 
			
		||||
const treez = @import("treez");
 | 
			
		||||
const build_options = @import("build_options");
 | 
			
		||||
 | 
			
		||||
const treez = if (build_options.use_tree_sitter)
 | 
			
		||||
    @import("treez")
 | 
			
		||||
else
 | 
			
		||||
    @import("treez_dummy.zig");
 | 
			
		||||
 | 
			
		||||
const Self = @This();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7,25 +12,25 @@ pub const Edit = treez.InputEdit;
 | 
			
		|||
pub const FileType = @import("file_type.zig");
 | 
			
		||||
pub const Range = treez.Range;
 | 
			
		||||
pub const Point = treez.Point;
 | 
			
		||||
const Input = treez.Input;
 | 
			
		||||
const Language = treez.Language;
 | 
			
		||||
const Parser = treez.Parser;
 | 
			
		||||
const Query = treez.Query;
 | 
			
		||||
const Tree = treez.Tree;
 | 
			
		||||
pub const Node = treez.Node;
 | 
			
		||||
 | 
			
		||||
a: std.mem.Allocator,
 | 
			
		||||
allocator: std.mem.Allocator,
 | 
			
		||||
lang: *const Language,
 | 
			
		||||
file_type: *const FileType,
 | 
			
		||||
parser: *Parser,
 | 
			
		||||
query: *Query,
 | 
			
		||||
injections: *Query,
 | 
			
		||||
tree: ?*Tree = null,
 | 
			
		||||
tree: ?*treez.Tree = null,
 | 
			
		||||
 | 
			
		||||
pub fn create(file_type: *const FileType, a: std.mem.Allocator, content: []const u8) !*Self {
 | 
			
		||||
    const self = try a.create(Self);
 | 
			
		||||
pub fn create(file_type: *const FileType, allocator: std.mem.Allocator, content: []const u8) !*Self {
 | 
			
		||||
    const self = try allocator.create(Self);
 | 
			
		||||
    self.* = .{
 | 
			
		||||
        .a = a,
 | 
			
		||||
        .lang = file_type.lang_fn() orelse std.debug.panic("tree-sitter parser function failed for language: {d}", .{file_type.name}),
 | 
			
		||||
        .allocator = allocator,
 | 
			
		||||
        .lang = file_type.lang_fn() orelse std.debug.panic("tree-sitter parser function failed for language: {s}", .{file_type.name}),
 | 
			
		||||
        .file_type = file_type,
 | 
			
		||||
        .parser = try Parser.create(),
 | 
			
		||||
        .query = try Query.create(self.lang, file_type.highlights),
 | 
			
		||||
| 
						 | 
				
			
			@ -37,21 +42,21 @@ pub fn create(file_type: *const FileType, a: std.mem.Allocator, content: []const
 | 
			
		|||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn create_file_type(a: std.mem.Allocator, content: []const u8, lang_name: []const u8) !*Self {
 | 
			
		||||
pub fn create_file_type(allocator: std.mem.Allocator, content: []const u8, lang_name: []const u8) !*Self {
 | 
			
		||||
    const file_type = FileType.get_by_name(lang_name) orelse return error.NotFound;
 | 
			
		||||
    return create(file_type, a, content);
 | 
			
		||||
    return create(file_type, allocator, content);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn create_guess_file_type(a: std.mem.Allocator, content: []const u8, file_path: ?[]const u8) !*Self {
 | 
			
		||||
pub fn create_guess_file_type(allocator: std.mem.Allocator, content: []const u8, file_path: ?[]const u8) !*Self {
 | 
			
		||||
    const file_type = FileType.guess(file_path, content) orelse return error.NotFound;
 | 
			
		||||
    return create(file_type, a, content);
 | 
			
		||||
    return create(file_type, allocator, content);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn destroy(self: *Self) void {
 | 
			
		||||
    if (self.tree) |tree| tree.destroy();
 | 
			
		||||
    self.query.destroy();
 | 
			
		||||
    self.parser.destroy();
 | 
			
		||||
    self.a.destroy(self);
 | 
			
		||||
    self.allocator.destroy(self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn refresh_full(self: *Self, content: []const u8) !void {
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +90,7 @@ pub fn refresh_from_buffer(self: *Self, buffer: anytype, metrics: anytype) !void
 | 
			
		|||
        .syntax = self,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const input: treez.Input = .{
 | 
			
		||||
    const input: Input = .{
 | 
			
		||||
        .payload = &state,
 | 
			
		||||
        .read = struct {
 | 
			
		||||
            fn read(payload: ?*anyopaque, _: u32, position: treez.Point, bytes_read: *u32) callconv(.C) [*:0]const u8 {
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +112,7 @@ fn CallBack(comptime T: type) type {
 | 
			
		|||
pub fn render(self: *const Self, ctx: anytype, comptime cb: CallBack(@TypeOf(ctx)), range: ?Range) !void {
 | 
			
		||||
    const cursor = try Query.Cursor.create();
 | 
			
		||||
    defer cursor.destroy();
 | 
			
		||||
    const tree = if (self.tree) |p| p else return;
 | 
			
		||||
    const tree = self.tree orelse return;
 | 
			
		||||
    cursor.execute(self.query, tree.getRootNode());
 | 
			
		||||
    if (range) |r| cursor.setPointRange(r.start_point, r.end_point);
 | 
			
		||||
    while (cursor.nextMatch()) |match| {
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +127,7 @@ pub fn render(self: *const Self, ctx: anytype, comptime cb: CallBack(@TypeOf(ctx
 | 
			
		|||
pub fn highlights_at_point(self: *const Self, ctx: anytype, comptime cb: CallBack(@TypeOf(ctx)), point: Point) void {
 | 
			
		||||
    const cursor = Query.Cursor.create() catch return;
 | 
			
		||||
    defer cursor.destroy();
 | 
			
		||||
    const tree = if (self.tree) |p| p else return;
 | 
			
		||||
    const tree = self.tree orelse return;
 | 
			
		||||
    cursor.execute(self.query, tree.getRootNode());
 | 
			
		||||
    cursor.setPointRange(.{ .row = point.row, .column = 0 }, .{ .row = point.row + 1, .column = 0 });
 | 
			
		||||
    while (cursor.nextMatch()) |match| {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										104
									
								
								src/treez_dummy.zig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								src/treez_dummy.zig
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
pub const InputEdit = extern struct {
 | 
			
		||||
    start_byte: u32,
 | 
			
		||||
    old_end_byte: u32,
 | 
			
		||||
    new_end_byte: u32,
 | 
			
		||||
    start_point: Point,
 | 
			
		||||
    old_end_point: Point,
 | 
			
		||||
    new_end_point: Point,
 | 
			
		||||
};
 | 
			
		||||
pub const Range = extern struct {
 | 
			
		||||
    start_point: Point = .{},
 | 
			
		||||
    end_point: Point = .{},
 | 
			
		||||
    start_byte: u32 = 0,
 | 
			
		||||
    end_byte: u32 = 0,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const Point = extern struct {
 | 
			
		||||
    row: u32 = 0,
 | 
			
		||||
    column: u32 = 0,
 | 
			
		||||
};
 | 
			
		||||
pub const InputEncoding = enum(c_uint) {
 | 
			
		||||
    utf_8,
 | 
			
		||||
    utf_16,
 | 
			
		||||
};
 | 
			
		||||
pub const Input = extern struct {
 | 
			
		||||
    payload: ?*anyopaque,
 | 
			
		||||
    read: ?*const fn (payload: ?*anyopaque, byte_index: u32, position: Point, bytes_read: *u32) callconv(.C) [*:0]const u8,
 | 
			
		||||
    encoding: InputEncoding,
 | 
			
		||||
};
 | 
			
		||||
pub const Language = struct {
 | 
			
		||||
    var dummy: @This() = .{};
 | 
			
		||||
    pub fn LangFn() callconv(.C) ?*const Language {
 | 
			
		||||
        return &dummy;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
pub const Parser = struct {
 | 
			
		||||
    var dummy: @This() = .{};
 | 
			
		||||
    pub fn create() !*@This() {
 | 
			
		||||
        return &dummy;
 | 
			
		||||
    }
 | 
			
		||||
    pub fn parse(_: *Parser, _: ?*Tree, _: Input) !*Tree {
 | 
			
		||||
        return &Tree.dummy;
 | 
			
		||||
    }
 | 
			
		||||
    pub fn parseString(_: *@This(), _: ?[]const u8, _: []const u8) !?*Tree {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    pub fn destroy(_: *@This()) void {}
 | 
			
		||||
    pub fn setLanguage(_: *Parser, _: *const Language) !void {}
 | 
			
		||||
};
 | 
			
		||||
pub const Query = struct {
 | 
			
		||||
    var dummy: @This() = .{};
 | 
			
		||||
    pub fn create(_: *const Language, _: []const u8) !*Query {
 | 
			
		||||
        return &dummy;
 | 
			
		||||
    }
 | 
			
		||||
    pub const Cursor = struct {
 | 
			
		||||
        var dummy_: @This() = .{};
 | 
			
		||||
        pub fn create() !*@This() {
 | 
			
		||||
            return &dummy_;
 | 
			
		||||
        }
 | 
			
		||||
        pub fn execute(_: *@This(), _: *Query, _: *Node) void {}
 | 
			
		||||
        pub fn setPointRange(_: *@This(), _: Point, _: Point) void {}
 | 
			
		||||
        pub fn nextMatch(_: *@This()) ?*Match {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        pub fn destroy(_: *@This()) void {}
 | 
			
		||||
 | 
			
		||||
        pub const Match = struct {
 | 
			
		||||
            pub fn captures(_: *@This()) []Capture {
 | 
			
		||||
                return &[_]Capture{};
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        pub const Capture = struct {
 | 
			
		||||
            id: u32,
 | 
			
		||||
            node: Node,
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    pub fn getCaptureNameForId(_: *@This(), _: u32) []const u8 {
 | 
			
		||||
        return "";
 | 
			
		||||
    }
 | 
			
		||||
    pub fn destroy(_: *@This()) void {}
 | 
			
		||||
};
 | 
			
		||||
pub const Tree = struct {
 | 
			
		||||
    var dummy: @This() = .{};
 | 
			
		||||
    pub fn getRootNode(_: *@This()) *Node {
 | 
			
		||||
        return &Node.dummy;
 | 
			
		||||
    }
 | 
			
		||||
    pub fn destroy(_: *@This()) void {}
 | 
			
		||||
    pub fn edit(_: *Tree, _: *const InputEdit) void {}
 | 
			
		||||
};
 | 
			
		||||
pub const Node = struct {
 | 
			
		||||
    var dummy: @This() = .{};
 | 
			
		||||
    pub fn getRange(_: *const @This()) Range {
 | 
			
		||||
        return .{};
 | 
			
		||||
    }
 | 
			
		||||
    pub fn asSExpressionString(_: *const @This()) []const u8 {
 | 
			
		||||
        return "";
 | 
			
		||||
    }
 | 
			
		||||
    pub fn freeSExpressionString(_: []const u8) void {}
 | 
			
		||||
    pub fn getParent(_: *const @This()) *Node {
 | 
			
		||||
        return &dummy;
 | 
			
		||||
    }
 | 
			
		||||
    pub fn isNull(_: *const @This()) bool {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue