From 2d474e91e49c7343d28198eff2b5bbbed9afbcee Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 10 Jun 2026 02:41:34 +0900 Subject: feat(phase-c): resolve cross-module phase-b TODOs --- crates/shirabe/src/autoload/autoload_generator.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'crates/shirabe/src/autoload') diff --git a/crates/shirabe/src/autoload/autoload_generator.rs b/crates/shirabe/src/autoload/autoload_generator.rs index 69ecb73..a380763 100644 --- a/crates/shirabe/src/autoload/autoload_generator.rs +++ b/crates/shirabe/src/autoload/autoload_generator.rs @@ -438,8 +438,11 @@ impl AutoloadGenerator { } let mut class_map = class_map_generator.take_class_map(); - // TODO(phase-b): strict_ambiguous should filter vendor path for non-strict mode - let ambiguous_classes = class_map.get_ambiguous_classes(None)?; + let ambiguous_classes = if strict_ambiguous { + class_map.get_ambiguous_classes(None)? + } else { + class_map.get_ambiguous_classes(Some(r"{/(test|fixture|example|stub)s?/}i"))? + }; for (class_name, ambiguous_paths) in &ambiguous_classes { if ambiguous_paths.len() > 1 { self.io.write_error(&format!( @@ -804,14 +807,17 @@ impl AutoloadGenerator { }; let mut sorted_package_map = self.sort_package_map(package_map); sorted_package_map.push(root_package_map); + let reverse_sorted_map: Vec<(PackageInterfaceHandle, Option)> = + sorted_package_map.iter().rev().cloned().collect(); - // TODO(phase-b): psr-0/4/classmap should use reverse_sorted_map (root first) for correct precedence + // reverse-sorted means root first, then dependents, then their dependents, etc. + // which makes sense to allow root to override classmap or psr-0/4 entries with higher precedence rules let mut psr0 = - self.parse_autoloads_type(&sorted_package_map, "psr-0", root_package.clone()); + self.parse_autoloads_type(&reverse_sorted_map, "psr-0", root_package.clone()); let mut psr4 = - self.parse_autoloads_type(&sorted_package_map, "psr-4", root_package.clone()); + self.parse_autoloads_type(&reverse_sorted_map, "psr-4", root_package.clone()); let classmap = - self.parse_autoloads_type(&sorted_package_map, "classmap", root_package.clone()); + self.parse_autoloads_type(&reverse_sorted_map, "classmap", root_package.clone()); // sorted (i.e. dependents first) for files to ensure that dependencies are loaded/available once a file is included let files = self.parse_autoloads_type(&sorted_package_map, "files", root_package.clone()); -- cgit v1.3.1