# The Mod Pathfinder ## Background Currently, `gen_program!` requires all involved types to be `use`d within their module. Mingling lacks a complete module path analyzer — waiting for `proc-macro-span` to stabilize is clearly not practical, so a solution for obtaining module paths is needed. ## Solution We plan to create an analyzer called `mingling-mod-pathf`, enabled via Mingling's `"pathf"` feature, to compute the full paths of all defined Mingling types. ### Behavior When Enabled **`mingling_core`**: If the `builds` feature is enabled, introduces the `mingling::build::analyze_and_build_type_mapping()` method (analysis completed at Build-Time) **`mingling_macros`**: Modifies the behavior of the `gen_program!()` macro — automatically loads the mapping table from the analysis file generated by `mingling::build::analyze_and_build_type_mapping()`, and directly uses the full `mod::path` instead of `TypeName` (injected at Compile-Time) ## Challenges `mingling-mod-pathf` needs to understand **all** Mingling syntax features. Fortunately, Mingling's type creation is almost always explicit: ```rust mod sub { mingling::macros::pack!(ResultMyName = String); // directly creates ..::sub::ResultMyName } ``` There are a few exceptions, such as the implicit Dispatcher provided by `extra_macros`, but these can be inferred from the node name: ```rust dispatcher!("remote.add"); // although the type is unknown, we can infer CMDRemoteAdd and EntryRemoteAdd ``` And also `#[program_setup]`: ```rust #[program_setup] // can infer CustomSetup from the function name `custom_setup` fn custom_setup(program: &mut Program) { program.with_dispatchers((CMD1, CMD2, CMD3, CMD4, CMD5)); } ``` ## Pathf Output Format Uses TOML key-value pairs, formatted as follows: ```toml ResultRemoteAdd = "crate::mymod::ResultRemoteAdd" ``` Recommended storage location is under the target directory: ``` /target/{target}/{crate-name}/type-mapping.toml ``` ## Other Issues This solution is limited to Mingling's own syntax system. If types like `dispatcher!`, `pack!` are indirectly expanded through macros, the analyzer will not be able to discover them. However, this approach solves the current main pain points, so this issue can be set aside for now and addressed later.