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 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'crates/shirabe/src/command/require_command.rs') 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", -- cgit v1.3.1