diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-10 02:41:34 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-10 02:46:18 +0900 |
| commit | 2d474e91e49c7343d28198eff2b5bbbed9afbcee (patch) | |
| tree | 8c1ab321dfa5ddc1ca9d2871eb06a6fde6b2970b /crates/shirabe/src/dependency_resolver/solver.rs | |
| parent | e583112899cbea7494ffdd73d7de380dd5f808c4 (diff) | |
| download | php-shirabe-2d474e91e49c7343d28198eff2b5bbbed9afbcee.tar.gz php-shirabe-2d474e91e49c7343d28198eff2b5bbbed9afbcee.tar.zst php-shirabe-2d474e91e49c7343d28198eff2b5bbbed9afbcee.zip | |
feat(phase-c): resolve cross-module phase-b TODOs
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/solver.rs')
| -rw-r--r-- | crates/shirabe/src/dependency_resolver/solver.rs | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/crates/shirabe/src/dependency_resolver/solver.rs b/crates/shirabe/src/dependency_resolver/solver.rs index 3d2113e..03dd575 100644 --- a/crates/shirabe/src/dependency_resolver/solver.rs +++ b/crates/shirabe/src/dependency_resolver/solver.rs @@ -239,10 +239,8 @@ impl Solver { self.io .write_error3("Generating rules", true, crate::io::DEBUG); let mut rule_set_generator = RuleSetGenerator::new(self.policy.clone(), self.pool.clone()); - // TODO(phase-b): get_rules_for takes Option<Rc<dyn PlatformRequirementFilterInterface>>; - // PHP passes the filter directly. Forwarding `None` here keeps the call typecheckable. - let _ = platform_requirement_filter.as_ref(); - self.rules = rule_set_generator.get_rules_for(request, None)?; + self.rules = + rule_set_generator.get_rules_for(request, Some(platform_requirement_filter.clone()))?; drop(rule_set_generator); self.check_for_root_require_problems(request, platform_requirement_filter.as_ref())?; self.decisions = Decisions::new(self.pool.clone()); @@ -667,22 +665,12 @@ impl Solver { seen.insert(literal.abs(), true); } - // TODO(phase-b): Decisions does not expose an `iter()` matching PHP's foreach. - // Walk the decision queue directly through offsets to avoid borrowing issues - // (we still need to call back into `&self` while iterating). - let mut offset = 0_usize; - while offset < self.decisions.count() { - let decision_literal = self.decisions.at_offset(offset).0; - - offset += 1; - + for (decision_literal, why) in self.decisions.iter() { // skip literals that are not in this rule if !seen.contains_key(&decision_literal.abs()) { continue; } - let why = self.decisions.at_offset(offset - 1).1.clone(); - problem.add_rule(why.clone()); self.analyze_unsolvable_rule(&mut problem, why.clone(), &mut rule_seen); |
