From 3983e882b809ccf611ef1b0826a458543ff360fe Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Sat, 8 Jul 2023 22:59:59 +0900 Subject: [PATCH] [rust] estree codegen cleanup --- .../crates/estree-codegen/src/codegen.rs | 94 ++----------------- compiler/forget/crates/estree/src/lib.rs | 1 + 2 files changed, 11 insertions(+), 84 deletions(-) diff --git a/compiler/forget/crates/estree-codegen/src/codegen.rs b/compiler/forget/crates/estree-codegen/src/codegen.rs index f4409b7509..fdf835670e 100644 --- a/compiler/forget/crates/estree-codegen/src/codegen.rs +++ b/compiler/forget/crates/estree-codegen/src/codegen.rs @@ -31,29 +31,18 @@ impl Grammar { operators, } = self; - let nodelike: HashSet = - // nodes.keys().cloned().chain(enums.keys().cloned()).collect(); - Default::default(); - let enum_names: HashSet = enums.keys().cloned().collect(); let mut node_names: Vec<_> = nodes.keys().cloned().collect(); node_names.sort(); - let node_variants: Vec<_> = node_names - .iter() - .map(|name| { - let name = format_ident!("{}", name); - quote!(#name(Box<#name>)) - }) - .collect(); let objects: Vec<_> = objects .iter() - .map(|(name, object)| object.codegen(name, &nodelike)) + .map(|(name, object)| object.codegen(name)) .collect(); let nodes: Vec<_> = nodes .iter() - .map(|(name, node)| node.codegen(name, &nodelike)) + .map(|(name, node)| node.codegen(name)) .collect(); let enums: Vec<_> = enums .iter() @@ -76,12 +65,6 @@ impl Grammar { #(#enums)* #(#operators)* - - // #[derive(Serialize, Deserialize, Clone, Debug)] - // #[serde(tag = "type")] - // pub enum Node { - // #(#node_variants),* - // } } } } @@ -93,12 +76,12 @@ pub struct Object { } impl Object { - pub fn codegen(&self, name: &str, nodes: &HashSet) -> TokenStream { + pub fn codegen(&self, name: &str) -> TokenStream { let name = format_ident!("{}", name); let fields: Vec<_> = self .fields .iter() - .map(|(name, field)| field.codegen(name, nodes)) + .map(|(name, field)| field.codegen(name)) .collect(); quote! { @@ -117,12 +100,12 @@ pub struct Node { } impl Node { - pub fn codegen(&self, name: &str, nodes: &HashSet) -> TokenStream { + pub fn codegen(&self, name: &str) -> TokenStream { let name = format_ident!("{}", name); let fields: Vec<_> = self .fields .iter() - .map(|(name, field)| field.codegen_node(name, nodes)) + .map(|(name, field)| field.codegen_node(name)) .collect(); quote! { @@ -136,15 +119,6 @@ impl Node { #[serde(default)] pub range: Option, } - - // impl #name { - // pub fn from_node(node: Node) -> Option> { - // match node { - // Node::#name(node) => Some(node), - // _ => None - // } - // } - // } } } } @@ -174,16 +148,9 @@ pub struct Field { } impl Field { - pub fn codegen(&self, name: &str, nodes: &HashSet) -> TokenStream { + pub fn codegen(&self, name: &str) -> TokenStream { let name = format_ident!("{}", name); - let type_name = format_ident!( - "{}", - if nodes.contains(&self.type_) { - "Node" - } else { - &self.type_ - } - ); + let type_name = format_ident!("{}", &self.type_); let mut type_ = quote!(#type_name); if self.plural { if self.nullable_item { @@ -221,16 +188,9 @@ impl Field { field } - pub fn codegen_node(&self, name: &str, nodes: &HashSet) -> TokenStream { + pub fn codegen_node(&self, name: &str) -> TokenStream { let name = format_ident!("{}", name); - let type_name = format_ident!( - "{}", - if nodes.contains(&self.type_) { - "Node" - } else { - &self.type_ - } - ); + let type_name = format_ident!("{}", &self.type_); let mut type_ = quote!(#type_name); if self.plural { if self.nullable_item { @@ -265,13 +225,6 @@ impl Field { #field } } - if nodes.contains(&self.type_) { - let comment = format!(" {}", &self.type_); - field = quote! { - #[doc = #comment] - #field - } - } field } } @@ -300,26 +253,6 @@ impl Enum { }) .collect(); - let from_node_matches: Vec<_> = sorted_variants - .iter() - .map(|name| { - let variant = format_ident!("{}", name); - if enums.contains(*name) { - quote! { - if let Some(node) = #variant::from_node(node) { - return Some(Self::#variant(node)); - } - } - } else { - quote! { - if let Some(node) = #variant::from_node(node) { - return Some(Self::#variant(node)); - } - } - } - }) - .collect(); - let enum_ = quote! { pub enum #name { #(#variants),* @@ -341,13 +274,6 @@ impl Enum { quote! { #[derive(Serialize, Deserialize, Clone, Debug)] #enum_ - - // impl #name { - // pub fn from_node(node: Node) -> Option { - // #(#from_node_matches)* - // None - // } - // } } } } diff --git a/compiler/forget/crates/estree/src/lib.rs b/compiler/forget/crates/estree/src/lib.rs index 90bbf727d2..202fb72755 100644 --- a/compiler/forget/crates/estree/src/lib.rs +++ b/compiler/forget/crates/estree/src/lib.rs @@ -18,6 +18,7 @@ mod tests { #[test] fn fixtures() { glob!("fixtures/**.json", |path| { + println!("{:?}", path); let input = std::fs::read_to_string(path).unwrap(); let ast: Program = serde_json::from_str(&input).unwrap(); let serialized = serde_json::to_string_pretty(&ast).unwrap();