diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-19 00:10:22 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-19 00:11:03 +0900 |
| commit | c839244d8d09f3036ebfee8eef7eb6b147e593ab (patch) | |
| tree | fe48c94f2c2e62468beef5ff1a8f3cff6adeef4f /crates/shirabe/src/plugin | |
| parent | 48839250146b217e2756ed3c0e624fd341b54d6c (diff) | |
| download | php-shirabe-c839244d8d09f3036ebfee8eef7eb6b147e593ab.tar.gz php-shirabe-c839244d8d09f3036ebfee8eef7eb6b147e593ab.tar.zst php-shirabe-c839244d8d09f3036ebfee8eef7eb6b147e593ab.zip | |
fix(compile): fix various compile errors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/plugin')
| -rw-r--r-- | crates/shirabe/src/plugin/command_event.rs | 23 | ||||
| -rw-r--r-- | crates/shirabe/src/plugin/plugin_blocked_exception.rs | 6 | ||||
| -rw-r--r-- | crates/shirabe/src/plugin/plugin_interface.rs | 6 | ||||
| -rw-r--r-- | crates/shirabe/src/plugin/plugin_manager.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/src/plugin/post_file_download_event.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/plugin/pre_command_run_event.rs | 17 | ||||
| -rw-r--r-- | crates/shirabe/src/plugin/pre_pool_create_event.rs | 4 |
7 files changed, 39 insertions, 28 deletions
diff --git a/crates/shirabe/src/plugin/command_event.rs b/crates/shirabe/src/plugin/command_event.rs index aa5b366..715f29a 100644 --- a/crates/shirabe/src/plugin/command_event.rs +++ b/crates/shirabe/src/plugin/command_event.rs @@ -1,6 +1,7 @@ //! ref: composer/src/Composer/Plugin/CommandEvent.php use crate::event_dispatcher::event::Event; +use indexmap::IndexMap; use shirabe_external_packages::symfony::console::input::input_interface::InputInterface; use shirabe_external_packages::symfony::console::output::output_interface::OutputInterface; use shirabe_php_shim::PhpMixed; @@ -9,34 +10,28 @@ use shirabe_php_shim::PhpMixed; pub struct CommandEvent { inner: Event, command_name: String, - input: Box<dyn InputInterface>, - output: Box<dyn OutputInterface>, } impl CommandEvent { + // TODO(phase-b): input/output dropped because storing &dyn references in an event would + // require lifetime parameters; restore once Plugin API needs them. pub fn new( name: String, command_name: String, - input: Box<dyn InputInterface>, - output: Box<dyn OutputInterface>, - args: Vec<PhpMixed>, - flags: Vec<PhpMixed>, + _input: &dyn InputInterface, + _output: &dyn OutputInterface, + args: Vec<String>, + flags: IndexMap<String, PhpMixed>, ) -> Self { let inner = Event::new(name, args, flags); Self { inner, command_name, - input, - output, } } - pub fn get_input(&self) -> &dyn InputInterface { - self.input.as_ref() - } - - pub fn get_output(&self) -> &dyn OutputInterface { - self.output.as_ref() + pub fn get_name(&self) -> &str { + self.inner.get_name() } pub fn get_command_name(&self) -> &str { diff --git a/crates/shirabe/src/plugin/plugin_blocked_exception.rs b/crates/shirabe/src/plugin/plugin_blocked_exception.rs index cf3c7ce..fcf52ac 100644 --- a/crates/shirabe/src/plugin/plugin_blocked_exception.rs +++ b/crates/shirabe/src/plugin/plugin_blocked_exception.rs @@ -6,6 +6,12 @@ use shirabe_php_shim::UnexpectedValueException; #[derive(Debug)] pub struct PluginBlockedException(pub UnexpectedValueException); +impl PluginBlockedException { + pub fn new(message: String) -> Self { + Self(UnexpectedValueException { message, code: 0 }) + } +} + impl std::fmt::Display for PluginBlockedException { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.0.fmt(f) diff --git a/crates/shirabe/src/plugin/plugin_interface.rs b/crates/shirabe/src/plugin/plugin_interface.rs index d536380..a7bb384 100644 --- a/crates/shirabe/src/plugin/plugin_interface.rs +++ b/crates/shirabe/src/plugin/plugin_interface.rs @@ -5,10 +5,14 @@ use crate::io::io_interface::IOInterface; pub const PLUGIN_API_VERSION: &'static str = "2.9.0"; -pub trait PluginInterface { +pub trait PluginInterface: std::fmt::Debug { fn activate(&mut self, composer: &Composer, io: &dyn IOInterface); fn deactivate(&mut self, composer: &Composer, io: &dyn IOInterface); fn uninstall(&mut self, composer: &Composer, io: &dyn IOInterface); + + fn clone_box(&self) -> Box<dyn PluginInterface> { + todo!() + } } diff --git a/crates/shirabe/src/plugin/plugin_manager.rs b/crates/shirabe/src/plugin/plugin_manager.rs index adf5954..24b8e0b 100644 --- a/crates/shirabe/src/plugin/plugin_manager.rs +++ b/crates/shirabe/src/plugin/plugin_manager.rs @@ -832,14 +832,15 @@ impl PluginManager { "allow-plugins", PhpMixed::Array(allow_plugins.clone()), ); - let mut wrap: IndexMap<String, Box<PhpMixed>> = IndexMap::new(); + // TODO(phase-b): get_config() returns &Config, but merge needs &mut Config; ownership needs refactoring let mut inner: IndexMap<String, Box<PhpMixed>> = IndexMap::new(); inner.insert( "allow-plugins".to_string(), Box::new(PhpMixed::Array(allow_plugins)), ); - wrap.insert("config".to_string(), Box::new(PhpMixed::Array(inner))); - composer_ref.get_config().merge(PhpMixed::Array(wrap), ""); + let mut wrap: IndexMap<String, PhpMixed> = IndexMap::new(); + wrap.insert("config".to_string(), PhpMixed::Array(inner)); + todo!("see TODO(phase-b) above"); } } diff --git a/crates/shirabe/src/plugin/post_file_download_event.rs b/crates/shirabe/src/plugin/post_file_download_event.rs index f0e2569..549807a 100644 --- a/crates/shirabe/src/plugin/post_file_download_event.rs +++ b/crates/shirabe/src/plugin/post_file_download_event.rs @@ -33,6 +33,10 @@ impl PostFileDownloadEvent { } } + pub fn get_name(&self) -> &str { + self.inner.get_name() + } + pub fn get_file_name(&self) -> Option<&str> { self.file_name.as_deref() } diff --git a/crates/shirabe/src/plugin/pre_command_run_event.rs b/crates/shirabe/src/plugin/pre_command_run_event.rs index 40672c0..7a8b2f1 100644 --- a/crates/shirabe/src/plugin/pre_command_run_event.rs +++ b/crates/shirabe/src/plugin/pre_command_run_event.rs @@ -4,24 +4,21 @@ use crate::event_dispatcher::event::Event; use shirabe_external_packages::symfony::console::input::input_interface::InputInterface; +#[derive(Debug)] pub struct PreCommandRunEvent { inner: Event, - input: Box<dyn InputInterface>, command: String, } impl PreCommandRunEvent { - pub fn new(name: String, input: Box<dyn InputInterface>, command: String) -> Self { - let inner = Event::new(name); - Self { - inner, - input, - command, - } + // TODO(phase-b): input dropped because storing a &dyn reference would need lifetime params. + pub fn new(name: String, _input: &dyn InputInterface, command: String) -> Self { + let inner = Event::new(name, vec![], indexmap::IndexMap::new()); + Self { inner, command } } - pub fn get_input(&self) -> &dyn InputInterface { - self.input.as_ref() + pub fn get_name(&self) -> &str { + self.inner.get_name() } pub fn get_command(&self) -> &str { diff --git a/crates/shirabe/src/plugin/pre_pool_create_event.rs b/crates/shirabe/src/plugin/pre_pool_create_event.rs index 5d1a4e9..a1a6bc6 100644 --- a/crates/shirabe/src/plugin/pre_pool_create_event.rs +++ b/crates/shirabe/src/plugin/pre_pool_create_event.rs @@ -21,6 +21,10 @@ pub struct PrePoolCreateEvent { } impl PrePoolCreateEvent { + pub fn get_name(&self) -> &str { + self.inner.get_name() + } + #[allow(clippy::too_many_arguments)] pub fn new( name: String, |
