From dee7a8ad1ba80eafee746a6af2bfec578ca60d4e Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 18 Jul 2026 01:07:23 +0900 Subject: fix(require-command): avoid unsupported regex lookahead in dev-branch check The `regex` crate does not support negative lookahead, so the ported `^dev-(?!main$|master$|trunk$|latest$)` pattern panicked at runtime on any `require` invocation that reached version-selection. Replace it with equivalent hand-written string logic per docs/dev/regex-porting.md. --- crates/shirabe/src/command/require_command.rs | 21 +++++++++++++-------- .../shirabe/tests/command/require_command_test.rs | 4 ---- 2 files changed, 13 insertions(+), 12 deletions(-) (limited to 'crates/shirabe') diff --git a/crates/shirabe/src/command/require_command.rs b/crates/shirabe/src/command/require_command.rs index 219ad3d8..16bc73f0 100644 --- a/crates/shirabe/src/command/require_command.rs +++ b/crates/shirabe/src/command/require_command.rs @@ -30,7 +30,6 @@ use crate::util::Filesystem; use crate::util::PackageSorter; use crate::util::Silencer; use indexmap::IndexMap; -use shirabe_external_packages::composer::pcre::Preg; use shirabe_external_packages::seld::signal::SignalHandler; use shirabe_external_packages::symfony::console::command::command::Command; use shirabe_external_packages::symfony::console::input::InputInterface; @@ -1110,13 +1109,19 @@ impl RequireCommand { io_interface::NORMAL, ); - if Preg::is_match( - r"{^dev-(?!main$|master$|trunk$|latest$)}", - requirements - .get(package_name) - .map(|s| s.as_str()) - .unwrap_or(""), - ) { + // Regex pattern compatibility: + // PCRE `{^dev-(?!main$|master$|trunk$|latest$)}` uses a negative lookahead, + // which the `regex` crate does not support. Decomposed into hand-written logic. + let requirement_str = requirements + .get(package_name) + .map(|s| s.as_str()) + .unwrap_or(""); + if requirement_str.starts_with("dev-") + && !matches!( + &requirement_str[4..], + "main" | "master" | "trunk" | "latest" + ) + { self.get_io().warning( &format!( "Version {} looks like it may be a feature branch which is unlikely to keep working in the long run and may be in an unstable state", diff --git a/crates/shirabe/tests/command/require_command_test.rs b/crates/shirabe/tests/command/require_command_test.rs index e6186505..b132eb43 100644 --- a/crates/shirabe/tests/command/require_command_test.rs +++ b/crates/shirabe/tests/command/require_command_test.rs @@ -340,10 +340,6 @@ fn provide_inconsistent_require_keys() -> Vec<(bool, bool, &'static str)> { #[test] #[serial] -#[ignore = "the solver-pool root-package issue is fixed; now panics in shirabe_php_shim::preg \ - (\"look-around, including look-ahead and look-behind, is not supported\") because \ - the dev-branch pattern `^dev-(?!main$|master$|trunk$|latest$)` uses a lookahead the \ - `regex` crate cannot express (see docs/dev/regex-porting.md)"] fn test_inconsistent_require_keys() { for (is_dev, is_interactive, expected_warning) in provide_inconsistent_require_keys() { let current_key = if is_dev { "require" } else { "require-dev" }; -- cgit v1.3.1