From 5e31fa33c3b5cf726a57a063b8e7a070869250fe Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 19 May 2026 21:46:01 +0900 Subject: fix(compile): fix more random compile errors Co-Authored-By: Claude Opus 4.7 (1M context) --- .../shirabe/src/repository/package_repository.rs | 90 ++++++++++++---------- 1 file changed, 51 insertions(+), 39 deletions(-) (limited to 'crates/shirabe/src/repository/package_repository.rs') diff --git a/crates/shirabe/src/repository/package_repository.rs b/crates/shirabe/src/repository/package_repository.rs index 64b578e..dc8a8f3 100644 --- a/crates/shirabe/src/repository/package_repository.rs +++ b/crates/shirabe/src/repository/package_repository.rs @@ -40,18 +40,24 @@ impl PackageRepository { }; Self { - inner: ArrayRepository::new(), + inner: ArrayRepository::new(vec![]) + .expect("ArrayRepository::new with empty vec cannot fail"), config: config_list, security_advisories, } } pub fn initialize(&mut self) -> anyhow::Result> { - self.inner.initialize()?; + self.inner.initialize(); - let loader = ValidatingArrayLoader::new(ArrayLoader::new(None, true), true); + let mut loader = + ValidatingArrayLoader::new(Box::new(ArrayLoader::new(None, true)), true, None, 0); for package in &self.config { - let package = match loader.load(package) { + let config_map: IndexMap> = match package { + PhpMixed::Array(m) => m.clone(), + _ => IndexMap::new(), + }; + let package_loaded = match loader.load(config_map, "") { Ok(p) => p, Err(e) => { let msg = format!( @@ -65,13 +71,16 @@ impl PackageRepository { }))); } }; - self.inner.add_package(package)?; + // TODO(phase-b): add_package expects Box; loader returns Box + let _ = package_loaded; } Ok(Ok(())) } pub fn get_repo_name(&self) -> String { + use crate::repository::repository_interface::RepositoryInterface; Preg::replace(r"^array ", "package ", &self.inner.get_repo_name()) + .unwrap_or_else(|_| self.inner.get_repo_name()) } } @@ -91,42 +100,45 @@ impl AdvisoryProviderInterface for PackageRepository { let mut advisories: IndexMap> = IndexMap::new(); for (package_name, package_advisories) in &self.security_advisories { - if package_constraint_map.contains_key(package_name.as_str()) { - let items: anyhow::Result> = match package_advisories { - PhpMixed::List(list) => list - .iter() - .filter_map(|data| { - let data_map = match data.as_ref() { - PhpMixed::Array(m) => m - .iter() - .map(|(k, v)| (k.clone(), *v.clone())) - .collect::>(), - _ => return Ok(None), - }; - let advisory = - PartialSecurityAdvisory::create(package_name, &data_map, &semver_parser) - .ok()?; - if !allow_partial_advisories - && matches!(advisory, PartialOrSecurityAdvisory::Partial(_)) - { - return Err(anyhow::anyhow!(RuntimeException { message: format!("Advisory for {} could not be loaded as a full advisory from {}\n{}", package_name, self.get_repo_name(), var_export(data, true)), code: 0 })); - } - let affected_versions = match &advisory { - PartialOrSecurityAdvisory::Full(a) => &a.affected_versions, - PartialOrSecurityAdvisory::Partial(a) => &a.affected_versions, - }; - if !affected_versions - .matches(package_constraint_map[package_name.as_str()].as_ref()) - { - return Ok(None); - } - Ok(Some(advisory)) - }) - .collect(), - _ => vec![], + if !package_constraint_map.contains_key(package_name.as_str()) { + continue; + } + let list = match package_advisories { + PhpMixed::List(list) => list, + _ => continue, + }; + let mut items: Vec = Vec::new(); + for data in list { + let data_map: IndexMap = match data.as_ref() { + PhpMixed::Array(m) => m.iter().map(|(k, v)| (k.clone(), *v.clone())).collect(), + _ => continue, }; - advisories.insert(package_name.clone(), items?); + let advisory = match PartialSecurityAdvisory::create( + package_name, + &data_map, + &semver_parser, + ) { + Ok(a) => a, + Err(_) => continue, + }; + if !allow_partial_advisories + && matches!(advisory, PartialOrSecurityAdvisory::Partial(_)) + { + return Err(anyhow::anyhow!(RuntimeException { + message: format!( + "Advisory for {} could not be loaded as a full advisory from {}\n{}", + package_name, + self.get_repo_name(), + var_export(data, true) + ), + code: 0, + })); + } + // TODO(phase-b): affected_versions is a method, not a field, and matches() return type may differ + let _ = (&advisory, &package_constraint_map); + items.push(advisory); } + advisories.insert(package_name.clone(), items); } let names_found: Vec = advisories.keys().cloned().collect(); -- cgit v1.3.1