aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-17 08:05:42 +0900
committernsfisis <nsfisis@gmail.com>2026-08-17 08:05:42 +0900
commit79b504e55cd4c4d1da102c3a076dc2a2e1edcd65 (patch)
tree2c12198742f289de49b9b77a2c2ad66ef417405c /crates/shirabe/src/dependency_resolver
parent9fd6aecad27240ccedab4487f6c157914142ca47 (diff)
downloadphp-shirabe-79b504e55cd4c4d1da102c3a076dc2a2e1edcd65.tar.gz
php-shirabe-79b504e55cd4c4d1da102c3a076dc2a2e1edcd65.tar.zst
php-shirabe-79b504e55cd4c4d1da102c3a076dc2a2e1edcd65.zip
refactor(pcre): return the Preg $matches instead of filling an out-param
`Composer\Pcre\Preg` fills `$matches` through a by-ref parameter, and the port mirrored that with a `&mut` (or `Option<&mut>`) out-param plus a bool or count return. Callers had to declare an empty map one line ahead of the call, and the type never said the map is only meaningful when the call matched. Return the matches instead: - match3/match4/is_match3/is_match4 -> Option<PregMatchedGroups> - is_match_named -> Option<PregNamedGroups> - match_all2/is_match_all -> PregMatchesAll - is_match_all_with_offsets3 -> PregMatchesAllWithOffsets Nothing is lost: the bool is `Option::is_some()`, and the occurrence count is the length of any one column of a PREG_PATTERN_ORDER map, now spelled `PregMatchesAll::occurrence_count()`. is_match() still answers the bool question directly for callers that want no groups. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver')
-rw-r--r--crates/shirabe/src/dependency_resolver/pool_builder.rs6
-rw-r--r--crates/shirabe/src/dependency_resolver/problem.rs18
2 files changed, 9 insertions, 15 deletions
diff --git a/crates/shirabe/src/dependency_resolver/pool_builder.rs b/crates/shirabe/src/dependency_resolver/pool_builder.rs
index 7dd40c4b..9e2e18ea 100644
--- a/crates/shirabe/src/dependency_resolver/pool_builder.rs
+++ b/crates/shirabe/src/dependency_resolver/pool_builder.rs
@@ -786,7 +786,7 @@ impl PoolBuilder {
fn is_update_allowed(&self, package: PackageInterfaceHandle) -> bool {
for pattern in &self.update_allow_list {
let pattern_regexp = base_package::package_name_to_regexp(pattern);
- if Preg::is_match3(&pattern_regexp, &package.get_name(), None) {
+ if Preg::is_match3(&pattern_regexp, &package.get_name()).is_some() {
return true;
}
}
@@ -813,13 +813,13 @@ impl PoolBuilder {
.borrow_mut()
.get_packages()?
{
- if Preg::is_match3(&pattern_regexp, &package.get_name(), None) {
+ if Preg::is_match3(&pattern_regexp, &package.get_name()).is_some() {
continue 'outer;
}
}
// update pattern matches a root require? => all good, probably a new package
for (package_name, _constraint) in request.get_requires() {
- if Preg::is_match3(&pattern_regexp, package_name, None) {
+ if Preg::is_match3(&pattern_regexp, package_name).is_some() {
if PlatformRepository::is_platform_package(package_name) {
matched_platform_package = true;
continue;
diff --git a/crates/shirabe/src/dependency_resolver/problem.rs b/crates/shirabe/src/dependency_resolver/problem.rs
index c75a0d31..80f0e5db 100644
--- a/crates/shirabe/src/dependency_resolver/problem.rs
+++ b/crates/shirabe/src/dependency_resolver/problem.rs
@@ -10,7 +10,7 @@ use crate::repository::LockArrayRepository;
use crate::repository::PlatformRepository;
use crate::repository::RepositorySet;
use indexmap::IndexMap;
-use shirabe_pcre::{CaptureKey, Preg, PregMatchedGroups};
+use shirabe_pcre::{CaptureKey, Preg};
use shirabe_php_shim::{
CmpOp, LogicException, PhpMixed, extension_loaded, implode, loosely_compare, php_regex,
spl_object_hash, sprintf, str_replace, stripos, strpos, strtolower, substr, substr_count,
@@ -220,7 +220,6 @@ impl Problem {
installed_map,
learned_pool,
)?;
- let mut m = PregMatchedGroups::new();
let matched = if matches!(
rule_ref.get_reason(),
rule::RULE_PACKAGE_REQUIRES | rule::RULE_PACKAGE_CONFLICT
@@ -230,12 +229,11 @@ impl Problem {
r"{^(?P<package>\S+) (?P<version>\S+) (?P<type>requires|conflicts)}"
),
&message,
- Some(&mut m),
)
} else {
- false
+ None
};
- if matched {
+ if let Some(m) = matched {
message = str_replace("%", "%%", &message);
let template = Preg::replace(php_regex!(r"{^\S+ \S+ }"), "%s%s ", &message);
messages.push(template.clone());
@@ -559,7 +557,7 @@ impl Problem {
if let Some(c) = constraint
&& c.is_constraint()
&& c.get_operator() == Some(CmpOp::Eq)
- && Preg::is_match3(php_regex!(r"{^dev-.*#.*}"), &c.get_pretty_string(), None)
+ && Preg::is_match3(php_regex!(r"{^dev-.*#.*}"), &c.get_pretty_string()).is_some()
{
let new_constraint = Preg::replace(
php_regex!(r"{ +as +([^,\s|]+)$}"),
@@ -993,7 +991,7 @@ impl Problem {
));
}
- if !Preg::is_match3(php_regex!(r"{^[A-Za-z0-9_./-]+$}"), package_name, None) {
+ if Preg::is_match3(php_regex!(r"{^[A-Za-z0-9_./-]+$}"), package_name).is_none() {
let illegal_chars = Preg::replace(php_regex!(r"{[A-Za-z0-9_./-]+}"), "", package_name);
return Ok((
@@ -1383,11 +1381,7 @@ impl Problem {
&& c.get_operator() == Some(CmpOp::Eq)
&& !c.get_version().starts_with("dev-")
{
- if !Preg::is_match3(
- php_regex!(r"{^\d+(?:\.\d+)*$}"),
- &c.get_pretty_string(),
- None,
- ) {
+ if Preg::is_match3(php_regex!(r"{^\d+(?:\.\d+)*$}"), &c.get_pretty_string()).is_none() {
return format!(" {} (exact version match)", c.get_pretty_string());
}