From 06e8e14520a4a38fed500581d2b75a42418b22c4 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 4 Jun 2026 21:09:02 +0900 Subject: feat(package): implement PackageInterface accessor layer for Package/CompletePackage/RootPackage Fill the trait-impl todo!() across the package accessor layer so loaded packages are actually usable (the ArrayLoader::load path depends on it): - Package: implement BasePackage/PackageInterface from struct fields and existing inherent methods; Display via get_unique_name. - CompletePackage: delegate PackageInterface to inner Package. - RootPackage: delegate CompletePackageInterface/PackageInterface to inner CompletePackage; RootPackageInterface link setters delegate to Package. Correct three unfaithful trait signatures found during implementation: - get_target_dir returns Option (PHP computes a normalized value; a borrow cannot represent it, and AliasPackage could not implement &str across its aliasOf handle). - RootPackageInterface link setters take IndexMap, matching Package and the real ArrayLoader caller (PHP RootPackage inherits Package::setRequires; the Link[] docblock was imprecise). - get_full_pretty_version takes a DisplayMode enum instead of a raw i64; the match is now exhaustive, so it returns String without an error path. Move mirror conversion to the boundaries: PackageInterface mirror methods use Vec (the typed form, matching the inherent methods), with array<->Mirror conversion done by the producer (ComposerRepository) and consumer (ArrayDumper). Co-Authored-By: Claude Opus 4.8 --- crates/shirabe/src/command/licenses_command.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'crates/shirabe/src/command/licenses_command.rs') diff --git a/crates/shirabe/src/command/licenses_command.rs b/crates/shirabe/src/command/licenses_command.rs index 681ac7a..ddd7d3d 100644 --- a/crates/shirabe/src/command/licenses_command.rs +++ b/crates/shirabe/src/command/licenses_command.rs @@ -19,7 +19,6 @@ use crate::json::JsonFile; use crate::package::BasePackage; use crate::package::CompletePackage; use crate::package::CompletePackageInterface; -use crate::package::PackageInterface; use crate::plugin::CommandEvent; use crate::plugin::PluginEvents; use crate::repository::CanonicalPackagesTrait; @@ -178,14 +177,10 @@ impl LicensesCommand { }; table.add_row(PhpMixed::List(vec![ Box::new(PhpMixed::String(name)), - Box::new(PhpMixed::String( - package - .get_full_pretty_version( - false, - ::DISPLAY_SOURCE_REF_IF_DEV, - ) - .to_string(), - )), + Box::new(PhpMixed::String(package.get_full_pretty_version( + false, + crate::package::DisplayMode::SourceRefIfDev, + ))), Box::new(PhpMixed::String(licenses_str)), ])); } @@ -203,7 +198,10 @@ impl LicensesCommand { let mut dep_info: IndexMap = IndexMap::new(); dep_info.insert( "version".to_string(), - PhpMixed::String(package.get_full_pretty_version(true, 0).to_string()), + PhpMixed::String(package.get_full_pretty_version( + true, + crate::package::DisplayMode::SourceRefIfDev, + )), ); dep_info.insert( "license".to_string(), -- cgit v1.3.1