use anyhow::{Context, Result}; use syntree::{print, Builder}; fn main() -> Result<()> { let mut tree = Builder::new(); let c = tree.checkpoint()?; tree.open("child")?; tree.token("lit", 3)?; tree.close()?; tree.close_at(&c, "root")?; tree.token("sibling", 3)?; let tree = tree.build()?; print::print(std::io::stdout(), &tree)?; let child = tree.node_with_range(0..3).context("missing at 0..3")?; assert_eq!(child.value(), "child"); let lit = tree .first() .and_then(|n| n.first()) .and_then(|n| n.first()) .context("expected lit")?; assert_eq!(lit.value(), "lit"); let root = tree.first().context("missing root")?; assert_eq!(root.parent(), None); let root = lit.ancestors().last().context("missing root")?; assert_eq!(root.value(), "root"); Ok(()) }