From c7f53c5d7d581ebf76803650c63ec615b1558dc8 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 28 May 2026 03:31:41 +0900 Subject: refactor(composer): represent composer via trait-based handles Replace the PartialComposer/Composer structs and the single Rc> 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 --- crates/shirabe/src/event_dispatcher/event_dispatcher.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'crates/shirabe/src/event_dispatcher') diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs index ef02660..49775d1 100644 --- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs +++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs @@ -19,8 +19,7 @@ use shirabe_php_shim::{ }; use crate::autoload::ClassLoader; -use crate::composer::PartialComposerHandle; -use crate::composer::PartialComposerWeakHandle; +use crate::composer::{AnyComposerHandle, AnyComposerWeakHandle, Composer, PartialComposer}; use crate::dependency_resolver::Transaction; use crate::dependency_resolver::operation::OperationInterface; use crate::event_dispatcher::Event; @@ -62,7 +61,7 @@ pub enum Callable { /// `$dispatcher->dispatch(ScriptEvents::POST_INSTALL_CMD);` #[derive(Debug)] pub struct EventDispatcher { - pub(crate) composer: PartialComposerWeakHandle, + pub(crate) composer: AnyComposerWeakHandle, pub(crate) io: std::rc::Rc>, pub(crate) loader: Option, pub(crate) process: std::rc::Rc>, @@ -76,7 +75,7 @@ pub struct EventDispatcher { impl EventDispatcher { pub fn new( - composer: PartialComposerWeakHandle, + composer: AnyComposerWeakHandle, io: std::rc::Rc>, process: Option>>, ) -> Self { @@ -704,7 +703,6 @@ impl EventDispatcher { .composer .upgrade() .expect("Composer was dropped before EventDispatcher use") - .borrow_partial() .get_package() .get_binaries(); if !possible_local_binaries.is_empty() { @@ -1081,7 +1079,6 @@ impl EventDispatcher { /// Finds all listeners defined as scripts in the package fn get_script_listeners(&self, event: &Event) -> Vec { let composer = self.composer(); - let composer = composer.borrow_partial(); let package = composer.get_package(); let scripts = package.get_scripts(); @@ -1163,7 +1160,6 @@ impl EventDispatcher { // add the bin dir to the PATH to make local binaries of deps usable in scripts let bin_dir = self .composer() - .borrow_partial() .get_config() .borrow_mut() .get("bin-dir") @@ -1234,8 +1230,6 @@ impl EventDispatcher { let Some(composer) = composer.as_full() else { return; }; - let composer = composer.borrow_mut(); - let callable_key = match callable { Callable::ArrayCallable(first, method) => { let prefix = if let PhpMixed::String(s) = first.as_ref() { @@ -1316,7 +1310,7 @@ impl EventDispatcher { todo!("clone std::rc::Rc>") } - fn composer(&self) -> PartialComposerHandle { + fn composer(&self) -> AnyComposerHandle { self.composer .upgrade() .expect("EventDispatcher must lives longer than Composer") -- cgit v1.3.1