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 #10241
  • Loading branch information
Seldaek committed Jun 19, 2022
1 parent 3a945ac commit a41fb25
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
2 changes: 2 additions & 0 deletions doc/03-cli.md
Expand Up @@ -915,6 +915,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
5 changes: 3 additions & 2 deletions src/Composer/Autoload/AutoloadGenerator.php
Expand Up @@ -12,6 +12,7 @@

namespace Composer\Autoload;

use Composer\ClassMapGenerator\ClassMap;
use Composer\ClassMapGenerator\ClassMapGenerator;
use Composer\Config;
use Composer\EventDispatcher\EventDispatcher;
Expand Down Expand Up @@ -161,7 +162,7 @@ public function setPlatformRequirementFilter(PlatformRequirementFilterInterface
/**
* @param string $targetDir
* @param bool $scanPsrPackages
* @return int
* @return ClassMap
* @throws \Seld\JsonLint\ParsingException
* @throws \RuntimeException
*/
Expand Down Expand Up @@ -445,7 +446,7 @@ public static function autoload(\$class)
));
}

return \count($classMap);
return $classMap;
}

/**
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 a41fb25

Please sign in to comment.