1
//! This crate provides Essence language support for the [tree-sitter] parsing library.
2
//!
3
//! Typically, you will use the [`LANGUAGE`] constant to add this language to a
4
//! tree-sitter [`Parser`], and then use the parser to parse some code:
5
//!
6
//! ```
7
//! let code = r#"
8
//! "#;
9
//! let mut parser = tree_sitter::Parser::new();
10
//! let language = tree_sitter_essence::LANGUAGE;
11
//! parser
12
//!     .set_language(&language.into())
13
//!     .expect("Error loading Essence parser");
14
//! let tree = parser.parse(code, None).unwrap();
15
//! assert!(!tree.root_node().has_error());
16
//! ```
17
//!
18
//! [`Parser`]: https://docs.rs/tree-sitter/0.25.8/tree_sitter/struct.Parser.html
19
//! [tree-sitter]: https://tree-sitter.github.io/
20

            
21
use tree_sitter_language::LanguageFn;
22

            
23
extern "C" {
24
    fn tree_sitter_essence() -> *const ();
25
}
26

            
27
/// The tree-sitter [`LanguageFn`] for this grammar.
28
pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_essence) };
29

            
30
/// The content of the [`node-types.json`] file for this grammar.
31
///
32
/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers/6-static-node-types
33
pub const NODE_TYPES: &str = include_str!("../../src/node-types.json");
34

            
35
// NOTE: uncomment these to include any queries that this grammar contains:
36

            
37
// pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.scm");
38
// pub const INJECTIONS_QUERY: &str = include_str!("../../queries/injections.scm");
39
// pub const LOCALS_QUERY: &str = include_str!("../../queries/locals.scm");
40
// pub const TAGS_QUERY: &str = include_str!("../../queries/tags.scm");
41

            
42
#[cfg(test)]
43
mod tests {
44
    #[test]
45
    fn test_can_load_grammar() {
46
        let mut parser = tree_sitter::Parser::new();
47
        parser
48
            .set_language(&super::LANGUAGE.into())
49
            .expect("Error loading Essence parser");
50
    }
51
}