aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/autoload.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-21 14:30:17 +0900
committernsfisis <nsfisis@gmail.com>2026-02-21 14:30:17 +0900
commit9148d0c707394f6e2529f04a767a602163d5bd95 (patch)
tree6eeef1fc4341d9c95288d346c21e094d7aa899d9 /crates/mozart/src/autoload.rs
parent2d46dc9091c4fa1b68361425c561dad773a343b4 (diff)
downloadphp-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.rs16
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();