Skip to content

Commit

Permalink
Add --strict-psr flag to dump-autoload to fail the process if psr vio…
Browse files Browse the repository at this point in the history
…lations were detected, fixes composer#10241 (composer#10886)
  • Loading branch information
Seldaek authored and emahorvat52 committed Jan 18, 2023
1 parent 7045263 commit 83619e6
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
2 changes: 2 additions & 0 deletions doc/03-cli.md
Expand Up @@ -921,6 +921,8 @@ performance.
* **--ignore-platform-req:** ignore a specific platform requirement (`php`, `hhvm`,
`lib-*` and `ext-*`) and skip the [platform check](07-runtime.md#platform-check) for it.
Multiple requirements can be ignored via wildcard.
* **--strict-psr:** Return a failed status code (1) if PSR-4 or PSR-0 mapping errors
are present. Requires --optimize to work.
## clear-cache / clearcache / cc
Expand Down
12 changes: 11 additions & 1 deletion src/Composer/Command/DumpAutoloadCommand.php
Expand Up @@ -41,6 +41,7 @@ protected function configure()
new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables autoload-dev rules. Composer will by default infer this automatically according to the last install or update --no-dev state.'),
new InputOption('ignore-platform-req', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Ignore a specific platform requirement (php & ext- packages).'),
new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore all platform requirements (php & ext- packages).'),
new InputOption('strict-psr', null, InputOption::VALUE_NONE, 'Return a failed status code (1) if PSR-4 or PSR-0 mapping errors are present. Requires --optimize to work.'),
))
->setHelp(
<<<EOT
Expand Down Expand Up @@ -69,6 +70,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
$apcuPrefix = $input->getOption('apcu-prefix');
$apcu = $apcuPrefix !== null || $input->getOption('apcu') || $config->get('apcu-autoloader');

if ($input->getOption('strict-psr') && !$optimize) {
throw new \InvalidArgumentException('--strict-psr mode only works with optimized autoloader, use --optimize if you want a strict return value.');
}

if ($authoritative) {
$this->getIO()->write('<info>Generating optimized autoload files (authoritative)</info>');
} elseif ($optimize) {
Expand All @@ -91,7 +96,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
$generator->setRunScripts(true);
$generator->setApcu($apcu, $apcuPrefix);
$generator->setPlatformRequirementFilter($this->getPlatformRequirementFilter($input));
$numberOfClasses = $generator->dump($config, $localRepo, $package, $installationManager, 'composer', $optimize);
$classMap = $generator->dump($config, $localRepo, $package, $installationManager, 'composer', $optimize);
$numberOfClasses = count($classMap);

if ($authoritative) {
$this->getIO()->write('<info>Generated optimized autoload files (authoritative) containing '. $numberOfClasses .' classes</info>');
Expand All @@ -101,6 +107,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
$this->getIO()->write('<info>Generated autoload files</info>');
}

if ($input->getOption('strict-psr') && count($classMap->getPsrViolations()) > 0) {
return 1;
}

return 0;
}
}

0 comments on commit 83619e6

Please sign in to comment.