1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#![warn(clippy::pedantic)]
#![allow(clippy::module_name_repetitions)]

pub use parser::parse;
pub use parser::Parse;
pub use parser::ParseError;

use crate::lexer::lex;

mod grammar;
mod lexer;
mod parser;
pub mod syntax;

pub use grammar::TWIG_NAME_REGEX;

#[cfg(test)]
mod tests {
    use super::*;
    use crate::syntax::typed::AstNode;
    use crate::syntax::typed::HtmlTag;
    use crate::syntax::untyped::SyntaxNode;
    use rowan::ast::support;

    #[test]
    fn it_should_not_panic_on_simple_parse_call() {
        let _ = parse("asdf");
    }

    #[test]
    fn it_should_not_panic_on_prev_sibling_call() {
        let parse = parse("<div>a<hr/></div>");
        let root = SyntaxNode::new_root(parse.green_node);
        // println!("{}", debug_tree(&root));

        let prev = root.prev_sibling();
        // println!("prev sibling: {:?}", prev);
        assert!(prev.is_none());

        let child: HtmlTag = support::child(&root).unwrap();
        let prev = child.syntax().prev_sibling();
        // println!("{:?} prev sibling: {:?}", child, prev);
        assert!(prev.is_none());

        let child: HtmlTag = support::child(child.body().unwrap().syntax()).unwrap();
        let prev = child.syntax().prev_sibling();
        // println!("{:?} prev sibling: {:?}", child, prev);
        assert!(prev.is_some());
    }
}