aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/show_command.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-28 03:31:41 +0900
committernsfisis <nsfisis@gmail.com>2026-05-28 03:32:04 +0900
commitc7f53c5d7d581ebf76803650c63ec615b1558dc8 (patch)
treec6d83819e82a83cf93ca737b661094a8ea800cec /crates/shirabe/src/command/show_command.rs
parentcc5d73c05a0abca2eebcc8a6afa0b1543ee49850 (diff)
downloadphp-shirabe-c7f53c5d7d581ebf76803650c63ec615b1558dc8.tar.gz
php-shirabe-c7f53c5d7d581ebf76803650c63ec615b1558dc8.tar.zst
php-shirabe-c7f53c5d7d581ebf76803650c63ec615b1558dc8.zip
refactor(composer): represent composer via trait-based handlesrefactor/composer-handles
Replace the PartialComposer/Composer structs and the single Rc<RefCell<PartialOrFullComposer>> enum with PartialComposer and Composer traits (Composer: PartialComposer), InnerPartialComposer / InnerFullComposer data structs, and the handle types FullComposerHandle (impl Composer) and AnyComposerHandle (polymorphic enum, impl PartialComposer), plus their weak variants. Factory builds the full and partial graphs via separate Rc::new_cyclic branches that share a build_composer_base helper. Call sites now use trait methods that encapsulate borrowing instead of borrow_partial() / composer_full*(). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command/show_command.rs')
-rw-r--r--crates/shirabe/src/command/show_command.rs26
1 files changed, 8 insertions, 18 deletions
diff --git a/crates/shirabe/src/command/show_command.rs b/crates/shirabe/src/command/show_command.rs
index b72a986..3b50add 100644
--- a/crates/shirabe/src/command/show_command.rs
+++ b/crates/shirabe/src/command/show_command.rs
@@ -16,7 +16,7 @@ use shirabe_php_shim::{
use shirabe_semver::constraint::AnyConstraint;
use crate::command::{BaseCommand, BaseCommandData, HasBaseCommandData};
-use crate::composer::PartialComposerHandle;
+use crate::composer::{AnyComposerHandle, Composer, PartialComposer};
use crate::console::input::InputOption;
use crate::dependency_resolver::DefaultPolicy;
use crate::dependency_resolver::PolicyInterface;
@@ -277,7 +277,7 @@ impl ShowCommand {
installed_repo = Box::new(ir);
}
} else if input.get_option("all").as_bool() == Some(true) && composer.is_some() {
- let mut composer_ref = crate::command::composer_full_mut(composer.as_ref().unwrap());
+ let composer_ref = crate::command::composer_full(composer.as_ref().unwrap());
let local_repo_cloned = composer_ref
.get_repository_manager()
.borrow()
@@ -335,7 +335,7 @@ impl ShowCommand {
repos = Box::new(CompositeRepository::new(composite_input));
} else if input.get_option("locked").as_bool() == Some(true) {
if composer.is_none()
- || !crate::command::composer_full_mut(composer.as_ref().unwrap())
+ || !crate::command::composer_full(composer.as_ref().unwrap())
.get_locker()
.borrow_mut()
.is_locked()
@@ -346,7 +346,7 @@ impl ShowCommand {
}
.into());
}
- let mut composer_ref = crate::command::composer_full_mut(composer.as_ref().unwrap());
+ let composer_ref = crate::command::composer_full(composer.as_ref().unwrap());
let locker_rc = composer_ref.get_locker().clone();
let mut locker = locker_rc.borrow_mut();
let mut lr =
@@ -366,19 +366,9 @@ impl ShowCommand {
// TODO(phase-b): PHP shares the Composer object by reference. Phase B
// can't clone Composer, so we re-fetch via require_composer when missing
// but otherwise borrow the existing Option.
- let composer_local_owned;
- // Borrow guards that keep the Ref alive for the duration of the block.
- let _guard_from_existing;
let composer_local = match composer.as_ref() {
- Some(c) => {
- _guard_from_existing = crate::command::composer_full(c);
- &*_guard_from_existing
- }
- None => {
- composer_local_owned = self.require_composer(None, None)?;
- _guard_from_existing = crate::command::composer_full(&composer_local_owned);
- &*_guard_from_existing
- }
+ Some(c) => crate::command::composer_full(c),
+ None => crate::command::composer_full(&self.require_composer(None, None)?),
};
let root_pkg = composer_local.get_package();
@@ -2542,7 +2532,7 @@ impl ShowCommand {
fn find_latest_package(
&mut self,
package: PackageInterfaceHandle,
- composer: &PartialComposerHandle,
+ composer: &AnyComposerHandle,
platform_repo: &PlatformRepository,
major_only: bool,
minor_only: bool,
@@ -2680,7 +2670,7 @@ impl ShowCommand {
fn get_repository_set(
&mut self,
- composer: &PartialComposerHandle,
+ composer: &AnyComposerHandle,
) -> anyhow::Result<&mut RepositorySet> {
let composer = crate::command::composer_full(composer);
if self.repository_set.is_none() {