Add a method to pretty-print a trie

This commit is contained in:
Nick Fitzgerald
2021-10-26 13:33:01 -07:00
committed by Chris Fallin
parent 0411b20871
commit 6c6b7a2b78

View File

@@ -473,6 +473,36 @@ impl TrieNode {
}
}
}
/// Get a pretty-printed version of this trie, for debugging.
pub fn pretty(&self) -> String {
let mut s = String::new();
pretty_rec(&mut s, self, "");
return s;
fn pretty_rec(s: &mut String, node: &TrieNode, indent: &str) {
match node {
TrieNode::Decision { edges } => {
s.push_str(indent);
s.push_str("TrieNode::Decision:\n");
let new_indent = indent.to_owned() + " ";
for edge in edges {
s.push_str(indent);
s.push_str(&format!(
" edge: range = {:?}, symbol: {:?}\n",
edge.range, edge.symbol
));
pretty_rec(s, &edge.node, &new_indent);
}
}
TrieNode::Empty | TrieNode::Leaf { .. } => {
s.push_str(indent);
s.push_str(&format!("{:?}\n", node));
}
}
}
}
}
/// Builder context for one function in generated code corresponding