From 561924db750cbb4e4c183f9616472ed9a5b0fc7f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 12 Aug 2026 00:19:10 +0900 Subject: docs(todo): retag TODO markers by root cause Co-Authored-By: Claude Opus 5 (1M context) --- crates/shirabe/src/advisory/audit_config.rs | 2 +- crates/shirabe/src/command/diagnose_command.rs | 2 +- crates/shirabe/src/command/script_alias_command.rs | 6 ++--- crates/shirabe/src/command/search_command.rs | 2 +- crates/shirabe/src/composer.rs | 2 +- crates/shirabe/src/console/application.rs | 4 ++-- .../src/event_dispatcher/event_dispatcher.rs | 2 +- crates/shirabe/src/factory.rs | 2 +- .../shirabe/src/installer/installation_manager.rs | 4 ++-- crates/shirabe/src/io/console_io.rs | 4 ++-- crates/shirabe/src/json/json_file.rs | 4 ++-- crates/shirabe/src/main.rs | 2 +- crates/shirabe/src/plugin/php_plugin_proxy.rs | 14 ++++++------ crates/shirabe/src/plugin/plugin_manager.rs | 2 +- .../shirabe/src/repository/composer_repository.rs | 4 ++-- .../shirabe/src/repository/platform_repository.rs | 2 +- crates/shirabe/src/repository/vcs_repository.rs | 2 +- crates/shirabe/src/signal.rs | 2 +- crates/shirabe/src/util/filesystem.rs | 4 ++-- crates/shirabe/src/util/http/curl_downloader.rs | 10 ++++----- crates/shirabe/src/util/http_downloader.rs | 2 +- crates/shirabe/src/util/loop.rs | 4 ++-- crates/shirabe/src/util/process_executor.rs | 2 +- crates/shirabe/src/util/remote_filesystem.rs | 10 ++++----- crates/shirabe/src/util/sync_executor.rs | 2 +- crates/shirabe/tests/all_functional_test.rs | 2 +- .../tests/autoload/autoload_generator_test.rs | 6 ++--- crates/shirabe/tests/autoload/class_loader_test.rs | 2 +- .../tests/command/run_script_command_test.rs | 2 +- crates/shirabe/tests/command/show_command_test.rs | 2 +- crates/shirabe/tests/common/bootstrap.rs | 4 ++-- .../tests/downloader/file_downloader_test.rs | 4 ++-- crates/shirabe/tests/installed_versions_test.rs | 26 +++++++++++----------- .../tests/installer/installation_manager_test.rs | 2 +- crates/shirabe/tests/installer_test.rs | 6 ++--- crates/shirabe/tests/io/console_io_test.rs | 4 ++-- .../tests/package/dumper/array_dumper_test.rs | 2 +- .../shirabe/tests/plugin/e2e_package_event_test.rs | 2 +- .../tests/repository/filesystem_repository_test.rs | 2 +- .../tests/repository/platform_repository_test.rs | 2 +- crates/shirabe/tests/util/auth_helper_test.rs | 4 ++-- crates/shirabe/tests/util/error_handler_test.rs | 6 ++--- crates/shirabe/tests/util/process_executor_test.rs | 4 ++-- .../shirabe/tests/util/remote_filesystem_test.rs | 10 ++++----- .../tests/util/stream_context_factory_test.rs | 4 ++-- crates/shirabe/tests/util/zip_test.rs | 2 +- 46 files changed, 97 insertions(+), 97 deletions(-) (limited to 'crates/shirabe') diff --git a/crates/shirabe/src/advisory/audit_config.rs b/crates/shirabe/src/advisory/audit_config.rs index fc1cbedb..2d01a4a9 100644 --- a/crates/shirabe/src/advisory/audit_config.rs +++ b/crates/shirabe/src/advisory/audit_config.rs @@ -83,7 +83,7 @@ impl AuditConfig { for (key, value) in entries { let (id, apply, reason) = match value { PhpMixed::String(reason_str) => { - // TODO(phase-e): PHP's `array` type must be modeled more precisely. This is + // TODO(type-model): PHP's `array` type must be modeled more precisely. This is // escape hatch. if canonical_int_key(key).is_some() { (reason_str.clone(), "all".to_string(), None) diff --git a/crates/shirabe/src/command/diagnose_command.rs b/crates/shirabe/src/command/diagnose_command.rs index dc5d7399..6b339c69 100644 --- a/crates/shirabe/src/command/diagnose_command.rs +++ b/crates/shirabe/src/command/diagnose_command.rs @@ -599,7 +599,7 @@ impl DiagnoseCommand { None, )?; if !installed_json.exists() { - // TODO(phase-c): the native binary never ships vendor/composer/installed.json, so + // TODO(distribution): the native binary never ships vendor/composer/installed.json, so // Composer's "non-standard Composer installation" warning would fire on every run. // A Composer source snapshot is planned to be embedded together with the plugin API // implementation, which will make this self-audit functional; until then report diff --git a/crates/shirabe/src/command/script_alias_command.rs b/crates/shirabe/src/command/script_alias_command.rs index e4418b53..b10e1671 100644 --- a/crates/shirabe/src/command/script_alias_command.rs +++ b/crates/shirabe/src/command/script_alias_command.rs @@ -46,7 +46,7 @@ impl ScriptAliasCommand { // PHP also calls parent::__construct() (Symfony Command base) and // $this->ignoreValidationErrors(). - // TODO(phase-c): both are Symfony Command base-class operations — the constructor sets up + // TODO(symfony): both are Symfony Command base-class operations — the constructor sets up // the command's name/definition/application state and ignoreValidationErrors() flips a flag // on it. Composer's BaseCommand carries no such Symfony Command state yet (the Symfony // Command base is an intentional todo!() stub), so there is nothing to initialize here. @@ -118,7 +118,7 @@ impl Command for ScriptAliasCommand { let args = input.borrow().get_arguments(); - // TODO(phase-c): InputInterface has_to_string/get_class_name not modeled in Rust + // TODO(symfony): InputInterface has_to_string/get_class_name not modeled in Rust // TODO remove for Symfony 6+ as it is then in the interface if false { return Err(LogicException::new( @@ -136,7 +136,7 @@ impl Command for ScriptAliasCommand { Platform::put_env("COMPOSER_DEV_MODE", if dev_mode { "1" } else { "0" }); - // TODO(phase-c): InputInterface lacks to_string; use a placeholder until it is modeled. + // TODO(symfony): InputInterface lacks to_string; use a placeholder until it is modeled. let input_as_string = String::new(); let _ = input; let script_alias_input = Preg::replace4(php_regex!(r"{^\S+ ?}"), "", &input_as_string, 1); diff --git a/crates/shirabe/src/command/search_command.rs b/crates/shirabe/src/command/search_command.rs index 72a883f1..e66c574b 100644 --- a/crates/shirabe/src/command/search_command.rs +++ b/crates/shirabe/src/command/search_command.rs @@ -260,7 +260,7 @@ impl Command for SearchCommand { } } } else if format == "json" { - // TODO(phase-c): faithful JSON output requires SearchResult to retain the raw result + // TODO(type-model): faithful JSON output requires SearchResult to retain the raw result // array. PHP's fulltext search passes through arbitrary API fields (downloads, favers, // repository, ...) which the typed SearchResult (name/description/abandoned/url) drops, // so ComposerRepository-sourced results still diverge from Composer's raw JSON output. diff --git a/crates/shirabe/src/composer.rs b/crates/shirabe/src/composer.rs index 2bf59d8b..e714f85d 100644 --- a/crates/shirabe/src/composer.rs +++ b/crates/shirabe/src/composer.rs @@ -14,7 +14,7 @@ use crate::util::r#loop::Loop; use shirabe_pcre::Preg; use shirabe_php_shim::php_regex; -// TODO(phase-c): change this information to Shirabe version. +// TODO(distribution): change this information to Shirabe version. pub const VERSION: &str = "2.9.7"; pub const BRANCH_ALIAS_VERSION: &str = ""; pub const RELEASE_DATE: &str = "2026-04-14 13:31:52"; diff --git a/crates/shirabe/src/console/application.rs b/crates/shirabe/src/console/application.rs index fa9f7edd..56947243 100644 --- a/crates/shirabe/src/console/application.rs +++ b/crates/shirabe/src/console/application.rs @@ -1345,7 +1345,7 @@ impl Application { // PHP rewrites `@anonymous\0` markers via class_exists/get_parent_class/class_implements. // Rust error messages never carry PHP's anonymous-class marker and those reflection // primitives have no Rust equivalent, so the branch is unreachable here. - // TODO(phase-c): port the @anonymous rewrite if it ever becomes relevant. + // TODO(port): port the @anonymous rewrite if it ever becomes relevant. let width = if self.terminal.get_width() != 0 { self.terminal.get_width() - 1 @@ -1371,7 +1371,7 @@ impl Application { if !throwable_is_exception_interface(e) || output_interface::VERBOSITY_VERBOSE <= verbosity { - // TODO(phase-c): anyhow::Error carries no PHP file/line, so getFile()/getLine() take + // TODO(error-model): anyhow::Error carries no PHP file/line, so getFile()/getLine() take // the 'n/a' fallback PHP itself uses when they are unavailable. The real source // location cannot be reproduced (it would be a Rust path, not Composer's PHP path). messages.push(format!( diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs index d9ec9306..368e2227 100644 --- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs +++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs @@ -346,7 +346,7 @@ impl EventDispatcher { // other newly appeared prepended autoloaders should be appended instead to ensure Composer loads its classes first // PHP: spl_autoload_unregister($cb); spl_autoload_register($cb, true, $prepend); // TODO(plugin): ClassLoader detection via instanceof — currently treat all callbacks uniformly - // TODO(phase-c): `cb` is a PhpMixed holding a callable; spl_autoload_register/unregister + // TODO(php-runtime): `cb` is a PhpMixed holding a callable; spl_autoload_register/unregister // (php-shims that stay todo!()) need a typed Box PhpMixed> callback. // Bridging requires the callable model to expose the underlying closure from PhpMixed. let _ = &cb; diff --git a/crates/shirabe/src/factory.rs b/crates/shirabe/src/factory.rs index 926ca380..4fe248c5 100644 --- a/crates/shirabe/src/factory.rs +++ b/crates/shirabe/src/factory.rs @@ -878,7 +878,7 @@ impl Factory { // once everything is initialized we can // purge packages from local repos if they have been deleted on the filesystem // PHP: $this->purgePackages($rm->getLocalRepository(), $im); - // TODO(phase-c): purge_packages' removal body (repo.removePackage for packages + // TODO(port): purge_packages' removal body (repo.removePackage for packages // deleted on the filesystem) is still a stub; wire this call once implemented. // self.purge_packages(&InstalledRepositoryInterfaceHandle::from_repository_handle(&rm.get_local_repository()), &mut im)?; } diff --git a/crates/shirabe/src/installer/installation_manager.rs b/crates/shirabe/src/installer/installation_manager.rs index 8c26bdbc..2d21fb54 100644 --- a/crates/shirabe/src/installer/installation_manager.rs +++ b/crates/shirabe/src/installer/installation_manager.rs @@ -839,7 +839,7 @@ impl InstallationManager { return; } - // TODO(phase-c): PHP collects every http_downloader.add() promise and runs them via + // TODO(async): PHP collects every http_downloader.add() promise and runs them via // Loop::wait; the single-threaded sync bridge block_on's each notification serially instead. let result: anyhow::Result<()> = (|| -> anyhow::Result<()> { for (repo_url, packages) in self.notifiable_packages.borrow().iter() { @@ -966,7 +966,7 @@ impl InstallationManager { /// PHP: waitOnPromises() creates a ProgressBar up front and Loop::wait advances it while the /// concurrent promises resolve. - /// TODO(phase-c): Loop::wait has no active-job counter to feed the bar yet, so a + /// TODO(async): Loop::wait has no active-job counter to feed the bar yet, so a /// single 0% -> 100% jump is rendered after the wait instead of PHP's timing-driven /// intermediate snapshots. async fn wait_on_promises<'p>( diff --git a/crates/shirabe/src/io/console_io.rs b/crates/shirabe/src/io/console_io.rs index 060fa0c6..6e78a105 100644 --- a/crates/shirabe/src/io/console_io.rs +++ b/crates/shirabe/src/io/console_io.rs @@ -310,7 +310,7 @@ impl ConsoleIO { } /// Ensures a string is valid UTF-8, replacing invalid byte sequences with '?' - // TODO(phase-c): PHP sanitizes invalid byte sequences here, but `&str` is always valid UTF-8 + // TODO(bytes): PHP sanitizes invalid byte sequences here, but `&str` is always valid UTF-8 // so this is a no-op for now. The codebase does not yet strictly distinguish `Vec` from // `String`; once it does, this should take `&[u8]` and lossily convert it to `String`. fn ensure_valid_utf8(string: &str) -> String { @@ -438,7 +438,7 @@ impl IOInterfaceImmutable for ConsoleIO { self.ask_question(&question) } - // TODO(phase-c): ask_confirmation and ask_and_hide_answer still collapse ask_question + // TODO(error-model): ask_confirmation and ask_and_hide_answer still collapse ask_question // errors with .expect() instead of propagating them; extending Result propagation to // them is a further IOInterface signature change that has not been decided yet. fn ask_confirmation(&self, question: String, default: bool) -> bool { diff --git a/crates/shirabe/src/json/json_file.rs b/crates/shirabe/src/json/json_file.rs index 86dc0a2b..652f1d89 100644 --- a/crates/shirabe/src/json/json_file.rs +++ b/crates/shirabe/src/json/json_file.rs @@ -517,10 +517,10 @@ impl JsonFile { /// @throws ParsingException /// @return bool true on success pub(crate) fn validate_syntax(json: &str, file: Option<&str>) -> anyhow::Result { - // TODO(phase-c): make json_decode() returns an error object with details. + // TODO(php-semantics): make json_decode() returns an error object with details. let error = match serde_json::from_str::(json) { Ok(_) => { - // TODO(phase-c): Rust's &str is guaranteed as UTF-8, but PHP string is not. Change `json` + // TODO(bytes): Rust's &str is guaranteed as UTF-8, but PHP string is not. Change `json` // to &[u8] and check UTF-8 validity here. // if (defined('JSON_ERROR_UTF8') && JSON_ERROR_UTF8 === json_last_error()) { diff --git a/crates/shirabe/src/main.rs b/crates/shirabe/src/main.rs index f8b64c46..c4d9d313 100644 --- a/crates/shirabe/src/main.rs +++ b/crates/shirabe/src/main.rs @@ -42,7 +42,7 @@ fn main() { // here (rather than driving `run` via `.block_on`) just makes it ambiently available via // `Handle::try_current()` for `util::sync_executor::block_on`'s many scattered call sites, // which ride it through `tokio::task::block_in_place` instead of each spinning up (or - // busy-spin-polling without) their own. See sync_executor.rs for the TODO(phase-e) tracking + // busy-spin-polling without) their own. See sync_executor.rs for the TODO(async) tracking // the eventual goal of propagating `async fn` all the way up to here instead. let runtime = tokio::runtime::Builder::new_multi_thread() .enable_all() diff --git a/crates/shirabe/src/plugin/php_plugin_proxy.rs b/crates/shirabe/src/plugin/php_plugin_proxy.rs index 4edc76ce..9a93ef72 100644 --- a/crates/shirabe/src/plugin/php_plugin_proxy.rs +++ b/crates/shirabe/src/plugin/php_plugin_proxy.rs @@ -291,7 +291,7 @@ impl RustMethodDispatcher for PluginRpcDispatcher<'_> { if rhandle == 0 { if method_name == "__shirabe_find_file" { let class = match args.first() { - // TODO(phase-e): lossy UTF-8; class names are bytes in PHP. + // TODO(bytes): lossy UTF-8; class names are bytes in PHP. Some(PluginValue::String(bytes)) => String::from_utf8_lossy(bytes).into_owned(), other => { return Err(runtime_throw(format!( @@ -307,7 +307,7 @@ impl RustMethodDispatcher for PluginRpcDispatcher<'_> { if method_name == "__shirabe_run_rust_command" { let (name, input_line) = match (args.first(), args.get(1)) { (Some(PluginValue::String(name)), Some(PluginValue::String(line))) => ( - // TODO(phase-e): lossy UTF-8; command lines are bytes in PHP. + // TODO(bytes): lossy UTF-8; command lines are bytes in PHP. String::from_utf8_lossy(name).into_owned(), String::from_utf8_lossy(line).into_owned(), ), @@ -393,7 +393,7 @@ impl RustMethodDispatcher for PluginRpcDispatcher<'_> { /// ends up holding a second, unconnected instance of a Composer service. pub(crate) fn construct_entity(args: &[PluginValue]) -> Result { let (class, ctor_args) = match (args.first(), args.get(1)) { - // TODO(phase-e): lossy UTF-8; class names are bytes in PHP. + // TODO(bytes): lossy UTF-8; class names are bytes in PHP. (Some(PluginValue::String(class)), Some(PluginValue::List(ctor_args))) => { (String::from_utf8_lossy(class).into_owned(), ctor_args) } @@ -700,7 +700,7 @@ fn dispatch_config_method( ) -> Result { let key = |position: usize| -> Result { match args.get(position) { - // TODO(phase-e): lossy UTF-8; config keys are bytes in PHP. + // TODO(bytes): lossy UTF-8; config keys are bytes in PHP. Some(PluginValue::String(bytes)) => Ok(String::from_utf8_lossy(bytes).into_owned()), other => Err(runtime_throw(format!( "{method_name} expects a string key, got {other:?}" @@ -790,7 +790,7 @@ fn dispatch_download_manager_method( ) -> Result { let string_arg = |position: usize| -> Result { match args.get(position) { - // TODO(phase-e): lossy UTF-8; paths and types are bytes in PHP. + // TODO(bytes): lossy UTF-8; paths and types are bytes in PHP. Some(PluginValue::String(bytes)) => Ok(String::from_utf8_lossy(bytes).into_owned()), other => Err(runtime_throw(format!( "{method_name} expects a string argument at position {position}, got {other:?}" @@ -2013,7 +2013,7 @@ fn decode_write_args( method_name: &str, args: &[PluginValue], ) -> Result<(Vec, bool, i64), PhpThrow> { - // TODO(phase-e): lossy UTF-8; IO messages are bytes in PHP. + // TODO(bytes): lossy UTF-8; IO messages are bytes in PHP. let messages = match args.first() { Some(PluginValue::String(bytes)) => vec![String::from_utf8_lossy(bytes).into_owned()], Some(PluginValue::List(items)) => { @@ -2289,7 +2289,7 @@ fn decode_subscribed_events( }; let mut events: IndexMap = IndexMap::new(); for (event_name, params) in entries { - // TODO(phase-e): lossy UTF-8; event and method names are bytes in PHP. + // TODO(bytes): lossy UTF-8; event and method names are bytes in PHP. let event_name = String::from_utf8_lossy(&event_name).into_owned(); let entry = match ¶ms { PluginValue::String(method) => { diff --git a/crates/shirabe/src/plugin/plugin_manager.rs b/crates/shirabe/src/plugin/plugin_manager.rs index 0667c6a9..1d8e6192 100644 --- a/crates/shirabe/src/plugin/plugin_manager.rs +++ b/crates/shirabe/src/plugin/plugin_manager.rs @@ -430,7 +430,7 @@ impl PluginManager { let path = class_loader.find_file(&class).unwrap_or_else(|| { panic!("plugin class `{class}` is already defined but has no autoloadable file") }); - // TODO(phase-e): file_get_contents is lossy UTF-8; the eval'd plugin source + // TODO(bytes): file_get_contents is lossy UTF-8; the eval'd plugin source // should be carried as bytes. let code = file_get_contents(&path) .unwrap_or_else(|| panic!("unable to read the plugin class file `{path}`")); diff --git a/crates/shirabe/src/repository/composer_repository.rs b/crates/shirabe/src/repository/composer_repository.rs index b841d5d3..6a1b16ca 100644 --- a/crates/shirabe/src/repository/composer_repository.rs +++ b/crates/shirabe/src/repository/composer_repository.rs @@ -973,7 +973,7 @@ impl ComposerRepository { // then does a single `$this->loop->wait($promises)`; mirror that here by polling all // downloads concurrently via FuturesOrdered (submission order preserved) before doing // any of the per-name response processing below. - // TODO(phase-c): the fan-out below is structurally concurrent, but each + // TODO(async): the fan-out below is structurally concurrent, but each // `start_cached_async_download` future still resolves through `HttpDownloader::add`'s // `curl_runtime()`/`sync_executor::block_on` bridge, so real I/O overlap does not happen // yet (see util/loop.rs::wait). That only changes once a single top-level Runtime @@ -1765,7 +1765,7 @@ impl ComposerRepository { // does a single `$this->loop->wait($promises)`; mirror that here by polling all downloads // concurrently via FuturesOrdered (submission order preserved) before doing any of the // per-name response processing below. - // TODO(phase-c): the fan-out below is structurally concurrent, but each + // TODO(async): the fan-out below is structurally concurrent, but each // `start_cached_async_download` future still resolves through `HttpDownloader::add`'s // `curl_runtime()`/`sync_executor::block_on` bridge, so real I/O overlap does not happen yet // (see util/loop.rs::wait). That only changes once a single top-level Runtime replaces those diff --git a/crates/shirabe/src/repository/platform_repository.rs b/crates/shirabe/src/repository/platform_repository.rs index feb9388f..e43892a0 100644 --- a/crates/shirabe/src/repository/platform_repository.rs +++ b/crates/shirabe/src/repository/platform_repository.rs @@ -1594,7 +1594,7 @@ impl PlatformRepository { )); let mut extra: IndexMap = IndexMap::new(); extra.insert("config.platform".to_string(), PhpMixed::Bool(true)); - // NOTE(phase-c): neither PackageInterface nor CompletePackageInterface exposes + // TODO(type-model): neither PackageInterface nor CompletePackageInterface exposes // setExtra (PHP defines it on BasePackage), and the handle API does not surface // it. Disabled packages are always plain CompletePackage objects, so reach the // concrete Package through the shared Rc. diff --git a/crates/shirabe/src/repository/vcs_repository.rs b/crates/shirabe/src/repository/vcs_repository.rs index e0724cd8..4da3f0ad 100644 --- a/crates/shirabe/src/repository/vcs_repository.rs +++ b/crates/shirabe/src/repository/vcs_repository.rs @@ -34,7 +34,7 @@ use shirabe_php_shim::{ }; use shirabe_semver::constraint::SimpleConstraint; -// TODO(phase-c): the driver registration should be refactored later. +// TODO(port): the driver registration should be refactored later. #[derive(Debug)] pub struct VcsRepository { pub(crate) inner: ArrayRepository, diff --git a/crates/shirabe/src/signal.rs b/crates/shirabe/src/signal.rs index a4765e59..26297cc7 100644 --- a/crates/shirabe/src/signal.rs +++ b/crates/shirabe/src/signal.rs @@ -62,7 +62,7 @@ impl Default for SignalSubscription { } impl SignalSubscription { - // TODO(phase-c): Windows delivers console control events (CTRL_C_EVENT, CTRL_BREAK_EVENT) + // TODO(windows): Windows delivers console control events (CTRL_C_EVENT, CTRL_BREAK_EVENT) // rather than signals, and they are not subscribed to here. pub fn new() -> Self { let seq = SIGNAL_SEQ.load(std::sync::atomic::Ordering::SeqCst); diff --git a/crates/shirabe/src/util/filesystem.rs b/crates/shirabe/src/util/filesystem.rs index 2db41238..6cb33385 100644 --- a/crates/shirabe/src/util/filesystem.rs +++ b/crates/shirabe/src/util/filesystem.rs @@ -118,7 +118,7 @@ impl Filesystem { /// Uses the process component if proc_open is enabled on the PHP /// installation. pub fn remove_directory(&mut self, directory: impl AsRef) -> anyhow::Result { - // TODO(phase-c): + // TODO(bytes): // This path is matched against a regex (remove_edge_cases) and passed to an // `rm -rf`/`rmdir` subprocess via the String-based ProcessExecutor, so it has to be // representable as UTF-8. @@ -487,7 +487,7 @@ impl Filesystem { return Ok(()); } - // TODO(phase-c): + // TODO(bytes): // The fallbacks below (copy_then_remove and the mv/xcopy subprocesses) operate on // path strings, so beyond this point the paths have to be representable as UTF-8. let source = source.to_str().ok_or_else(|| { diff --git a/crates/shirabe/src/util/http/curl_downloader.rs b/crates/shirabe/src/util/http/curl_downloader.rs index bd77f75e..ff59266e 100644 --- a/crates/shirabe/src/util/http/curl_downloader.rs +++ b/crates/shirabe/src/util/http/curl_downloader.rs @@ -11,7 +11,7 @@ //! is preserved. Per-request TLS/proxy/IP-resolve settings that reqwest only exposes per-Client //! are simplified to a single default Client; see the TODOs below. //! -//! TODO(phase-c): `abortRequest()` (PHP `CurlDownloader::abortRequest`, called from +//! TODO(async): `abortRequest()` (PHP `CurlDownloader::abortRequest`, called from //! `HttpDownloader.php:275` when a React\Promise consumer cancels a download) has no equivalent //! here: shirabe has never ported the Promise/canceler machinery (`HttpDownloader::STATUS_ABORTED` //! is likewise unused), and there is no job table left to cancel now that `download()` runs to @@ -76,9 +76,9 @@ impl CurlDownloader { // - cookie_store(true) ~ CURL_LOCK_DATA_COOKIE // - redirect(none) ~ CURLOPT_FOLLOWLOCATION = false (we follow manually) // The libcurl version-specific multiplexing / accept-encoding workarounds are not needed. - // TODO(phase-e): a brand-new reqwest client is created per CurlDownloader; that is acceptable here + // TODO(http): a brand-new reqwest client is created per CurlDownloader; that is acceptable here // (one HttpDownloader owns one CurlDownloader) but not pooled across them. - // TODO(phase-c): cookie sharing (CURL_LOCK_DATA_COOKIE) would need reqwest's `cookies` feature + // TODO(http): cookie sharing (CURL_LOCK_DATA_COOKIE) would need reqwest's `cookies` feature // (.cookie_store(true)); omitted as it is not required for package downloads. let client = reqwest::Client::builder() .pool_max_idle_per_host(8) @@ -493,10 +493,10 @@ impl CurlDownloader { .and_then(|v| v.as_int()) .map(|n| n as u64); - // TODO(phase-c): per-request ssl (cafile/verify_peer/local_cert) and proxy settings are reqwest + // TODO(http): per-request ssl (cafile/verify_peer/local_cert) and proxy settings are reqwest // Client-level, not request-level. They are not applied here yet; a ConnectionOptions-keyed // Client cache (as in the design sketch) is required to honor them. - // TODO(phase-c): CURLOPT_IPRESOLVE (force IPv4/IPv6) has no direct reqwest API. + // TODO(http): CURLOPT_IPRESOLVE (force IPv4/IPv6) has no direct reqwest API. let _ = attributes; let reqwest_method = diff --git a/crates/shirabe/src/util/http_downloader.rs b/crates/shirabe/src/util/http_downloader.rs index 0aa589ca..c8fb943b 100644 --- a/crates/shirabe/src/util/http_downloader.rs +++ b/crates/shirabe/src/util/http_downloader.rs @@ -475,7 +475,7 @@ impl HttpDownloader { http_map.insert("follow_location".to_string(), PhpMixed::Bool(false)); http_map.insert("ignore_errors".to_string(), PhpMixed::Bool(true)); ctx_options.insert("http".to_string(), PhpMixed::Array(http_map)); - // TODO(phase-c): file_get_contents only takes a path; the stream context arg is dropped + // TODO(http): file_get_contents only takes a path; the stream context arg is dropped // until the PHP stream-context layer is modeled. let _ = stream_context_create(&ctx_options, None); let test_connectivity = file_get_contents("https://8.8.8.8"); diff --git a/crates/shirabe/src/util/loop.rs b/crates/shirabe/src/util/loop.rs index 5d2845c1..dccf5325 100644 --- a/crates/shirabe/src/util/loop.rs +++ b/crates/shirabe/src/util/loop.rs @@ -49,7 +49,7 @@ impl Loop { let mut pending: FuturesUnordered<_> = promises.into_iter().collect(); let mut uncaught: Option = None; - // TODO(phase-c): promises are now polled concurrently via FuturesUnordered, but + // TODO(async): promises are now polled concurrently via FuturesUnordered, but // each individual future (HttpDownloader::add/add_copy etc.) still resolves through a // blocking bridge (curl_runtime()/sync_executor::block_on), so real I/O overlap does not // happen yet — the bridged future fully blocks the thread until it settles before the next @@ -67,7 +67,7 @@ impl Loop { } pub fn abort_jobs(&self) { - // TODO(phase-c): no-op until a cancellation mechanism is introduced. PHP cancels + // TODO(async): no-op until a cancellation mechanism is introduced. PHP cancels // every in-flight promise group it tracks in $currentPromises; reintroduce that tracking // once the asynchronous workers support cancellation on a multi-thread runtime. } diff --git a/crates/shirabe/src/util/process_executor.rs b/crates/shirabe/src/util/process_executor.rs index 4808d0be..3f300317 100644 --- a/crates/shirabe/src/util/process_executor.rs +++ b/crates/shirabe/src/util/process_executor.rs @@ -161,7 +161,7 @@ impl ProcessExecutor { /// Forwards to `execute`, returning the status code (1 on Err for compatibility) — this /// mirrors PHP call sites that check the `int` return of `execute()` without a surrounding /// `try`/`catch`, where an uncaught mock-mismatch exception would otherwise propagate. - // TODO(phase-d): under a strict `ProcessExecutorMock`, an incomplete expectation list now + // TODO(mock): under a strict `ProcessExecutorMock`, an incomplete expectation list now // surfaces here as a swallowed "exit code 1" instead of the old `panic!`, so a future test // ported through this call site could silently take a wrong branch instead of failing loudly. // `ProcessExecutorMockGuard::__assert_complete` still catches unconsumed expectations at diff --git a/crates/shirabe/src/util/remote_filesystem.rs b/crates/shirabe/src/util/remote_filesystem.rs index 28edb65c..ce24e39a 100644 --- a/crates/shirabe/src/util/remote_filesystem.rs +++ b/crates/shirabe/src/util/remote_filesystem.rs @@ -315,7 +315,7 @@ impl RemoteFilesystem { let mut error_message = String::new(); let error_code = 0_i64; let mut result: Option = None; - // TODO(phase-c): PHP captures file_get_contents warnings here via set_error_handler. Rust + // TODO(http): PHP captures file_get_contents warnings here via set_error_handler. Rust // reports I/O failures through return values rather than warnings, so error_message stays // empty until get_remote_contents surfaces a read reason. let mut http_response_header: Vec = Vec::new(); @@ -617,7 +617,7 @@ impl RemoteFilesystem { .into()); } - // TODO(phase-c): PHP captures the file_put_contents warning here via set_error_handler + // TODO(php-semantics): PHP captures the file_put_contents warning here via set_error_handler // (see the get() reads above); Rust reports the failure through the return value, so // put_error_message stays empty until file_put_contents surfaces a write reason. let put_error_message = String::new(); @@ -738,7 +738,7 @@ impl RemoteFilesystem { None => file_get_contents(file_url), }) } else { - // TODO(phase-c): wrap PHP's `file_get_contents` with stream context and error capture + // TODO(http): wrap PHP's `file_get_contents` with stream context and error capture // for http(s) and other network schemes; depends on the unmodeled PHP stream-context // layer. Ok(None) @@ -764,7 +764,7 @@ impl RemoteFilesystem { *response_headers = http_get_last_response_headers().unwrap_or_default(); http_clear_last_response_headers(); } else { - // TODO(phase-c): read the magic `$http_response_header` PHP variable; depends on the + // TODO(http): read the magic `$http_response_header` PHP variable; depends on the // unmodeled PHP stream layer that populates it. *response_headers = Vec::new(); } @@ -1040,7 +1040,7 @@ impl RemoteFilesystem { let decoded = zlib_decode(result.as_deref().unwrap_or("").as_bytes()); result = match decoded { - // TODO(phase-e): byte-string semantics — the response body travels through + // TODO(bytes): byte-string semantics — the response body travels through // RemoteFilesystem as a String; from_utf8_lossy can corrupt binary payloads Some(d) => Some(String::from_utf8_lossy(&d).into_owned()), None => { diff --git a/crates/shirabe/src/util/sync_executor.rs b/crates/shirabe/src/util/sync_executor.rs index 8ba45bd2..f770c6a2 100644 --- a/crates/shirabe/src/util/sync_executor.rs +++ b/crates/shirabe/src/util/sync_executor.rs @@ -16,7 +16,7 @@ //! case — and for any other call site reached before `main.rs`'s runtime exists — `block_on` falls //! back to a disposable single-threaded runtime scoped to just that one call. //! -//! TODO(phase-e): this still leaves every one of `block_on`'s call sites synchronous rather than +//! TODO(async): this still leaves every one of `block_on`'s call sites synchronous rather than //! genuinely `async fn` propagated up to `Command::execute`, which remains the end goal of the //! async re-architecture (see the design doc). Nested `block_on` call sites (a sync fn reached //! from inside another `block_on`'s async block) do not run concurrently with their siblings — diff --git a/crates/shirabe/tests/all_functional_test.rs b/crates/shirabe/tests/all_functional_test.rs index eaf37558..a05a575a 100644 --- a/crates/shirabe/tests/all_functional_test.rs +++ b/crates/shirabe/tests/all_functional_test.rs @@ -246,7 +246,7 @@ fn run_integration(test_filename: &str) { #[ignore = "Rust has no phar; the binary under test is built by cargo (CARGO_BIN_EXE_shirabe), so bin/compile (the phar build) has no equivalent"] fn test_build_phar() { let _guard = set_up(); - // TODO(phase-d): no phar-build equivalent in Rust; the binary under test is produced by cargo + // TODO(distribution): no phar-build equivalent in Rust; the binary under test is produced by cargo // and located via CARGO_BIN_EXE_shirabe, so there is nothing analogous to bin/compile to test. todo!() } diff --git a/crates/shirabe/tests/autoload/autoload_generator_test.rs b/crates/shirabe/tests/autoload/autoload_generator_test.rs index cd0a3e5b..e55635fc 100644 --- a/crates/shirabe/tests/autoload/autoload_generator_test.rs +++ b/crates/shirabe/tests/autoload/autoload_generator_test.rs @@ -1751,7 +1751,7 @@ fn test_exclude_from_classmap() { #[test] #[ignore = "require autoload.php + function_exists() assertions are unportable (composer_require todo!())"] fn test_files_autoload_order_by_dependencies() { - // TODO(phase-d): PHP `require autoload.php` + function_exists() assertions have no Rust + // TODO(php-runtime): PHP `require autoload.php` + function_exists() assertions have no Rust // equivalent (no runtime PHP file loading/class definition). todo!() } @@ -1924,7 +1924,7 @@ fn test_files_autoload_generation_remove_extra_entities_from_autoload_files() { #[test] #[ignore = "asserts PHP get_include_path() after require autoload.php"] fn test_include_paths_are_prepended_in_autoload_file() { - // TODO(phase-d): asserts PHP get_include_path() after `require autoload.php`; no Rust + // TODO(php-runtime): asserts PHP get_include_path() after `require autoload.php`; no Rust // equivalent for PHP's include path / runtime require. todo!() } @@ -1932,7 +1932,7 @@ fn test_include_paths_are_prepended_in_autoload_file() { #[test] #[ignore = "asserts PHP get_include_path() after require autoload.php"] fn test_include_paths_in_root_package() { - // TODO(phase-d): asserts PHP get_include_path() after `require autoload.php`; no Rust + // TODO(php-runtime): asserts PHP get_include_path() after `require autoload.php`; no Rust // equivalent for PHP's include path / runtime require. todo!() } diff --git a/crates/shirabe/tests/autoload/class_loader_test.rs b/crates/shirabe/tests/autoload/class_loader_test.rs index 998683c9..00cda87d 100644 --- a/crates/shirabe/tests/autoload/class_loader_test.rs +++ b/crates/shirabe/tests/autoload/class_loader_test.rs @@ -43,7 +43,7 @@ fn test_get_prefixes_with_no_psr0_configuration() { #[test] #[ignore = "the round trip is `unserialize(serialize($loader))`: shirabe_php_shim::serialize takes a PhpMixed (a ClassLoader cannot be turned into one) and there is no unserialize at all, so the ClassLoader under test cannot be round-tripped"] fn test_serializability() { - // TODO(phase-d): the round trip is `unserialize(serialize($loader))`. serialize() in the shim + // TODO(php-semantics): the round trip is `unserialize(serialize($loader))`. serialize() in the shim // takes a PhpMixed, which a ClassLoader cannot be converted into, and there is no unserialize // symbol to produce the second ClassLoader the assertions compare against. todo!() diff --git a/crates/shirabe/tests/command/run_script_command_test.rs b/crates/shirabe/tests/command/run_script_command_test.rs index 311091a0..6c7f45c8 100644 --- a/crates/shirabe/tests/command/run_script_command_test.rs +++ b/crates/shirabe/tests/command/run_script_command_test.rs @@ -17,7 +17,7 @@ use shirabe_php_shim::PhpMixed; harness is inexpressible; the event-side isDevMode downcast now exists \ (EventInterface::as_any), but that alone does not unblock the test."] fn test_detect_and_pass_dev_mode_to_event_and_to_dispatching() { - // TODO(phase-d): PHP mocks RunScriptCommand itself (onlyMethods incl. requireComposer -> a + // TODO(mock): PHP mocks RunScriptCommand itself (onlyMethods incl. requireComposer -> a // composer whose EventDispatcher is a hasEventListeners/dispatchScript recording mock) and // drives run() with mocked Input/Output. The Rust RunScriptCommand has no requireComposer // override seam and Input/Output are concrete types, so the mocked harness is diff --git a/crates/shirabe/tests/command/show_command_test.rs b/crates/shirabe/tests/command/show_command_test.rs index d00852dd..47eae462 100644 --- a/crates/shirabe/tests/command/show_command_test.rs +++ b/crates/shirabe/tests/command/show_command_test.rs @@ -1026,7 +1026,7 @@ fn test_self_and_package_combination() { #[ignore = "the shim date() renders in UTC only (no timezone database) while PHP's date() uses \ the system default timezone, so ShowCommand::get_relative_time misses the \"today\" \ match and prints \"this week\" whenever the local date differs from the UTC date \ - (e.g. daily 00:00-09:00 JST); see TODO(phase-c) in shirabe-php-shim datetime.rs"] + (e.g. daily 00:00-09:00 JST); see TODO(php-semantics) in shirabe-php-shim datetime.rs"] fn test_self() { let today = chrono::Local::now().format("%Y-%m-%d").to_string(); let _tear_down = init_temp_composer( diff --git a/crates/shirabe/tests/common/bootstrap.rs b/crates/shirabe/tests/common/bootstrap.rs index 8b2a8aa0..a908bff2 100644 --- a/crates/shirabe/tests/common/bootstrap.rs +++ b/crates/shirabe/tests/common/bootstrap.rs @@ -8,7 +8,7 @@ use shirabe::util::platform::Platform; /// a tty (as it isn't under `cargo test`), so interactive `ApplicationTester` runs silently no-op /// instead of consuming `set_inputs`. /// -/// TODO(phase-d): this is only wired into `get_application_tester()` (used by the `command` test +/// TODO(port): this is only wired into `get_application_tester()` (used by the `command` test /// binary) rather than into every test binary's `main.rs`, unlike PHPUnit's bootstrap which /// covers the whole suite unconditionally. Rust's libtest has no per-binary setup hook, so a true /// equivalent needs either the `ctor` crate (new dependency, user decision) or wiring a call into @@ -22,7 +22,7 @@ pub fn bootstrap() { shirabe_php_shim::date_default_timezone_set(&shirabe_php_shim::date_default_timezone_get()); // PHP: require src/bootstrap.php and refresh vendor/composer/InstalledVersions.php. - // TODO(phase-d): port remaining bootstrap processes (the src/bootstrap.php include and + // TODO(php-runtime): port remaining bootstrap processes (the src/bootstrap.php include and // the InstalledVersions refresh are PHP autoload mechanics with no Rust counterpart yet). Platform::put_env("COMPOSER_TESTS_ARE_RUNNING", "1"); diff --git a/crates/shirabe/tests/downloader/file_downloader_test.rs b/crates/shirabe/tests/downloader/file_downloader_test.rs index eac4e45e..a8f1bdf2 100644 --- a/crates/shirabe/tests/downloader/file_downloader_test.rs +++ b/crates/shirabe/tests/downloader/file_downloader_test.rs @@ -180,7 +180,7 @@ fn test_download_but_file_is_unsaved() { #[test] #[ignore = "the listener is a closure that mutates the event (setProcessedUrl), but Callable::Closure receives `&dyn EventInterface`, so it cannot; and CacheMock has no copy_to/copy_from hooks to assert the cache key on"] fn test_download_with_custom_processed_url() { - // TODO(phase-d): the PRE_FILE_DOWNLOAD listener is a closure calling + // TODO(mock): the PRE_FILE_DOWNLOAD listener is a closure calling // PreFileDownloadEvent::setProcessedUrl, but Callable::Closure is // `Fn(&dyn EventInterface)`, so a listener cannot mutate the event it receives. The Cache // half is likewise inexpressible: CacheMock carries only finder/gc overrides, with no @@ -191,7 +191,7 @@ fn test_download_with_custom_processed_url() { #[test] #[ignore = "the listener is a closure that mutates the event (setCustomCacheKey), but Callable::Closure receives `&dyn EventInterface`, so it cannot; and CacheMock has no copy_to/copy_from hooks to assert the cache key on"] fn test_download_with_custom_cache_key() { - // TODO(phase-d): the PRE_FILE_DOWNLOAD listener is a closure calling + // TODO(mock): the PRE_FILE_DOWNLOAD listener is a closure calling // PreFileDownloadEvent::setCustomCacheKey, but Callable::Closure is // `Fn(&dyn EventInterface)`, so a listener cannot mutate the event it receives. The Cache // half is likewise inexpressible: CacheMock carries only finder/gc overrides, with no diff --git a/crates/shirabe/tests/installed_versions_test.rs b/crates/shirabe/tests/installed_versions_test.rs index 724c844e..49007a81 100644 --- a/crates/shirabe/tests/installed_versions_test.rs +++ b/crates/shirabe/tests/installed_versions_test.rs @@ -7,91 +7,91 @@ #[test] #[ignore = "InstalledVersions::getInstalledPackages has no Rust counterpart"] fn test_get_installed_packages() { - // TODO(phase-d): needs InstalledVersions::get_installed_packages. + // TODO(port): needs InstalledVersions::get_installed_packages. todo!() } #[test] #[ignore = "InstalledVersions::isInstalled has no Rust counterpart"] fn test_is_installed() { - // TODO(phase-d): needs InstalledVersions::is_installed. + // TODO(port): needs InstalledVersions::is_installed. todo!() } #[test] #[ignore = "InstalledVersions::satisfies has no Rust counterpart"] fn test_satisfies() { - // TODO(phase-d): needs InstalledVersions::satisfies. + // TODO(port): needs InstalledVersions::satisfies. todo!() } #[test] #[ignore = "InstalledVersions::getVersionRanges has no Rust counterpart"] fn test_get_version_ranges() { - // TODO(phase-d): needs InstalledVersions::get_version_ranges. + // TODO(port): needs InstalledVersions::get_version_ranges. todo!() } #[test] #[ignore = "InstalledVersions::getVersion has no Rust counterpart"] fn test_get_version() { - // TODO(phase-d): needs InstalledVersions::get_version. + // TODO(port): needs InstalledVersions::get_version. todo!() } #[test] #[ignore = "InstalledVersions::getPrettyVersion has no Rust counterpart"] fn test_get_pretty_version() { - // TODO(phase-d): needs InstalledVersions::get_pretty_version. + // TODO(port): needs InstalledVersions::get_pretty_version. todo!() } #[test] #[ignore = "InstalledVersions::getVersion has no Rust counterpart"] fn test_get_version_out_of_bounds() { - // TODO(phase-d): needs InstalledVersions::get_version. + // TODO(port): needs InstalledVersions::get_version. todo!() } #[test] #[ignore = "InstalledVersions::getRootPackage has no Rust counterpart"] fn test_get_root_package() { - // TODO(phase-d): needs InstalledVersions::get_root_package. + // TODO(port): needs InstalledVersions::get_root_package. todo!() } #[test] #[ignore = "InstalledVersions::getRawData has no Rust counterpart"] fn test_get_raw_data() { - // TODO(phase-d): needs InstalledVersions::get_raw_data. + // TODO(port): needs InstalledVersions::get_raw_data. todo!() } #[test] #[ignore = "InstalledVersions::getReference has no Rust counterpart"] fn test_get_reference() { - // TODO(phase-d): needs InstalledVersions::get_reference. + // TODO(port): needs InstalledVersions::get_reference. todo!() } #[test] #[ignore = "InstalledVersions::getInstalledPackagesByType has no Rust counterpart"] fn test_get_installed_packages_by_type() { - // TODO(phase-d): needs InstalledVersions::get_installed_packages_by_type. + // TODO(port): needs InstalledVersions::get_installed_packages_by_type. todo!() } #[test] #[ignore = "InstalledVersions::getInstallPath has no Rust counterpart"] fn test_get_install_path() { - // TODO(phase-d): needs InstalledVersions::get_install_path. + // TODO(port): needs InstalledVersions::get_install_path. todo!() } #[test] #[ignore = "InstalledVersions::isInstalled and getRootPackage have no Rust counterpart"] fn test_with_class_loader_loaded() { - // TODO(phase-d): needs InstalledVersions::is_installed and + // TODO(port): needs InstalledVersions::is_installed and // InstalledVersions::get_root_package. todo!() } diff --git a/crates/shirabe/tests/installer/installation_manager_test.rs b/crates/shirabe/tests/installer/installation_manager_test.rs index c511703e..f15729c3 100644 --- a/crates/shirabe/tests/installer/installation_manager_test.rs +++ b/crates/shirabe/tests/installer/installation_manager_test.rs @@ -323,7 +323,7 @@ fn test_add_remove_installer() { #[ignore = "partial mock of InstallationManager (onlyMethods install/update/uninstall) with expects(once)->with(...) is not reproducible without method-overriding mocks; execute() also takes the batched download path"] #[test] fn test_execute() { - // TODO(phase-d): a partial mock of InstallationManager (onlyMethods install/update/uninstall) + // TODO(mock): a partial mock of InstallationManager (onlyMethods install/update/uninstall) // with expects(once)->with(...) is not reproducible without method-overriding mocks: the PHP // test runs the *real* execute() (batched download path included, via NoopInstaller) while // spying on the three per-operation methods it dispatches to. The existing diff --git a/crates/shirabe/tests/installer_test.rs b/crates/shirabe/tests/installer_test.rs index b6d19b10..5c835aff 100644 --- a/crates/shirabe/tests/installer_test.rs +++ b/crates/shirabe/tests/installer_test.rs @@ -812,8 +812,8 @@ fn evaluate_condition(condition: &str) -> bool { } // HHVM is never defined under the Rust port. "!defined('HHVM_VERSION')" => true, - // TODO(phase-d): unported CONDITION expression (PHP eval has no Rust equivalent). - other => panic!("// TODO(phase-d): unported CONDITION: {}", other), + // TODO(php-runtime): unported CONDITION expression (PHP eval has no Rust equivalent). + other => panic!("// TODO(php-runtime): unported CONDITION: {}", other), } } @@ -1305,7 +1305,7 @@ fn test_slow_integration() { let _tear_down = TearDown::new(); for case in load_integration_tests("installer-slow/") { if case.file == "github-issues-7665.test" { - // TODO(phase-d): upstream Composer defect (composer/composer#12111), not a porting + // TODO(upstream): upstream Composer defect (composer/composer#12111), not a porting // bug. Problem::getPrettyString breaks RULE_LEARNED sort ties with // getSortableString() <=> getSortableString(), which compares numerically when both // sides are numeric strings and by byte otherwise, so it is not transitive. Those diff --git a/crates/shirabe/tests/io/console_io_test.rs b/crates/shirabe/tests/io/console_io_test.rs index 3c142cfe..b0c6380d 100644 --- a/crates/shirabe/tests/io/console_io_test.rs +++ b/crates/shirabe/tests/io/console_io_test.rs @@ -138,7 +138,7 @@ fn test_write_error() { #[ignore = "ConsoleIO::write3 takes a single &str; the test feeds a 2-element array ['First line','Second lines'] and asserts a per-element regex on the debugging-prefixed messages array, which the &str signature cannot represent"] #[test] fn test_write_with_multiple_line_string_when_debugging() { - // TODO(phase-d): ConsoleIO::write3 takes a single &str; the test feeds a 2-element array + // TODO(type-model): ConsoleIO::write3 takes a single &str; the test feeds a 2-element array // ['First line','Second lines'] and asserts a per-element regex on the debugging-prefixed // messages array, which the &str signature cannot represent. todo!() @@ -294,7 +294,7 @@ fn test_has_authentication() { #[ignore = "data provider includes malformed-UTF-8 inputs (e.g. \\xFF, \\xC3\\x28); sanitize() takes PhpMixed::String which is UTF-8-only and cannot carry invalid bytes, so those cases are unrepresentable"] #[test] fn test_sanitize() { - // TODO(phase-d): the data provider includes malformed-UTF-8 inputs (e.g. \xFF, \xC3\x28); + // TODO(bytes): the data provider includes malformed-UTF-8 inputs (e.g. \xFF, \xC3\x28); // sanitize() takes PhpMixed::String which is UTF-8-only and cannot carry invalid bytes, so // those cases are unrepresentable. todo!() diff --git a/crates/shirabe/tests/package/dumper/array_dumper_test.rs b/crates/shirabe/tests/package/dumper/array_dumper_test.rs index 430900c4..781d1ec8 100644 --- a/crates/shirabe/tests/package/dumper/array_dumper_test.rs +++ b/crates/shirabe/tests/package/dumper/array_dumper_test.rs @@ -90,7 +90,7 @@ fn test_dump_abandoned_replacement() { #[test] #[ignore = "authors/scripts/funding data sets pass loosely-typed PHP arrays the narrowed Rust set_authors/set_scripts/set_funding types cannot represent, and the dumper re-wraps them; faithful all-or-nothing port blocked without loosening those production types"] fn test_keys() { - // TODO(phase-d): authors/scripts/funding data sets pass loosely-typed PHP arrays the + // TODO(type-model): authors/scripts/funding data sets pass loosely-typed PHP arrays the // narrowed Rust set_authors/set_scripts/set_funding types cannot represent, and the // dumper re-wraps them; faithful all-or-nothing port blocked without loosening those // production types. diff --git a/crates/shirabe/tests/plugin/e2e_package_event_test.rs b/crates/shirabe/tests/plugin/e2e_package_event_test.rs index ef334685..a6569105 100644 --- a/crates/shirabe/tests/plugin/e2e_package_event_test.rs +++ b/crates/shirabe/tests/plugin/e2e_package_event_test.rs @@ -86,7 +86,7 @@ post-package-install devMode=1 class=Composer\\DependencyResolver\\Operation\\In // previous one installed. Shirabe builds a lazy future per operation and only drives them in // wait_on_promises, so every pre-event of a batch sees the repository as it was before the // batch. Upstream: 1 / 1 / 2 / 3 / 3, Shirabe: 1 / 1 / 1 / 3 / 3. -#[ignore = "operation chains run where they are built upstream but only in wait_on_promises here, so the repository state a package event observes differs (TODO(phase-c) promise cluster)"] +#[ignore = "operation chains run where they are built upstream but only in wait_on_promises here, so the repository state a package event observes differs (TODO(async) promise cluster)"] #[test] fn test_local_repository_seen_by_package_events_matches_upstream_composer() { if !php_runtime_available() { diff --git a/crates/shirabe/tests/repository/filesystem_repository_test.rs b/crates/shirabe/tests/repository/filesystem_repository_test.rs index b87e1502..59901072 100644 --- a/crates/shirabe/tests/repository/filesystem_repository_test.rs +++ b/crates/shirabe/tests/repository/filesystem_repository_test.rs @@ -328,7 +328,7 @@ fn test_repository_writes_installed_php() { #[ignore = "safely_load_installed_versions's pattern uses a PCRE (?(DEFINE)...) recursive grammar the regex crate cannot compile, and InstalledVersions::getAllRawData has no Rust counterpart"] #[test] fn test_safely_load_installed_versions() { - // TODO(phase-d): needs a regex-crate expression equivalent to the PCRE recursive grammar, and + // TODO(pcre): needs a regex-crate expression equivalent to the PCRE recursive grammar, and // InstalledVersions::get_all_raw_data. todo!() } diff --git a/crates/shirabe/tests/repository/platform_repository_test.rs b/crates/shirabe/tests/repository/platform_repository_test.rs index 573f96ed..c16f3a3e 100644 --- a/crates/shirabe/tests/repository/platform_repository_test.rs +++ b/crates/shirabe/tests/repository/platform_repository_test.rs @@ -205,7 +205,7 @@ fn test_php_version() { #[test] fn test_inet_pton_regression() { // PHP: ->expects(self::once())->method('invoke')->with('inet_pton', ['::'])->willReturn(false). - // TODO(phase-d): the payload reports the result of `@inet_pton('::')` instead of answering a + // TODO(mock): the payload reports the result of `@inet_pton('::')` instead of answering a // call, so there is nothing left for the once() call-count check to observe. let functions = [( PhpMixed::String("inet_pton".to_string()), diff --git a/crates/shirabe/tests/util/auth_helper_test.rs b/crates/shirabe/tests/util/auth_helper_test.rs index 2f2feb23..102a798c 100644 --- a/crates/shirabe/tests/util/auth_helper_test.rs +++ b/crates/shirabe/tests/util/auth_helper_test.rs @@ -806,7 +806,7 @@ fn test_add_authentication_header_with_custom_headers() { #[ignore = "exercises the deprecated addAuthenticationHeader wrapper (not ported) which relies on \ trigger_error/E_USER_DEPRECATED; the PHP error-handler subsystem is not modeled"] fn test_add_authentication_header_is_working() { - // TODO(phase-d): see test_add_authentication_header_with_custom_headers above — same + // TODO(php-runtime): see test_add_authentication_header_with_custom_headers above — same // unported addAuthenticationHeader deprecated wrapper. todo!() } @@ -815,7 +815,7 @@ fn test_add_authentication_header_is_working() { #[ignore = "exercises the deprecated addAuthenticationHeader wrapper (not ported) which relies on \ trigger_error/E_USER_DEPRECATED converted to a RuntimeException via set_error_handler; not modeled"] fn test_add_authentication_header_deprecation() { - // TODO(phase-d): asserts that calling addAuthenticationHeader itself raises a + // TODO(php-runtime): asserts that calling addAuthenticationHeader itself raises a // RuntimeException via a custom set_error_handler converting E_USER_DEPRECATED; same // unported wrapper and unmodeled error-handler subsystem as the two tests above. todo!() diff --git a/crates/shirabe/tests/util/error_handler_test.rs b/crates/shirabe/tests/util/error_handler_test.rs index efaf4e11..9a34fd73 100644 --- a/crates/shirabe/tests/util/error_handler_test.rs +++ b/crates/shirabe/tests/util/error_handler_test.rs @@ -30,7 +30,7 @@ impl Drop for TearDown { #[ignore = "depends on PHP runtime routing an undefined-index notice through set_error_handler; no Rust equivalent for $array['baz'] triggering ErrorHandler::handle"] #[test] fn test_error_handler_capture_notice() { - // TODO(phase-d): depends on PHP runtime routing an undefined-index notice through + // TODO(php-runtime): depends on PHP runtime routing an undefined-index notice through // set_error_handler; no Rust equivalent for $array['baz'] triggering // ErrorHandler::handle. todo!() @@ -39,7 +39,7 @@ fn test_error_handler_capture_notice() { #[ignore = "depends on PHP runtime emitting a TypeError/warning from array_merge([], 'string') via set_error_handler; no Rust equivalent"] #[test] fn test_error_handler_capture_warning() { - // TODO(phase-d): depends on PHP runtime emitting a TypeError/warning from + // TODO(php-runtime): depends on PHP runtime emitting a TypeError/warning from // array_merge([], 'string') via set_error_handler; no Rust equivalent. todo!() } @@ -47,7 +47,7 @@ fn test_error_handler_capture_warning() { #[ignore = "depends on the PHP @ error-suppression operator and trigger_error routing through set_error_handler; no Rust equivalent"] #[test] fn test_error_handler_respects_at_operator() { - // TODO(phase-d): depends on the PHP @ error-suppression operator and trigger_error + // TODO(php-runtime): depends on the PHP @ error-suppression operator and trigger_error // routing through set_error_handler; no Rust equivalent. todo!() } diff --git a/crates/shirabe/tests/util/process_executor_test.rs b/crates/shirabe/tests/util/process_executor_test.rs index 9599775e..93e74a12 100644 --- a/crates/shirabe/tests/util/process_executor_test.rs +++ b/crates/shirabe/tests/util/process_executor_test.rs @@ -2,7 +2,7 @@ // These run real subprocesses (capturing output/stderr/timeout) and assert ProcessExecutor's // password hiding, line splitting and argument escaping. A few data points remain unportable — -// see the individual `// TODO(phase-d)` comments below. +// see the individual `// TODO(async)` comments below. use shirabe::io::ConsoleIO; use shirabe::io::IOInterface; @@ -179,7 +179,7 @@ fn test_console_io_does_not_format_symfony_console_style() { #[ignore = "none of the three symbols this test drives exist: execute_async returns a plain future with no cancel(), and ProcessExecutor has no count_active_jobs or wait (PHP's $jobs/$maxJobs queue is a tokio semaphore here)"] #[test] fn test_execute_async_cancel() { - // TODO(phase-d): PHP's executeAsync returns a React\Promise\PromiseInterface with cancel(), + // TODO(async): PHP's executeAsync returns a React\Promise\PromiseInterface with cancel(), // and the test reads countActiveJobs() around it and then calls wait(). execute_async here // returns a plain future with no cancel(), and ProcessExecutor has neither count_active_jobs // nor wait: the PHP job queue those methods expose is a tokio semaphore in this port. diff --git a/crates/shirabe/tests/util/remote_filesystem_test.rs b/crates/shirabe/tests/util/remote_filesystem_test.rs index 43f0aae0..6d21732f 100644 --- a/crates/shirabe/tests/util/remote_filesystem_test.rs +++ b/crates/shirabe/tests/util/remote_filesystem_test.rs @@ -274,10 +274,10 @@ fn test_copy() { #[test] #[ignore = "requires a MockObject subclass of RemoteFilesystem overriding private get_remote_contents; no subclass-mocking infrastructure exists"] fn test_copy_with_no_retry_on_failure() { - // TODO(phase-d): requires a MockObject subclass of RemoteFilesystem overriding the + // TODO(mock): requires a MockObject subclass of RemoteFilesystem overriding the // private get_remote_contents method. There is no subclass-mocking infrastructure in // Rust for this, and get_remote_contents's http(s) branch is itself still a - // TODO(phase-c) stub (always returns Ok(None)), so there is nothing yet to intercept + // TODO(http) stub (always returns Ok(None)), so there is nothing yet to intercept // even with a seam. todo!() } @@ -285,10 +285,10 @@ fn test_copy_with_no_retry_on_failure() { #[test] #[ignore = "requires MockObject subclasses overriding RemoteFilesystem::get_remote_contents and AuthHelper::prompt_auth_if_needed; no subclass-mocking infrastructure exists"] fn test_copy_with_success_on_retry() { - // TODO(phase-d): requires MockObject subclasses overriding + // TODO(mock): requires MockObject subclasses overriding // RemoteFilesystem::get_remote_contents and AuthHelper::prompt_auth_if_needed to // simulate a first failure and a retried success; same missing-subclass-mocking- - // infrastructure and TODO(phase-c) http(s)-stub blockers as + // infrastructure and TODO(http) http(s)-stub blockers as // test_copy_with_no_retry_on_failure above. todo!() } @@ -350,7 +350,7 @@ fn provide_bitbucket_public_download_urls() -> Vec<(&'static str, &'static str)> } #[test] -#[ignore = "performs a real network download; get_remote_contents has no stream layer (TODO(phase-c)) and returns None, so getContents raises a TransportException"] +#[ignore = "performs a real network download; get_remote_contents has no stream layer (TODO(http)) and returns None, so getContents raises a TransportException"] fn test_bit_bucket_public_download() { for (url, contents) in provide_bitbucket_public_download_urls() { let io: std::rc::Rc> = diff --git a/crates/shirabe/tests/util/stream_context_factory_test.rs b/crates/shirabe/tests/util/stream_context_factory_test.rs index f9d840cf..a2a9cb44 100644 --- a/crates/shirabe/tests/util/stream_context_factory_test.rs +++ b/crates/shirabe/tests/util/stream_context_factory_test.rs @@ -100,7 +100,7 @@ impl Drop for TearDown { } } -// TODO(phase-d): PHP's dataGetContext second data set passes a `notification` closure in both +// TODO(type-model): PHP's dataGetContext second data set passes a `notification` closure in both // the default and expected params; PhpMixed has no closure variant, so that data set (and thus // the all-or-nothing testGetContext, which a data provider test cannot partially skip) cannot be // expressed. @@ -110,7 +110,7 @@ impl Drop for TearDown { fn test_get_context() { let _tear_down = TearDown; set_up(); - // TODO(phase-d): dataGetContext's second data set passes a `notification` closure in + // TODO(type-model): dataGetContext's second data set passes a `notification` closure in // params; PhpMixed cannot represent a PHP closure, so that data set (and thus the // all-or-nothing testGetContext, which a data provider test cannot partially skip) is // unportable. diff --git a/crates/shirabe/tests/util/zip_test.rs b/crates/shirabe/tests/util/zip_test.rs index e3e976de..569ac7a2 100644 --- a/crates/shirabe/tests/util/zip_test.rs +++ b/crates/shirabe/tests/util/zip_test.rs @@ -11,7 +11,7 @@ fn fixture(name: &str) -> String { ) } -// TODO(phase-d): PHP runs this test only when the zip extension is NOT loaded (it is +// TODO(php-runtime): PHP runs this test only when the zip extension is NOT loaded (it is // markTestSkipped otherwise). The Rust port links zip support unconditionally, so the // "extension not loaded" precondition cannot exist and the expected RuntimeException // ("The Zip Util requires PHP's zip extension") is unreachable by design. -- cgit v1.3.1-4-g156e