diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-21 14:30:17 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-21 14:30:17 +0900 |
| commit | 9148d0c707394f6e2529f04a767a602163d5bd95 (patch) | |
| tree | 6eeef1fc4341d9c95288d346c21e094d7aa899d9 /crates/mozart/src/autoload.rs | |
| parent | 2d46dc9091c4fa1b68361425c561dad773a343b4 (diff) | |
| download | php-mozart-9148d0c707394f6e2529f04a767a602163d5bd95.tar.gz php-mozart-9148d0c707394f6e2529f04a767a602163d5bd95.tar.zst php-mozart-9148d0c707394f6e2529f04a767a602163d5bd95.zip | |
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 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/autoload.rs')
| -rw-r--r-- | crates/mozart/src/autoload.rs | 16 |
1 files changed, 12 insertions, 4 deletions
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("<?php\n\n"); out.push_str("// autoload_real.php @generated by Composer\n\n"); @@ -463,6 +465,10 @@ fn generate_autoload_real(suffix: &str, has_files: bool) -> 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(); |
