/ src / ttree_visualize.rs
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  }