From 1afc35c977eb443967fc768d67057a28b56ba15b Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 20 Jun 2026 03:44:30 +0900 Subject: refactor(plugin): return borrowed plugins from get_plugins, drop clone_box PluginManager::get_plugins cloned each plugin through a Rust-only `clone_box` stub (`todo!()`). PHP's getPlugins() returns `$this->plugins` directly and the objects are shared by reference, so borrow the stored instances (`&[Box]`) instead of cloning. The sole caller is adjusted and `PluginInterface::clone_box` is removed. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/shirabe/src/plugin/plugin_manager.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'crates/shirabe/src/plugin/plugin_manager.rs') diff --git a/crates/shirabe/src/plugin/plugin_manager.rs b/crates/shirabe/src/plugin/plugin_manager.rs index e8377f3..da64cee 100644 --- a/crates/shirabe/src/plugin/plugin_manager.rs +++ b/crates/shirabe/src/plugin/plugin_manager.rs @@ -182,8 +182,11 @@ impl PluginManager { } /// Gets all currently active plugin instances - pub fn get_plugins(&self) -> Vec> { - self.plugins.iter().map(|p| p.clone_box()).collect() + /// + /// PHP returns `$this->plugins` directly; the plugin objects are shared by reference, so this + /// borrows the stored instances rather than cloning them. + pub fn get_plugins(&self) -> &[Box] { + &self.plugins } /// Gets all currently active plugin instances @@ -723,7 +726,7 @@ impl PluginManager { ) -> Vec> { // TODO(plugin): aggregate capabilities across all loaded plugins let mut capabilities: Vec> = vec![]; - for plugin in &self.get_plugins() { + for plugin in self.get_plugins() { if let Ok(Some(capability)) = self.get_plugin_capability(&**plugin, capability_class_name, ctor_args.clone()) { -- cgit v1.3.1