1#![doc = include_str!("../README.md")]
2
3use tree_sitter_language::LanguageFn;
4
5unsafe extern "C" {
6 fn tree_sitter_objc() -> *const ();
7}
8
9pub const fn language() -> LanguageFn {
11 unsafe { LanguageFn::from_raw(tree_sitter_objc) }
12}
13
14
15
16const HIGHLIGHTS_QUERY_BASE: &str = include_str!("../queries/highlights.scm");
19
20pub static HIGHLIGHTS_QUERY: std::sync::LazyLock<String> = std::sync::LazyLock::new(|| {
23 let mut query = String::new();
24
25 query.push_str(&arborium_c::HIGHLIGHTS_QUERY);
26 query.push('\n');
27
28 query.push_str(HIGHLIGHTS_QUERY_BASE);
29 query
30});
31
32
33
34
35pub const INJECTIONS_QUERY: &str = include_str!("../queries/injections.scm");
37
38
39
40pub const LOCALS_QUERY: &str = include_str!("../queries/locals.scm");
42
43
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn test_grammar() {
51 arborium_test_harness::test_grammar(
52 language(),
53 "objc",
54
55 &HIGHLIGHTS_QUERY,
56
57 INJECTIONS_QUERY,
58 LOCALS_QUERY,
59 env!("CARGO_MANIFEST_DIR"),
60 );
61 }
62}