hierarchy_visit_emit/
hierarchy_visit_emit.rs1use m2_syn::visit::Visit;
2use m2_syn::{Lex, ParseError, Symbol, parse_tokens, quote_m2};
3
4#[derive(Default)]
5struct SymbolCollector {
6 symbols: Vec<String>,
7}
8
9impl<'ast> Visit<'ast> for SymbolCollector {
10 fn visit_symbol(&mut self, symbol: &'ast Symbol) {
11 self.symbols.push(symbol.text().to_owned());
12 }
13}
14
15fn main() -> Result<(), ParseError> {
16 let quoted = quote_m2! {
17 left + right 2
18 };
19 let source_file = parse_tokens("ed)?;
20 let _cell = &source_file.cells[0];
21
22 let mut collector = SymbolCollector::default();
23 collector.visit_source_file(&source_file);
24
25 println!("hierarchy: Component -> ExprPack -> Cell -> SourceFile");
26 println!("visited: {}", collector.symbols.join(", "));
27 print!("generated: {}", source_file.to_m2());
28 Ok(())
29}