Skip to main content

tree_sitter_objectscript/
lib.rs

1//! This crate provides ObjectScript Class and Routine language support for the [tree-sitter][] parsing library.
2//!
3//! [tree-sitter]: https://tree-sitter.github.io/
4
5use tree_sitter_language::LanguageFn;
6
7extern "C" {
8    fn tree_sitter_objectscript_udl() -> *const ();
9    fn tree_sitter_objectscript_routine() -> *const ();
10}
11
12/// The tree-sitter [`LanguageFn`] for ObjectScript UDL grammar.
13///
14/// [LanguageFn]: https://docs.rs/tree-sitter-language/*/tree_sitter_language/struct.LanguageFn.html
15pub const LANGUAGE_OBJECTSCRIPT_UDL: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_objectscript_udl) };
16
17/// The content of the [`node-types.json`][] file for ObjectScript UDL grammar.
18///
19/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
20pub const UDL_NODE_TYPES: &str = include_str!("../../udl/src/node-types.json");
21
22/// The syntax highlighting query for ObjectScript UDL.
23pub const UDL_HIGHLIGHTS_QUERY: &str = include_str!("../../udl/queries/highlights.scm");
24
25/// The injections query for ObjectScript UDL.
26pub const UDL_INJECTIONS_QUERY: &str = include_str!("../../udl/queries/injections.scm");
27
28/// The indents query for ObjectScript UDL.
29pub const UDL_INDENTS_QUERY: &str = include_str!("../../udl/queries/indents.scm");
30
31/// The tree-sitter [`LanguageFn`] for ObjectScript Routine grammar.
32///
33/// [LanguageFn]: https://docs.rs/tree-sitter-language/*/tree_sitter_language/struct.LanguageFn.html
34pub const LANGUAGE_OBJECTSCRIPT_ROUTINE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_objectscript_routine) };
35
36/// The content of the [`node-types.json`][] file for ObjectScript Routine grammar.
37///
38/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
39pub const ROUTINE_NODE_TYPES: &str = include_str!("../../objectscript_routine/src/node-types.json");
40
41/// The syntax highlighting query for ObjectScript Routines.
42pub const ROUTINE_HIGHLIGHTS_QUERY: &str = include_str!("../../objectscript_routine/queries/highlights.scm");
43
44/// The injections query for ObjectScript Routines.
45pub const ROUTINE_INJECTIONS_QUERY: &str = include_str!("../../objectscript_routine/queries/injections.scm");
46
47/// The indents query for ObjectScript Routines.
48pub const ROUTINE_INDENTS_QUERY: &str = include_str!("../../objectscript_routine/queries/indents.scm");
49
50#[cfg(test)]
51mod tests {
52    #[test]
53    fn test_can_load_objectscript_udl_grammar() {
54        let mut parser = tree_sitter::Parser::new();
55        parser
56            .set_language(&super::LANGUAGE_OBJECTSCRIPT_UDL.into())
57            .expect("Error loading ObjectScript UDL parser");
58    }
59
60
61    #[test]
62    fn test_iudl_ndents_query_is_loaded() {
63        assert!(super::UDL_INDENTS_QUERY.contains("indent"));
64    }
65
66    #[test]
67    fn test_udl_injections_query_is_loaded() {
68        assert!(super::UDL_INJECTIONS_QUERY.contains("injection"));
69    }
70
71    #[test]
72    fn test_udl_highlights_query_is_loaded() {
73        assert!(super::UDL_HIGHLIGHTS_QUERY.contains("@keyword"));
74    }
75
76    #[test]
77    fn test_can_load_objectscript_routine_grammar() {
78        let mut parser = tree_sitter::Parser::new();
79        parser
80            .set_language(&super::LANGUAGE_OBJECTSCRIPT_ROUTINE.into())
81            .expect("Error loading ObjectScript UDL parser");
82    }
83
84
85    #[test]
86    fn test_routine_indents_query_is_loaded() {
87        assert!(super::ROUTINE_INDENTS_QUERY.contains("indent"));
88    }
89
90    #[test]
91    fn test_routine_injections_query_is_loaded() {
92        assert!(super::ROUTINE_INJECTIONS_QUERY.contains("injection"));
93    }
94
95    #[test]
96    fn test_routine_highlights_query_is_loaded() {
97        assert!(super::ROUTINE_HIGHLIGHTS_QUERY.contains("@keyword"));
98    }
99}