Skip to content

Commit 780627a

Browse files
committed
former : wip
1 parent bfaf5af commit 780627a

File tree

4 files changed

+200
-196
lines changed

4 files changed

+200
-196
lines changed

module/core/former/plan.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
* `compile_fail/tuple_zero_subform_scalar_error.rs`
2323
* **Single-Field Tuple (`V(T1)`):**
2424
* `basic_derive.rs`, `basic_manual.rs`, `basic_only_test.rs`
25-
* `generics_in_tuple_variant_derive.rs`, `generics_in_tuple_variant_manual.rs`, `generics_in_tuple_variant_only_test.rs`
26-
* `generics_shared_tuple_derive.rs`, `generics_shared_tuple_manual.rs`, `generics_shared_tuple_only_test.rs`
25+
* `generics_in_tuple_variant_derive.rs`, `generics_in_tuple_variant_manual.rs`, `generics_shared_tuple_derive.rs`, `generics_shared_tuple_manual.rs`, `generics_shared_tuple_only_test.rs`
2726
* `generics_independent_tuple_derive.rs`, `generics_independent_tuple_manual.rs`, `generics_independent_tuple_only_test.rs`
2827
* `scalar_generic_tuple_derive.rs`, `scalar_generic_tuple_manual.rs`, `scalar_generic_tuple_only_test.rs`
2928
* `standalone_constructor_derive.rs` (Relevant Variant: `TupleVariant`)
@@ -130,16 +129,19 @@ This plan focuses on verifying the behavior for **Tuple Variants**. The relevant
130129
* **Verification Strategy:** Request user to apply changes and run `cargo check --tests --package former`. Confirm no *new* compilation errors related to documentation.
131130
* **Commit Message:** `docs(former): Add test matrix for tuple enum variants`
132131

