tree_sitter_lambdamoo/
lib.rs1use tree_sitter_language::LanguageFn;
25
26unsafe extern "C" {
27 fn tree_sitter_lambdamoo() -> *const ();
28}
29
30pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_lambdamoo) };
34
35pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json");
39
40pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm");
43pub const FOLDS_QUERY: &'static str = include_str!("../../queries/folds.scm");
44pub const INDENTS_QUERY: &'static str = include_str!("../../queries/indents.scm");
45pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm");
46pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm");
47pub const ERRORS_QUERY: &'static str = include_str!("../../queries/errors.scm");
48
49#[cfg(test)]
50mod tests {
51 #[test]
52 fn test_can_load_grammar() {
53 let mut parser = tree_sitter::Parser::new();
54 parser
55 .set_language(&super::LANGUAGE.into())
56 .expect("Error loading LambdaMOO parser");
57 }
58
59 #[test]
60 fn test_errors_query_captures_invalid_identifier_only() {
61 use tree_sitter::StreamingIterator;
62
63 let language = super::LANGUAGE.into();
64 let mut parser = tree_sitter::Parser::new();
65 parser.set_language(&language).unwrap();
66 let source = "notify(if); result = E_NONE;";
67 let tree = parser.parse(source, None).unwrap();
68
69 assert!(!tree.root_node().has_error());
70
71 let query = tree_sitter::Query::new(&language, super::ERRORS_QUERY).unwrap();
72 let mut cursor = tree_sitter::QueryCursor::new();
73 let mut captures = cursor.captures(&query, tree.root_node(), source.as_bytes());
74 let capture_names = query.capture_names();
75 let mut captured = Vec::new();
76 while let Some((query_match, capture_index)) = captures.next() {
77 captured.push(capture_names[query_match.captures()[*capture_index].index as usize]);
78 }
79
80 assert_eq!(captured, ["invalid_identifier"]);
81 }
82}