Skip to content

Commit 7b5ed58

Browse files
committed
fix generated block field names so tests pass again
1 parent dd2f046 commit 7b5ed58

File tree

1 file changed

+22
-10
lines changed
  • azalea-block/azalea-block-macros/src

1 file changed

+22
-10
lines changed

azalea-block/azalea-block-macros/src/lib.rs

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,11 @@ struct PropertyDefinitions {
4242
/// `"snowy": Snowy(false)` or `"axis": properties::Axis::Y`
4343
#[derive(Debug)]
4444
struct PropertyWithNameAndDefault {
45-
// "snowy" / "axis"
45+
// "snowy" "axis"
4646
name: String,
47+
/// The property name, potentially modified so it works better as a struct
48+
/// field.
49+
name_ident: Ident,
4750
// Snowy / Axis
4851
property_type: Ident,
4952
property_value_type: Ident,
@@ -100,8 +103,11 @@ impl Parse for PropertyWithNameAndDefault {
100103
}
101104
};
102105

106+
let property_name_ident = name_to_ident(&property_name);
107+
103108
Ok(PropertyWithNameAndDefault {
104109
name: property_name,
110+
name_ident: property_name_ident,
105111
property_type,
106112
property_value_type,
107113
is_enum,
@@ -433,6 +439,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
433439
write!(property_name, "_{index}").unwrap();
434440
}
435441
properties_with_name.push(PropertyWithNameAndDefault {
442+
name_ident: name_to_ident(&property_name),
436443
name: property_name,
437444
property_type: property.property_type.clone(),
438445
property_value_type: property.property_value_type.clone(),
@@ -452,12 +459,11 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
452459
let mut block_struct_fields = quote! {};
453460
for PropertyWithNameAndDefault {
454461
property_value_type,
455-
name,
462+
name_ident,
456463
is_enum,
457464
..
458465
} in &properties_with_name
459466
{
460-
let name_ident = Ident::new_raw(name, proc_macro2::Span::call_site());
461467
block_struct_fields.extend(if *is_enum {
462468
quote! { pub #name_ident: properties::#property_value_type, }
463469
} else {
@@ -496,7 +502,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
496502
let mut from_block_to_state_combination_match_inner = quote! {};
497503
for i in 0..properties_with_name.len() {
498504
let property = &properties_with_name[i];
499-
let property_name = &property.name;
505+
let property_name_ident = &property.name_ident;
500506
let property_value_name_ident = &property.property_type;
501507
let variant =
502508
Ident::new(&combination[i].to_string(), proc_macro2::Span::call_site());
@@ -519,8 +525,6 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
519525
quote! {#variant}
520526
};
521527

522-
let property_name_ident =
523-
Ident::new_raw(property_name, proc_macro2::Span::call_site());
524528
from_block_to_state_combination_match_inner.extend(quote! {
525529
#property_name_ident: #property_variant,
526530
});
@@ -582,7 +586,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
582586
for i in (0..properties_with_name.len()).rev() {
583587
let PropertyWithNameAndDefault {
584588
property_type: property_struct_name_ident,
585-
name: property_name,
589+
name_ident: property_name_ident,
586590
property_value_type,
587591
..
588592
} = &properties_with_name[i];
@@ -598,7 +602,6 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
598602
quote! {properties::#property_struct_name_ident::from((b / #division) % #property_variants_count)}
599603
}
600604
};
601-
let property_name_ident = Ident::new_raw(property_name, proc_macro2::Span::call_site());
602605
from_state_to_block_inner.extend(quote! {
603606
#property_name_ident: #conversion_code,
604607
});
@@ -627,12 +630,11 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
627630

628631
let mut block_default_fields = quote! {};
629632
for PropertyWithNameAndDefault {
630-
name,
633+
name_ident,
631634
default: property_default,
632635
..
633636
} in properties_with_name
634637
{
635-
let name_ident = Ident::new_raw(&name, proc_macro2::Span::call_site());
636638
block_default_fields.extend(quote! { #name_ident: #property_default, });
637639
}
638640

@@ -821,3 +823,13 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
821823

822824
generated.into()
823825
}
826+
827+
/// Convert a name to a Rust identifier, replacing some Rust keywords with
828+
/// alternatives (e.g. `type` -> `kind`).
829+
fn name_to_ident(name: &str) -> Ident {
830+
let ident_str = match name {
831+
"type" => "kind",
832+
_ => &name,
833+
};
834+
Ident::new(ident_str, proc_macro2::Span::call_site())
835+
}

0 commit comments

Comments
 (0)