aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/plugin
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-19 00:10:22 +0900
committernsfisis <nsfisis@gmail.com>2026-05-19 00:11:03 +0900
commitc839244d8d09f3036ebfee8eef7eb6b147e593ab (patch)
treefe48c94f2c2e62468beef5ff1a8f3cff6adeef4f /crates/shirabe/src/plugin
parent48839250146b217e2756ed3c0e624fd341b54d6c (diff)
downloadphp-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.rs23
-rw-r--r--crates/shirabe/src/plugin/plugin_blocked_exception.rs6
-rw-r--r--crates/shirabe/src/plugin/plugin_interface.rs6
-rw-r--r--crates/shirabe/src/plugin/plugin_manager.rs7
-rw-r--r--crates/shirabe/src/plugin/post_file_download_event.rs4
-rw-r--r--crates/shirabe/src/plugin/pre_command_run_event.rs17
-rw-r--r--crates/shirabe/src/plugin/pre_pool_create_event.rs4
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,