Various refactoring.

This commit is contained in:
Jesse Brault 2025-09-23 11:03:25 -05:00
parent eb83d1202a
commit e21b428e26
3 changed files with 65 additions and 72 deletions

View File

@ -1,10 +1,40 @@
pub mod leaf_enum_build_fn;
pub mod leaf_struct_build_fn;
pub mod node_production_build_fn;
pub mod polymorphic_build_build_fn;
pub mod polymorphic_enum_build_fn;
pub mod polymorphic_enum_loop_build_fn;
pub mod polymorphic_type_build_fn;
pub mod production_build_fn;
pub mod struct_build_fn;
pub mod tree_enum_build_fn;
use crate::build_fn::leaf_enum_build_fn::make_leaf_enum_build_fn;
use crate::build_fn::leaf_struct_build_fn::make_leaf_struct_build_fn;
use crate::build_fn::node_production_build_fn::make_node_production_build_fn;
use crate::build_fn::polymorphic_enum_loop_build_fn::make_polymorphic_enum_loop_build_fn;
use crate::build_fn::polymorphic_type_build_fn::make_polymorphic_type_build_fn;
use crate::build_fn::production_build_fn::make_production_build_fn;
use crate::build_fn::struct_build_fn::make_struct_build_fn;
use crate::build_fn::tree_enum_build_fn::make_enum_build_fn;
use crate::spec::BuildSpec;
use proc_macro2::TokenStream;
mod leaf_enum_build_fn;
mod leaf_struct_build_fn;
mod node_production_build_fn;
mod polymorphic_build_build_fn;
mod polymorphic_enum_build_fn;
mod polymorphic_enum_loop_build_fn;
mod polymorphic_type_build_fn;
mod production_build_fn;
mod struct_build_fn;
mod tree_enum_build_fn;
pub fn make_build_fn(build_spec: &BuildSpec) -> TokenStream {
match build_spec {
BuildSpec::Struct(struct_spec) => make_struct_build_fn(struct_spec),
BuildSpec::LeafStruct(leaf_struct_spec) => make_leaf_struct_build_fn(leaf_struct_spec),
BuildSpec::Enum(enum_spec) => make_enum_build_fn(enum_spec),
BuildSpec::LeafEnum(leaf_enum_spec) => make_leaf_enum_build_fn(leaf_enum_spec),
BuildSpec::Production(production_spec) => make_production_build_fn(production_spec),
BuildSpec::NodeProduction(node_production_spec) => {
make_node_production_build_fn(node_production_spec)
}
BuildSpec::PolymorphicType(polymorphic_type_spec) => {
make_polymorphic_type_build_fn(polymorphic_type_spec)
}
BuildSpec::PolymorphicEnumLoop(polymorphic_enum_loop_spec) => {
make_polymorphic_enum_loop_build_fn(polymorphic_enum_loop_spec)
}
}
}

View File

@ -1,18 +1,11 @@
mod build_fn;
pub mod deserialize;
mod deserialize;
mod pretty_print;
mod spec;
mod type_gen;
mod util;
use crate::build_fn::enum_build_fn::make_enum_build_fn;
use crate::build_fn::leaf_enum_build_fn::make_leaf_enum_build_fn;
use crate::build_fn::leaf_struct_build_fn::make_leaf_struct_build_fn;
use crate::build_fn::polymorphic_build_build_fn::make_polymorphic_build_build_fn;
use crate::build_fn::polymorphic_build_fn::make_polymorphic_build_fn;
use crate::build_fn::polymorphic_enum_build_fn::make_polymorphic_enum_build_fn;
use crate::build_fn::production_build_fn::make_production_build_fn;
use crate::build_fn::struct_build_fn::make_struct_build_fn;
use crate::build_fn::make_build_fn;
use crate::deserialize::deserialize_yaml_spec;
use crate::pretty_print::make_pretty_print_impl;
use crate::type_gen::make_type;
use proc_macro2::TokenStream;
@ -39,24 +32,21 @@ fn debug_built_spec(build_spec: &BuildSpec, token_stream: &TokenStream) {
);
}
BuildSpec::Production(production_build_spec) => {
println!("Production Spec - rule: {}", production_build_spec.rule());
println!("Production Spec - name: {}", production_build_spec.name());
}
BuildSpec::Polymorphic(polymorphic_build_spec) => {
BuildSpec::NodeProduction(node_production_build_spec) => {
println!("Node Production Spec - name: {}", node_production_build_spec.name());
}
BuildSpec::PolymorphicType(polymorphic_build_spec) => {
println!(
"Polymorphic Type Spec - name: {}",
polymorphic_build_spec.name()
);
}
BuildSpec::PolymorphicBuild(polymorphic_build_build_spec) => {
BuildSpec::PolymorphicEnumLoop(polymorphic_enum_loop_build_spec) => {
println!(
"Polymorphic Build Spec - name: {}",
polymorphic_build_build_spec.name()
);
}
BuildSpec::PolymorphicEnum(polymorphic_enum_build_spec) => {
println!(
"Polymorphic Enum Spec - name: {}",
polymorphic_enum_build_spec.name()
"Polymorphic Enum Loop Spec - name: {}",
polymorphic_enum_loop_build_spec.name()
);
}
}
@ -78,49 +68,13 @@ fn token_stream_to_string(token_stream: TokenStream) -> String {
fn generate_build_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
let build_fns = build_specs
.iter()
.map(|build_spec| match build_spec {
BuildSpec::Enum(enum_build_spec) => {
let stream = make_enum_build_fn(enum_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::LeafEnum(leaf_enum_build_spec) => {
let stream = make_leaf_enum_build_fn(leaf_enum_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::Struct(struct_build_spec) => {
let stream = make_struct_build_fn(struct_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::LeafStruct(leaf_struct_build_spec) => {
let stream = make_leaf_struct_build_fn(leaf_struct_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::Production(production_build_spec) => {
let stream = make_production_build_fn(production_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::Polymorphic(polymorphic_build_spec) => {
let stream = make_polymorphic_build_fn(polymorphic_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::PolymorphicBuild(polymorphic_build_build_spec) => {
let stream = make_polymorphic_build_build_fn(polymorphic_build_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::PolymorphicEnum(polymorphic_enum_build_spec) => {
let stream = make_polymorphic_enum_build_fn(polymorphic_enum_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
.map(|build_spec| {
let build_fn = make_build_fn(build_spec);
debug_built_spec(build_spec, &build_fn);
build_fn
})
.collect::<Vec<_>>();
let combined = quote! {
//noinspection RsUnusedImport
use crate::parser::Rule;
@ -131,6 +85,7 @@ fn generate_build_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
#(#build_fns)*
};
AstGeneratedFile {
name: String::from("build.rs"),
contents: token_stream_to_string(combined),
@ -172,6 +127,10 @@ fn generate_pretty_print_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
}
}
pub fn get_build_specs(yaml: &str) -> Vec<BuildSpec> {
deserialize_yaml_spec(yaml)
}
pub fn generate_files(build_specs: &[BuildSpec]) -> Vec<AstGeneratedFile> {
vec![
generate_build_file(build_specs),

View File

@ -74,6 +74,10 @@ impl PolymorphicEnumLoopRuleBuild {
}
}
pub fn name(&self) -> &str {
&self.name
}
pub fn variant(&self) -> &str {
&self.variant
}