diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-14 13:08:21 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-14 13:08:21 +0900 |
| commit | d7c686f6c488739fc9d061bb0f89d73e6445fade (patch) | |
| tree | e3b694c9e96486a13032e63e616a1ed920edd90a /crates | |
| parent | cfd2a4488797ddaabd0087aa0021b26892663ffb (diff) | |
| download | php-shirabe-d7c686f6c488739fc9d061bb0f89d73e6445fade.tar.gz php-shirabe-d7c686f6c488739fc9d061bb0f89d73e6445fade.tar.zst php-shirabe-d7c686f6c488739fc9d061bb0f89d73e6445fade.zip | |
refactor(pcre): return bool from preg_match shim
preg_match can only return 1 or 0 now that compile failure panics, so
return bool and update all call sites accordingly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates')
10 files changed, 40 insertions, 53 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/command/command.rs b/crates/shirabe-external-packages/src/symfony/console/command/command.rs index ce5f734..d811184 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/command.rs @@ -660,7 +660,7 @@ impl BaseCommand { /// Throws InvalidArgumentException when the name is invalid. fn validate_name(&self, name: &str) -> anyhow::Result<Result<(), InvalidArgumentException>> { let mut matches: Vec<Option<String>> = Vec::new(); - if shirabe_php_shim::preg_match(r"/^[^\:]++(\:[^\:]++)*$/", name, &mut matches) == 0 { + if !shirabe_php_shim::preg_match(r"/^[^\:]++(\:[^\:]++)*$/", name, &mut matches) { return Ok(Err(InvalidArgumentException( shirabe_php_shim::InvalidArgumentException { message: format!("Command name \"{}\" is invalid.", name), diff --git a/crates/shirabe-external-packages/src/symfony/console/helper/helper.rs b/crates/shirabe-external-packages/src/symfony/console/helper/helper.rs index 07b1f77..cc49f0a 100644 --- a/crates/shirabe-external-packages/src/symfony/console/helper/helper.rs +++ b/crates/shirabe-external-packages/src/symfony/console/helper/helper.rs @@ -38,7 +38,7 @@ impl Helper { /// Returns the width of a string, using mb_strwidth if it is available. /// The width is how many characters positions the string will use. pub fn width(string: &str) -> i64 { - if shirabe_php_shim::preg_match("//u", string, &mut Vec::new()) != 0 { + if shirabe_php_shim::preg_match("//u", string, &mut Vec::new()) { return UnicodeString::new(string).width(false); } @@ -54,7 +54,7 @@ impl Helper { /// Returns the length of a string, using mb_strlen if it is available. /// The length is related to how many bytes the string will use. pub fn length(string: &str) -> i64 { - if shirabe_php_shim::preg_match("//u", string, &mut Vec::new()) != 0 { + if shirabe_php_shim::preg_match("//u", string, &mut Vec::new()) { return UnicodeString::new(string).length(); } diff --git a/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs b/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs index 2b1102c..185d3f9 100644 --- a/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs +++ b/crates/shirabe-external-packages/src/symfony/console/input/argv_input.rs @@ -529,7 +529,7 @@ impl ArgvInput { .iter() .map(|token| { let mut r#match: Vec<Option<String>> = Vec::new(); - if shirabe_php_shim::preg_match("{^(-[^=]+=)(.+)}", token, &mut r#match) != 0 { + if shirabe_php_shim::preg_match("{^(-[^=]+=)(.+)}", token, &mut r#match) { return format!( "{}{}", r#match[1].as_deref().unwrap_or(""), diff --git a/crates/shirabe-external-packages/src/symfony/console/input/input.rs b/crates/shirabe-external-packages/src/symfony/console/input/input.rs index 3b4103b..5e6d9d0 100644 --- a/crates/shirabe-external-packages/src/symfony/console/input/input.rs +++ b/crates/shirabe-external-packages/src/symfony/console/input/input.rs @@ -231,7 +231,7 @@ impl Input { /// Escapes a token through escapeshellarg if it contains unsafe chars. pub fn escape_token(&self, token: &str) -> String { let mut matches: Vec<Option<String>> = vec![]; - if shirabe_php_shim::preg_match("{^[\\w-]+$}", token, &mut matches) != 0 { + if shirabe_php_shim::preg_match("{^[\\w-]+$}", token, &mut matches) { token.to_string() } else { shirabe_php_shim::escapeshellarg(token) diff --git a/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs b/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs index 245a071..f5e48ca 100644 --- a/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs +++ b/crates/shirabe-external-packages/src/symfony/console/output/stream_output.rs @@ -115,7 +115,7 @@ impl StreamOutput { "/^((screen|xterm|vt100|vt220|putty|rxvt|ansi|cygwin|linux).*)|(.*-256(color)?(-bce)?)$/", &term, &mut matches, - ) != 0 + ) } } diff --git a/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs b/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs index 3990df3..9de2d05 100644 --- a/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs +++ b/crates/shirabe-external-packages/src/symfony/console/question/choice_question.rs @@ -113,12 +113,11 @@ impl ChoiceQuestion { let selected_choices: Vec<PhpMixed> = if multiselect { // Check for a separated comma values let mut matches: Vec<Option<String>> = Vec::new(); - if shirabe_php_shim::preg_match( + if !shirabe_php_shim::preg_match( "/^[^,]+(?:,[^,]+)*$/", &shirabe_php_shim::strval(&selected), &mut matches, - ) == 0 - { + ) { return Err(InvalidArgumentException( shirabe_php_shim::InvalidArgumentException { message: shirabe_php_shim::sprintf(&error_message, &[selected.clone()]), diff --git a/crates/shirabe-external-packages/src/symfony/console/question/confirmation_question.rs b/crates/shirabe-external-packages/src/symfony/console/question/confirmation_question.rs index d52c435..5076d84 100644 --- a/crates/shirabe-external-packages/src/symfony/console/question/confirmation_question.rs +++ b/crates/shirabe-external-packages/src/symfony/console/question/confirmation_question.rs @@ -42,7 +42,7 @@ impl ConfirmationQuestion { ®ex, &shirabe_php_shim::strval(&answer), &mut matches, - ) != 0 + ) }; // false === $default diff --git a/crates/shirabe-external-packages/src/symfony/console/terminal.rs b/crates/shirabe-external-packages/src/symfony/console/terminal.rs index 1f0fb65..5733b0c 100644 --- a/crates/shirabe-external-packages/src/symfony/console/terminal.rs +++ b/crates/shirabe-external-packages/src/symfony/console/terminal.rs @@ -87,8 +87,7 @@ impl Terminal { "/^(\\d+)x(\\d+)(?: \\((\\d+)x(\\d+)\\))?$/", &shirabe_php_shim::trim(ansicon, None), &mut matches, - ) != 0 - { + ) { // extract [w, H] from "wxh (WxH)" // or [w, h] from "wxh" WIDTH.with(|w| { @@ -145,8 +144,7 @@ impl Terminal { "/rows.(\\d+);.columns.(\\d+);/i", &stty_string, &mut matches, - ) != 0 - { + ) { // extract [w, h] from "rows h; columns w;" WIDTH.with(|w| { w.set(Some(shirabe_php_shim::intval(&PhpMixed::String( @@ -162,8 +160,7 @@ impl Terminal { "/;.(\\d+).rows;.(\\d+).columns/i", &stty_string, &mut matches, - ) != 0 - { + ) { // extract [w, h] from "; h rows; w columns" WIDTH.with(|w| { w.set(Some(shirabe_php_shim::intval(&PhpMixed::String( @@ -187,12 +184,11 @@ impl Terminal { let info = info?; let mut matches: Vec<Option<String>> = Vec::new(); - if shirabe_php_shim::preg_match( + if !shirabe_php_shim::preg_match( "/--------+\\r?\\n.+?(\\d+)\\r?\\n.+?(\\d+)\\r?\\n/", &info, &mut matches, - ) == 0 - { + ) { return None; } diff --git a/crates/shirabe-php-shim/src/preg.rs b/crates/shirabe-php-shim/src/preg.rs index dc91fd6..510f6ba 100644 --- a/crates/shirabe-php-shim/src/preg.rs +++ b/crates/shirabe-php-shim/src/preg.rs @@ -40,9 +40,9 @@ pub fn preg_quote(str: &str, delimiter: Option<char>) -> String { out } -// Returns 1 on match, 0 on no match; populates matches[0]=full match, matches[1..]=captures. +// Returns whether the pattern matched; populates matches[0]=full match, matches[1..]=captures. // Optional groups that did not participate in the match are stored as None. -pub fn preg_match(pattern: &str, subject: &str, matches: &mut Vec<Option<String>>) -> i64 { +pub fn preg_match(pattern: &str, subject: &str, matches: &mut Vec<Option<String>>) -> bool { let re = compile_php_pattern(pattern).unwrap_or_else(|e| panic!("invalid regex: {e}")); matches.clear(); match re.captures(subject) { @@ -50,9 +50,9 @@ pub fn preg_match(pattern: &str, subject: &str, matches: &mut Vec<Option<String> for g in 0..caps.len() { matches.push(caps.get(g).map(|m| m.as_str().to_string())); } - 1 + true } - None => 0, + None => false, } } diff --git a/crates/shirabe-semver/src/version_parser.rs b/crates/shirabe-semver/src/version_parser.rs index bb4656c..63abc00 100644 --- a/crates/shirabe-semver/src/version_parser.rs +++ b/crates/shirabe-semver/src/version_parser.rs @@ -87,14 +87,14 @@ impl VersionParser { // strip off aliasing let mut match_: Vec<Option<String>> = Vec::new(); - if php::preg_match("{^([^,\\s]++) ++as ++([^,\\s]++)$}", &version, &mut match_) > 0 { + if php::preg_match("{^([^,\\s]++) ++as ++([^,\\s]++)$}", &version, &mut match_) { version = match_[1].clone().unwrap_or_default(); } // strip off stability flag let stab_pattern = format!("{{@(?:{})$}}i", STABILITIES_REGEX); let mut match_: Vec<Option<String>> = Vec::new(); - if php::preg_match(&stab_pattern, &version, &mut match_) > 0 { + if php::preg_match(&stab_pattern, &version, &mut match_) { let match0_len = match_[0].as_deref().unwrap_or("").len(); version = version[..version.len() - match0_len].to_string(); } @@ -112,7 +112,7 @@ impl VersionParser { // strip off build metadata let mut match_: Vec<Option<String>> = Vec::new(); - if php::preg_match("{^([^,\\s+]++)\\+[^\\s]++$}", &version, &mut match_) > 0 { + if php::preg_match("{^([^,\\s+]++)\\+[^\\s]++$}", &version, &mut match_) { version = match_[1].clone().unwrap_or_default(); } @@ -124,7 +124,7 @@ impl VersionParser { "{{^v?(\\d{{1,5}}+)(\\.\\d++)?(\\.\\d++)?(\\.\\d++)?{}$}}i", MODIFIER_REGEX ); - if php::preg_match(&classical_pattern, &version, &mut matches) > 0 { + if php::preg_match(&classical_pattern, &version, &mut matches) { let m2 = matches[2].as_deref().unwrap_or(""); let m3 = matches[3].as_deref().unwrap_or(""); let m4 = matches[4].as_deref().unwrap_or(""); @@ -142,7 +142,7 @@ impl VersionParser { "{{^v?(\\d{{4}}(?:[.:-]?\\d{{2}}){{1,6}}(?:[.:-]?\\d{{1,3}}){{0,2}}){}$}}i", MODIFIER_REGEX ); - if php::preg_match(&datetime_pattern, &version, &mut matches) > 0 { + if php::preg_match(&datetime_pattern, &version, &mut matches) { version = php::preg_replace("{\\D}", ".", matches[1].as_deref().unwrap_or("")); index = Some(2); } @@ -185,7 +185,7 @@ impl VersionParser { // match dev branches let mut match_: Vec<Option<String>> = Vec::new(); - if php::preg_match("{(.*?)[.-]?dev$}i", &version, &mut match_) > 0 { + if php::preg_match("{(.*?)[.-]?dev$}i", &version, &mut match_) { let branch_name = match_[1].clone().unwrap_or_default(); // a branch ending with -dev is only valid if it is numeric // if it gets prefixed with dev- it means the branch name should @@ -205,8 +205,7 @@ impl VersionParser { ), &full_version, &mut Vec::new(), - ) > 0 - { + ) { format!( " in \"{}\", the alias must be an exact version", full_version @@ -219,8 +218,7 @@ impl VersionParser { ), &full_version, &mut Vec::new(), - ) > 0 - { + ) { format!( " in \"{}\", the alias source must be an exact version, if it is a branch name \ you should prefix it with dev-", @@ -244,8 +242,7 @@ impl VersionParser { "{^(?P<version>(\\d++\\.)*\\d++)(?:\\.x)?-dev$}i", branch, &mut matches, - ) > 0 - { + ) { let version = matches[1].clone().unwrap_or_default(); return Some(format!("{}.", version)); } @@ -264,8 +261,7 @@ impl VersionParser { "{^v?(\\d++)(\\.(\\d++|[xX*]))?(\\.(\\d++|[xX*]))?(\\.(\\d++|[xX*]))?$}i", &name, &mut matches, - ) > 0 - { + ) { let mut version = String::new(); for i in [1usize, 2, 4, 6] { if let Some(Some(m)) = matches.get(i) { @@ -341,8 +337,7 @@ impl VersionParser { "{^([^,\\s]++) ++as ++([^,\\s]++)$}", &constraint, &mut match_, - ) > 0 - { + ) { constraint = match_[1].clone().unwrap_or_default(); } @@ -350,7 +345,7 @@ impl VersionParser { let mut stability_modifier: Option<String> = None; let mut match_: Vec<Option<String>> = Vec::new(); let stab_pattern = format!("{{^([^,\\s]*?)@({})$}}i", STABILITIES_REGEX); - if php::preg_match(&stab_pattern, &constraint, &mut match_) > 0 { + if php::preg_match(&stab_pattern, &constraint, &mut match_) { let m1 = match_[1].as_deref().unwrap_or(""); constraint = if !m1.is_empty() { m1.to_string() @@ -369,13 +364,12 @@ impl VersionParser { "{^(dev-[^,\\s@]+?|[^,\\s@]+?\\.x-dev)#.+$}i", &constraint, &mut match_, - ) > 0 - { + ) { constraint = match_[1].clone().unwrap_or_default(); } let mut match_: Vec<Option<String>> = Vec::new(); - if php::preg_match("{^(v)?[xX*](\\.[xX*])*$}i", &constraint, &mut match_) > 0 { + if php::preg_match("{^(v)?[xX*](\\.[xX*])*$}i", &constraint, &mut match_) { let m1_nonempty = !match_ .get(1) .and_then(|o| o.as_deref()) @@ -410,7 +404,7 @@ impl VersionParser { // the current version is used instead. let mut matches: Vec<Option<String>> = Vec::new(); let tilde_pattern = format!("{{^~>?{}$}}i", version_regex); - if php::preg_match(&tilde_pattern, &constraint, &mut matches) > 0 { + if php::preg_match(&tilde_pattern, &constraint, &mut matches) { if constraint.starts_with("~>") { anyhow::bail!( "Could not parse version constraint {}: Invalid operator \"~>\", you probably \ @@ -473,7 +467,7 @@ impl VersionParser { // and above, patch updates for versions 0.X >=0.1.0, and no updates for versions 0.0.X let mut matches: Vec<Option<String>> = Vec::new(); let caret_pattern = format!("{{^\\^{}($)}}i", version_regex); - if php::preg_match(&caret_pattern, &constraint, &mut matches) > 0 { + if php::preg_match(&caret_pattern, &constraint, &mut matches) { // Work out which position in the version we are operating at let m1 = matches[1].as_deref().unwrap_or(""); let m2 = matches[2].as_deref().unwrap_or(""); @@ -525,8 +519,7 @@ impl VersionParser { "{^v?(\\d++)(?:\\.(\\d++))?(?:\\.(\\d++))?(?:\\.[xX*])++$}", &constraint, &mut matches, - ) > 0 - { + ) { let position = if !matches[3].as_deref().unwrap_or("").is_empty() { 3 } else if !matches[2].as_deref().unwrap_or("").is_empty() { @@ -572,7 +565,7 @@ impl VersionParser { "{{^(?P<from>{}) +- +(?P<to>{})($)}}i", version_regex, version_regex ); - if php::preg_match(&hyphen_pattern, &constraint, &mut matches) > 0 { + if php::preg_match(&hyphen_pattern, &constraint, &mut matches) { // matches[1]='from' string, matches[2..9]=from captures, matches[10]='to' string, // matches[11..18]=to captures, matches[19]='($)' // matches[6]=from stability, matches[8]=from dev, matches[9]=from wildcard-dev @@ -638,7 +631,7 @@ impl VersionParser { // Basic Comparators let mut match_: Vec<Option<String>> = Vec::new(); - if php::preg_match("{^(<>|!=|>=?|<=?|==?)?\\s*(.*)}", &constraint, &mut match_) > 0 { + if php::preg_match("{^(<>|!=|>=?|<=?|==?)?\\s*(.*)}", &constraint, &mut match_) { let version_str = match_[2].clone().unwrap_or_default(); let op_str = match_[1].clone().unwrap_or_default(); @@ -649,7 +642,7 @@ impl VersionParser { // dev-foobar except if the constraint uses a known operator, in which // case it must be a parse error if version_str.ends_with("-dev") - && php::preg_match("{^[0-9a-zA-Z-./]+$}", &version_str, &mut Vec::new()) > 0 + && php::preg_match("{^[0-9a-zA-Z-./]+$}", &version_str, &mut Vec::new()) { self.normalize( &format!("dev-{}", &version_str[..version_str.len() - 4]), @@ -673,12 +666,11 @@ impl VersionParser { } if op == "<" || op == ">=" { let modifier_pattern = format!("{{-{}$}}", MODIFIER_REGEX); - if php::preg_match( + if !php::preg_match( &modifier_pattern, &php::strtolower(&version_str), &mut Vec::new(), - ) == 0 - && !version_str.starts_with("dev-") + ) && !version_str.starts_with("dev-") { version = format!("{}-dev", version); } |
