tree_sitter_xdy/lib.rs
1//! This crate provides xDy language support for the [tree-sitter] parsing
2//! library.
3//!
4//! Typically, you will use the [language] function to add this language to a
5//! tree-sitter [Parser], and then use the parser to parse some code:
6//!
7//! ```
8//! let code = r#"0"#;
9//! let mut parser = tree_sitter::Parser::new();
10//! parser
11//! .set_language(&tree_sitter_xdy::language())
12//! .expect("Error loading xDy grammar");
13//! let tree = parser.parse(code, None).unwrap();
14//! assert!(!tree.root_node().has_error());
15//! ```
16//!
17//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
18//! [language func]: fn.language.html
19//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
20//! [tree-sitter]: https://tree-sitter.github.io/
21
22use tree_sitter::Language;
23
24unsafe extern "C" {
25 fn tree_sitter_xdy() -> Language;
26}
27
28/// Get the tree-sitter [Language] for this grammar.
29///
30/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
31pub fn language() -> Language { unsafe { tree_sitter_xdy() } }
32
33/// The content of the [`node-types.json`] file for this grammar.
34///
35/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
36pub const NODE_TYPES: &str = include_str!("../../src/node-types.json");
37
38// Uncomment these to include any queries that this grammar contains
39
40// pub const HIGHLIGHTS_QUERY: &str =
41// include_str!("../../queries/highlights.scm"); pub const INJECTIONS_QUERY:
42// &str = include_str!("../../queries/injections.scm"); pub const LOCALS_QUERY:
43// &str = include_str!("../../queries/locals.scm"); pub const TAGS_QUERY: &str =
44// include_str!("../../queries/tags.scm");
45
46#[cfg(test)]
47mod tests
48{
49 #[test]
50 fn test_can_load_grammar()
51 {
52 let mut parser = tree_sitter::Parser::new();
53 parser
54 .set_language(&super::language())
55 .expect("Error loading xDy grammar");
56 }
57}