diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-17 08:05:42 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-17 08:05:42 +0900 |
| commit | 79b504e55cd4c4d1da102c3a076dc2a2e1edcd65 (patch) | |
| tree | 2c12198742f289de49b9b77a2c2ad66ef417405c /crates/shirabe/src/package/version | |
| parent | 9fd6aecad27240ccedab4487f6c157914142ca47 (diff) | |
| download | php-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/package/version')
| -rw-r--r-- | crates/shirabe/src/package/version/version_bumper.rs | 6 | ||||
| -rw-r--r-- | crates/shirabe/src/package/version/version_guesser.rs | 67 |
2 files changed, 31 insertions, 42 deletions
diff --git a/crates/shirabe/src/package/version/version_bumper.rs b/crates/shirabe/src/package/version/version_bumper.rs index dbeff6a0..6911fb14 100644 --- a/crates/shirabe/src/package/version/version_bumper.rs +++ b/crates/shirabe/src/package/version/version_bumper.rs @@ -5,7 +5,7 @@ use crate::package::dumper::ArrayDumper; use crate::package::loader::ArrayLoader; use crate::package::version::VersionParser; use crate::util::Platform; -use shirabe_pcre::{CaptureKey, Preg, PregMatchesAllWithOffsets}; +use shirabe_pcre::{CaptureKey, Preg}; use shirabe_php_shim::php_regex; use shirabe_semver::Intervals; use shirabe_semver::constraint::AnyConstraint; @@ -77,8 +77,8 @@ impl VersionBumper { major = major ); - let mut matches = PregMatchesAllWithOffsets::new(); - if Preg::is_match_all_with_offsets3(&pattern, &pretty_constraint, Some(&mut matches)) { + let matches = Preg::is_match_all_with_offsets3(&pattern, &pretty_constraint); + if matches.occurrence_count() > 0 { let mut modified = pretty_constraint.clone(); let constraint_matches = matches .get(&CaptureKey::ByName("constraint".to_string())) diff --git a/crates/shirabe/src/package/version/version_guesser.rs b/crates/shirabe/src/package/version/version_guesser.rs index 4b5187f2..14fcf5f6 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, PregMatchedGroups}; +use shirabe_pcre::{CaptureKey, Preg}; 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, @@ -228,49 +228,43 @@ 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 = PregMatchedGroups::new(); - if Preg::is_match3( + if !branch.is_empty() + && let Some(m) = Preg::is_match3( php_regex!( r"{^(?:\* ) *(\(no branch\)|\(detached from \S+\)|\(HEAD detached at \S+\)|\S+) *([a-f0-9]+) .*$}" ), &branch, - Some(&mut m), - ) { - let g1 = m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default(); - let g2 = m.get(&CaptureKey::ByIndex(2)).cloned().unwrap_or_default(); - if g1 == "(no branch)" - || strpos(&g1, "(detached ") == Some(0) - || strpos(&g1, "(HEAD detached at") == Some(0) - { - version = Some(format!("dev-{}", g2)); - pretty_version = version.clone(); - is_feature_branch = true; - is_detached = true; - } else { - version = Some(self.version_parser.normalize_branch(&g1)?); - pretty_version = Some(format!("dev-{}", g1)); - is_feature_branch = self.is_feature_branch(package_config, Some(&g1)); - } - - commit = Some(g2); + ) + { + let g1 = m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default(); + let g2 = m.get(&CaptureKey::ByIndex(2)).cloned().unwrap_or_default(); + if g1 == "(no branch)" + || strpos(&g1, "(detached ") == Some(0) + || strpos(&g1, "(HEAD detached at") == Some(0) + { + version = Some(format!("dev-{}", g2)); + pretty_version = version.clone(); + is_feature_branch = true; + is_detached = true; + } else { + version = Some(self.version_parser.normalize_branch(&g1)?); + pretty_version = Some(format!("dev-{}", g1)); + is_feature_branch = self.is_feature_branch(package_config, Some(&g1)); } + + commit = Some(g2); } - if !branch.is_empty() && { - let mut tmp = PregMatchedGroups::new(); - !Preg::is_match3(php_regex!(r"{^ *.+/HEAD }"), &branch, Some(&mut tmp)) - } { - let mut m = PregMatchedGroups::new(); - if Preg::is_match3( + if !branch.is_empty() + && Preg::is_match3(php_regex!(r"{^ *.+/HEAD }"), &branch).is_none() + && let Some(m) = Preg::is_match3( php_regex!( r"{^(?:\* )? *((?:remotes/(?:origin|upstream)/)?[^\s/]+) *([a-f0-9]+) .*$}" ), &branch, - Some(&mut m), - ) { - branches.push(m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default()); - } + ) + { + branches.push(m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default()); } } @@ -756,12 +750,7 @@ impl VersionGuesser { .into()); } }; - let mut m = PregMatchedGroups::new(); - if Preg::is_match3( - php_regex!(r"{^(\d+(?:\.\d+)*)-dev$}i"), - &version, - Some(&mut m), - ) { + if let Some(m) = Preg::is_match3(php_regex!(r"{^(\d+(?:\.\d+)*)-dev$}i"), &version) { return Ok(format!( "{}.x-dev", m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default() |
