From 81b9fc9d92bb74aa8428ae4db39bd84e8c16095c Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 20 Jun 2026 18:34:54 +0900 Subject: refactor(php-shim): drop Box wrapping from PhpMixed List/Array The List and Array variants of PhpMixed boxed their elements unnecessarily. Store PhpMixed values directly and update all callers accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/shirabe/src/installed_versions.rs | 70 ++++++-------------------------- 1 file changed, 13 insertions(+), 57 deletions(-) (limited to 'crates/shirabe/src/installed_versions.rs') diff --git a/crates/shirabe/src/installed_versions.rs b/crates/shirabe/src/installed_versions.rs index fb1f73f..c4ef526 100644 --- a/crates/shirabe/src/installed_versions.rs +++ b/crates/shirabe/src/installed_versions.rs @@ -55,12 +55,7 @@ impl InstalledVersions { .cloned() .unwrap_or_default(); // PHP: array_keys($installed['versions']) - let keys: Vec = array_keys( - &versions - .into_iter() - .map(|(k, v)| (k, *v)) - .collect::>(), - ); + let keys: Vec = array_keys(&versions); packages.push(keys); } @@ -74,26 +69,12 @@ impl InstalledVersions { &PhpMixed::List( packages .into_iter() - .map(|p| { - Box::new(PhpMixed::List( - p.into_iter() - .map(|s| Box::new(PhpMixed::String(s))) - .collect(), - )) - }) + .map(|p| PhpMixed::List(p.into_iter().map(PhpMixed::String).collect())) .collect(), ), ); let flipped = array_flip(&merged); - array_keys( - &flipped - .as_array() - .cloned() - .unwrap_or_default() - .into_iter() - .map(|(k, v)| (k, *v)) - .collect::>(), - ) + array_keys(&flipped.as_array().cloned().unwrap_or_default()) } /// Returns a list of all package names with a specific type e.g. 'library' @@ -139,7 +120,7 @@ impl InstalledVersions { let dev_requirement = package .as_array() .and_then(|a| a.get("dev_requirement")) - .map(|v| v.as_ref().clone()) + .cloned() .unwrap_or(PhpMixed::Null); return include_dev_requirements || matches!(dev_requirement, PhpMixed::Null) @@ -197,15 +178,8 @@ impl InstalledVersions { } if pkg.contains_key("aliases") { ranges = array_merge( - PhpMixed::List( - ranges - .iter() - .map(|s| Box::new(PhpMixed::String(s.clone()))) - .collect(), - ), - pkg.get("aliases") - .map(|v| (**v).clone()) - .unwrap_or(PhpMixed::Null), + PhpMixed::List(ranges.iter().map(|s| PhpMixed::String(s.clone())).collect()), + pkg.get("aliases").cloned().unwrap_or(PhpMixed::Null), ) .as_list() .map(|l| { @@ -217,15 +191,8 @@ impl InstalledVersions { } if pkg.contains_key("replaced") { ranges = array_merge( - PhpMixed::List( - ranges - .iter() - .map(|s| Box::new(PhpMixed::String(s.clone()))) - .collect(), - ), - pkg.get("replaced") - .map(|v| (**v).clone()) - .unwrap_or(PhpMixed::Null), + PhpMixed::List(ranges.iter().map(|s| PhpMixed::String(s.clone())).collect()), + pkg.get("replaced").cloned().unwrap_or(PhpMixed::Null), ) .as_list() .map(|l| { @@ -237,15 +204,8 @@ impl InstalledVersions { } if pkg.contains_key("provided") { ranges = array_merge( - PhpMixed::List( - ranges - .iter() - .map(|s| Box::new(PhpMixed::String(s.clone()))) - .collect(), - ), - pkg.get("provided") - .map(|v| (**v).clone()) - .unwrap_or(PhpMixed::Null), + PhpMixed::List(ranges.iter().map(|s| PhpMixed::String(s.clone())).collect()), + pkg.get("provided").cloned().unwrap_or(PhpMixed::Null), ) .as_list() .map(|l| { @@ -386,7 +346,6 @@ impl InstalledVersions { .into_iter() .next() .and_then(|d| d.get("root").and_then(|v| v.as_array()).cloned()) - .map(|m| m.into_iter().map(|(k, v)| (k, *v)).collect()) .unwrap_or_default() } @@ -480,11 +439,8 @@ impl InstalledVersions { } else if is_file(&format!("{}/composer/installed.php", vendor_dir)) { let required = require_php_file(&format!("{}/composer/installed.php", vendor_dir,)); - let required_map: IndexMap = required - .as_array() - .cloned() - .map(|m| m.into_iter().map(|(k, v)| (k, *v)).collect()) - .unwrap_or_default(); + let required_map: IndexMap = + required.as_array().cloned().unwrap_or_default(); INSTALLED_BY_VENDOR .lock() .unwrap() @@ -515,7 +471,7 @@ impl InstalledVersions { *installed_static = required .as_array() .cloned() - .map(|m| m.into_iter().map(|(k, v)| (k, *v)).collect()); + .map(|m| m.into_iter().collect()); } else { *installed_static = Some(IndexMap::new()); } -- cgit v1.3.1