diff --git a/ast/src/analyzed/visitor.rs b/ast/src/analyzed/visitor.rs index 11ea2d3d3..05ad9dd4f 100644 --- a/ast/src/analyzed/visitor.rs +++ b/ast/src/analyzed/visitor.rs @@ -79,3 +79,35 @@ impl> ExpressionVisitable for Identity ExpressionVisitable> for FunctionValueDefinition { + fn visit_expressions_mut(&mut self, f: &mut F, o: VisitOrder) -> ControlFlow + where + F: FnMut(&mut Expression) -> ControlFlow, + { + match self { + FunctionValueDefinition::Mapping(e) + | FunctionValueDefinition::Query(e) + | FunctionValueDefinition::Expression(e) => e.visit_expressions_mut(f, o), + FunctionValueDefinition::Array(array) => array + .iter_mut() + .flat_map(|a| a.pattern.iter_mut()) + .try_for_each(move |item| item.visit_expressions_mut(f, o)), + } + } + + fn visit_expressions(&self, f: &mut F, o: VisitOrder) -> ControlFlow + where + F: FnMut(&Expression) -> ControlFlow, + { + match self { + FunctionValueDefinition::Mapping(e) + | FunctionValueDefinition::Query(e) + | FunctionValueDefinition::Expression(e) => e.visit_expressions(f, o), + FunctionValueDefinition::Array(array) => array + .iter() + .flat_map(|a| a.pattern().iter()) + .try_for_each(move |item| item.visit_expressions(f, o)), + } + } +}