From 632c9793927a30c4bca3c91888e66b369d732dfe Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 8 Jun 2026 04:22:49 +0900 Subject: feat(phase-c): resolve PhpMixed-conversion phase-b TODOs Implement the foundational PhpMixed conversion infrastructure (From, order-sensitive PartialEq matching PHP ===) and resolve the category-G phase-b TODOs that depend on it: - Fix VCS driver cache paths that discarded parsed JSON or diverged on null caches (svn/forgejo/gitlab/git-bitbucket/github). - Wire up real conversions previously stubbed or dropped: suggests platform config, audit ignore-severities, composer_repository search and ProviderInfo, class_loader prefix/classmap merges, locker lock diff comparison, advisory JSON serialization, SPDX license fields. - Make GenericRule take a typed ReasonData; populate RULE_ROOT_REQUIRE with the constraint and convert PhpMixed at the call sites. --- .../src/dependency_resolver/rule_set_generator.rs | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'crates/shirabe/src/dependency_resolver/rule_set_generator.rs') diff --git a/crates/shirabe/src/dependency_resolver/rule_set_generator.rs b/crates/shirabe/src/dependency_resolver/rule_set_generator.rs index 048a5f5..295160c 100644 --- a/crates/shirabe/src/dependency_resolver/rule_set_generator.rs +++ b/crates/shirabe/src/dependency_resolver/rule_set_generator.rs @@ -67,8 +67,8 @@ impl RuleSetGenerator { Some(GenericRule::new( literals, - PhpMixed::Int(reason), - reason_data, + reason, + rule::ReasonData::from(reason_data), )) } @@ -83,7 +83,7 @@ impl RuleSetGenerator { reason_data: PhpMixed, ) -> GenericRule { let literals: Vec = packages.iter().map(|p| p.get_id()).collect(); - GenericRule::new(literals, PhpMixed::Int(reason), reason_data) + GenericRule::new(literals, reason, rule::ReasonData::from(reason_data)) } /// Creates a rule for two conflicting packages. @@ -368,19 +368,14 @@ impl RuleSetGenerator { self.add_rules_for_package(package.clone(), platform_requirement_filter); } - let mut reason_data: IndexMap> = IndexMap::new(); - reason_data.insert( - "packageName".to_string(), - Box::new(PhpMixed::String(package_name.clone())), - ); - reason_data.insert( - "constraint".to_string(), - Box::new(PhpMixed::Null), // reasonData: $constraint (ConstraintInterface) - ); - let rule = self.create_install_one_of_rule( - &packages, + let literals: Vec = packages.iter().map(|p| p.get_id()).collect(); + let rule = GenericRule::new( + literals, rule::RULE_ROOT_REQUIRE, - PhpMixed::Array(reason_data), + rule::ReasonData::RootRequire { + package_name: package_name.clone(), + constraint: constraint.clone(), + }, ); self.add_rule(RuleSet::TYPE_REQUEST, Some(Rule::Generic(rule))); } -- cgit v1.3.1