diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-26 00:38:27 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-26 00:38:27 +0900 |
| commit | 90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce (patch) | |
| tree | dac10f7452ab58e36c2795e18c23edffe3045c50 /crates/shirabe/src/package | |
| parent | e0ba36807619780ff645efe0117281d32d5ace2a (diff) | |
| download | php-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.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/src/package/complete_package.rs | 2 | ||||
| -rw-r--r-- | crates/shirabe/src/package/handle.rs | 2 | ||||
| -rw-r--r-- | crates/shirabe/src/package/package.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/src/package/package_interface.rs | 2 | ||||
| -rw-r--r-- | crates/shirabe/src/package/root_package.rs | 2 |
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> { |
