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