diff --git a/ast-generator/src/type_gen/struct_type.rs b/ast-generator/src/type_gen/struct_type.rs index c705a94..8292bdf 100644 --- a/ast-generator/src/type_gen/struct_type.rs +++ b/ast-generator/src/type_gen/struct_type.rs @@ -1,4 +1,6 @@ -use crate::spec::struct_spec::{MemberChild, MemberChildBuild, StructChild, StructSpec, VecChild, VecChildBuild}; +use crate::spec::struct_spec::{ + MemberChild, MemberChildBuild, StructChild, StructSpec, VecChild, VecChildBuild, +}; use proc_macro2::{Ident, TokenStream}; use quote::{format_ident, quote}; @@ -11,16 +13,16 @@ fn make_vec_child_accessors(vec_child: &VecChild) -> TokenStream { self.#child_ident.iter().map(String::as_str) } } - }, + } VecChildBuild::Node(vec_child_node_build) => { let child_type_ident = format_ident!("{}", vec_child_node_build.kind()); let child_ident_mut = format_ident!("{}_mut", vec_child.name()); - + quote! { pub fn #child_ident(&self) -> impl Iterator { self.#child_ident.iter().map(Box::as_ref) } - + pub fn #child_ident_mut(&mut self) -> impl Iterator { self.#child_ident.iter().map(Box::as_mut) } @@ -35,7 +37,7 @@ fn make_member_child_accessors(member_child: &MemberChild) -> TokenStream { MemberChildBuild::Node(node_member_build) => { let return_type_ident = format_ident!("{}", node_member_build.kind()); let child_ident_mut = format_ident!("{}_mut", member_child.name()); - + if member_child.optional() { quote! { pub fn #child_ident(&self) -> Option<&#return_type_ident> { @@ -45,7 +47,7 @@ fn make_member_child_accessors(member_child: &MemberChild) -> TokenStream { None } } - + pub fn #child_ident_mut(&mut self) -> Option<&mut #return_type_ident> { if let Some(#child_ident) = &mut self.#child_ident { Some(#child_ident.as_mut()) @@ -59,7 +61,7 @@ fn make_member_child_accessors(member_child: &MemberChild) -> TokenStream { pub fn #child_ident(&self) -> &#return_type_ident { self.#child_ident.as_ref() } - + pub fn #child_ident_mut(&mut self) -> &mut #return_type_ident { self.#child_ident.as_mut() } @@ -79,24 +81,16 @@ fn make_member_child_accessors(member_child: &MemberChild) -> TokenStream { fn make_accessors(child: &StructChild) -> Option { match child { StructChild::SkipChild(_) => None, - StructChild::VecChild(vec_child) => { - Some(make_vec_child_accessors(vec_child)) - } - StructChild::MemberChild(member_child) => { - Some(make_member_child_accessors(member_child)) - } + StructChild::VecChild(vec_child) => Some(make_vec_child_accessors(vec_child)), + StructChild::MemberChild(member_child) => Some(make_member_child_accessors(member_child)), } } fn make_member_ident(child: &StructChild) -> Option { match child { StructChild::SkipChild(_) => None, - StructChild::VecChild(vec_child) => { - Some(format_ident!("{}", vec_child.name())) - }, - StructChild::MemberChild(member_child) => { - Some(format_ident!("{}", member_child.name())) - } + StructChild::VecChild(vec_child) => Some(format_ident!("{}", vec_child.name())), + StructChild::MemberChild(member_child) => Some(format_ident!("{}", member_child.name())), } } @@ -107,9 +101,9 @@ fn make_vec_child_annotated_member(vec_child: &VecChild) -> TokenStream { VecChildBuild::Node(vec_child_node_build) => { let type_ident = format_ident!("{}", vec_child_node_build.kind()); quote! { Box<#type_ident> } - }, + } }; - + quote! { #child_ident: Vec<#type_stream> } @@ -120,7 +114,7 @@ fn make_member_child_type_ident(member_child: &MemberChild) -> TokenStream { MemberChildBuild::Node(node_member_build) => { let type_ident = format_ident!("{}", node_member_build.kind()); quote! { #type_ident } - }, + } MemberChildBuild::Boolean(_) => { quote! { bool } } @@ -131,11 +125,11 @@ fn make_member_child_annotated_member(member_child: &MemberChild) -> TokenStream let child_name_ident = format_ident!("{}", member_child.name()); let type_ident = make_member_child_type_ident(member_child); let type_stream = if member_child.optional() { - quote! { Option<#type_ident> } + quote! { Option> } } else { - type_ident + quote! { Box<#type_ident> } }; - + quote! { #child_name_ident: #type_stream } @@ -145,36 +139,35 @@ fn make_annotated_member(child: &StructChild) -> Option { match child { StructChild::SkipChild(_) => None, StructChild::VecChild(vec_child) => Some(make_vec_child_annotated_member(vec_child)), - StructChild::MemberChild(member_child) => Some(make_member_child_annotated_member(member_child)), + StructChild::MemberChild(member_child) => { + Some(make_member_child_annotated_member(member_child)) + } } } pub fn make_struct_type(build_spec: &StructSpec) -> TokenStream { let type_ident = format_ident!("{}", build_spec.build()); - let annotated_members = build_spec.children() - .map(|child| { - make_annotated_member(child) - }) + let annotated_members = build_spec + .children() + .map(|child| make_annotated_member(child)) .filter(Option::is_some) .map(Option::unwrap) .collect::>(); - - let member_names = build_spec.children() - .map(|child| { - make_member_ident(child) - }) + + let member_names = build_spec + .children() + .map(|child| make_member_ident(child)) .filter(Option::is_some) .map(Option::unwrap) .collect::>(); - - let accessors = build_spec.children() - .map(|child| { - make_accessors(child) - }) + + let accessors = build_spec + .children() + .map(|child| make_accessors(child)) .filter(Option::is_some) .map(Option::unwrap) .collect::>(); - + quote! { pub struct #type_ident { #(#annotated_members),*