aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-17 06:43:52 +0900
committernsfisis <nsfisis@gmail.com>2026-08-17 06:43:52 +0900
commit52a0665acbbe5bf5b8c6875118fb9cdf7952453b (patch)
tree7302b0b87f7b0d406126da734ef82c80abf64204 /crates/shirabe/src/package
parentc81e9f89d9e4388f36a4427bbaa95eced659d2ce (diff)
downloadphp-shirabe-52a0665acbbe5bf5b8c6875118fb9cdf7952453b.tar.gz
php-shirabe-52a0665acbbe5bf5b8c6875118fb9cdf7952453b.tar.zst
php-shirabe-52a0665acbbe5bf5b8c6875118fb9cdf7952453b.zip
refactor(preg): wrap the preg_* $matches maps in newtypes
The five IndexMap shapes that the preg_* functions and Preg fill in are now distinct types generated by preg_match_map!, so a matches map no longer interchanges with any other map of the same key and value type. Index<usize> is kept alongside Index<&Q> because call sites such as config_command and event_dispatcher reach for a group by its position in the map rather than by its capture key.
Diffstat (limited to 'crates/shirabe/src/package')
-rw-r--r--crates/shirabe/src/package/loader/root_package_loader.rs8
-rw-r--r--crates/shirabe/src/package/locker.rs4
-rw-r--r--crates/shirabe/src/package/package.rs2
-rw-r--r--crates/shirabe/src/package/version/version_bumper.rs5
-rw-r--r--crates/shirabe/src/package/version/version_guesser.rs10
5 files changed, 14 insertions, 15 deletions
diff --git a/crates/shirabe/src/package/loader/root_package_loader.rs b/crates/shirabe/src/package/loader/root_package_loader.rs
index 58a06ebd..bbcf294f 100644
--- a/crates/shirabe/src/package/loader/root_package_loader.rs
+++ b/crates/shirabe/src/package/loader/root_package_loader.rs
@@ -15,7 +15,7 @@ use crate::repository::RepositoryManager;
use crate::util::Platform;
use crate::util::ProcessExecutor;
use indexmap::IndexMap;
-use shirabe_pcre::{CaptureKey, Preg};
+use shirabe_pcre::{CaptureKey, Preg, PregMatchedGroups};
use shirabe_php_shim::{
PhpMixed, RuntimeException, UnexpectedValueException, php_regex, preg_split, strtolower,
};
@@ -252,7 +252,7 @@ impl RootPackageLoader {
mut aliases: Vec<IndexMap<String, String>>,
) -> Vec<IndexMap<String, String>> {
for (req_name, req_version) in requires {
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(
php_regex!(r"{(?:^|\| *|, *)([^,\s#|]+)(?:#[^ ]+)? +as +([^,\s|]+)(?:$| *\|| *,)}"),
req_version,
@@ -318,7 +318,7 @@ impl RootPackageLoader {
let mut matched = false;
for constraint in &constraints {
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(&pattern, constraint, Some(&mut m)) {
let name = strtolower(req_name);
let m1 = m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default();
@@ -365,7 +365,7 @@ impl RootPackageLoader {
) -> IndexMap<String, String> {
for (req_name, req_version) in requires {
let req_version = Preg::replace(php_regex!(r"{^([^,\s@]+) as .+$}"), "$1", req_version);
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(
php_regex!(r"{^[^,\s@]+?#([a-f0-9]+)$}"),
&req_version,
diff --git a/crates/shirabe/src/package/locker.rs b/crates/shirabe/src/package/locker.rs
index ccfb2ddf..5c99b967 100644
--- a/crates/shirabe/src/package/locker.rs
+++ b/crates/shirabe/src/package/locker.rs
@@ -24,7 +24,7 @@ use crate::repository::RootPackageRepository;
use crate::util::Git as GitUtil;
use crate::util::ProcessExecutor;
use indexmap::IndexMap;
-use shirabe_pcre::{CaptureKey, Preg};
+use shirabe_pcre::{CaptureKey, Preg, PregMatchedGroups};
use shirabe_php_shim::Catch as _;
use shirabe_php_shim::{
DATE_RFC3339, LogicException, PhpMixed, RuntimeException, array_intersect, array_keys,
@@ -844,7 +844,7 @@ impl Locker {
&mut output,
path.as_deref(),
)? {
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(
php_regex!(r"{^\s*(\d+)\s*}"),
output.as_string().unwrap_or(""),
diff --git a/crates/shirabe/src/package/package.rs b/crates/shirabe/src/package/package.rs
index 4e35ee55..2054d396 100644
--- a/crates/shirabe/src/package/package.rs
+++ b/crates/shirabe/src/package/package.rs
@@ -433,7 +433,7 @@ impl Package {
// dist URL never carries more than one SHA reference.
self.set_dist_url(Some(Preg::replace_callback(
php_regex!("{(/|sha=)[a-f0-9]{40}(/|$)}i"),
- |m: &indexmap::IndexMap<shirabe_pcre::CaptureKey, String>| -> String {
+ |m: &shirabe_pcre::PregMatchedGroups| -> String {
let get = |i: usize| -> String {
m.get(&shirabe_pcre::CaptureKey::ByIndex(i))
.cloned()
diff --git a/crates/shirabe/src/package/version/version_bumper.rs b/crates/shirabe/src/package/version/version_bumper.rs
index 83df211a..dbeff6a0 100644
--- a/crates/shirabe/src/package/version/version_bumper.rs
+++ b/crates/shirabe/src/package/version/version_bumper.rs
@@ -5,8 +5,7 @@ use crate::package::dumper::ArrayDumper;
use crate::package::loader::ArrayLoader;
use crate::package::version::VersionParser;
use crate::util::Platform;
-use indexmap::IndexMap;
-use shirabe_pcre::{CaptureKey, Preg};
+use shirabe_pcre::{CaptureKey, Preg, PregMatchesAllWithOffsets};
use shirabe_php_shim::php_regex;
use shirabe_semver::Intervals;
use shirabe_semver::constraint::AnyConstraint;
@@ -78,7 +77,7 @@ impl VersionBumper {
major = major
);
- let mut matches: IndexMap<CaptureKey, Vec<(Option<String>, i64)>> = IndexMap::new();
+ let mut matches = PregMatchesAllWithOffsets::new();
if Preg::is_match_all_with_offsets3(&pattern, &pretty_constraint, Some(&mut matches)) {
let mut modified = pretty_constraint.clone();
let constraint_matches = matches
diff --git a/crates/shirabe/src/package/version/version_guesser.rs b/crates/shirabe/src/package/version/version_guesser.rs
index 2fde58fb..4f46919e 100644
--- a/crates/shirabe/src/package/version/version_guesser.rs
+++ b/crates/shirabe/src/package/version/version_guesser.rs
@@ -12,7 +12,7 @@ use crate::util::ProcessExecutor;
use crate::util::Svn as SvnUtil;
use crate::util::sync_executor;
use indexmap::IndexMap;
-use shirabe_pcre::{CaptureKey, Preg};
+use shirabe_pcre::{CaptureKey, Preg, PregMatchedGroups};
use shirabe_php_shim::{
PhpMixed, RuntimeException, array_keys, array_map, array_merge, empty, function_exists,
implode, is_string, json_encode, php_regex, preg_quote, str_replace, strlen, strnatcasecmp,
@@ -229,7 +229,7 @@ impl VersionGuesser {
// find current branch and collect all branch names
for branch in self.process.borrow().split_lines(&output) {
if !branch.is_empty() {
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(
php_regex!(
r"{^(?:\* ) *(\(no branch\)|\(detached from \S+\)|\(HEAD detached at \S+\)|\S+) *([a-f0-9]+) .*$}"
@@ -258,10 +258,10 @@ impl VersionGuesser {
}
if !branch.is_empty() && {
- let mut tmp: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut tmp = PregMatchedGroups::new();
!Preg::is_match3(php_regex!(r"{^ *.+/HEAD }"), &branch, Some(&mut tmp))
} {
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(
php_regex!(
r"{^(?:\* )? *((?:remotes/(?:origin|upstream)/)?[^\s/]+) *([a-f0-9]+) .*$}"
@@ -756,7 +756,7 @@ impl VersionGuesser {
.into());
}
};
- let mut m: IndexMap<CaptureKey, String> = IndexMap::new();
+ let mut m = PregMatchedGroups::new();
if Preg::is_match3(
php_regex!(r"{^(\d+(?:\.\d+)*)-dev$}i"),
&version,