[DX] Remove different php version rector reporting to make run more clean (#1959)

This commit is contained in:
Tomas Votruba 2022-03-25 00:39:44 +01:00 committed by GitHub
parent 278cd56de5
commit 86eb0dd363
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 1 additions and 114 deletions

View File

@ -1,103 +0,0 @@
<?php
declare(strict_types=1);
namespace Rector\VersionBonding\Application;
use Nette\Utils\Strings;
use PHPStan\Php\PhpVersion;
use Rector\Core\Contract\Console\OutputStyleInterface;
use Rector\Core\Contract\Rector\RectorInterface;
use Rector\Core\Php\PhpVersionProvider;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
final class MissedRectorDueVersionChecker
{
public function __construct(
private readonly PhpVersionProvider $phpVersionProvider,
private readonly OutputStyleInterface $rectorOutputStyle,
) {
}
/**
* @param RectorInterface[] $rectors
*/
public function check(array $rectors): void
{
$minProjectPhpVersion = $this->phpVersionProvider->provide();
$missedRectors = $this->resolveMissedRectors($rectors, $minProjectPhpVersion);
if ($missedRectors === []) {
return;
}
$this->reportWarningMessage($minProjectPhpVersion, $missedRectors);
$this->reportMissedRectors($missedRectors);
$solutionMessage = sprintf(
'Do you want to run them? Make "require" > "php" in `composer.json` higher,%sor add "Option::PHP_VERSION_FEATURES" parameter to your `rector.php`.',
PHP_EOL
);
$this->rectorOutputStyle->note($solutionMessage);
}
/**
* @param RectorInterface[] $rectors
* @return MinPhpVersionInterface[]
*/
private function resolveMissedRectors(array $rectors, int $minProjectPhpVersion): array
{
$missedRectors = [];
foreach ($rectors as $rector) {
if (! $rector instanceof MinPhpVersionInterface) {
continue;
}
// the conditions are met → skip it
if ($rector->provideMinPhpVersion() <= $minProjectPhpVersion) {
continue;
}
$missedRectors[] = $rector;
}
return $missedRectors;
}
/**
* @param MinPhpVersionInterface[] $minPhpVersions
*/
private function reportMissedRectors(array $minPhpVersions): void
{
if (! $this->rectorOutputStyle->isVerbose()) {
return;
}
foreach ($minPhpVersions as $minPhpVersion) {
$phpVersion = new PhpVersion($minPhpVersion->provideMinPhpVersion());
$shortRectorClass = Strings::after($minPhpVersion::class, '\\', -1);
$rectorMessage = sprintf(' * [%s] %s', $phpVersion->getVersionString(), $shortRectorClass);
$this->rectorOutputStyle->writeln($rectorMessage);
}
}
/**
* @param MinPhpVersionInterface[] $missedRectors
*/
private function reportWarningMessage(int $minProjectPhpVersion, array $missedRectors): void
{
$phpVersion = new PhpVersion($minProjectPhpVersion);
$warningMessage = sprintf(
'Your project requires min PHP version "%s". %s%d Rector rules defined in your configuration require higher PHP version and will not run,%sto avoid breaking your codebase, use -vvv for detailed info.',
$phpVersion->getVersionString(),
PHP_EOL . PHP_EOL,
count($missedRectors),
PHP_EOL
);
$this->rectorOutputStyle->warning($warningMessage);
}
}

View File

@ -12,7 +12,6 @@ use Rector\Core\Autoloading\BootstrapFilesIncluder;
use Rector\Core\Configuration\Option;
use Rector\Core\Console\Output\OutputFormatterCollector;
use Rector\Core\Contract\Console\OutputStyleInterface;
use Rector\Core\Contract\Rector\RectorInterface;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Reporting\MissingRectorRulesReporter;
use Rector\Core\StaticReflection\DynamicSourceLocatorDecorator;
@ -21,7 +20,6 @@ use Rector\Core\Validation\EmptyConfigurableRectorChecker;
use Rector\Core\ValueObject\Configuration;
use Rector\Core\ValueObject\ProcessResult;
use Rector\Core\ValueObjectFactory\ProcessResultFactory;
use Rector\VersionBonding\Application\MissedRectorDueVersionChecker;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
@ -30,9 +28,6 @@ use Symplify\PackageBuilder\Console\Command\CommandNaming;
final class ProcessCommand extends AbstractProcessCommand
{
/**
* @param RectorInterface[] $rectors
*/
public function __construct(
private readonly AdditionalAutoloader $additionalAutoloader,
private readonly ChangedFilesDetector $changedFilesDetector,
@ -41,12 +36,10 @@ final class ProcessCommand extends AbstractProcessCommand
private readonly BootstrapFilesIncluder $bootstrapFilesIncluder,
private readonly ProcessResultFactory $processResultFactory,
private readonly DynamicSourceLocatorDecorator $dynamicSourceLocatorDecorator,
private readonly MissedRectorDueVersionChecker $missedRectorDueVersionChecker,
private readonly EmptyConfigurableRectorChecker $emptyConfigurableRectorChecker,
private readonly OutputFormatterCollector $outputFormatterCollector,
private readonly OutputStyleInterface $rectorOutputStyle,
private readonly MemoryLimiter $memoryLimiter,
private readonly array $rectors
) {
parent::__construct();
}
@ -82,12 +75,9 @@ final class ProcessCommand extends AbstractProcessCommand
$paths = $configuration->getPaths();
// 0. add files and directories to static locator
// 1. add files and directories to static locator
$this->dynamicSourceLocatorDecorator->addPaths($paths);
// 1. inform user about non-runnable rules
$this->missedRectorDueVersionChecker->check($this->rectors);
// 2. inform user about registering configurable rule without configuration
$this->emptyConfigurableRectorChecker->check();