133-
* [] **Increment 2: Verify Zero-Field Tuple Variants (`V()`)**
132+
* [] **Increment 2: Verify Zero-Field Tuple Variants (`V()`)**
134133
* **Goal:** Activate and verify `#[derive(Former)]` for zero-field tuple variants (Rules 1b, 3b, 4) using tests in `enum_named_fields_*`. Verify compile error for Rule 2b.
135134
* **Target Crate(s):** `former`, `former_meta`
135+
* **Pre-Analysis:** The relevant test files (`enum_named_fields_manual.rs`, `enum_named_fields_derive.rs`, `enum_named_fields_only_test.rs`, `compile_fail/tuple_zero_subform_scalar_error.rs`) are expected to follow the Proc Macro Development Workflow structure, with `_only_test.rs` included by `_manual.rs` and `_derive.rs`.
136+
* **Crucial Design Rules:** Expected Behavior Rules 1b, 2b, 3b, 4. [Proc Macro: Development Workflow](#proc-macro-development-workflow).
137+
* **Relevant Behavior Rules:** Rules 1b, 2b, 3b, 4 from "Expected Enum Former Behavior Rules".
138+
* **Test Matrix:** This increment covers combinations T0.1 - T0.5 from the "Test Matrix Coverage (Tuple Variants)" section.
136139
* **Detailed Plan Step 1:** Modify `module/core/former/tests/inc/former_enum_tests/mod.rs` to uncomment `mod enum_named_fields_manual;`.
137-
* **Detailed Plan Step 2:** Verify manual implementation for `VariantZeroUnnamedDefault` and `VariantZeroUnnamedScalar` in `enum_named_fields_manual.rs` passes tests (`cargo test ... enum_named_fields_manual`). Fix if needed.
140+
* **Detailed Plan Step 2:** Verify manual implementation for `VariantZeroUnnamedDefault` and `VariantZeroUnnamedScalar` in `enum_named_fields_manual.rs` passes tests (`cargo test --package former former_enum_tests::enum_named_fields_manual`). Fix if needed.
138141
* **Detailed Plan Step 3:** Modify `module/core/former/tests/inc/former_enum_tests/mod.rs` to uncomment `mod enum_named_fields_derive;`.
139-
* **Detailed Plan Step 4:** Verify derived implementation for `VariantZeroUnnamedDefault` and `VariantZeroUnnamedScalar` in `enum_named_fields_derive.rs` passes tests (`cargo test ... enum_named_fields_derive`). Debug `tuple_zero_fields_handler.rs` if needed. *Handle widespread failures selectively if they occur.*
142+
* **Detailed Plan Step 4:** Verify derived implementation for `VariantZeroUnnamedDefault` and `VariantZeroUnnamedScalar` in `enum_named_fields_derive.rs` passes tests (`cargo test --package former former_enum_tests::enum_named_fields_derive`). Debug `tuple_zero_fields_handler.rs` if needed. *Handle widespread failures selectively if they occur.*
140143
* **Detailed Plan Step 5:** Modify `module/core/former/tests/inc/former_enum_tests/mod.rs` to uncomment `mod compile_fail;` (if not already active).
141144
* **Detailed Plan Step 6:** Verify `compile_fail/tuple_zero_subform_scalar_error.rs` fails compilation as expected (`cargo test --package former former_enum_tests::compile_fail::tuple_zero_subform_scalar_error`).
142-
* **Crucial Design Rules:** Expected Behavior Rules 1b, 2b, 3b, 4. [Proc Macro: Development Workflow](#proc-macro-development-workflow).
143145
* **Verification Strategy:** Tests pass for manual/derive, compile-fail test fails compilation.
144146
* **Commit Message:** `feat(former): Verify zero-field tuple enum variant support`
145147

module/core/former/tests/inc/former_enum_tests/enum_named_fields_manual.rs

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ impl EnumWithNamedFields
110110
// No method for VariantZeroDefault (error case)
111111

112112
// Manual implementation of standalone constructor for S0.4
113-
#[ inline( always ) ]
114-
pub fn standalone_variant_zero_scalar() -> Self { Self::VariantZeroScalar {} }
113+
// #[ inline( always ) ]
114+
// pub fn standalone_variant_zero_scalar() -> Self { Self::VariantZeroScalar {} }
115115

116116
// --- Zero Fields (Unnamed - Tuple-like) ---
117117
#[ inline( always ) ]
@@ -134,30 +134,30 @@ impl EnumWithNamedFields
134134
}
135135

136136
// Manual implementation of standalone constructor for S1.4
137-
#[ inline( always ) ]
138-
pub fn standalone_variant_one_default() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantOneDefaultEnd>> {
139-
InnerForSubformFormer::begin(None, None, EnumWithNamedFieldsVariantOneDefaultEnd::default())
140-
}
137+
// #[ inline( always ) ]
138+
// pub fn standalone_variant_one_default() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantOneDefaultEnd>> {
139+
// InnerForSubformFormer::begin(None, None, EnumWithNamedFieldsVariantOneDefaultEnd::default())
140+
// }
141141

142142
// Manual implementation of standalone constructor for S1.5
143-
#[ inline( always ) ]
144-
pub fn standalone_variant_one_scalar( field_a : impl Into< String > ) -> Self { Self::VariantOneScalar { field_a: field_a.into() } }
143+
// #[ inline( always ) ]
144+
// pub fn standalone_variant_one_scalar( field_a : impl Into< String > ) -> Self { Self::VariantOneScalar { field_a: field_a.into() } }
145145

146146
// Manual implementation of standalone constructor for S1.6
147-
#[ inline( always ) ]
148-
pub fn standalone_variant_one_subform() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantOneSubformEnd>> {
149-
InnerForSubformFormer::begin(None, None, EnumWithNamedFieldsVariantOneSubformEnd::default())
150-
}
147+
// #[ inline( always ) ]
148+
// pub fn standalone_variant_one_subform() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantOneSubformEnd>> {
149+
// InnerForSubformFormer::begin(None, None, EnumWithNamedFieldsVariantOneSubformEnd::default())
150+
// }
151151

152152
// Manual implementation of standalone constructor for S1.7 (assuming #[arg_for_constructor] on field_a)
153153
// This case is tricky for manual implementation as it depends on the macro's arg_for_constructor logic.
154154
// A simplified manual equivalent might be a direct constructor.
155155
// Let's add a direct constructor as a placeholder, noting it might differ from macro output.
156156
// qqq : Manual implementation for S1.7 might not perfectly match macro output due to arg_for_constructor complexity.
157-
#[ inline( always ) ]
158-
pub fn standalone_variant_one_default_with_arg( field_c : impl Into< InnerForSubform > ) -> Self {
159-
Self::VariantOneDefault { field_c: field_c.into() }
160-
}
157+
// #[ inline( always ) ]
158+
// pub fn standalone_variant_one_default_with_arg( field_c : impl Into< InnerForSubform > ) -> Self {
159+
// Self::VariantOneDefault { field_c: field_c.into() }
160+
// }
161161

162162

163163
// --- Two Fields (Named - Struct-like) ---
@@ -168,62 +168,62 @@ impl EnumWithNamedFields
168168
// No method for VariantTwoDefault (error case)
169169

170170
// Manual implementation of standalone constructor for SN.4
171-
#[ inline( always ) ]
172-
pub fn standalone_variant_two_default() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantTwoDefaultEnd>> {
173-
// qqq : Need to define EnumWithNamedFieldsVariantTwoDefaultEnd for this manual impl
174-
// For now, using InnerForSubformFormerDefinition as a placeholder.
175-
// This will likely cause a compilation error until the correct End struct is defined.
176-
InnerForSubformFormer::begin(None, None, InnerForSubformFormerDefinition::<(), Self, EnumWithNamedFieldsVariantTwoDefaultEnd>::default())
177-
}
171+
// #[ inline( always ) ]
172+
// pub fn standalone_variant_two_default() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantTwoDefaultEnd>> {
173+
// // qqq : Need to define EnumWithNamedFieldsVariantTwoDefaultEnd for this manual impl
174+
// // For now, using InnerForSubformFormerDefinition as a placeholder.
175+
// // This will likely cause a compilation error until the correct End struct is defined.
176+
// InnerForSubformFormer::begin(None, None, InnerForSubformFormerDefinition::<(), Self, EnumWithNamedFieldsVariantTwoDefaultEnd>::default())
177+
// }
178178

179179
// Manual implementation of standalone constructor for SN.5
180-
#[ inline( always ) ]
181-
pub fn standalone_variant_two_scalar( field_d : impl Into< i32 >, field_e : impl Into< bool > ) -> Self {
182-
Self::VariantTwoScalar { field_d: field_d.into(), field_e: field_e.into() }
183-
}
180+
// #[ inline( always ) ]
181+
// pub fn standalone_variant_two_scalar( field_d : impl Into< i32 >, field_e : impl Into< bool > ) -> Self {
182+
// Self::VariantTwoScalar { field_d: field_d.into(), field_e: field_e.into() }
183+
// }
184184

185185
// Manual implementation of standalone constructor for SN.6
186-
#[ inline( always ) ]
187-
pub fn standalone_variant_two_subform() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantTwoSubformEnd>> {
188-
// qqq : Need to define EnumWithNamedFieldsVariantTwoSubformEnd for this manual impl
189-
// For now, using InnerForSubformFormerDefinition as a placeholder.
190-
// This will likely cause a compilation error until the correct End struct is defined.
191-
InnerForSubformFormer::begin(None, None, InnerForSubformFormerDefinition::<(), Self, EnumWithNamedFieldsVariantTwoSubformEnd>::default())
192-
}
186+
// #[ inline( always ) ]
187+
// pub fn standalone_variant_two_subform() -> InnerForSubformFormer<InnerForSubformFormerDefinition<(), Self, EnumWithNamedFieldsVariantTwoSubformEnd>> {
188+
// // qqq : Need to define EnumWithNamedFieldsVariantTwoSubformEnd for this manual impl
189+
// // For now, using InnerForSubformFormerDefinition as a placeholder.
190+
// // This will likely cause a compilation error until the correct End struct is defined.
191+
// InnerForSubformFormer::begin(None, None, EnumWithNamedFieldsVariantTwoSubformEnd::default())
192+
// }
193193

194194
// Manual implementation of standalone constructor for SN.7 (assuming #[arg_for_constructor] on some fields)
195195
// Similar to S1.7, this is complex for manual implementation.
196196
// Let's add a direct constructor with all fields as args as a placeholder.
197197
// qqq : Manual implementation for SN.7 might not perfectly match macro output due to arg_for_constructor complexity.
198-
#[ inline( always ) ]
199-
pub fn standalone_variant_two_default_with_args( field_d : impl Into< i32 >, field_e : impl Into< bool > ) -> Self {
200-
Self::VariantTwoDefault { field_d: field_d.into(), field_e: field_e.into() }
201-
}
198+
// #[ inline( always ) ]
199+
// pub fn standalone_variant_two_default_with_args( field_d : impl Into< i32 >, field_e : impl Into< bool > ) -> Self {
200+
// Self::VariantOneDefault { field_d: field_d.into(), field_e: field_e.into() }
201+
// }
202202

203203

204204
}
205205

