lib_ruby_parser_ast/traverse/finder/
mod.rs1mod pattern;
2pub use pattern::{Item as PatternItem, Pattern, PatternError};
3
4use crate::traverse::visitor::Visitor;
5use crate::Node;
6
7#[derive(Debug)]
9pub struct Finder {
10 pattern: Pattern,
11 result: Option<Node>,
12}
13
14mod finder_gen;
15
16impl Finder {
17 pub fn run(pattern: &str, root: &Node) -> Result<Option<Node>, PatternError> {
21 let mut pattern = Pattern::new(pattern)?;
22 if pattern.parts.first() == Some(&PatternItem::Root) {
23 pattern.unshift();
24 }
25 let mut finder = Self {
26 pattern,
27 result: None,
28 };
29 finder.visit(root);
30 Ok(finder.result)
31 }
32}