aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-07-18 01:07:23 +0900
committernsfisis <nsfisis@gmail.com>2026-07-18 01:07:23 +0900
commitdee7a8ad1ba80eafee746a6af2bfec578ca60d4e (patch)
tree56d6feedff136712c1203bfd00f12b01644052f5 /crates/shirabe
parentd1960a8b7488dffe161080714447120fa6f85db1 (diff)
downloadphp-shirabe-dee7a8ad1ba80eafee746a6af2bfec578ca60d4e.tar.gz
php-shirabe-dee7a8ad1ba80eafee746a6af2bfec578ca60d4e.tar.zst
php-shirabe-dee7a8ad1ba80eafee746a6af2bfec578ca60d4e.zip
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.
Diffstat (limited to 'crates/shirabe')
-rw-r--r--crates/shirabe/src/command/require_command.rs21
-rw-r--r--crates/shirabe/tests/command/require_command_test.rs4
2 files changed, 13 insertions, 12 deletions
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" };