ttree_visualize.rs
1 use crate::arborist::{Block, TokenTree as Tt}; 2 use crate::compiler_types::Spanned; 3 4 pub fn visualize(block: &Block, src: &str) { 5 visualize0(block, src, 0); 6 eprintln!(); 7 } 8 9 fn visualize0(block: &Block, src: &str, level: usize) { 10 let indent = || { 11 for _ in 0..level { 12 eprint!(" "); 13 } 14 }; 15 for (i, item) in block.iter().enumerate() { 16 if i != 0 { 17 eprintln!(); 18 } 19 indent(); 20 for Spanned { kind, span } in item { 21 match kind { 22 Tt::Plain(_) => eprint!("{:?} ", &src[span.clone()]), 23 Tt::Paren(b, _) => { 24 eprintln!("("); 25 visualize0(b, src, level + 1); 26 eprintln!(); 27 indent(); 28 eprint!(") "); 29 } 30 Tt::Square(b, _) => { 31 eprintln!("["); 32 visualize0(b, src, level + 1); 33 eprintln!(); 34 indent(); 35 eprint!("] "); 36 } 37 Tt::IndentedBlock(b) => { 38 // eprintln!(); 39 // indent(); 40 eprintln!(":"); 41 visualize0(b, src, level + 1); 42 indent(); 43 } 44 Tt::ElseBlock(b) => { 45 eprintln!("else"); 46 visualize0(b, src, level + 1); 47 indent(); 48 } 49 } 50 } 51 } 52 }