diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-06 11:12:39 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-06 11:13:26 +0900 |
| commit | 9f6f83c479985e882dbd086a8495bcd772c80b54 (patch) | |
| tree | f5287fb3af16e9a04b8abc0010fb66e25dbe1937 /crates/shirabe/src/config.rs | |
| parent | 8c5dba294fae26c8a46a308a46676e0afff217d6 (diff) | |
| download | php-shirabe-9f6f83c479985e882dbd086a8495bcd772c80b54.tar.gz php-shirabe-9f6f83c479985e882dbd086a8495bcd772c80b54.tar.zst php-shirabe-9f6f83c479985e882dbd086a8495bcd772c80b54.zip | |
fix(array-merge): route mixed-key merges through faithful array_merge
* Config::merge called array_merge_recursive where PHP uses plain
array_merge (string-key overwrite); switch those six sites to
array_merge.
* provides/replaces merges that may carry an AliasPackage's
self.version numeric keys ("0","1",...) were collapsing under naive
chain/insert/or_insert; route them through a new array_merge_map().
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/config.rs')
| -rw-r--r-- | crates/shirabe/src/config.rs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/crates/shirabe/src/config.rs b/crates/shirabe/src/config.rs index b3460e8..1cfb8cc 100644 --- a/crates/shirabe/src/config.rs +++ b/crates/shirabe/src/config.rs @@ -12,7 +12,7 @@ use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::{CaptureKey, Preg}; use shirabe_php_shim::{ E_USER_DEPRECATED, FILTER_VALIDATE_URL, PHP_URL_HOST, PHP_URL_SCHEME, PhpMixed, - RuntimeException, array_key_exists, array_merge_recursive, array_reverse, array_search_mixed, + RuntimeException, array_key_exists, array_merge, array_reverse, array_search_mixed, array_unique, current, empty, filter_var, implode, in_array, is_array, is_int, is_string, key, max, parse_url, reset, rtrim, strtolower, strtoupper, strtr, substr, trigger_error, }; @@ -334,10 +334,8 @@ impl Config { ) && self.config.contains_key(key) { let existing = self.config.get(key).cloned().unwrap_or(PhpMixed::Null); - self.config.insert( - key.clone(), - array_merge_recursive(vec![existing, val.clone()]), - ); + self.config + .insert(key.clone(), array_merge(existing, val.clone())); self.set_source_of_config_value(&val, key, source); } else if in_array( PhpMixed::String(key.clone()), @@ -354,7 +352,7 @@ impl Config { let existing = self.config.get(key).cloned().unwrap_or(PhpMixed::Null); self.config.insert( key.clone(), - array_merge_recursive(vec![val.clone(), existing, val.clone()]), + array_merge(array_merge(val.clone(), existing), val.clone()), ); self.set_source_of_config_value(&val, key, source); } else if in_array( @@ -367,7 +365,7 @@ impl Config { ) && self.config.contains_key(key) { let existing = self.config.get(key).cloned().unwrap_or(PhpMixed::Null); - let merged = array_merge_recursive(vec![existing, val.clone()]); + let merged = array_merge(existing, val.clone()); let unique_list: Vec<String> = match &merged { PhpMixed::List(l) => l .iter() @@ -406,7 +404,7 @@ impl Config { } let cur = self.config.get(key).cloned().unwrap_or(PhpMixed::Null); self.config - .insert(key.clone(), array_merge_recursive(vec![cur, val.clone()])); + .insert(key.clone(), array_merge(cur, val.clone())); self.set_source_of_config_value(&val, key, source); // the full match pattern needs to be last let has_wildcard = matches!( @@ -433,10 +431,10 @@ impl Config { .cloned() .map(|b| *b) .unwrap_or(PhpMixed::List(vec![])); - let merged = array_merge_recursive(vec![ + let merged = array_merge( self.config.get("audit").cloned().unwrap_or(PhpMixed::Null), val.clone(), - ]); + ); self.config.insert(key.clone(), merged); self.set_source_of_config_value(&val, key, source); let val_ignore = match &val { @@ -447,7 +445,7 @@ impl Config { .unwrap_or(PhpMixed::List(vec![])), _ => PhpMixed::List(vec![]), }; - let new_ignores = array_merge_recursive(vec![current_ignores, val_ignore]); + let new_ignores = array_merge(current_ignores, val_ignore); if let Some(PhpMixed::Array(audit)) = self.config.get_mut("audit") { audit.insert("ignore".to_string(), Box::new(new_ignores)); } |
