diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-18 01:57:02 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-18 01:57:02 +0900 |
| commit | 0caac63bacefb9a1f62848636d47fca07f592bba (patch) | |
| tree | 8d2ef66e597a8d8c228d3ba2490a59f48b26db4d /crates/shirabe/src/repository/vcs/github_driver.rs | |
| parent | 34c74255d781ad0a0bf7cc5ad4ec1761bef61e04 (diff) | |
| download | php-shirabe-0caac63bacefb9a1f62848636d47fca07f592bba.tar.gz php-shirabe-0caac63bacefb9a1f62848636d47fca07f592bba.tar.zst php-shirabe-0caac63bacefb9a1f62848636d47fca07f592bba.zip | |
refactor(preg): split PregMatches reads into get() and name()
PregMatches keyed both forms of a capture group through CaptureKey, so
every read built one: a usize wrapped in an enum, or worse, a String
allocated to name a group that regex::Captures can look up from a &str.
It now mirrors regex::Captures instead -- get() takes the group number,
name() the group name -- and the enum drops out of the type entirely.
That is 285 call sites across 59 files, and the named ones carry most of
the win: `matches.get(&CaptureKey::ByName("host".to_string()))` reads as
`matches.name("host")`. ProcessExecutor loses a `user_key` binding that
existed only to build the key once.
CaptureKey stays as the key type of PregMatchesAll and
PregMatchesAllWithOffsets, where numbered and named entries share one
IndexMap and a key type is the point. Five files still name it.
Also retargets the two preg_match_all comments that described the
occurrence count through `matches[&CaptureKey::ByIndex(0)].len()`, an
Index impl these types no longer carry.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository/vcs/github_driver.rs')
| -rw-r--r-- | crates/shirabe/src/repository/vcs/github_driver.rs | 67 |
1 files changed, 14 insertions, 53 deletions
diff --git a/crates/shirabe/src/repository/vcs/github_driver.rs b/crates/shirabe/src/repository/vcs/github_driver.rs index 08561171..11bb9503 100644 --- a/crates/shirabe/src/repository/vcs/github_driver.rs +++ b/crates/shirabe/src/repository/vcs/github_driver.rs @@ -14,7 +14,7 @@ use crate::util::GitHub; use crate::util::http::Response; use chrono::{DateTime, FixedOffset}; use indexmap::IndexMap; -use shirabe_pcre::{CaptureKey, Preg}; +use shirabe_pcre::Preg; use shirabe_php_shim::Catch as _; use shirabe_php_shim::{ InvalidArgumentException, PhpMixed, RuntimeException, array_diff, array_map, @@ -83,25 +83,14 @@ impl GitHubDriver { .into()); }; - self.owner = match_ - .get(&CaptureKey::ByIndex(3)) - .unwrap_or_default() - .to_string(); - self.repository = match_ - .get(&CaptureKey::ByIndex(4)) - .unwrap_or_default() - .to_string(); + self.owner = match_.get(3).unwrap_or_default().to_string(); + self.repository = match_.get(4).unwrap_or_default().to_string(); self.inner.origin_url = strtolower( &match_ - .get(&CaptureKey::ByIndex(1)) + .get(1) .filter(|s| !s.is_empty()) .map(str::to_string) - .unwrap_or_else(|| { - match_ - .get(&CaptureKey::ByIndex(2)) - .unwrap_or_default() - .to_string() - }), + .unwrap_or_else(|| match_.get(2).unwrap_or_default().to_string()), ); if self.inner.origin_url == "www.github.com" { self.inner.origin_url = "github.com".to_string(); @@ -494,23 +483,14 @@ impl GitHubDriver { for line in preg_split(php_regex!(r"{\r?\n}"), &funding) { let line = trim(&line, None); if let Some(m) = Preg::is_match3(php_regex!(r"{^(\w+)\s*:\s*(.+)$}"), &line) { - let g1 = m - .get(&CaptureKey::ByIndex(1)) - .unwrap_or_default() - .to_string(); - let g2 = m - .get(&CaptureKey::ByIndex(2)) - .unwrap_or_default() - .to_string(); + let g1 = m.get(1).unwrap_or_default().to_string(); + let g2 = m.get(2).unwrap_or_default().to_string(); if g2 == "[" { key = Some(g1); continue; } if let Some(m2) = Preg::is_match3(php_regex!(r"{^\[(.*?)\](?:\s*#.*)?$}"), &g2) { - let inner = m2 - .get(&CaptureKey::ByIndex(1)) - .unwrap_or_default() - .to_string(); + let inner = m2.get(1).unwrap_or_default().to_string(); for item in array_map( |s: &String| trim(s, None), &preg_split(php_regex!(r#"{[\'\"]?\s*,\s*[\'\"]?}"#), &inner), @@ -530,20 +510,13 @@ impl GitHubDriver { entry.insert("type".to_string(), PhpMixed::String(g1.clone())); entry.insert( "url".to_string(), - PhpMixed::String(trim( - m2.get(&CaptureKey::ByIndex(1)).unwrap_or_default(), - Some("\"' "), - )), + PhpMixed::String(trim(m2.get(1).unwrap_or_default(), Some("\"' "))), ); result.push(entry); } key = None; } else if let Some(m) = Preg::is_match3(php_regex!(r"{^(\w+)\s*:\s*#\s*$}"), &line) { - key = Some( - m.get(&CaptureKey::ByIndex(1)) - .unwrap_or_default() - .to_string(), - ); + key = Some(m.get(1).unwrap_or_default().to_string()); } else if key.is_some() && let Some(m) = Preg::is_match3(php_regex!(r"{^-\s*(.+)(?:\s+#.*)?$}"), &line) .or_else(|| Preg::is_match3(php_regex!(r"{^(.+),(?:\s*#.*)?$}"), &line)) @@ -555,10 +528,7 @@ impl GitHubDriver { ); entry.insert( "url".to_string(), - PhpMixed::String(trim( - m.get(&CaptureKey::ByIndex(1)).unwrap_or_default(), - Some("\"' "), - )), + PhpMixed::String(trim(m.get(1).unwrap_or_default(), Some("\"' "))), ); result.push(entry); } else if key.is_some() && line == "]" { @@ -948,15 +918,10 @@ impl GitHubDriver { }; let origin_url = matches - .get(&CaptureKey::ByIndex(2)) + .get(2) .filter(|s| !s.is_empty()) .map(str::to_string) - .unwrap_or_else(|| { - matches - .get(&CaptureKey::ByIndex(3)) - .unwrap_or_default() - .to_string() - }); + .unwrap_or_else(|| matches.get(3).unwrap_or_default().to_string()); if !in_array_loose( strtolower(&Preg::replace(php_regex!(r"{^www\.}i"), "", &origin_url)), config.borrow().get("github-domains").values(), @@ -1285,11 +1250,7 @@ impl GitHubDriver { let links = explode(",", &header); for link in &links { if let Some(m) = Preg::is_match3(php_regex!(r#"{<(.+?)>; *rel="next"}"#), link) { - return Some( - m.get(&CaptureKey::ByIndex(1)) - .unwrap_or_default() - .to_string(), - ); + return Some(m.get(1).unwrap_or_default().to_string()); } } |
