From 3c3170a04e2342f363fee4d7d318960b0439d975 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 29 Jan 2024 23:52:40 +0000 Subject: [PATCH] Updated Rector to commit 171fddb1a1e9c54e194130ffe039809721d1f465 https://github.com/rectorphp/rector-src/commit/171fddb1a1e9c54e194130ffe039809721d1f465 add withPhpSets() methods (#5519) --- ...VersionCompareFuncCallToConstantRector.php | 11 +--- rules/DeadCode/ConditionResolver.php | 10 +--- src/Application/VersionResolver.php | 4 +- src/Configuration/PhpLevelSetResolver.php | 44 +++++++++++++++ src/Configuration/RectorConfigBuilder.php | 53 +++++++++++++++++++ src/Php/PhpVersionProvider.php | 11 +--- .../ProjectComposerJsonPhpVersionResolver.php | 38 +++++-------- src/Util/PhpVersionFactory.php | 2 +- vendor/composer/autoload_classmap.php | 1 + vendor/composer/autoload_static.php | 1 + 10 files changed, 118 insertions(+), 57 deletions(-) create mode 100644 src/Configuration/PhpLevelSetResolver.php diff --git a/rules/CodingStyle/Rector/FuncCall/VersionCompareFuncCallToConstantRector.php b/rules/CodingStyle/Rector/FuncCall/VersionCompareFuncCallToConstantRector.php index 5792444b90e..7fa446633c1 100644 --- a/rules/CodingStyle/Rector/FuncCall/VersionCompareFuncCallToConstantRector.php +++ b/rules/CodingStyle/Rector/FuncCall/VersionCompareFuncCallToConstantRector.php @@ -26,19 +26,10 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; */ final class VersionCompareFuncCallToConstantRector extends AbstractRector { - /** - * @readonly - * @var \Rector\Util\PhpVersionFactory - */ - private $phpVersionFactory; /** * @var array> */ private const OPERATOR_TO_COMPARISON = ['=' => Identical::class, '==' => Identical::class, 'eq' => Identical::class, '!=' => NotIdentical::class, '<>' => NotIdentical::class, 'ne' => NotIdentical::class, '>' => Greater::class, 'gt' => Greater::class, '<' => Smaller::class, 'lt' => Smaller::class, '>=' => GreaterOrEqual::class, 'ge' => GreaterOrEqual::class, '<=' => SmallerOrEqual::class, 'le' => SmallerOrEqual::class]; - public function __construct(PhpVersionFactory $phpVersionFactory) - { - $this->phpVersionFactory = $phpVersionFactory; - } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Changes use of call to version compare function to use of PHP version constant', [new CodeSample(<<<'CODE_SAMPLE' @@ -121,7 +112,7 @@ CODE_SAMPLE if (!$expr instanceof String_) { return null; } - $value = $this->phpVersionFactory->createIntVersion($expr->value); + $value = PhpVersionFactory::createIntVersion($expr->value); return new LNumber($value); } } diff --git a/rules/DeadCode/ConditionResolver.php b/rules/DeadCode/ConditionResolver.php index 514c9a10276..e371e9eef27 100644 --- a/rules/DeadCode/ConditionResolver.php +++ b/rules/DeadCode/ConditionResolver.php @@ -34,17 +34,11 @@ final class ConditionResolver * @var \Rector\PhpParser\Node\Value\ValueResolver */ private $valueResolver; - /** - * @readonly - * @var \Rector\Util\PhpVersionFactory - */ - private $phpVersionFactory; - public function __construct(NodeNameResolver $nodeNameResolver, PhpVersionProvider $phpVersionProvider, ValueResolver $valueResolver, PhpVersionFactory $phpVersionFactory) + public function __construct(NodeNameResolver $nodeNameResolver, PhpVersionProvider $phpVersionProvider, ValueResolver $valueResolver) { $this->nodeNameResolver = $nodeNameResolver; $this->phpVersionProvider = $phpVersionProvider; $this->valueResolver = $valueResolver; - $this->phpVersionFactory = $phpVersionFactory; } public function resolveFromExpr(Expr $expr) : ?ConditionInterface { @@ -121,7 +115,7 @@ final class ConditionResolver return $this->phpVersionProvider->provide(); } if (\is_string($version)) { - return $this->phpVersionFactory->createIntVersion($version); + return PhpVersionFactory::createIntVersion($version); } return $version; } diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index 250235c2abe..4768218d173 100644 --- a/src/Application/VersionResolver.php +++ b/src/Application/VersionResolver.php @@ -19,12 +19,12 @@ final class VersionResolver * @api * @var string */ - public const PACKAGE_VERSION = 'ca23ae894e833861e83533ed9f89fc7b3bf37fee'; + public const PACKAGE_VERSION = '171fddb1a1e9c54e194130ffe039809721d1f465'; /** * @api * @var string */ - public const RELEASE_DATE = '2024-01-30 00:31:13'; + public const RELEASE_DATE = '2024-01-29 23:50:30'; /** * @var int */ diff --git a/src/Configuration/PhpLevelSetResolver.php b/src/Configuration/PhpLevelSetResolver.php new file mode 100644 index 00000000000..6260e0f72e9 --- /dev/null +++ b/src/Configuration/PhpLevelSetResolver.php @@ -0,0 +1,44 @@ + 1) { + throw new InvalidConfigurationException(\sprintf('Pick only one version target in "withPhpSets()". All rules up to this version will be used.%sTo use your composer.json PHP version, keep arguments empty.', \PHP_EOL)); + } + if ($pickedArguments === []) { + // use composer.json PHP version + $projectComposerJsonFilePath = \getcwd() . '/composer.json'; + if (\file_exists($projectComposerJsonFilePath)) { + $projectPhpVersion = ProjectComposerJsonPhpVersionResolver::resolve($projectComposerJsonFilePath); + if (\is_int($projectPhpVersion)) { + $this->sets[] = \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion($projectPhpVersion); + return $this; + } + } + throw new InvalidConfigurationException(\sprintf('We could not find local "composer.json" to determine your PHP version.%sPlease, fill the PHP version set in withPhpSets() manually.', \PHP_EOL)); + } elseif ($php53) { + $this->sets[] = LevelSetList::UP_TO_PHP_53; + } elseif ($php54) { + $this->sets[] = LevelSetList::UP_TO_PHP_54; + } elseif ($php55) { + $this->sets[] = LevelSetList::UP_TO_PHP_55; + } elseif ($php56) { + $this->sets[] = LevelSetList::UP_TO_PHP_56; + } elseif ($php70) { + $this->sets[] = LevelSetList::UP_TO_PHP_70; + } elseif ($php71) { + $this->sets[] = LevelSetList::UP_TO_PHP_71; + } elseif ($php72) { + $this->sets[] = LevelSetList::UP_TO_PHP_72; + } elseif ($php73) { + $this->sets[] = LevelSetList::UP_TO_PHP_73; + } elseif ($php74) { + $this->sets[] = LevelSetList::UP_TO_PHP_74; + } elseif ($php80) { + $this->sets[] = LevelSetList::UP_TO_PHP_80; + } elseif ($php81) { + $this->sets[] = LevelSetList::UP_TO_PHP_81; + } elseif ($php82) { + $this->sets[] = LevelSetList::UP_TO_PHP_82; + } elseif ($php83) { + $this->sets[] = LevelSetList::UP_TO_PHP_83; + } + return $this; + } public function withPreparedSets(bool $deadCode = \false, bool $codeQuality = \false, bool $codingStyle = \false, bool $typeDeclarations = \false, bool $privatization = \false, bool $naming = \false, bool $instanceOf = \false, bool $earlyReturn = \false, bool $strictBooleans = \false) : self { if ($deadCode) { diff --git a/src/Php/PhpVersionProvider.php b/src/Php/PhpVersionProvider.php index 0c2b1eb3e59..6ddc11330bd 100644 --- a/src/Php/PhpVersionProvider.php +++ b/src/Php/PhpVersionProvider.php @@ -16,11 +16,6 @@ use ReflectionClass; */ final class PhpVersionProvider { - /** - * @readonly - * @var \Rector\Php\PhpVersionResolver\ProjectComposerJsonPhpVersionResolver - */ - private $projectComposerJsonPhpVersionResolver; /** * @var string * @see https://regex101.com/r/qBMnbl/1 @@ -30,10 +25,6 @@ final class PhpVersionProvider * @var int|null */ private $phpVersionFeatures = null; - public function __construct(ProjectComposerJsonPhpVersionResolver $projectComposerJsonPhpVersionResolver) - { - $this->projectComposerJsonPhpVersionResolver = $projectComposerJsonPhpVersionResolver; - } /** * @return PhpVersion::* */ @@ -53,7 +44,7 @@ final class PhpVersionProvider } $projectComposerJson = \getcwd() . '/composer.json'; if (\file_exists($projectComposerJson)) { - $phpVersion = $this->projectComposerJsonPhpVersionResolver->resolve($projectComposerJson); + $phpVersion = ProjectComposerJsonPhpVersionResolver::resolve($projectComposerJson); if ($phpVersion !== null) { return $this->phpVersionFeatures = $phpVersion; } diff --git a/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php b/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php index 735153af96c..b51dd1ffd48 100644 --- a/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php +++ b/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php @@ -12,50 +12,36 @@ use Rector\Util\PhpVersionFactory; */ final class ProjectComposerJsonPhpVersionResolver { - /** - * @readonly - * @var \Composer\Semver\VersionParser - */ - private $versionParser; - /** - * @readonly - * @var \Rector\Util\PhpVersionFactory - */ - private $phpVersionFactory; /** * @var array */ - private $cachedPhpVersions = []; - public function __construct(VersionParser $versionParser, PhpVersionFactory $phpVersionFactory) + private static $cachedPhpVersions = []; + public static function resolve(string $composerJson) : ?int { - $this->versionParser = $versionParser; - $this->phpVersionFactory = $phpVersionFactory; - } - public function resolve(string $composerJson) : ?int - { - if (isset($this->cachedPhpVersions[$composerJson])) { - return $this->cachedPhpVersions[$composerJson]; + if (isset(self::$cachedPhpVersions[$composerJson])) { + return self::$cachedPhpVersions[$composerJson]; } $composerJsonContents = FileSystem::read($composerJson); $projectComposerJson = Json::decode($composerJsonContents, Json::FORCE_ARRAY); // see https://getcomposer.org/doc/06-config.md#platform $platformPhp = $projectComposerJson['config']['platform']['php'] ?? null; if ($platformPhp !== null) { - $this->cachedPhpVersions[$composerJson] = $this->phpVersionFactory->createIntVersion($platformPhp); - return $this->cachedPhpVersions[$composerJson]; + self::$cachedPhpVersions[$composerJson] = PhpVersionFactory::createIntVersion($platformPhp); + return self::$cachedPhpVersions[$composerJson]; } $requirePhpVersion = $projectComposerJson['require']['php'] ?? null; if ($requirePhpVersion === null) { return null; } - $this->cachedPhpVersions[$composerJson] = $this->createIntVersionFromComposerVersion($requirePhpVersion); - return $this->cachedPhpVersions[$composerJson]; + self::$cachedPhpVersions[$composerJson] = self::createIntVersionFromComposerVersion($requirePhpVersion); + return self::$cachedPhpVersions[$composerJson]; } - private function createIntVersionFromComposerVersion(string $projectPhpVersion) : int + private static function createIntVersionFromComposerVersion(string $projectPhpVersion) : int { - $constraint = $this->versionParser->parseConstraints($projectPhpVersion); + $versionParser = new VersionParser(); + $constraint = $versionParser->parseConstraints($projectPhpVersion); $lowerBound = $constraint->getLowerBound(); $lowerBoundVersion = $lowerBound->getVersion(); - return $this->phpVersionFactory->createIntVersion($lowerBoundVersion); + return PhpVersionFactory::createIntVersion($lowerBoundVersion); } } diff --git a/src/Util/PhpVersionFactory.php b/src/Util/PhpVersionFactory.php index 568dadec888..d09fa7f2996 100644 --- a/src/Util/PhpVersionFactory.php +++ b/src/Util/PhpVersionFactory.php @@ -5,7 +5,7 @@ namespace Rector\Util; final class PhpVersionFactory { - public function createIntVersion(string $version) : int + public static function createIntVersion(string $version) : int { $explodeDash = \explode('-', $version); if (\count($explodeDash) > 1) { diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index f32d688f686..1ca333d8293 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1175,6 +1175,7 @@ return array( 'Rector\\Configuration\\ConfigurationFactory' => $baseDir . '/src/Configuration/ConfigurationFactory.php', 'Rector\\Configuration\\Option' => $baseDir . '/src/Configuration/Option.php', 'Rector\\Configuration\\Parameter\\SimpleParameterProvider' => $baseDir . '/src/Configuration/Parameter/SimpleParameterProvider.php', + 'Rector\\Configuration\\PhpLevelSetResolver' => $baseDir . '/src/Configuration/PhpLevelSetResolver.php', 'Rector\\Configuration\\RectorConfigBuilder' => $baseDir . '/src/Configuration/RectorConfigBuilder.php', 'Rector\\Configuration\\RenamedClassesDataCollector' => $baseDir . '/src/Configuration/RenamedClassesDataCollector.php', 'Rector\\Console\\Command\\CustomRuleCommand' => $baseDir . '/src/Console/Command/CustomRuleCommand.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 99dc762d964..7d841e1320b 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -1389,6 +1389,7 @@ class ComposerStaticInitf637847380e2ddf55dcae18dded1d2b3 'Rector\\Configuration\\ConfigurationFactory' => __DIR__ . '/../..' . '/src/Configuration/ConfigurationFactory.php', 'Rector\\Configuration\\Option' => __DIR__ . '/../..' . '/src/Configuration/Option.php', 'Rector\\Configuration\\Parameter\\SimpleParameterProvider' => __DIR__ . '/../..' . '/src/Configuration/Parameter/SimpleParameterProvider.php', + 'Rector\\Configuration\\PhpLevelSetResolver' => __DIR__ . '/../..' . '/src/Configuration/PhpLevelSetResolver.php', 'Rector\\Configuration\\RectorConfigBuilder' => __DIR__ . '/../..' . '/src/Configuration/RectorConfigBuilder.php', 'Rector\\Configuration\\RenamedClassesDataCollector' => __DIR__ . '/../..' . '/src/Configuration/RenamedClassesDataCollector.php', 'Rector\\Console\\Command\\CustomRuleCommand' => __DIR__ . '/../..' . '/src/Console/Command/CustomRuleCommand.php',