diff options
Diffstat (limited to 'crates/shirabe-external-packages')
21 files changed, 204 insertions, 27 deletions
diff --git a/crates/shirabe-external-packages/Cargo.toml b/crates/shirabe-external-packages/Cargo.toml index 2c32ed3..952f263 100644 --- a/crates/shirabe-external-packages/Cargo.toml +++ b/crates/shirabe-external-packages/Cargo.toml @@ -7,3 +7,4 @@ edition.workspace = true anyhow.workspace = true indexmap.workspace = true shirabe-php-shim = { path = "../shirabe-php-shim" } +shirabe-semver = { path = "../shirabe-semver" } diff --git a/crates/shirabe-external-packages/src/composer/semver/compiling_matcher.rs b/crates/shirabe-external-packages/src/composer/semver/compiling_matcher.rs index 5a8f09d..dc27a32 100644 --- a/crates/shirabe-external-packages/src/composer/semver/compiling_matcher.rs +++ b/crates/shirabe-external-packages/src/composer/semver/compiling_matcher.rs @@ -1,16 +1,18 @@ +use shirabe_semver::constraint::constraint_interface::ConstraintInterface; + #[derive(Debug)] pub struct CompilingMatcher; impl CompilingMatcher { - pub fn r#match(_constraint: &dyn std::any::Any, _package: &dyn std::any::Any) -> bool { + pub fn r#match(_constraint: &dyn ConstraintInterface, _package: &dyn std::any::Any) -> bool { todo!() } - pub fn matches(_constraint: &dyn std::any::Any, _operator: &str, _version: &str) -> bool { + pub fn matches(_constraint: &dyn ConstraintInterface, _operator: i64, _version: &str) -> bool { todo!() } - pub fn match_(_constraint: &dyn std::any::Any, _operator: &str, _version: &str) -> bool { + pub fn match_(_constraint: &dyn ConstraintInterface, _operator: i64, _version: &str) -> bool { todo!() } diff --git a/crates/shirabe-external-packages/src/composer/semver/intervals.rs b/crates/shirabe-external-packages/src/composer/semver/intervals.rs index d0a736c..04f7ee7 100644 --- a/crates/shirabe-external-packages/src/composer/semver/intervals.rs +++ b/crates/shirabe-external-packages/src/composer/semver/intervals.rs @@ -1,25 +1,28 @@ use shirabe_php_shim::PhpMixed; +use shirabe_semver::constraint::constraint_interface::ConstraintInterface; #[derive(Debug)] pub struct Intervals; impl Intervals { pub fn is_subset_of( - _constraint_a: &dyn std::any::Any, - _constraint_b: &dyn std::any::Any, + _constraint_a: &dyn ConstraintInterface, + _constraint_b: &dyn ConstraintInterface, ) -> anyhow::Result<bool> { todo!() } - pub fn compact_constraint(_constraint: &dyn std::any::Any) -> Box<dyn std::any::Any> { + pub fn compact_constraint( + _constraint: Box<dyn ConstraintInterface>, + ) -> Box<dyn ConstraintInterface> { todo!() } - pub fn compact(_constraint: &dyn std::any::Any) -> Box<dyn std::any::Any> { + pub fn compact(_constraint: &dyn ConstraintInterface) -> Box<dyn ConstraintInterface> { todo!() } - pub fn get(_constraint: &dyn std::any::Any) -> anyhow::Result<PhpMixed> { + pub fn get(_constraint: &dyn ConstraintInterface) -> anyhow::Result<PhpMixed> { todo!() } diff --git a/crates/shirabe-external-packages/src/composer/util/composer_mirror.rs b/crates/shirabe-external-packages/src/composer/util/composer_mirror.rs index 66e363c..147abd1 100644 --- a/crates/shirabe-external-packages/src/composer/util/composer_mirror.rs +++ b/crates/shirabe-external-packages/src/composer/util/composer_mirror.rs @@ -3,12 +3,12 @@ pub struct ComposerMirror; impl ComposerMirror { pub fn process_url( - _mirror: &str, + _mirror_url: &str, _package_name: &str, _version: &str, _reference: Option<&str>, - _url: &str, - _custom_filename: Option<&str>, + _r_type: Option<&str>, + _pretty_version: Option<&str>, ) -> String { todo!() } diff --git a/crates/shirabe-external-packages/src/react/promise/promise_interface.rs b/crates/shirabe-external-packages/src/react/promise/promise_interface.rs index bb604a8..5836945 100644 --- a/crates/shirabe-external-packages/src/react/promise/promise_interface.rs +++ b/crates/shirabe-external-packages/src/react/promise/promise_interface.rs @@ -6,4 +6,33 @@ pub trait PromiseInterface { on_fulfilled: Option<Box<dyn FnOnce(Option<PhpMixed>) -> Option<PhpMixed>>>, on_rejected: Option<Box<dyn FnOnce(Option<PhpMixed>) -> Option<PhpMixed>>>, ) -> Box<dyn PromiseInterface>; + + /// PHP closure shape: `fn(mixed): mixed`. Convenience wrapper around `then` + /// for call sites that don't deal in `Option<PhpMixed>`. + fn then_with( + &self, + _on_fulfilled: Option<Box<dyn FnOnce(PhpMixed) -> PhpMixed>>, + _on_rejected: Option<Box<dyn FnOnce(PhpMixed) -> PhpMixed>>, + ) -> Box<dyn PromiseInterface> { + todo!() + } + + /// PHP closure shape: `fn(mixed): mixed`, returning a `Box<dyn PromiseInterface>`. + fn then_boxed( + &self, + _on_fulfilled: Option<Box<dyn FnOnce(PhpMixed) -> Box<dyn PromiseInterface>>>, + _on_rejected: Option<Box<dyn FnOnce(PhpMixed) -> Box<dyn PromiseInterface>>>, + ) -> Box<dyn PromiseInterface> { + todo!() + } + + /// Variant used by composer_repository where accept returns PhpMixed but reject returns + /// an error/PhpMixed and the result is the same Promise pipeline. + fn then_with_reject_boxed( + &self, + _on_fulfilled: Box<dyn FnOnce(PhpMixed) -> anyhow::Result<PhpMixed>>, + _on_rejected: Box<dyn FnOnce(anyhow::Error) -> anyhow::Result<PhpMixed>>, + ) -> Box<dyn PromiseInterface> { + todo!() + } } diff --git a/crates/shirabe-external-packages/src/seld/json_lint/duplicate_key_exception.rs b/crates/shirabe-external-packages/src/seld/json_lint/duplicate_key_exception.rs index 9e35396..df61a91 100644 --- a/crates/shirabe-external-packages/src/seld/json_lint/duplicate_key_exception.rs +++ b/crates/shirabe-external-packages/src/seld/json_lint/duplicate_key_exception.rs @@ -1,7 +1,17 @@ +use indexmap::IndexMap; +use shirabe_php_shim::PhpMixed; + #[derive(Debug)] pub struct DuplicateKeyException { pub message: String, pub code: i64, + pub details: IndexMap<String, PhpMixed>, +} + +impl DuplicateKeyException { + pub fn get_details(&self) -> &IndexMap<String, PhpMixed> { + &self.details + } } impl std::fmt::Display for DuplicateKeyException { diff --git a/crates/shirabe-external-packages/src/seld/json_lint/json_parser.rs b/crates/shirabe-external-packages/src/seld/json_lint/json_parser.rs index 31f64df..dbff9a0 100644 --- a/crates/shirabe-external-packages/src/seld/json_lint/json_parser.rs +++ b/crates/shirabe-external-packages/src/seld/json_lint/json_parser.rs @@ -19,4 +19,12 @@ impl JsonParser { pub fn parse(&self, _json: &str, _flags: u32) -> anyhow::Result<PhpMixed> { todo!() } + + /// PHP: JsonParser::lint() — returns null on success, ParsingException on failure. + pub fn lint( + &mut self, + _json: &str, + ) -> Option<crate::seld::json_lint::parsing_exception::ParsingException> { + todo!() + } } diff --git a/crates/shirabe-external-packages/src/seld/json_lint/parsing_exception.rs b/crates/shirabe-external-packages/src/seld/json_lint/parsing_exception.rs index 3ec6b6b..b756c1b 100644 --- a/crates/shirabe-external-packages/src/seld/json_lint/parsing_exception.rs +++ b/crates/shirabe-external-packages/src/seld/json_lint/parsing_exception.rs @@ -4,6 +4,21 @@ pub struct ParsingException { pub code: i64, } +impl ParsingException { + pub fn new(message: String, _details: Option<shirabe_php_shim::PhpMixed>) -> Self { + Self { message, code: 0 } + } + + pub fn get_message(&self) -> &str { + &self.message + } + + pub fn get_details(&self) -> indexmap::IndexMap<String, shirabe_php_shim::PhpMixed> { + // TODO(phase-b): PHP ParsingException exposes ['text', 'line', 'token'] details + indexmap::IndexMap::new() + } +} + impl std::fmt::Display for ParsingException { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.message) diff --git a/crates/shirabe-external-packages/src/seld/signal/signal_handler.rs b/crates/shirabe-external-packages/src/seld/signal/signal_handler.rs index 3c53066..5b5254a 100644 --- a/crates/shirabe-external-packages/src/seld/signal/signal_handler.rs +++ b/crates/shirabe-external-packages/src/seld/signal/signal_handler.rs @@ -13,4 +13,12 @@ impl SignalHandler { pub fn unregister(&self) { todo!() } + + pub fn exit_with_last_signal(&self) { + todo!() + } + + pub fn is_triggered(&self) -> bool { + todo!() + } } diff --git a/crates/shirabe-external-packages/src/symfony/component/console/application.rs b/crates/shirabe-external-packages/src/symfony/component/console/application.rs index bc64521..1197792 100644 --- a/crates/shirabe-external-packages/src/symfony/component/console/application.rs +++ b/crates/shirabe-external-packages/src/symfony/component/console/application.rs @@ -89,4 +89,16 @@ impl Application { pub fn is_single_command(&self) -> bool { todo!() } + + pub fn render_throwable(&self, _exception: &anyhow::Error, _output: &mut dyn OutputInterface) { + todo!() + } + + pub fn set_catch_errors(&mut self, _catch_errors: bool) { + todo!() + } + + pub fn has(&self, _name: &str) -> bool { + todo!() + } } diff --git a/crates/shirabe-external-packages/src/symfony/component/console/helper/helper_set.rs b/crates/shirabe-external-packages/src/symfony/component/console/helper/helper_set.rs index f8b2e24..26af492 100644 --- a/crates/shirabe-external-packages/src/symfony/component/console/helper/helper_set.rs +++ b/crates/shirabe-external-packages/src/symfony/component/console/helper/helper_set.rs @@ -8,7 +8,7 @@ impl HelperSet { todo!() } - pub fn get(&self, _name: &str) -> Option<PhpMixed> { + pub fn get(&self, _name: &str) -> PhpMixed { todo!() } diff --git a/crates/shirabe-external-packages/src/symfony/component/console/helper/progress_bar.rs b/crates/shirabe-external-packages/src/symfony/component/console/helper/progress_bar.rs index 64835bb..b3aefef 100644 --- a/crates/shirabe-external-packages/src/symfony/component/console/helper/progress_bar.rs +++ b/crates/shirabe-external-packages/src/symfony/component/console/helper/progress_bar.rs @@ -31,4 +31,8 @@ impl ProgressBar { pub fn get_max_steps(&self) -> i64 { todo!() } + + pub fn set_progress(&mut self, _step: i64) { + todo!() + } } diff --git a/crates/shirabe-external-packages/src/symfony/component/console/output/console_output.rs b/crates/shirabe-external-packages/src/symfony/component/console/output/console_output.rs index 73c5c46..f9792f0 100644 --- a/crates/shirabe-external-packages/src/symfony/component/console/output/console_output.rs +++ b/crates/shirabe-external-packages/src/symfony/component/console/output/console_output.rs @@ -19,13 +19,13 @@ impl ConsoleOutput { } impl OutputInterface for ConsoleOutput { - fn write(&mut self, _messages: &str, _newline: bool, _type: i64) { + fn write(&self, _messages: &str, _newline: bool, _type: i64) { todo!() } - fn writeln(&mut self, _messages: &str, _type: i64) { + fn writeln(&self, _messages: &str, _type: i64) { todo!() } - fn set_verbosity(&mut self, _level: i64) { + fn set_verbosity(&self, _level: i64) { todo!() } fn get_verbosity(&self) -> i64 { @@ -43,13 +43,13 @@ impl OutputInterface for ConsoleOutput { fn is_debug(&self) -> bool { todo!() } - fn set_decorated(&mut self, _decorated: bool) { + fn set_decorated(&self, _decorated: bool) { todo!() } fn is_decorated(&self) -> bool { todo!() } - fn set_formatter(&mut self, _formatter: OutputFormatter) { + fn set_formatter(&self, _formatter: OutputFormatter) { todo!() } fn get_formatter(&self) -> &OutputFormatter { diff --git a/crates/shirabe-external-packages/src/symfony/component/console/output/output_interface.rs b/crates/shirabe-external-packages/src/symfony/component/console/output/output_interface.rs index 62a95bb..22a4b17 100644 --- a/crates/shirabe-external-packages/src/symfony/component/console/output/output_interface.rs +++ b/crates/shirabe-external-packages/src/symfony/component/console/output/output_interface.rs @@ -1,18 +1,30 @@ use crate::symfony::component::console::formatter::output_formatter::OutputFormatter; pub trait OutputInterface { - fn write(&mut self, messages: &str, newline: bool, r#type: i64); - fn writeln(&mut self, messages: &str, r#type: i64); - fn set_verbosity(&mut self, level: i64); + // PHP class semantics: OutputInterface methods take &self with interior mutability, + // because output objects are shared by reference across the PHP code. + fn write(&self, messages: &str, newline: bool, r#type: i64); + fn writeln(&self, messages: &str, r#type: i64); + fn set_verbosity(&self, level: i64); fn get_verbosity(&self) -> i64; fn is_quiet(&self) -> bool; fn is_verbose(&self) -> bool; fn is_very_verbose(&self) -> bool; fn is_debug(&self) -> bool; - fn set_decorated(&mut self, decorated: bool); + fn set_decorated(&self, decorated: bool); fn is_decorated(&self) -> bool; - fn set_formatter(&mut self, formatter: OutputFormatter); + fn set_formatter(&self, formatter: OutputFormatter); fn get_formatter(&self) -> &OutputFormatter; + + /// PHP: `$output instanceof ConsoleOutputInterface`. Default false; ConsoleOutput overrides. + fn is_console_output_interface(&self) -> bool { + false + } + + /// PHP: only StreamOutput exposes `getStream()`. Default panics for outputs without one. + fn get_stream(&self) -> shirabe_php_shim::PhpResource { + todo!("get_stream not available on this OutputInterface implementation") + } } pub const VERBOSITY_QUIET: i64 = 16; diff --git a/crates/shirabe-external-packages/src/symfony/component/filesystem/exception/io_exception.rs b/crates/shirabe-external-packages/src/symfony/component/filesystem/exception/io_exception.rs index 3ffcc9c..a5f2844 100644 --- a/crates/shirabe-external-packages/src/symfony/component/filesystem/exception/io_exception.rs +++ b/crates/shirabe-external-packages/src/symfony/component/filesystem/exception/io_exception.rs @@ -5,6 +5,21 @@ pub struct IOException { pub path: Option<String>, } +impl IOException { + pub fn new( + message: String, + code: i64, + _previous: Option<Box<dyn std::error::Error + Send + Sync>>, + path: Option<String>, + ) -> Self { + Self { + message, + code, + path, + } + } +} + impl std::fmt::Display for IOException { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.message) diff --git a/crates/shirabe-external-packages/src/symfony/component/finder/finder.rs b/crates/shirabe-external-packages/src/symfony/component/finder/finder.rs index 8437ba6..466f17e 100644 --- a/crates/shirabe-external-packages/src/symfony/component/finder/finder.rs +++ b/crates/shirabe-external-packages/src/symfony/component/finder/finder.rs @@ -1,5 +1,15 @@ use crate::symfony::component::finder::spl_file_info::SplFileInfo; +/// Helper trait so `Finder::exclude` accepts both single strings and slices +/// (PHP's variadic / array argument compatibility). +pub trait IntoFinderExclude {} +impl IntoFinderExclude for &str {} +impl IntoFinderExclude for String {} +impl IntoFinderExclude for &String {} +impl IntoFinderExclude for &[String] {} +impl IntoFinderExclude for &Vec<String> {} +impl IntoFinderExclude for Vec<String> {} + #[derive(Debug)] pub struct Finder; @@ -38,7 +48,7 @@ impl Finder { todo!() } - pub fn exclude(&mut self, _exclude: &[String]) -> &mut Self { + pub fn exclude<E: IntoFinderExclude>(&mut self, _exclude: E) -> &mut Self { todo!() } @@ -54,10 +64,21 @@ impl Finder { todo!() } + pub fn not_path(&mut self, _pattern: &str) -> &mut Self { + todo!() + } + pub fn name(&mut self, _pattern: &str) -> &mut Self { todo!() } + pub fn sort<F>(&mut self, _comparator: F) -> &mut Self + where + F: FnMut(&SplFileInfo, &SplFileInfo) -> i64, + { + todo!() + } + pub fn sort_by_name(&mut self) -> &mut Self { todo!() } @@ -78,6 +99,24 @@ impl Finder { todo!(); std::iter::empty() } + + /// PHP: Finder implements Countable. + pub fn len(&self) -> usize { + todo!() + } + + pub fn is_empty(&self) -> bool { + self.len() == 0 + } +} + +impl IntoIterator for &Finder { + type Item = SplFileInfo; + type IntoIter = std::vec::IntoIter<SplFileInfo>; + + fn into_iter(self) -> Self::IntoIter { + todo!() + } } #[derive(Debug)] diff --git a/crates/shirabe-external-packages/src/symfony/component/process/process.rs b/crates/shirabe-external-packages/src/symfony/component/process/process.rs index d0cc249..227606b 100644 --- a/crates/shirabe-external-packages/src/symfony/component/process/process.rs +++ b/crates/shirabe-external-packages/src/symfony/component/process/process.rs @@ -109,4 +109,8 @@ impl Process { pub fn set_working_directory(&mut self, _cwd: &str) -> &mut Self { todo!() } + + pub fn set_tty(&mut self, _tty: bool) -> anyhow::Result<&mut Self> { + todo!() + } } diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs b/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs index f8b2e24..26af492 100644 --- a/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs +++ b/crates/shirabe-external-packages/src/symfony/console/helper/helper_set.rs @@ -8,7 +8,7 @@ impl HelperSet { todo!() } - pub fn get(&self, _name: &str) -> Option<PhpMixed> { + pub fn get(&self, _name: &str) -> PhpMixed { todo!() } diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/table.rs b/crates/shirabe-external-packages/src/symfony/console/helper/table.rs index f5e7e0c..aeb01d8 100644 --- a/crates/shirabe-external-packages/src/symfony/console/helper/table.rs +++ b/crates/shirabe-external-packages/src/symfony/console/helper/table.rs @@ -1,10 +1,15 @@ +use crate::symfony::component::console::output::output_interface::OutputInterface; use shirabe_php_shim::PhpMixed; #[derive(Debug)] pub struct Table; impl Table { - pub fn new(_output: &dyn std::any::Any) -> Self { + pub fn new(_output: &dyn OutputInterface) -> Self { + todo!() + } + + pub fn set_style(&mut self, _style: &str) -> &mut Self { todo!() } diff --git a/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs b/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs index 65c2026..1f2a12d 100644 --- a/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs +++ b/crates/shirabe-external-packages/src/symfony/console/output/output_interface.rs @@ -13,6 +13,16 @@ pub trait OutputInterface { fn is_decorated(&self) -> bool; fn set_formatter(&mut self, formatter: OutputFormatter); fn get_formatter(&mut self) -> &mut OutputFormatter; + + /// PHP: `$output instanceof ConsoleOutputInterface`. Default false; ConsoleOutput overrides. + fn is_console_output_interface(&self) -> bool { + false + } + + /// PHP: only StreamOutput exposes `getStream()`. Default panics for outputs without one. + fn get_stream(&self) -> shirabe_php_shim::PhpResource { + todo!("get_stream not available on this OutputInterface implementation") + } } pub const VERBOSITY_QUIET: i64 = 16; diff --git a/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs b/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs index 4269337..c3ab54e 100644 --- a/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs +++ b/crates/shirabe-external-packages/src/symfony/console/style/symfony_style.rs @@ -1,5 +1,5 @@ -use crate::symfony::console::input::input_interface::InputInterface; -use crate::symfony::console::output::output_interface::OutputInterface; +use crate::symfony::component::console::input::input_interface::InputInterface; +use crate::symfony::component::console::output::output_interface::OutputInterface; use shirabe_php_shim::PhpMixed; #[derive(Debug)] |
