mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-01 08:50:50 +00:00
[DX] Remove different php version rector reporting to make run more clean (#1959)
This commit is contained in:
parent
278cd56de5
commit
86eb0dd363
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user