use crate::spec::leaf_struct_spec::LeafStructBuildSpec; use proc_macro2::TokenStream; use quote::{format_ident, quote}; pub fn make_leaf_struct_ast_node_impl(spec: &LeafStructBuildSpec) -> TokenStream { let type_ident = format_ident!("{}", spec.build()); quote! { impl<'a> AstNode<'a> for #type_ident { fn children(&'a self) -> Vec<&'a dyn AstNode<'a>> { vec![] } fn for_each_child_mut(&'a mut self, mut f: &mut dyn FnMut(&'a mut dyn AstNode<'a>)) {} fn as_node_ref(&'a self) -> AstNodeRef<'a> { AstNodeRef::#type_ident(&self) } fn as_node_ref_mut(&'a mut self) -> AstNodeRefMut<'a> { AstNodeRefMut::#type_ident(self) } } } }