From f5b987a00712211b7ce56300851182bda904e97b Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 23 May 2026 17:33:56 +0900 Subject: refactor(resolver): change Rule to a closed enum Co-Authored-By: Claude Opus 4.7 --- .../src/dependency_resolver/solver_problems_exception.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'crates/shirabe/src/dependency_resolver/solver_problems_exception.rs') diff --git a/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs b/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs index 8c9e488..17ebaf2 100644 --- a/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs +++ b/crates/shirabe/src/dependency_resolver/solver_problems_exception.rs @@ -1,5 +1,8 @@ //! ref: composer/src/Composer/DependencyResolver/SolverProblemsException.php +use std::cell::RefCell; +use std::rc::Rc; + use shirabe_php_shim::RuntimeException; use crate::dependency_resolver::Pool; @@ -13,7 +16,7 @@ use crate::util::IniHelper; pub struct SolverProblemsException { inner: RuntimeException, pub(crate) problems: Vec, - pub(crate) learned_pool: Vec>>, + pub(crate) learned_pool: Vec>>>, } impl SolverProblemsException { @@ -27,7 +30,7 @@ impl SolverProblemsException { &self.inner.message } - pub fn new(problems: Vec, learned_pool: Vec>>) -> Self { + pub fn new(problems: Vec, learned_pool: Vec>>>) -> Self { let message = format!( "Failed resolving dependencies with {} problems, call getPrettyString to get formatted details", problems.len() @@ -70,10 +73,10 @@ impl SolverProblemsException { .unwrap_or_default() )); // TODO(phase-b): get_reasons returns an IndexMap; flatten its values into Vec>. - let reasons_vec: Vec>> = problem + let reasons_vec: Vec>>> = problem .get_reasons() .values() - .map(|v| v.iter().map(|r| r.clone_box()).collect()) + .map(|v| v.iter().map(|r| r.clone()).collect()) .collect(); missing_extensions.extend(self.get_extension_problems(reasons_vec)); is_caused_by_lock = @@ -159,11 +162,11 @@ impl SolverProblemsException { text } - fn get_extension_problems(&self, reason_sets: Vec>>) -> Vec { + fn get_extension_problems(&self, reason_sets: Vec>>>) -> Vec { let mut missing_extensions: indexmap::IndexMap = indexmap::IndexMap::new(); for reason_set in reason_sets { for rule in reason_set { - let required = rule.get_required_package(); + let required = rule.borrow().get_required_package(); if let Some(req) = required { if req.starts_with("ext-") { missing_extensions.insert(req.to_string(), 1); -- cgit v1.3.1