Add Zig support

pull/218/head
Andrew Gutekanst 2022-03-30 23:32:48 +07:00
parent be0afd1696
commit 7f2efa1af9
7 changed files with 40 additions and 0 deletions

@ -189,6 +189,11 @@ fn main() {
src_dir: "vendor/tree-sitter-typescript-src/typescript/src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-zig",
src_dir: "vendor/tree-sitter-zig-src",
extra_files: vec![],
},
];
// Only rerun if relevant files in the vendor/ directory change.

@ -0,0 +1,6 @@
const std = @import("std");
pub fn main() void {
std.debug.print("Hello, {s}!", .{"user"});
std.debug.print("Hello, again!", .{});
}

@ -0,0 +1,5 @@
const std = @import("std");
pub fn main() void {
std.debug.print("Hello, {s}!", .{"world"});
}

@ -46,6 +46,7 @@ pub enum Language {
Scala,
Tsx,
TypeScript,
Zig,
}
use Language::*;
@ -109,6 +110,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> {
"sh" => Some(Bash),
"tuareg" => Some(OCaml),
"typescript" => Some(TypeScript),
"zig" => Some(Zig),
_ => None,
};
if lang.is_some() {
@ -208,6 +210,7 @@ fn from_extension(extension: &OsStr, src: &str) -> Option<Language> {
"scala" | "sbt" | "sc" => Some(Scala),
"ts" => Some(TypeScript),
"tsx" => Some(Tsx),
"zig" => Some(Zig),
_ => None,
}
}

@ -70,6 +70,7 @@ extern "C" {
fn tree_sitter_scala() -> ts::Language;
fn tree_sitter_tsx() -> ts::Language;
fn tree_sitter_typescript() -> ts::Language;
fn tree_sitter_zig() -> ts::Language;
}
// TODO: begin/end and object/end.
@ -535,6 +536,24 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Zig => {
let language = unsafe { tree_sitter_zig() };
TreeSitterConfig {
name: "Zig",
language,
atom_nodes: (vec!["STRINGLITERALSINGLE"])
.into_iter()
.collect(),
delimiter_tokens: (vec![("{", "}"), ("[", "]"), ("(", ")")])
.into_iter()
.collect(),
highlight_query: ts::Query::new(
language,
include_str!("../vendor/highlights/zig.scm"),
)
.unwrap(),
}
}
}
}

@ -0,0 +1 @@
../tree-sitter-zig/queries/highlights.scm

@ -0,0 +1 @@
tree-sitter-zig/src