use crate::spec::BuildSpec; use proc_macro2::TokenStream; use quote::quote; pub fn make_walk_fn(specs: &[BuildSpec]) -> TokenStream { quote! { use crate::ast::node::*; use crate::ast::ast_node::*; pub fn walk_depth_first<'a>(node: &'a dyn AstNode<'a>, f: &mut impl FnMut(AstNodeRef<'a>)) { use AstNodeRef::*; for child in node.children() { walk_depth_first(child, f); } f(node.as_node_ref()); } } }