From 9148d0c707394f6e2529f04a767a602163d5bd95 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 21 Feb 2026 14:30:17 +0900 Subject: feat(install): add InstallConfig, platform warnings, and download progress Replace positional boolean parameters in install_from_lock with a structured InstallConfig. Add platform requirement warnings, download progress display, classmap-authoritative autoloader support, and prefer-source detection across install/update/require/remove commands. Co-Authored-By: Claude Opus 4.6 --- crates/mozart/src/autoload.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'crates/mozart/src/autoload.rs') diff --git a/crates/mozart/src/autoload.rs b/crates/mozart/src/autoload.rs index 38c00d5..d4421a6 100644 --- a/crates/mozart/src/autoload.rs +++ b/crates/mozart/src/autoload.rs @@ -20,6 +20,8 @@ pub struct AutoloadConfig { /// Unique suffix for the autoloader class names (typically the lock file content-hash). /// Used to generate `ComposerAutoloaderInit{suffix}` and `ComposerStaticInit{suffix}`. pub suffix: String, + /// When true, emit `$loader->setClassMapAuthoritative(true)` in the generated autoloader. + pub classmap_authoritative: bool, } /// Collected autoload mappings from all packages. @@ -427,7 +429,7 @@ fn generate_autoload_static(static_data: &AutoloadData, suffix: &str) -> String } /// Generate `vendor/composer/autoload_real.php`. -fn generate_autoload_real(suffix: &str, has_files: bool) -> String { +fn generate_autoload_real(suffix: &str, has_files: bool, classmap_authoritative: bool) -> String { let mut out = String::new(); out.push_str(" String { )); out.push_str(" $loader->register(true);\n"); + if classmap_authoritative { + out.push_str(" $loader->setClassMapAuthoritative(true);\n"); + } + if has_files { out.push('\n'); out.push_str(&format!( @@ -690,7 +696,7 @@ pub fn generate(config: &AutoloadConfig) -> anyhow::Result<()> { )?; std::fs::write( composer_dir.join("autoload_real.php"), - generate_autoload_real(&config.suffix, has_files), + generate_autoload_real(&config.suffix, has_files, config.classmap_authoritative), )?; std::fs::write( config.vendor_dir.join("autoload.php"), @@ -1022,7 +1028,7 @@ mod tests { #[test] fn test_generate_autoload_real_with_files() { - let output = generate_autoload_real("abc123", true); + let output = generate_autoload_real("abc123", true, false); assert!(output.contains("class ComposerAutoloaderInitabc123")); assert!(output.contains("ComposerStaticInitabc123::$files")); assert!(output.contains("$requireFile")); @@ -1031,7 +1037,7 @@ mod tests { #[test] fn test_generate_autoload_real_without_files() { - let output = generate_autoload_real("abc123", false); + let output = generate_autoload_real("abc123", false, false); assert!(output.contains("class ComposerAutoloaderInitabc123")); assert!(!output.contains("$filesToLoad")); assert!(!output.contains("__composer_autoload_files")); @@ -1104,6 +1110,7 @@ mod tests { vendor_dir: vendor_dir.clone(), dev_mode: false, suffix: "abc123def456".to_string(), + classmap_authoritative: false, }; generate(&config).unwrap(); @@ -1199,6 +1206,7 @@ mod tests { vendor_dir: vendor_dir.clone(), dev_mode: false, suffix: "test".to_string(), + classmap_authoritative: false, }; generate(&config).unwrap(); -- cgit v1.3.1