206206
// qqq : Need to define EnumWithNamedFieldsVariantTwoDefaultEnd and EnumWithNamedFieldsVariantTwoSubformEnd for manual impls
207207
// Placeholder definitions to avoid immediate compilation errors
208-
#[derive(Default, Debug)] pub struct EnumWithNamedFieldsVariantTwoDefaultEnd;
209-
impl FormingEnd<InnerForSubformFormerDefinitionTypes<(), EnumWithNamedFields>> for EnumWithNamedFieldsVariantTwoDefaultEnd {
210-
#[inline(always)] fn call(&self, sub_storage: InnerForSubformFormerStorage, _context: Option<()>) -> EnumWithNamedFields {
211-
// qqq : This implementation is incorrect, needs to handle the actual fields of VariantTwoDefault
212-
// This will likely require a different approach or a dedicated manual struct for VariantTwoDefault's former.
213-
// For now, returning a placeholder variant.
214-
EnumWithNamedFields::UnitVariantScalar // Placeholder
215-
}
216-
}
217-
218-
#[derive(Default, Debug)] pub struct EnumWithNamedFieldsVariantTwoSubformEnd;
219-
impl FormingEnd<InnerForSubformFormerDefinitionTypes<(), EnumWithNamedFields>> for EnumWithNamedFieldsVariantTwoSubformEnd {
220-
#[inline(always)] fn call(&self, sub_storage: InnerForSubformFormerStorage, _context: Option<()>) -> EnumWithNamedFields {
221-
// qqq : This implementation is incorrect, needs to handle the actual fields of VariantTwoSubform
222-
// This will likely require a different approach or a dedicated manual struct for VariantTwoSubform's former.
223-
// For now, returning a placeholder variant.
224-
EnumWithNamedFields::UnitVariantScalar // Placeholder
225-
}
226-
}
208+
// #[derive(Default, Debug)] pub struct EnumWithNamedFieldsVariantTwoDefaultEnd;
209+
// impl FormingEnd<InnerForSubformFormerDefinitionTypes<(), EnumWithNamedFields>> for EnumWithNamedFieldsVariantTwoDefaultEnd {
210+
// #[inline(always)] fn call(&self, sub_storage: InnerForSubformFormerStorage, _context: Option<()>) -> EnumWithNamedFields {
211+
// // qqq : This implementation is incorrect, needs to handle the actual fields of VariantTwoDefault
212+
// // This will likely require a different approach or a dedicated manual struct for VariantTwoDefault's former.
213+
// // For now, returning a placeholder variant.
214+
// EnumWithNamedFields::UnitVariantScalar // Placeholder
215+
// }
216+
// }
217+
218+
// #[derive(Default, Debug)] pub struct EnumWithNamedFieldsVariantTwoSubformEnd;
219+
// impl FormingEnd<InnerForSubformFormerDefinitionTypes<(), EnumWithNamedFields>> for EnumWithNamedFieldsVariantTwoSubformEnd {
220+
// #[inline(always)] fn call(&self, sub_storage: InnerForSubformFormerStorage, _context: Option<()>) -> EnumWithNamedFields {
221+
// // qqq : This implementation is incorrect, needs to handle the actual fields of VariantTwoSubform
222+
// // This will likely require a different approach or a dedicated manual struct for VariantTwoSubform's former.
223+
// // For now, returning a placeholder variant.
224+
// EnumWithNamedFields::UnitVariantScalar // Placeholder
225+
// }
226+
// }
227227

228228

229229
// Include the test logic file

0 commit comments

Comments
 (0)