Struct lib_ruby_parser::traverse::visitor::Visitor [−][src]
Generic visitor of Node
.
It doesn’t do anything on its own,
but it notifies given Observer
.
struct MyObserver {
pub numbers: Vec<nodes::Int>,
}
impl Observer for MyObserver {
fn on_int(&mut self, node: &nodes::Int) {
self.numbers.push(node.clone())
}
}
let source = "2 + 3";
let mut parser = Parser::new(source.as_bytes(), ParserOptions::default());
let ast = parser.do_parse().ast.unwrap();
let observer = MyObserver { numbers: vec![] };
let visitor = Visitor { observer };
visitor.visit_root(&ast);
println!("{:?}", visitor.observer.numbers);
// => [Int { value: "2" }, Int { value: "3" }]
Fields
observer: T
Observer of the visitor, receives calls like on_int(&mut self, node: nodes::Int)
Implementations
impl<T> Visitor<T> where
T: Observer,
[src]
T: Observer,
pub fn visit_root(&mut self, node: &Node)
[src]
Starts traversing on a given node
Trait Implementations
Auto Trait Implementations
impl<T> RefUnwindSafe for Visitor<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for Visitor<T> where
T: Send,
T: Send,
impl<T> Sync for Visitor<T> where
T: Sync,
T: Sync,
impl<T> Unpin for Visitor<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for Visitor<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,