aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-26 00:38:27 +0900
committernsfisis <nsfisis@gmail.com>2026-06-26 00:38:27 +0900
commit90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce (patch)
treedac10f7452ab58e36c2795e18c23edffe3045c50 /crates/shirabe/src/package
parente0ba36807619780ff645efe0117281d32d5ace2a (diff)
downloadphp-shirabe-90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce.tar.gz
php-shirabe-90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce.tar.zst
php-shirabe-90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce.zip
feat(dependency-resolver): wire operation get_package and unblock solver tests
Override OperationInterface::get_package for Install/Uninstall/MarkAlias* operations so trait-object dispatch no longer hits the default todo!(), and implement Rule::is_caused_by_lock's locked-repository lookup via Request::get_locked_repository (LockArrayRepository::get_packages is infallible). Change PackageInterface::get_type to return String (matching PHP getType(): string) so AliasPackage can delegate live to its aliasOf handle across the RefCell instead of an impossible &str borrow. Un-ignores 25 SolverTest cases; 2 alias cases stay ignored pending a real solver alias-resolution discrepancy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/package')
-rw-r--r--crates/shirabe/src/package/alias_package.rs7
-rw-r--r--crates/shirabe/src/package/complete_package.rs2
-rw-r--r--crates/shirabe/src/package/handle.rs2
-rw-r--r--crates/shirabe/src/package/package.rs7
-rw-r--r--crates/shirabe/src/package/package_interface.rs2
-rw-r--r--crates/shirabe/src/package/root_package.rs2
6 files changed, 8 insertions, 14 deletions
diff --git a/crates/shirabe/src/package/alias_package.rs b/crates/shirabe/src/package/alias_package.rs
index c0e71ec..1cc899d 100644
--- a/crates/shirabe/src/package/alias_package.rs
+++ b/crates/shirabe/src/package/alias_package.rs
@@ -270,11 +270,8 @@ impl PackageInterface for AliasPackage {
self.dev_requires.clone()
}
- fn get_type(&self) -> &str {
- // Delegates to the shared `aliasOf` handle, whose getters yield owned
- // `String`s; a borrow cannot escape the `RefCell`. Use the handle API
- // (`AliasPackageHandle::get_alias_of().get_type()`) instead.
- todo!("AliasPackage::get_type cannot return &str across the aliasOf handle")
+ fn get_type(&self) -> String {
+ self.alias_of.get_type()
}
fn get_target_dir(&self) -> Option<String> {
diff --git a/crates/shirabe/src/package/complete_package.rs b/crates/shirabe/src/package/complete_package.rs
index 56d50d5..d19b041 100644
--- a/crates/shirabe/src/package/complete_package.rs
+++ b/crates/shirabe/src/package/complete_package.rs
@@ -187,7 +187,7 @@ impl PackageInterface for CompletePackage {
self.inner.is_dev()
}
- fn get_type(&self) -> &str {
+ fn get_type(&self) -> String {
PackageInterface::get_type(&self.inner)
}
diff --git a/crates/shirabe/src/package/handle.rs b/crates/shirabe/src/package/handle.rs
index 83a5d47..e75a1a0 100644
--- a/crates/shirabe/src/package/handle.rs
+++ b/crates/shirabe/src/package/handle.rs
@@ -201,7 +201,7 @@ macro_rules! delegate_package_interface_to_inner {
fn is_dev(&self) -> bool {
self.$field.is_dev()
}
- fn get_type(&self) -> &str {
+ fn get_type(&self) -> String {
self.$field.get_type()
}
fn get_target_dir(&self) -> Option<String> {
diff --git a/crates/shirabe/src/package/package.rs b/crates/shirabe/src/package/package.rs
index e2f1f1a..a0497b2 100644
--- a/crates/shirabe/src/package/package.rs
+++ b/crates/shirabe/src/package/package.rs
@@ -611,11 +611,8 @@ impl PackageInterface for Package {
fn is_dev(&self) -> bool {
self.dev
}
- fn get_type(&self) -> &str {
- self.r#type
- .as_deref()
- .filter(|s| !s.is_empty())
- .unwrap_or("library")
+ fn get_type(&self) -> String {
+ Package::get_type(self)
}
fn get_target_dir(&self) -> Option<String> {
Package::get_target_dir(self)
diff --git a/crates/shirabe/src/package/package_interface.rs b/crates/shirabe/src/package/package_interface.rs
index 285a30b..621c73f 100644
--- a/crates/shirabe/src/package/package_interface.rs
+++ b/crates/shirabe/src/package/package_interface.rs
@@ -62,7 +62,7 @@ pub trait PackageInterface: std::fmt::Display + std::fmt::Debug {
/// Returns the package type, e.g. library
///
/// @return string The package type
- fn get_type(&self) -> &str;
+ fn get_type(&self) -> String;
/// Returns the package targetDir property
///
diff --git a/crates/shirabe/src/package/root_package.rs b/crates/shirabe/src/package/root_package.rs
index 9cdc6e2..355f1f6 100644
--- a/crates/shirabe/src/package/root_package.rs
+++ b/crates/shirabe/src/package/root_package.rs
@@ -266,7 +266,7 @@ impl PackageInterface for RootPackage {
fn is_dev(&self) -> bool {
self.inner.is_dev()
}
- fn get_type(&self) -> &str {
+ fn get_type(&self) -> String {
self.inner.get_type()
}
fn get_target_dir(&self) -> Option<String> {