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) --- crates/shirabe/src/package/loader/array_loader.rs | 2 +- .../shirabe/src/package/loader/loader_interface.rs | 2 +- .../src/package/loader/root_package_loader.rs | 54 +++++++++++++++------- 3 files changed, 40 insertions(+), 18 deletions(-) (limited to 'crates/shirabe/src/package/loader') diff --git a/crates/shirabe/src/package/loader/array_loader.rs b/crates/shirabe/src/package/loader/array_loader.rs index 275d718..3ece5c7 100644 --- a/crates/shirabe/src/package/loader/array_loader.rs +++ b/crates/shirabe/src/package/loader/array_loader.rs @@ -410,7 +410,7 @@ impl ArrayLoader { if let Some(time_value) = config.get("time") { if !shirabe_php_shim::empty(time_value) { let time_str = time_value.as_string().unwrap_or(""); - let time = if Preg::is_match(r"/^\d++$/D", time_str) { + let time = if Preg::is_match(r"/^\d++$/D", time_str).unwrap_or(false) { format!("@{}", time_str) } else { time_str.to_string() diff --git a/crates/shirabe/src/package/loader/loader_interface.rs b/crates/shirabe/src/package/loader/loader_interface.rs index f941f9a..2b93bc5 100644 --- a/crates/shirabe/src/package/loader/loader_interface.rs +++ b/crates/shirabe/src/package/loader/loader_interface.rs @@ -4,7 +4,7 @@ use crate::package::base_package::BasePackage; use indexmap::IndexMap; use shirabe_php_shim::PhpMixed; -pub trait LoaderInterface { +pub trait LoaderInterface: std::fmt::Debug { fn load( &self, config: IndexMap, diff --git a/crates/shirabe/src/package/loader/root_package_loader.rs b/crates/shirabe/src/package/loader/root_package_loader.rs index 59c9cf5..d2e2a7a 100644 --- a/crates/shirabe/src/package/loader/root_package_loader.rs +++ b/crates/shirabe/src/package/loader/root_package_loader.rs @@ -1,7 +1,7 @@ //! ref: composer/src/Composer/Package/Loader/RootPackageLoader.php use indexmap::IndexMap; -use shirabe_external_packages::composer::pcre::preg::Preg; +use shirabe_external_packages::composer::pcre::preg::{CaptureKey, Preg}; use shirabe_php_shim::{ LogicException, RuntimeException, UnexpectedValueException, strtolower, ucfirst, }; @@ -10,6 +10,7 @@ use crate::config::Config; use crate::io::io_interface::IOInterface; use crate::package::base_package::{BasePackage, STABILITIES, SUPPORTED_LINK_TYPES}; use crate::package::loader::array_loader::ArrayLoader; +use crate::package::loader::loader_interface::LoaderInterface; use crate::package::loader::validating_array_loader::ValidatingArrayLoader; use crate::package::package_interface::PackageInterface; use crate::package::root_alias_package::RootAliasPackage; @@ -25,7 +26,7 @@ use crate::util::process_executor::ProcessExecutor; pub struct RootPackageLoader { inner: ArrayLoader, manager: RepositoryManager, - config: Config, + config: std::rc::Rc>, version_guesser: VersionGuesser, io: Option>, } @@ -33,7 +34,7 @@ pub struct RootPackageLoader { impl RootPackageLoader { pub fn new( manager: RepositoryManager, - config: Config, + config: std::rc::Rc>, parser: Option, version_guesser: Option, io: Option>, @@ -42,7 +43,12 @@ impl RootPackageLoader { let version_guesser = version_guesser.unwrap_or_else(|| { let mut process_executor = ProcessExecutor::new(io.as_deref()); process_executor.enable_async(); - VersionGuesser::new(&config, process_executor, inner.version_parser.clone()) + VersionGuesser::new( + std::rc::Rc::clone(&config), + std::rc::Rc::new(std::cell::RefCell::new(process_executor)), + inner.version_parser.clone(), + io.as_ref().map(|i| i.clone_box()), + ) }); Self { inner, @@ -284,11 +290,15 @@ impl RootPackageLoader { ); } - let repos = RepositoryFactory::default_repos(None, &self.config, &mut self.manager)?; + let repos = RepositoryFactory::default_repos( + None, + Some(std::rc::Rc::clone(&self.config)), + Some(&mut self.manager), + )?; for repo in repos { self.manager.add_repository(repo); } - real_package.set_repositories(self.config.get_repositories()); + real_package.set_repositories(self.config.borrow().get_repositories()); Ok(package) } @@ -299,27 +309,31 @@ impl RootPackageLoader { mut aliases: Vec>, ) -> Vec> { for (req_name, req_version) in requires { - if let Some(m) = Preg::is_match_strict_groups( + let mut m: IndexMap = IndexMap::new(); + if Preg::is_match_strict_groups3( r"(?:^|\| *|, *)([^,\s#|]+)(?:#[^ ]+)? +as +([^,\s|]+)(?:$| *\|| *,)", req_version, + Some(&mut m), ) - .unwrap_or(None) + .unwrap_or(false) { + let m1 = m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default(); + let m2 = m.get(&CaptureKey::ByIndex(2)).cloned().unwrap_or_default(); let mut alias = IndexMap::new(); alias.insert("package".to_string(), strtolower(req_name)); alias.insert( "version".to_string(), self.inner .version_parser - .normalize(&m[1], req_version) + .normalize(&m1, Some(req_version)) .unwrap_or_default(), ); - alias.insert("alias".to_string(), m[2].clone()); + alias.insert("alias".to_string(), m2.clone()); alias.insert( "alias_normalized".to_string(), self.inner .version_parser - .normalize(&m[2], req_version) + .normalize(&m2, Some(req_version)) .unwrap_or_default(), ); aliases.push(alias); @@ -370,9 +384,13 @@ impl RootPackageLoader { let mut matched = false; for constraint in &constraints { - if let Some(Some(m)) = Preg::is_match_strict_groups(&pattern, constraint).ok() { + let mut m: IndexMap = IndexMap::new(); + if Preg::is_match_strict_groups3(&pattern, constraint, Some(&mut m)) + .unwrap_or(false) + { let name = strtolower(req_name); - let stability = stabilities[VersionParser::normalize_stability(&m[1])]; + let m1 = m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default(); + let stability = stabilities[VersionParser::normalize_stability(&m1)]; if stability_flags.get(&name).copied().unwrap_or(i64::MAX) > stability { continue; @@ -415,12 +433,16 @@ impl RootPackageLoader { for (req_name, req_version) in requires { let req_version = Preg::replace(r"^([^,\s@]+) as .+$", "$1", req_version).unwrap_or_default(); - if let Some(Some(m)) = - Preg::is_match_strict_groups(r"^[^,\s@]+?#([a-f0-9]+)$", &req_version).ok() + let mut m: IndexMap = IndexMap::new(); + if Preg::is_match_strict_groups3(r"^[^,\s@]+?#([a-f0-9]+)$", &req_version, Some(&mut m)) + .unwrap_or(false) { if VersionParser::parse_stability(&req_version) == "dev" { let name = strtolower(req_name); - references.insert(name, m[1].clone()); + references.insert( + name, + m.get(&CaptureKey::ByIndex(1)).cloned().unwrap_or_default(), + ); } } } -- cgit v1.3.1