aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-21 16:37:03 +0900
committernsfisis <nsfisis@gmail.com>2026-02-21 16:37:03 +0900
commit3535037592f149477c915a8b66da974eb59586db (patch)
treef476925e9d136d2ddcf206d80355a9a0ca4afda5 /crates/mozart/src/commands
parentc04744719bd16d9414a9f9a358691d03a993670c (diff)
downloadphp-mozart-3535037592f149477c915a8b66da974eb59586db.tar.gz
php-mozart-3535037592f149477c915a8b66da974eb59586db.tar.zst
php-mozart-3535037592f149477c915a8b66da974eb59586db.zip
feat(autoload): add classmap scanning, optimize, APCu, platform checks, and strict-psr
Add PHP file scanner (php_scanner.rs) with class/interface/trait/enum detection, comment/string/heredoc stripping, and PSR-4/PSR-0 validation. Extend autoload generation with: classmap directory scanning, --optimize mode (PSR-4/PSR-0 to classmap), --classmap-authoritative, --apcu caching with optional prefix, platform_check.php generation, and --strict-psr violation reporting. Wire new options through dump-autoload, install, require, update, and remove commands. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/commands')
-rw-r--r--crates/mozart/src/commands/dump_autoload.rs6
-rw-r--r--crates/mozart/src/commands/install.rs14
-rw-r--r--crates/mozart/src/commands/remove.rs2
-rw-r--r--crates/mozart/src/commands/require.rs2
-rw-r--r--crates/mozart/src/commands/update.rs2
5 files changed, 26 insertions, 0 deletions
diff --git a/crates/mozart/src/commands/dump_autoload.rs b/crates/mozart/src/commands/dump_autoload.rs
index 2c17c55..7d5b748 100644
--- a/crates/mozart/src/commands/dump_autoload.rs
+++ b/crates/mozart/src/commands/dump_autoload.rs
@@ -71,6 +71,12 @@ pub fn execute(args: &DumpAutoloadArgs, cli: &super::Cli) -> anyhow::Result<()>
dev_mode,
suffix,
classmap_authoritative: args.classmap_authoritative,
+ optimize: args.optimize,
+ apcu: args.apcu,
+ apcu_prefix: args.apcu_prefix.clone(),
+ strict_psr: args.strict_psr,
+ platform_check: crate::autoload::PlatformCheckMode::Full,
+ ignore_platform_reqs: args.ignore_platform_reqs,
})?;
eprintln!("Generated autoload files");
diff --git a/crates/mozart/src/commands/install.rs b/crates/mozart/src/commands/install.rs
index 6c023a1..53b827a 100644
--- a/crates/mozart/src/commands/install.rs
+++ b/crates/mozart/src/commands/install.rs
@@ -110,6 +110,10 @@ pub struct InstallConfig {
pub optimize_autoloader: bool,
/// Use classmap-only autoloading (implies optimize_autoloader).
pub classmap_authoritative: bool,
+ /// Use APCu to cache found/not-found classes.
+ pub apcu_autoloader: bool,
+ /// Custom prefix for APCu autoloader cache.
+ pub apcu_autoloader_prefix: Option<String>,
}
impl Default for InstallConfig {
@@ -123,6 +127,8 @@ impl Default for InstallConfig {
ignore_platform_req: vec![],
optimize_autoloader: false,
classmap_authoritative: false,
+ apcu_autoloader: false,
+ apcu_autoloader_prefix: None,
}
}
}
@@ -474,6 +480,12 @@ pub fn install_from_lock(
dev_mode,
suffix,
classmap_authoritative: config.classmap_authoritative,
+ optimize: config.optimize_autoloader,
+ apcu: config.apcu_autoloader,
+ apcu_prefix: config.apcu_autoloader_prefix.clone(),
+ strict_psr: false,
+ platform_check: crate::autoload::PlatformCheckMode::Full,
+ ignore_platform_reqs: config.ignore_platform_reqs,
})?;
eprintln!("Generated autoload files");
@@ -586,6 +598,8 @@ pub fn execute(args: &InstallArgs, cli: &super::Cli) -> anyhow::Result<()> {
ignore_platform_req: args.ignore_platform_req.clone(),
optimize_autoloader: args.optimize_autoloader,
classmap_authoritative: args.classmap_authoritative,
+ apcu_autoloader: args.apcu_autoloader,
+ apcu_autoloader_prefix: args.apcu_autoloader_prefix.clone(),
},
)
}
diff --git a/crates/mozart/src/commands/remove.rs b/crates/mozart/src/commands/remove.rs
index 1c9b619..3010547 100644
--- a/crates/mozart/src/commands/remove.rs
+++ b/crates/mozart/src/commands/remove.rs
@@ -454,6 +454,8 @@ pub fn execute(args: &RemoveArgs, cli: &super::Cli) -> anyhow::Result<()> {
ignore_platform_req: args.ignore_platform_req.clone(),
optimize_autoloader: args.optimize_autoloader,
classmap_authoritative: args.classmap_authoritative,
+ apcu_autoloader: false,
+ apcu_autoloader_prefix: None,
},
)?;
}
diff --git a/crates/mozart/src/commands/require.rs b/crates/mozart/src/commands/require.rs
index b1062f0..128e4a9 100644
--- a/crates/mozart/src/commands/require.rs
+++ b/crates/mozart/src/commands/require.rs
@@ -778,6 +778,8 @@ pub fn execute(args: &RequireArgs, cli: &super::Cli) -> anyhow::Result<()> {
ignore_platform_req: args.ignore_platform_req.clone(),
optimize_autoloader: args.optimize_autoloader,
classmap_authoritative: args.classmap_authoritative,
+ apcu_autoloader: false,
+ apcu_autoloader_prefix: None,
},
)?;
}
diff --git a/crates/mozart/src/commands/update.rs b/crates/mozart/src/commands/update.rs
index 06dfdeb..fc9400a 100644
--- a/crates/mozart/src/commands/update.rs
+++ b/crates/mozart/src/commands/update.rs
@@ -978,6 +978,8 @@ pub fn execute(args: &UpdateArgs, cli: &super::Cli) -> anyhow::Result<()> {
ignore_platform_req: args.ignore_platform_req.clone(),
optimize_autoloader: args.optimize_autoloader,
classmap_authoritative: args.classmap_authoritative,
+ apcu_autoloader: false,
+ apcu_autoloader_prefix: None,
},
)?;
}