From 4bf226dd30743505707d2ad4e322d49d4258dae0 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 6 Jun 2026 12:13:20 +0900 Subject: refactor(solver-problems): pass reasons IndexMap directly to get_extension_problems PHP's getExtensionProblems receives getReasons() directly; match that instead of materializing an intermediate Vec> with Rc clones. Co-Authored-By: Claude Opus 4.8 --- .../src/dependency_resolver/solver_problems_exception.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'crates/shirabe/src/dependency_resolver') diff --git a/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs b/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs index 7aa8a46..513d4d9 100644 --- a/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs +++ b/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs @@ -70,13 +70,7 @@ impl SolverProblemsException { &self.learned_pool )? )); - // TODO(phase-b): get_reasons returns an IndexMap; flatten its values into Vec>. - let reasons_vec: Vec>>> = problem - .get_reasons() - .values() - .map(|v| v.iter().map(|r| r.clone()).collect()) - .collect(); - missing_extensions.extend(self.get_extension_problems(reasons_vec)); + missing_extensions.extend(self.get_extension_problems(problem.get_reasons())); is_caused_by_lock = is_caused_by_lock || problem.is_caused_by_lock(repository_set, request, pool); } @@ -160,9 +154,12 @@ impl SolverProblemsException { text } - fn get_extension_problems(&self, reason_sets: Vec>>>) -> Vec { + fn get_extension_problems( + &self, + reason_sets: &indexmap::IndexMap>>>, + ) -> Vec { let mut missing_extensions: indexmap::IndexMap = indexmap::IndexMap::new(); - for reason_set in reason_sets { + for reason_set in reason_sets.values() { for rule in reason_set { let required = rule.borrow().get_required_package(); if let Some(req) = required { -- cgit v1.3.1