use crate::error::MinusOneResult;
use crate::rule::Rule;
use crate::tree::Node;
use std::fmt::Debug;
pub struct DebugView<T> {
tab_space: u32,
_use: Option<T>,
}
impl<T> DebugView<T> {
pub fn new() -> Self {
DebugView {
tab_space: 0,
_use: None,
}
}
}
impl<'a, T> Rule<'a> for DebugView<T>
where
T: Debug,
{
type Language = T;
fn enter(&mut self, node: &Node<'a, Self::Language>) -> MinusOneResult<bool> {
println!();
for _ in 0..self.tab_space {
print!(" ");
}
print!("({} inferred_type: {:?}", node.kind(), node.data());
self.tab_space += 1;
Ok(true)
}
fn leave(&mut self, _node: &Node<'a, Self::Language>) -> MinusOneResult<()> {
print!(")");
self.tab_space -= 1;
Ok(())
}
}