[DX] Add PhpUpgradeImplementsMinPhpVersionInterfaceRule (#910)

Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
Abdul Malik Ikhsan 2021-09-24 19:25:49 +07:00 committed by GitHub
parent ef779c9ced
commit 49314dc3d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
73 changed files with 944 additions and 157 deletions

View File

@ -17,6 +17,10 @@ services:
class: Rector\PHPStanRules\Rules\PhpUpgradeDowngradeRegisteredInSetRule class: Rector\PHPStanRules\Rules\PhpUpgradeDowngradeRegisteredInSetRule
tags: [phpstan.rules.rule] tags: [phpstan.rules.rule]
-
class: Rector\PHPStanRules\Rules\PhpUpgradeImplementsMinPhpVersionInterfaceRule
tags: [phpstan.rules.rule]
parameters: parameters:
level: max level: max

View File

@ -1,47 +0,0 @@
<?php
namespace Rector\Tests\Php73\Rector\BinaryOr\IsCountableRector\Fixture;
use Countable;
class PolyfillFunction
{
public function run($foo)
{
return is_array($foo) || $foo instanceof Countable;
}
}
// dummy
if (! function_exists('is_countable')) {
function is_countable($args)
{
return true;
}
}
?>
-----
<?php
namespace Rector\Tests\Php73\Rector\BinaryOr\IsCountableRector\Fixture;
use Countable;
class PolyfillFunction
{
public function run($foo)
{
return is_countable($foo);
}
}
// dummy
if (! function_exists('is_countable')) {
function is_countable($args)
{
return true;
}
}
?>

View File

@ -1,33 +0,0 @@
<?php
declare(strict_types=1);
namespace Rector\Tests\Php73\Rector\BinaryOr\IsCountableRector;
use Iterator;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;
final class PolyfillRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}
/**
* @return Iterator<SmartFileInfo>
*/
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/FixtureWithPolyfill');
}
public function provideConfigFilePath(): string
{
return __DIR__ . '/config/polyfill_config.php';
}
}

View File

@ -1,16 +0,0 @@
<?php
declare(strict_types=1);
use Rector\Core\Configuration\Option;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php73\Rector\BooleanOr\IsCountableRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(Option::PHP_VERSION_FEATURES, PhpVersionFeature::IS_COUNTABLE - 1);
$services = $containerConfigurator->services();
$services->set(IsCountableRector::class);
};

View File

@ -7,14 +7,21 @@ namespace Rector\Php52\Rector\Property;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\Property;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php52\Rector\Property\VarToPublicPropertyRector\VarToPublicPropertyRectorTest * @see \Rector\Tests\Php52\Rector\Property\VarToPublicPropertyRector\VarToPublicPropertyRectorTest
*/ */
final class VarToPublicPropertyRector extends AbstractRector final class VarToPublicPropertyRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::PROPERTY_MODIFIER;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Change property modifier from `var` to `public`', [ return new RuleDefinition('Change property modifier from `var` to `public`', [

View File

@ -13,6 +13,8 @@ use PhpParser\Node\Stmt\Switch_;
use PHPStan\Type\Constant\ConstantIntegerType; use PHPStan\Type\Constant\ConstantIntegerType;
use PHPStan\Type\ConstantType; use PHPStan\Type\ConstantType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -20,8 +22,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://stackoverflow.com/a/12349889/1348344 * @changelog https://stackoverflow.com/a/12349889/1348344
* @see \Rector\Tests\Php52\Rector\Switch_\ContinueToBreakInSwitchRector\ContinueToBreakInSwitchRectorTest * @see \Rector\Tests\Php52\Rector\Switch_\ContinueToBreakInSwitchRector\ContinueToBreakInSwitchRectorTest
*/ */
final class ContinueToBreakInSwitchRector extends AbstractRector final class ContinueToBreakInSwitchRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::CONTINUE_TO_BREAK;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Use break instead of continue in switch statements', [ return new RuleDefinition('Use break instead of continue in switch statements', [

View File

@ -9,6 +9,8 @@ use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\AssignRef; use PhpParser\Node\Expr\AssignRef;
use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\New_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -16,8 +18,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/UJN6H * @see https://3v4l.org/UJN6H
* @see \Rector\Tests\Php53\Rector\AssignRef\ClearReturnNewByReferenceRector\ClearReturnNewByReferenceRectorTest * @see \Rector\Tests\Php53\Rector\AssignRef\ClearReturnNewByReferenceRector\ClearReturnNewByReferenceRectorTest
*/ */
final class ClearReturnNewByReferenceRector extends AbstractRector final class ClearReturnNewByReferenceRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_REFERENCE_IN_NEW;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -7,6 +7,8 @@ namespace Rector\Php53\Rector\Variable;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Variable;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -14,7 +16,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see \Rector\Tests\Php53\Rector\Variable\ReplaceHttpServerVarsByServerRector\ReplaceHttpServerVarsByServerRectorTest * @see \Rector\Tests\Php53\Rector\Variable\ReplaceHttpServerVarsByServerRector\ReplaceHttpServerVarsByServerRectorTest
* @changelog https://blog.tigertech.net/posts/php-5-3-http-server-vars/ * @changelog https://blog.tigertech.net/posts/php-5-3-http-server-vars/
*/ */
final class ReplaceHttpServerVarsByServerRector extends AbstractRector final class ReplaceHttpServerVarsByServerRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var array<string, string> * @var array<string, string>
@ -29,6 +31,11 @@ final class ReplaceHttpServerVarsByServerRector extends AbstractRector
'HTTP_COOKIE_VARS' => '_COOKIE', 'HTTP_COOKIE_VARS' => '_COOKIE',
]; ];
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::SERVER_VAR;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -12,6 +12,8 @@ use PhpParser\Node\Stmt\Continue_;
use PHPStan\Type\Constant\ConstantIntegerType; use PHPStan\Type\Constant\ConstantIntegerType;
use PHPStan\Type\ConstantType; use PHPStan\Type\ConstantType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -20,8 +22,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php54\Rector\Break_\RemoveZeroBreakContinueRector\RemoveZeroBreakContinueRectorTest * @see \Rector\Tests\Php54\Rector\Break_\RemoveZeroBreakContinueRector\RemoveZeroBreakContinueRectorTest
*/ */
final class RemoveZeroBreakContinueRector extends AbstractRector final class RemoveZeroBreakContinueRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_ZERO_BREAK;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Remove 0 from break and continue', [ return new RuleDefinition('Remove 0 from break and continue', [

View File

@ -7,14 +7,21 @@ namespace Rector\Php54\Rector\FuncCall;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php54\Rector\FuncCall\RemoveReferenceFromCallRector\RemoveReferenceFromCallRectorTest * @see \Rector\Tests\Php54\Rector\FuncCall\RemoveReferenceFromCallRector\RemoveReferenceFromCallRectorTest
*/ */
final class RemoveReferenceFromCallRector extends AbstractRector final class RemoveReferenceFromCallRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_REFERENCE_IN_ARG;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Remove & from function and method calls', [ return new RuleDefinition('Remove & from function and method calls', [

View File

@ -10,8 +10,10 @@ use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php55\RegexMatcher; use Rector\Php55\RegexMatcher;
use Rector\Php72\NodeFactory\AnonymousFunctionFactory; use Rector\Php72\NodeFactory\AnonymousFunctionFactory;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -20,7 +22,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php55\Rector\FuncCall\PregReplaceEModifierRector\PregReplaceEModifierRectorTest * @see \Rector\Tests\Php55\Rector\FuncCall\PregReplaceEModifierRector\PregReplaceEModifierRectorTest
*/ */
final class PregReplaceEModifierRector extends AbstractRector final class PregReplaceEModifierRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private AnonymousFunctionFactory $anonymousFunctionFactory, private AnonymousFunctionFactory $anonymousFunctionFactory,
@ -28,6 +30,11 @@ final class PregReplaceEModifierRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::PREG_REPLACE_CALLBACK_E_MODIFIER;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -16,7 +16,9 @@ use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Function_;
use Rector\Core\NodeAnalyzer\InlineHTMLAnalyzer; use Rector\Core\NodeAnalyzer\InlineHTMLAnalyzer;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php56\NodeAnalyzer\UndefinedVariableResolver; use Rector\Php56\NodeAnalyzer\UndefinedVariableResolver;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -26,7 +28,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php56\Rector\FunctionLike\AddDefaultValueForUndefinedVariableRector\AddDefaultValueForUndefinedVariableRectorTest * @see \Rector\Tests\Php56\Rector\FunctionLike\AddDefaultValueForUndefinedVariableRector\AddDefaultValueForUndefinedVariableRectorTest
*/ */
final class AddDefaultValueForUndefinedVariableRector extends AbstractRector final class AddDefaultValueForUndefinedVariableRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -39,6 +41,11 @@ final class AddDefaultValueForUndefinedVariableRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::REQUIRE_DEFAULT_VALUE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Adds default value for undefined variable', [ return new RuleDefinition('Adds default value for undefined variable', [

View File

@ -9,6 +9,8 @@ use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\List_; use PhpParser\Node\Expr\List_;
use PHPStan\Type\StringType; use PHPStan\Type\StringType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,7 +20,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://stackoverflow.com/a/47965344/1348344 * @changelog https://stackoverflow.com/a/47965344/1348344
* @see \Rector\Tests\Php70\Rector\Assign\ListSplitStringRector\ListSplitStringRectorTest * @see \Rector\Tests\Php70\Rector\Assign\ListSplitStringRector\ListSplitStringRectorTest
*/ */
final class ListSplitStringRector extends AbstractRector final class ListSplitStringRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
@ -28,6 +30,11 @@ final class ListSplitStringRector extends AbstractRector
); );
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_LIST_SPLIT_STRING;
}
/** /**
* @return array<class-string<Node>> * @return array<class-string<Node>>
*/ */

View File

@ -8,7 +8,9 @@ use PhpParser\Node;
use PhpParser\Node\Stmt\Break_; use PhpParser\Node\Stmt\Break_;
use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\Return_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeNestingScope\ContextAnalyzer; use Rector\NodeNestingScope\ContextAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,13 +20,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/Qtelt * @see https://3v4l.org/Qtelt
* @see \Rector\Tests\Php70\Rector\Break_\BreakNotInLoopOrSwitchToReturnRector\BreakNotInLoopOrSwitchToReturnRectorTest * @see \Rector\Tests\Php70\Rector\Break_\BreakNotInLoopOrSwitchToReturnRector\BreakNotInLoopOrSwitchToReturnRectorTest
*/ */
final class BreakNotInLoopOrSwitchToReturnRector extends AbstractRector final class BreakNotInLoopOrSwitchToReturnRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private ContextAnalyzer $contextAnalyzer private ContextAnalyzer $contextAnalyzer
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_BREAK_OUTSIDE_LOOP;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -17,8 +17,10 @@ use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ClassReflection;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName; use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php70\NodeAnalyzer\Php4ConstructorClassMethodAnalyzer; use Rector\Php70\NodeAnalyzer\Php4ConstructorClassMethodAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -26,13 +28,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://wiki.php.net/rfc/remove_php4_constructors * @changelog https://wiki.php.net/rfc/remove_php4_constructors
* @see \Rector\Tests\Php70\Rector\ClassMethod\Php4ConstructorRector\Php4ConstructorRectorTest * @see \Rector\Tests\Php70\Rector\ClassMethod\Php4ConstructorRector\Php4ConstructorRectorTest
*/ */
final class Php4ConstructorRector extends AbstractRector final class Php4ConstructorRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private Php4ConstructorClassMethodAnalyzer $php4ConstructorClassMethodAnalyzer private Php4ConstructorClassMethodAnalyzer $php4ConstructorClassMethodAnalyzer
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_PHP4_CONSTRUCTOR;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,13 +8,15 @@ use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php70\Rector\FuncCall\CallUserMethodRector\CallUserMethodRectorTest * @see \Rector\Tests\Php70\Rector\FuncCall\CallUserMethodRector\CallUserMethodRectorTest
*/ */
final class CallUserMethodRector extends AbstractRector final class CallUserMethodRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var array<string, string> * @var array<string, string>
@ -24,6 +26,11 @@ final class CallUserMethodRector extends AbstractRector
'call_user_method_array' => 'call_user_func_array', 'call_user_method_array' => 'call_user_func_array',
]; ];
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_CALL_USER_METHOD;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -16,8 +16,10 @@ use PhpParser\Node\Name;
use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\LNumber;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php70\EregToPcreTransformer; use Rector\Php70\EregToPcreTransformer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -26,7 +28,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php70\Rector\FuncCall\EregToPregMatchRector\EregToPregMatchRectorTest * @see \Rector\Tests\Php70\Rector\FuncCall\EregToPregMatchRector\EregToPregMatchRectorTest
*/ */
final class EregToPregMatchRector extends AbstractRector final class EregToPregMatchRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var array<string, string> * @var array<string, string>
@ -45,6 +47,11 @@ final class EregToPregMatchRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_EREG_FUNCTION;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -23,10 +23,12 @@ use PHPStan\Reflection\ParameterReflection;
use PHPStan\Type\MixedType; use PHPStan\Type\MixedType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Naming\Naming\VariableNaming; use Rector\Naming\Naming\VariableNaming;
use Rector\NodeNestingScope\ParentScopeFinder; use Rector\NodeNestingScope\ParentScopeFinder;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php70\ValueObject\VariableAssignPair; use Rector\Php70\ValueObject\VariableAssignPair;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -35,7 +37,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php70\Rector\FuncCall\NonVariableToVariableOnFunctionCallRector\NonVariableToVariableOnFunctionCallRectorTest * @see \Rector\Tests\Php70\Rector\FuncCall\NonVariableToVariableOnFunctionCallRector\NonVariableToVariableOnFunctionCallRectorTest
*/ */
final class NonVariableToVariableOnFunctionCallRector extends AbstractRector final class NonVariableToVariableOnFunctionCallRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private VariableNaming $variableNaming, private VariableNaming $variableNaming,
@ -52,6 +54,11 @@ final class NonVariableToVariableOnFunctionCallRector extends AbstractRector
); );
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::VARIABLE_ON_FUNC_CALL;
}
/** /**
* @return array<class-string<Node>> * @return array<class-string<Node>>
*/ */

View File

@ -8,6 +8,8 @@ use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -15,7 +17,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/F5GE8 * @see https://3v4l.org/F5GE8
* @see \Rector\Tests\Php70\Rector\FuncCall\RenameMktimeWithoutArgsToTimeRector\RenameMktimeWithoutArgsToTimeRectorTest * @see \Rector\Tests\Php70\Rector\FuncCall\RenameMktimeWithoutArgsToTimeRector\RenameMktimeWithoutArgsToTimeRectorTest
*/ */
final class RenameMktimeWithoutArgsToTimeRector extends AbstractRector final class RenameMktimeWithoutArgsToTimeRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
@ -49,6 +51,11 @@ CODE_SAMPLE
); );
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_MKTIME_WITHOUT_ARG;
}
/** /**
* @return array<class-string<Node>> * @return array<class-string<Node>>
*/ */

View File

@ -9,6 +9,8 @@ use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Expr\List_; use PhpParser\Node\Expr\List_;
use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Variable;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -16,7 +18,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.list * @changelog http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.list
* @see \Rector\Tests\Php70\Rector\List_\EmptyListRector\EmptyListRectorTest * @see \Rector\Tests\Php70\Rector\List_\EmptyListRector\EmptyListRectorTest
*/ */
final class EmptyListRector extends AbstractRector final class EmptyListRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
@ -34,6 +36,11 @@ CODE_SAMPLE
); );
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_EMPTY_LIST;
}
/** /**
* @return array<class-string<Node>> * @return array<class-string<Node>>
*/ */

View File

@ -12,8 +12,10 @@ use PHPStan\Reflection\Php\PhpMethodReflection;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeCollector\StaticAnalyzer; use Rector\NodeCollector\StaticAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -21,7 +23,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/rkiSC * @see https://3v4l.org/rkiSC
* @see \Rector\Tests\Php70\Rector\MethodCall\ThisCallOnStaticMethodToStaticCallRector\ThisCallOnStaticMethodToStaticCallRectorTest * @see \Rector\Tests\Php70\Rector\MethodCall\ThisCallOnStaticMethodToStaticCallRector\ThisCallOnStaticMethodToStaticCallRectorTest
*/ */
final class ThisCallOnStaticMethodToStaticCallRector extends AbstractRector final class ThisCallOnStaticMethodToStaticCallRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private StaticAnalyzer $staticAnalyzer, private StaticAnalyzer $staticAnalyzer,
@ -29,6 +31,11 @@ final class ThisCallOnStaticMethodToStaticCallRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STATIC_CALL;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -15,8 +15,10 @@ use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver; use Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver;
use Rector\NodeCollector\StaticAnalyzer; use Rector\NodeCollector\StaticAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use ReflectionMethod; use ReflectionMethod;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -26,7 +28,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php70\Rector\StaticCall\StaticCallOnNonStaticToInstanceCallRector\StaticCallOnNonStaticToInstanceCallRectorTest * @see \Rector\Tests\Php70\Rector\StaticCall\StaticCallOnNonStaticToInstanceCallRector\StaticCallOnNonStaticToInstanceCallRectorTest
*/ */
final class StaticCallOnNonStaticToInstanceCallRector extends AbstractRector final class StaticCallOnNonStaticToInstanceCallRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private StaticAnalyzer $staticAnalyzer, private StaticAnalyzer $staticAnalyzer,
@ -36,6 +38,11 @@ final class StaticCallOnNonStaticToInstanceCallRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::INSTANCE_CALL;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,7 +8,9 @@ use PhpParser\Node;
use PhpParser\Node\Stmt\Case_; use PhpParser\Node\Stmt\Case_;
use PhpParser\Node\Stmt\Switch_; use PhpParser\Node\Stmt\Switch_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -19,8 +21,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php70\Rector\Switch_\ReduceMultipleDefaultSwitchRector\ReduceMultipleDefaultSwitchRectorTest * @see \Rector\Tests\Php70\Rector\Switch_\ReduceMultipleDefaultSwitchRector\ReduceMultipleDefaultSwitchRectorTest
*/ */
final class ReduceMultipleDefaultSwitchRector extends AbstractRector final class ReduceMultipleDefaultSwitchRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_MULTIPLE_DEFAULT_SWITCH;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,6 +8,8 @@ use PhpParser\Node;
use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Variable;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -15,8 +17,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see \Rector\Tests\Php70\Rector\Variable\WrapVariableVariableNameInCurlyBracesRector\WrapVariableVariableNameInCurlyBracesRectorTest * @see \Rector\Tests\Php70\Rector\Variable\WrapVariableVariableNameInCurlyBracesRector\WrapVariableVariableNameInCurlyBracesRectorTest
* @changelog https://www.php.net/manual/en/language.variables.variable.php * @changelog https://www.php.net/manual/en/language.variables.variable.php
*/ */
final class WrapVariableVariableNameInCurlyBracesRector extends AbstractRector final class WrapVariableVariableNameInCurlyBracesRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::WRAP_VARIABLE_VARIABLE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -15,7 +15,9 @@ use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\Property;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -24,8 +26,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php71\Rector\Assign\AssignArrayToStringRector\AssignArrayToStringRectorTest * @see \Rector\Tests\Php71\Rector\Assign\AssignArrayToStringRector\AssignArrayToStringRectorTest
*/ */
final class AssignArrayToStringRector extends AbstractRector final class AssignArrayToStringRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_ASSIGN_ARRAY_TO_STRING;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -16,6 +16,8 @@ use PhpParser\Node\Scalar\MagicConst\Line;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\Constant\ConstantStringType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -24,8 +26,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/ObNQZ * @see https://3v4l.org/ObNQZ
* @see \Rector\Tests\Php71\Rector\BinaryOp\BinaryOpBetweenNumberAndStringRector\BinaryOpBetweenNumberAndStringRectorTest * @see \Rector\Tests\Php71\Rector\BinaryOp\BinaryOpBetweenNumberAndStringRector\BinaryOpBetweenNumberAndStringRectorTest
*/ */
final class BinaryOpBetweenNumberAndStringRector extends AbstractRector final class BinaryOpBetweenNumberAndStringRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::BINARY_OP_NUMBER_STRING;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -11,13 +11,14 @@ use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature; use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php71\IsArrayAndDualCheckToAble; use Rector\Php71\IsArrayAndDualCheckToAble;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php71\Rector\BooleanOr\IsIterableRector\IsIterableRectorTest * @see \Rector\Tests\Php71\Rector\BooleanOr\IsIterableRector\IsIterableRectorTest
*/ */
final class IsIterableRector extends AbstractRector final class IsIterableRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private IsArrayAndDualCheckToAble $isArrayAndDualCheckToAble, private IsArrayAndDualCheckToAble $isArrayAndDualCheckToAble,
@ -25,6 +26,11 @@ final class IsIterableRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::IS_ITERABLE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -25,6 +25,7 @@ use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\TypeAnalyzer\CountableTypeAnalyzer; use Rector\NodeTypeResolver\TypeAnalyzer\CountableTypeAnalyzer;
use Rector\Php71\NodeAnalyzer\CountableAnalyzer; use Rector\Php71\NodeAnalyzer\CountableAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -33,7 +34,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php71\Rector\FuncCall\CountOnNullRector\CountOnNullRectorTest * @see \Rector\Tests\Php71\Rector\FuncCall\CountOnNullRector\CountOnNullRectorTest
*/ */
final class CountOnNullRector extends AbstractRector final class CountOnNullRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -46,6 +47,11 @@ final class CountOnNullRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::COUNT_ON_NULL;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -16,6 +16,8 @@ use PHPStan\Reflection\Type\UnionTypeMethodReflection;
use Rector\Core\NodeAnalyzer\VariadicAnalyzer; use Rector\Core\NodeAnalyzer\VariadicAnalyzer;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -25,7 +27,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php71\Rector\FuncCall\RemoveExtraParametersRector\RemoveExtraParametersRectorTest * @see \Rector\Tests\Php71\Rector\FuncCall\RemoveExtraParametersRector\RemoveExtraParametersRectorTest
*/ */
final class RemoveExtraParametersRector extends AbstractRector final class RemoveExtraParametersRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private VariadicAnalyzer $variadicAnalyzer, private VariadicAnalyzer $variadicAnalyzer,
@ -33,6 +35,11 @@ final class RemoveExtraParametersRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_EXTRA_PARAMETERS;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Remove extra parameters', [ return new RuleDefinition('Remove extra parameters', [

View File

@ -10,7 +10,9 @@ use PhpParser\Node\Name;
use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Namespace_;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface; use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -19,7 +21,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php71\Rector\Name\ReservedObjectRector\ReservedObjectRectorTest * @see \Rector\Tests\Php71\Rector\Name\ReservedObjectRector\ReservedObjectRectorTest
*/ */
final class ReservedObjectRector extends AbstractRector implements ConfigurableRectorInterface final class ReservedObjectRector extends AbstractRector implements ConfigurableRectorInterface, MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -31,6 +33,11 @@ final class ReservedObjectRector extends AbstractRector implements ConfigurableR
*/ */
private array $reservedKeywordsToReplacements = []; private array $reservedKeywordsToReplacements = [];
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::RESERVED_OBJECT_KEYWORD;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -13,7 +13,9 @@ use PhpParser\Node\Stmt\Expression;
use Rector\Core\Exception\ShouldNotHappenException; use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\NodeManipulator\AssignManipulator; use Rector\Core\NodeManipulator\AssignManipulator;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -22,13 +24,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\Assign\ListEachRector\ListEachRectorTest * @see \Rector\Tests\Php72\Rector\Assign\ListEachRector\ListEachRectorTest
*/ */
final class ListEachRector extends AbstractRector final class ListEachRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private AssignManipulator $assignManipulator private AssignManipulator $assignManipulator
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_EACH;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -14,20 +14,27 @@ use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\List_; use PhpParser\Node\Expr\List_;
use PhpParser\Node\Stmt\While_; use PhpParser\Node\Stmt\While_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php72\Rector\Assign\ReplaceEachAssignmentWithKeyCurrentRector\ReplaceEachAssignmentWithKeyCurrentRectorTest * @see \Rector\Tests\Php72\Rector\Assign\ReplaceEachAssignmentWithKeyCurrentRector\ReplaceEachAssignmentWithKeyCurrentRectorTest
*/ */
final class ReplaceEachAssignmentWithKeyCurrentRector extends AbstractRector final class ReplaceEachAssignmentWithKeyCurrentRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
*/ */
private const KEY = 'key'; private const KEY = 'key';
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_EACH_OUTSIDE_LOOP;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Replace each() assign outside loop', [ return new RuleDefinition('Replace each() assign outside loop', [

View File

@ -21,7 +21,9 @@ use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Php\ReservedKeywordAnalyzer; use Rector\Core\Php\ReservedKeywordAnalyzer;
use Rector\Core\PhpParser\Parser\InlineCodeParser; use Rector\Core\PhpParser\Parser\InlineCodeParser;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php72\NodeFactory\AnonymousFunctionFactory; use Rector\Php72\NodeFactory\AnonymousFunctionFactory;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -30,7 +32,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\FuncCall\CreateFunctionToAnonymousFunctionRector\CreateFunctionToAnonymousFunctionRectorTest * @see \Rector\Tests\Php72\Rector\FuncCall\CreateFunctionToAnonymousFunctionRector\CreateFunctionToAnonymousFunctionRectorTest
*/ */
final class CreateFunctionToAnonymousFunctionRector extends AbstractRector final class CreateFunctionToAnonymousFunctionRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private InlineCodeParser $inlineCodeParser, private InlineCodeParser $inlineCodeParser,
@ -39,6 +41,11 @@ final class CreateFunctionToAnonymousFunctionRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_CREATE_FUNCTION;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -13,7 +13,9 @@ use PhpParser\Node\Stmt\Class_;
use PHPStan\Analyser\Scope; use PHPStan\Analyser\Scope;
use PHPStan\Type\NullType; use PHPStan\Type\NullType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -22,8 +24,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\FuncCall\GetClassOnNullRector\GetClassOnNullRectorTest * @see \Rector\Tests\Php72\Rector\FuncCall\GetClassOnNullRector\GetClassOnNullRectorTest
*/ */
final class GetClassOnNullRector extends AbstractRector final class GetClassOnNullRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_NULL_ON_GET_CLASS;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Null is no more allowed in get_class()', [ return new RuleDefinition('Null is no more allowed in get_class()', [

View File

@ -9,7 +9,9 @@ use PhpParser\Node\Expr\BooleanNot;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,8 +20,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\FuncCall\IsObjectOnIncompleteClassRector\IsObjectOnIncompleteClassRectorTest * @see \Rector\Tests\Php72\Rector\FuncCall\IsObjectOnIncompleteClassRector\IsObjectOnIncompleteClassRectorTest
*/ */
final class IsObjectOnIncompleteClassRector extends AbstractRector final class IsObjectOnIncompleteClassRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::INVERTED_BOOL_IS_OBJECT_INCOMPLETE_CLASS;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -9,7 +9,9 @@ use PhpParser\Node\Arg;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Variable;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,8 +20,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\FuncCall\ParseStrWithResultArgumentRector\ParseStrWithResultArgumentRectorTest * @see \Rector\Tests\Php72\Rector\FuncCall\ParseStrWithResultArgumentRector\ParseStrWithResultArgumentRectorTest
*/ */
final class ParseStrWithResultArgumentRector extends AbstractRector final class ParseStrWithResultArgumentRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::RESULT_ARG_IN_PARSE_STR;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -9,7 +9,9 @@ use PhpParser\Node\Expr\ConstFetch;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\TypeAnalyzer\StringTypeAnalyzer; use Rector\NodeTypeResolver\TypeAnalyzer\StringTypeAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -17,13 +19,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/YiTeP * @see https://3v4l.org/YiTeP
* @see \Rector\Tests\Php72\Rector\FuncCall\StringifyDefineRector\StringifyDefineRectorTest * @see \Rector\Tests\Php72\Rector\FuncCall\StringifyDefineRector\StringifyDefineRectorTest
*/ */
final class StringifyDefineRector extends AbstractRector final class StringifyDefineRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private StringTypeAnalyzer $stringTypeAnalyzer private StringTypeAnalyzer $stringTypeAnalyzer
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STRING_IN_FIRST_DEFINE_ARG;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Make first argument of define() string', [ return new RuleDefinition('Make first argument of define() string', [

View File

@ -11,6 +11,8 @@ use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Expression;
use PhpParser\Parser; use PhpParser\Parser;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -19,13 +21,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\FuncCall\StringsAssertNakedRector\StringsAssertNakedRectorTest * @see \Rector\Tests\Php72\Rector\FuncCall\StringsAssertNakedRector\StringsAssertNakedRectorTest
*/ */
final class StringsAssertNakedRector extends AbstractRector final class StringsAssertNakedRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private Parser $parser private Parser $parser
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STRING_IN_ASSERT_ARG;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -9,15 +9,22 @@ use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\Cast\Unset_; use PhpParser\Node\Expr\Cast\Unset_;
use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Expression;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php72\Rector\Unset_\UnsetCastRector\UnsetCastRectorTest * @see \Rector\Tests\Php72\Rector\Unset_\UnsetCastRector\UnsetCastRectorTest
*/ */
final class UnsetCastRector extends AbstractRector final class UnsetCastRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_UNSET_CAST;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Removes (unset) cast', [ return new RuleDefinition('Removes (unset) cast', [

View File

@ -13,6 +13,8 @@ use PhpParser\Node\Stmt\Foreach_;
use PhpParser\Node\Stmt\While_; use PhpParser\Node\Stmt\While_;
use Rector\Core\NodeManipulator\AssignManipulator; use Rector\Core\NodeManipulator\AssignManipulator;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -21,13 +23,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php72\Rector\While_\WhileEachToForeachRector\WhileEachToForeachRectorTest * @see \Rector\Tests\Php72\Rector\While_\WhileEachToForeachRector\WhileEachToForeachRectorTest
*/ */
final class WhileEachToForeachRector extends AbstractRector final class WhileEachToForeachRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private AssignManipulator $assignManipulator private AssignManipulator $assignManipulator
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_EACH;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -11,13 +11,14 @@ use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature; use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php71\IsArrayAndDualCheckToAble; use Rector\Php71\IsArrayAndDualCheckToAble;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php73\Rector\BinaryOr\IsCountableRector\IsCountableRectorTest * @see \Rector\Tests\Php73\Rector\BinaryOr\IsCountableRector\IsCountableRectorTest
*/ */
final class IsCountableRector extends AbstractRector final class IsCountableRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private IsArrayAndDualCheckToAble $isArrayAndDualCheckToAble, private IsArrayAndDualCheckToAble $isArrayAndDualCheckToAble,

View File

@ -10,7 +10,9 @@ use PhpParser\Node\Name;
use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Name\FullyQualified;
use PHPStan\Reflection\ReflectionProvider; use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -19,7 +21,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php73\Rector\ConstFetch\SensitiveConstantNameRector\SensitiveConstantNameRectorTest * @see \Rector\Tests\Php73\Rector\ConstFetch\SensitiveConstantNameRector\SensitiveConstantNameRectorTest
*/ */
final class SensitiveConstantNameRector extends AbstractRector final class SensitiveConstantNameRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @see http://php.net/manual/en/reserved.constants.php * @see http://php.net/manual/en/reserved.constants.php
@ -89,6 +91,11 @@ final class SensitiveConstantNameRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_INSENSITIVE_CONSTANT_NAME;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -11,7 +11,9 @@ use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use Rector\Core\Php\Regex\RegexPatternArgumentManipulator; use Rector\Core\Php\Regex\RegexPatternArgumentManipulator;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -19,7 +21,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/dRG8U * @see https://3v4l.org/dRG8U
* @see \Rector\Tests\Php73\Rector\FuncCall\RegexDashEscapeRector\RegexDashEscapeRectorTest * @see \Rector\Tests\Php73\Rector\FuncCall\RegexDashEscapeRector\RegexDashEscapeRectorTest
*/ */
final class RegexDashEscapeRector extends AbstractRector final class RegexDashEscapeRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -46,6 +48,11 @@ final class RegexDashEscapeRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::ESCAPE_DASH_IN_REGEX;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Escape - in some cases', [ return new RuleDefinition('Escape - in some cases', [

View File

@ -7,6 +7,8 @@ namespace Rector\Php73\Rector\FuncCall;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -15,8 +17,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php73\Rector\FuncCall\SensitiveDefineRector\SensitiveDefineRectorTest * @see \Rector\Tests\Php73\Rector\FuncCall\SensitiveDefineRector\SensitiveDefineRectorTest
*/ */
final class SensitiveDefineRector extends AbstractRector final class SensitiveDefineRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_INSENSITIVE_CONSTANT_DEFINE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,7 +8,9 @@ use PhpParser\Node;
use PhpParser\Node\Expr\Cast\String_; use PhpParser\Node\Expr\Cast\String_;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php73\NodeTypeAnalyzer\NodeTypeAnalyzer; use Rector\Php73\NodeTypeAnalyzer\NodeTypeAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -16,7 +18,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://wiki.php.net/rfc/deprecations_php_7_3#string_search_functions_with_integer_needle * @changelog https://wiki.php.net/rfc/deprecations_php_7_3#string_search_functions_with_integer_needle
* @see \Rector\Tests\Php73\Rector\FuncCall\StringifyStrNeedlesRector\StringifyStrNeedlesRectorTest * @see \Rector\Tests\Php73\Rector\FuncCall\StringifyStrNeedlesRector\StringifyStrNeedlesRectorTest
*/ */
final class StringifyStrNeedlesRector extends AbstractRector final class StringifyStrNeedlesRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string[] * @var string[]
@ -39,6 +41,11 @@ final class StringifyStrNeedlesRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_INT_IN_STR_NEEDLES;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Makes needles explicit strings', [ return new RuleDefinition('Makes needles explicit strings', [

View File

@ -7,7 +7,9 @@ namespace Rector\Php73\Rector\String_;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -15,7 +17,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes * @changelog https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes
* @see \Rector\Tests\Php73\Rector\String_\SensitiveHereNowDocRector\SensitiveHereNowDocRectorTest * @see \Rector\Tests\Php73\Rector\String_\SensitiveHereNowDocRector\SensitiveHereNowDocRectorTest
*/ */
final class SensitiveHereNowDocRector extends AbstractRector final class SensitiveHereNowDocRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -27,6 +29,11 @@ final class SensitiveHereNowDocRector extends AbstractRector
*/ */
private const ATTRIBUTE_DOC_LABEL = 'docLabel'; private const ATTRIBUTE_DOC_LABEL = 'docLabel';
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::SENSITIVE_HERE_NOW_DOC;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -7,8 +7,10 @@ namespace Rector\Php74\Rector\ArrayDimFetch;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\ArrayDimFetch;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer; use Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -16,13 +18,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://www.php.net/manual/en/migration74.deprecated.php * @changelog https://www.php.net/manual/en/migration74.deprecated.php
* @see \Rector\Tests\Php74\Rector\ArrayDimFetch\CurlyToSquareBracketArrayStringRector\CurlyToSquareBracketArrayStringRectorTest * @see \Rector\Tests\Php74\Rector\ArrayDimFetch\CurlyToSquareBracketArrayStringRector\CurlyToSquareBracketArrayStringRectorTest
*/ */
final class CurlyToSquareBracketArrayStringRector extends AbstractRector final class CurlyToSquareBracketArrayStringRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private FollowedByCurlyBracketAnalyzer $followedByCurlyBracketAnalyzer private FollowedByCurlyBracketAnalyzer $followedByCurlyBracketAnalyzer
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_CURLY_BRACKET_ARRAY_STRING;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -7,7 +7,9 @@ namespace Rector\Php74\Rector\Double;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Expr\Cast\Double; use PhpParser\Node\Expr\Cast\Double;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -15,8 +17,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://wiki.php.net/rfc/deprecations_php_7_4 * @changelog https://wiki.php.net/rfc/deprecations_php_7_4
* @see \Rector\Tests\Php74\Rector\Double\RealToFloatTypeCastRector\RealToFloatTypeCastRectorTest * @see \Rector\Tests\Php74\Rector\Double\RealToFloatTypeCastRector\RealToFloatTypeCastRectorTest
*/ */
final class RealToFloatTypeCastRector extends AbstractRector final class RealToFloatTypeCastRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_REAL;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Change deprecated (real) to (float)', [ return new RuleDefinition('Change deprecated (real) to (float)', [

View File

@ -9,6 +9,8 @@ use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -17,8 +19,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/69mpd * @see https://3v4l.org/69mpd
* @see \Rector\Tests\Php74\Rector\FuncCall\ArrayKeyExistsOnPropertyRector\ArrayKeyExistsOnPropertyRectorTest * @see \Rector\Tests\Php74\Rector\FuncCall\ArrayKeyExistsOnPropertyRector\ArrayKeyExistsOnPropertyRectorTest
*/ */
final class ArrayKeyExistsOnPropertyRector extends AbstractRector final class ArrayKeyExistsOnPropertyRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::ARRAY_KEY_EXISTS_TO_PROPERTY_EXISTS;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,6 +8,8 @@ use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -16,8 +18,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/9rLjE * @see https://3v4l.org/9rLjE
* @see \Rector\Tests\Php74\Rector\FuncCall\FilterVarToAddSlashesRector\FilterVarToAddSlashesRectorTest * @see \Rector\Tests\Php74\Rector\FuncCall\FilterVarToAddSlashesRector\FilterVarToAddSlashesRectorTest
*/ */
final class FilterVarToAddSlashesRector extends AbstractRector final class FilterVarToAddSlashesRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::FILTER_VAR_TO_ADD_SLASHES;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -10,6 +10,8 @@ use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\LNumber;
use PHPStan\Type\IntegerType; use PHPStan\Type\IntegerType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,8 +20,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php74\Rector\FuncCall\MbStrrposEncodingArgumentPositionRector\MbStrrposEncodingArgumentPositionRectorTest * @see \Rector\Tests\Php74\Rector\FuncCall\MbStrrposEncodingArgumentPositionRector\MbStrrposEncodingArgumentPositionRectorTest
*/ */
final class MbStrrposEncodingArgumentPositionRector extends AbstractRector final class MbStrrposEncodingArgumentPositionRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::CHANGE_MB_STRPOS_ARG_POSITION;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -11,6 +11,8 @@ use PhpParser\Node\Name;
use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Function_;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface; use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,7 +20,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @changelog https://github.com/php/php-src/pull/3941/files#diff-7e3a1a5df28a1cbd8c0fb6db68f243da * @changelog https://github.com/php/php-src/pull/3941/files#diff-7e3a1a5df28a1cbd8c0fb6db68f243da
* @see \Rector\Tests\Php74\Rector\Function_\ReservedFnFunctionRector\ReservedFnFunctionRectorTest * @see \Rector\Tests\Php74\Rector\Function_\ReservedFnFunctionRector\ReservedFnFunctionRectorTest
*/ */
final class ReservedFnFunctionRector extends AbstractRector implements ConfigurableRectorInterface final class ReservedFnFunctionRector extends AbstractRector implements ConfigurableRectorInterface, MinPhpVersionInterface
{ {
/** /**
* @api * @api
@ -31,6 +33,11 @@ final class ReservedFnFunctionRector extends AbstractRector implements Configura
*/ */
private array $reservedNamesToNewOnes = []; private array $reservedNamesToNewOnes = [];
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::RESERVED_FN_FUNCTION_NAME;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Change fn() function name, since it will be reserved keyword', [ return new RuleDefinition('Change fn() function name, since it will be reserved keyword', [

View File

@ -14,7 +14,9 @@ use PHPStan\Analyser\Scope;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use PHPStan\Type\UnionType; use PHPStan\Type\UnionType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -26,7 +28,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php74\Rector\MethodCall\ChangeReflectionTypeToStringToGetNameRector\ChangeReflectionTypeToStringToGetNameRectorTest * @see \Rector\Tests\Php74\Rector\MethodCall\ChangeReflectionTypeToStringToGetNameRector\ChangeReflectionTypeToStringToGetNameRectorTest
*/ */
final class ChangeReflectionTypeToStringToGetNameRector extends AbstractRector final class ChangeReflectionTypeToStringToGetNameRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -39,6 +41,11 @@ final class ChangeReflectionTypeToStringToGetNameRector extends AbstractRector
*/ */
private array $callsByVariable = []; private array $callsByVariable = [];
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::REFLECTION_TYPE_GETNAME;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Change string calls on ReflectionType', [ return new RuleDefinition('Change string calls on ReflectionType', [

View File

@ -12,6 +12,8 @@ use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -20,8 +22,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* @see https://3v4l.org/RTCUq * @see https://3v4l.org/RTCUq
* @see \Rector\Tests\Php74\Rector\StaticCall\ExportToReflectionFunctionRector\ExportToReflectionFunctionRectorTest * @see \Rector\Tests\Php74\Rector\StaticCall\ExportToReflectionFunctionRector\ExportToReflectionFunctionRectorTest
*/ */
final class ExportToReflectionFunctionRector extends AbstractRector final class ExportToReflectionFunctionRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::EXPORT_TO_REFLECTION_FUNCTION;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -7,14 +7,21 @@ namespace Rector\Php80\Rector\ClassMethod;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php80\Rector\ClassMethod\FinalPrivateToPrivateVisibilityRector\FinalPrivateToPrivateVisibilityRectorTest * @see \Rector\Tests\Php80\Rector\ClassMethod\FinalPrivateToPrivateVisibilityRector\FinalPrivateToPrivateVisibilityRectorTest
*/ */
final class FinalPrivateToPrivateVisibilityRector extends AbstractRector final class FinalPrivateToPrivateVisibilityRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::NO_FINAL_PRIVATE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Changes method visibility from final private to only private', [ return new RuleDefinition('Changes method visibility from final private to only private', [

View File

@ -13,9 +13,11 @@ use PHPStan\Reflection\ParametersAcceptorSelector;
use Rector\CodingStyle\Reflection\VendorLocationDetector; use Rector\CodingStyle\Reflection\VendorLocationDetector;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\Reflection\ReflectionResolver;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php80\NodeResolver\ArgumentSorter; use Rector\Php80\NodeResolver\ArgumentSorter;
use Rector\Php80\NodeResolver\RequireOptionalParamResolver; use Rector\Php80\NodeResolver\RequireOptionalParamResolver;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -24,7 +26,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\ClassMethod\OptionalParametersAfterRequiredRector\OptionalParametersAfterRequiredRectorTest * @see \Rector\Tests\Php80\Rector\ClassMethod\OptionalParametersAfterRequiredRector\OptionalParametersAfterRequiredRectorTest
*/ */
final class OptionalParametersAfterRequiredRector extends AbstractRector final class OptionalParametersAfterRequiredRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -39,6 +41,11 @@ final class OptionalParametersAfterRequiredRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::DEPRECATE_REQUIRED_PARAMETER_AFTER_OPTIONAL;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Move required parameters after optional ones', [ return new RuleDefinition('Move required parameters after optional ones', [

View File

@ -8,14 +8,21 @@ use PhpParser\Node;
use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName; use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\Php80\Rector\ClassMethod\SetStateToStaticRector\SetStateToStaticRectorTest * @see \Rector\Tests\Php80\Rector\ClassMethod\SetStateToStaticRector\SetStateToStaticRectorTest
*/ */
final class SetStateToStaticRector extends AbstractRector final class SetStateToStaticRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STATIC_VISIBILITY_SET_STATE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Adds static visibility to __set_state() methods', [ return new RuleDefinition('Adds static visibility to __set_state() methods', [

View File

@ -16,11 +16,13 @@ use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover;
use Rector\BetterPhpDocParser\ValueObject\PhpDoc\DoctrineAnnotation\CurlyListNode; use Rector\BetterPhpDocParser\ValueObject\PhpDoc\DoctrineAnnotation\CurlyListNode;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface; use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer; use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer;
use Rector\Php80\NodeFactory\AttributeFlagFactory; use Rector\Php80\NodeFactory\AttributeFlagFactory;
use Rector\PhpAttribute\Printer\PhpAttributeGroupFactory; use Rector\PhpAttribute\Printer\PhpAttributeGroupFactory;
use Rector\PostRector\Collector\PropertyToAddCollector; use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata; use Rector\PostRector\ValueObject\PropertyMetadata;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
use Webmozart\Assert\Assert; use Webmozart\Assert\Assert;
@ -33,7 +35,7 @@ use Webmozart\Assert\Assert;
* *
* @see \Rector\Tests\Php80\Rector\Class_\DoctrineAnnotationClassToAttributeRector\DoctrineAnnotationClassToAttributeRectorTest * @see \Rector\Tests\Php80\Rector\Class_\DoctrineAnnotationClassToAttributeRector\DoctrineAnnotationClassToAttributeRectorTest
*/ */
final class DoctrineAnnotationClassToAttributeRector extends AbstractRector implements ConfigurableRectorInterface final class DoctrineAnnotationClassToAttributeRector extends AbstractRector implements ConfigurableRectorInterface, MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -70,6 +72,11 @@ final class DoctrineAnnotationClassToAttributeRector extends AbstractRector impl
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::ATTRIBUTES;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Refactor Doctrine @annotation annotated class to a PHP 8.0 attribute class', [ return new RuleDefinition('Refactor Doctrine @annotation annotated class to a PHP 8.0 attribute class', [

View File

@ -11,7 +11,9 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName; use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer; use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -20,7 +22,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\Class_\StringableForToStringRector\StringableForToStringRectorTest * @see \Rector\Tests\Php80\Rector\Class_\StringableForToStringRector\StringableForToStringRectorTest
*/ */
final class StringableForToStringRector extends AbstractRector final class StringableForToStringRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string * @var string
@ -32,6 +34,11 @@ final class StringableForToStringRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STRINGABLE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -14,9 +14,11 @@ use PhpParser\Node\Stmt\Foreach_;
use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\If_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeNestingScope\ParentFinder; use Rector\NodeNestingScope\ParentFinder;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php80\NodeManipulator\TokenManipulator; use Rector\Php80\NodeManipulator\TokenManipulator;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -25,7 +27,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\FuncCall\TokenGetAllToObjectRector\TokenGetAllToObjectRectorTest * @see \Rector\Tests\Php80\Rector\FuncCall\TokenGetAllToObjectRector\TokenGetAllToObjectRectorTest
*/ */
final class TokenGetAllToObjectRector extends AbstractRector final class TokenGetAllToObjectRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private TokenManipulator $tokenManipulator, private TokenManipulator $tokenManipulator,
@ -33,6 +35,11 @@ final class TokenGetAllToObjectRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::PHP_TOKEN;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -15,8 +15,10 @@ use PhpParser\Node\Expr\UnaryMinus;
use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\LNumber;
use PhpParser\Node\Scalar\String_; use PhpParser\Node\Scalar\String_;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Nette\NodeAnalyzer\BinaryOpAnalyzer; use Rector\Nette\NodeAnalyzer\BinaryOpAnalyzer;
use Rector\Nette\ValueObject\FuncCallAndExpr; use Rector\Nette\ValueObject\FuncCallAndExpr;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -25,13 +27,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\Identical\StrEndsWithRector\StrEndsWithRectorTest * @see \Rector\Tests\Php80\Rector\Identical\StrEndsWithRector\StrEndsWithRectorTest
*/ */
final class StrEndsWithRector extends AbstractRector final class StrEndsWithRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private BinaryOpAnalyzer $binaryOpAnalyzer private BinaryOpAnalyzer $binaryOpAnalyzer
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STR_ENDS_WITH;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Change helper functions to str_ends_with()', [ return new RuleDefinition('Change helper functions to str_ends_with()', [

View File

@ -8,8 +8,10 @@ use PhpParser\Node;
use PhpParser\Node\Expr\BinaryOp\Identical; use PhpParser\Node\Expr\BinaryOp\Identical;
use PhpParser\Node\Expr\BinaryOp\NotIdentical; use PhpParser\Node\Expr\BinaryOp\NotIdentical;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php80\Contract\StrStartWithMatchAndRefactorInterface; use Rector\Php80\Contract\StrStartWithMatchAndRefactorInterface;
use Rector\Php80\ValueObject\StrStartsWith; use Rector\Php80\ValueObject\StrStartsWith;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -21,7 +23,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\Identical\StrStartsWithRector\StrStartsWithRectorTest * @see \Rector\Tests\Php80\Rector\Identical\StrStartsWithRector\StrStartsWithRectorTest
*/ */
final class StrStartsWithRector extends AbstractRector final class StrStartsWithRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @param StrStartWithMatchAndRefactorInterface[] $strStartWithMatchAndRefactors * @param StrStartWithMatchAndRefactorInterface[] $strStartWithMatchAndRefactors
@ -31,6 +33,11 @@ final class StrStartsWithRector extends AbstractRector
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STR_STARTS_WITH;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -11,6 +11,8 @@ use PhpParser\Node\Expr\BooleanNot;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name; use PhpParser\Node\Name;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -19,13 +21,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\NotIdentical\StrContainsRector\StrContainsRectorTest * @see \Rector\Tests\Php80\Rector\NotIdentical\StrContainsRector\StrContainsRectorTest
*/ */
final class StrContainsRector extends AbstractRector final class StrContainsRector extends AbstractRector implements MinPhpVersionInterface
{ {
/** /**
* @var string[] * @var string[]
*/ */
private const OLD_STR_NAMES = ['strpos', 'strstr']; private const OLD_STR_NAMES = ['strpos', 'strstr'];
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::STR_CONTAINS;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,6 +8,8 @@ use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\Ternary; use PhpParser\Node\Expr\Ternary;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -16,8 +18,13 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php80\Rector\Ternary\GetDebugTypeRector\GetDebugTypeRectorTest * @see \Rector\Tests\Php80\Rector\Ternary\GetDebugTypeRector\GetDebugTypeRectorTest
*/ */
final class GetDebugTypeRector extends AbstractRector final class GetDebugTypeRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::GET_DEBUG_TYPE;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition( return new RuleDefinition(

View File

@ -8,7 +8,9 @@ use PhpParser\Node;
use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Class_;
use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\Php81\NodeFactory\EnumFactory; use Rector\Php81\NodeFactory\EnumFactory;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -18,13 +20,18 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
* *
* @see \Rector\Tests\Php81\Rector\Class_\SpatieEnumClassToEnumRector\SpatieEnumClassToEnumRectorTest * @see \Rector\Tests\Php81\Rector\Class_\SpatieEnumClassToEnumRector\SpatieEnumClassToEnumRectorTest
*/ */
final class SpatieEnumClassToEnumRector extends AbstractRector final class SpatieEnumClassToEnumRector extends AbstractRector implements MinPhpVersionInterface
{ {
public function __construct( public function __construct(
private EnumFactory $enumFactory private EnumFactory $enumFactory
) { ) {
} }
public function provideMinPhpVersion(): int
{
return PhpVersionFeature::ENUM;
}
public function getRuleDefinition(): RuleDefinition public function getRuleDefinition(): RuleDefinition
{ {
return new RuleDefinition('Refactor Spatie enum class to native Enum', [ return new RuleDefinition('Refactor Spatie enum class to native Enum', [

View File

@ -6,6 +6,12 @@ namespace Rector\Core\ValueObject;
final class PhpVersion final class PhpVersion
{ {
/**
* @api
* @var int
*/
public const PHP_52 = 50200;
/** /**
* @api * @api
* @var int * @var int

View File

@ -6,6 +6,26 @@ namespace Rector\Core\ValueObject;
final class PhpVersionFeature final class PhpVersionFeature
{ {
/**
* @var int
*/
public const PROPERTY_MODIFIER = PhpVersion::PHP_52;
/**
* @var int
*/
public const CONTINUE_TO_BREAK = PhpVersion::PHP_52;
/**
* @var int
*/
public const NO_REFERENCE_IN_NEW = PhpVersion::PHP_53;
/**
* @var int
*/
public const SERVER_VAR = PhpVersion::PHP_53;
/** /**
* @var int * @var int
*/ */
@ -16,6 +36,16 @@ final class PhpVersionFeature
*/ */
public const ELVIS_OPERATOR = PhpVersion::PHP_53; public const ELVIS_OPERATOR = PhpVersion::PHP_53;
/**
* @var int
*/
public const NO_ZERO_BREAK = PhpVersion::PHP_54;
/**
* @var int
*/
public const NO_REFERENCE_IN_ARG = PhpVersion::PHP_54;
/** /**
* @var int * @var int
*/ */
@ -27,11 +57,25 @@ final class PhpVersionFeature
*/ */
public const CLASSNAME_CONSTANT = PhpVersion::PHP_55; public const CLASSNAME_CONSTANT = PhpVersion::PHP_55;
/*
* @var int
*/
/**
* @var int
*/
public const PREG_REPLACE_CALLBACK_E_MODIFIER = PhpVersion::PHP_55;
/** /**
* @var int * @var int
*/ */
public const EXP_OPERATOR = PhpVersion::PHP_56; public const EXP_OPERATOR = PhpVersion::PHP_56;
/**
* @var int
*/
public const REQUIRE_DEFAULT_VALUE = PhpVersion::PHP_56;
/** /**
* @var int * @var int
*/ */
@ -67,6 +111,66 @@ final class PhpVersionFeature
*/ */
public const THROWABLE_TYPE = PhpVersion::PHP_70; public const THROWABLE_TYPE = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_LIST_SPLIT_STRING = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_BREAK_OUTSIDE_LOOP = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_PHP4_CONSTRUCTOR = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_CALL_USER_METHOD = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_EREG_FUNCTION = PhpVersion::PHP_70;
/**
* @var int
*/
public const VARIABLE_ON_FUNC_CALL = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_MKTIME_WITHOUT_ARG = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_EMPTY_LIST = PhpVersion::PHP_70;
/**
* @var int
*/
public const STATIC_CALL = PhpVersion::PHP_70;
/**
* @var int
*/
public const INSTANCE_CALL = PhpVersion::PHP_70;
/**
* @var int
*/
public const NO_MULTIPLE_DEFAULT_SWITCH = PhpVersion::PHP_70;
/**
* @var int
*/
public const WRAP_VARIABLE_VARIABLE = PhpVersion::PHP_70;
/** /**
* @var int * @var int
*/ */
@ -92,11 +196,76 @@ final class PhpVersionFeature
*/ */
public const MULTI_EXCEPTION_CATCH = PhpVersion::PHP_71; public const MULTI_EXCEPTION_CATCH = PhpVersion::PHP_71;
/**
* @var int
*/
public const NO_ASSIGN_ARRAY_TO_STRING = PhpVersion::PHP_71;
/**
* @var int
*/
public const BINARY_OP_NUMBER_STRING = PhpVersion::PHP_71;
/**
* @var int
*/
public const NO_EXTRA_PARAMETERS = PhpVersion::PHP_71;
/**
* @var int
*/
public const RESERVED_OBJECT_KEYWORD = PhpVersion::PHP_71;
/**
* @var int
*/
public const DEPRECATE_EACH = PhpVersion::PHP_72;
/** /**
* @var int * @var int
*/ */
public const OBJECT_TYPE = PhpVersion::PHP_72; public const OBJECT_TYPE = PhpVersion::PHP_72;
/**
* @var int
*/
public const NO_EACH_OUTSIDE_LOOP = PhpVersion::PHP_72;
/**
* @var int
*/
public const DEPRECATE_CREATE_FUNCTION = PhpVersion::PHP_72;
/**
* @var int
*/
public const NO_NULL_ON_GET_CLASS = PhpVersion::PHP_72;
/**
* @var int
*/
public const INVERTED_BOOL_IS_OBJECT_INCOMPLETE_CLASS = PhpVersion::PHP_72;
/**
* @var int
*/
public const RESULT_ARG_IN_PARSE_STR = PhpVersion::PHP_72;
/**
* @var int
*/
public const STRING_IN_FIRST_DEFINE_ARG = PhpVersion::PHP_72;
/**
* @var int
*/
public const STRING_IN_ASSERT_ARG = PhpVersion::PHP_72;
/**
* @var int
*/
public const NO_UNSET_CAST = PhpVersion::PHP_72;
/** /**
* @var int * @var int
*/ */
@ -117,6 +286,31 @@ final class PhpVersionFeature
*/ */
public const SETCOOKIE_ACCEPT_ARRAY_OPTIONS = PhpVersion::PHP_73; public const SETCOOKIE_ACCEPT_ARRAY_OPTIONS = PhpVersion::PHP_73;
/**
* @var int
*/
public const DEPRECATE_INSENSITIVE_CONSTANT_NAME = PhpVersion::PHP_73;
/**
* @var int
*/
public const ESCAPE_DASH_IN_REGEX = PhpVersion::PHP_73;
/**
* @var int
*/
public const DEPRECATE_INSENSITIVE_CONSTANT_DEFINE = PhpVersion::PHP_73;
/**
* @var int
*/
public const DEPRECATE_INT_IN_STR_NEEDLES = PhpVersion::PHP_73;
/**
* @var int
*/
public const SENSITIVE_HERE_NOW_DOC = PhpVersion::PHP_73;
/** /**
* @var int * @var int
*/ */
@ -148,6 +342,46 @@ final class PhpVersionFeature
*/ */
public const ARRAY_SPREAD = PhpVersion::PHP_74; public const ARRAY_SPREAD = PhpVersion::PHP_74;
/**
* @var int
*/
public const DEPRECATE_CURLY_BRACKET_ARRAY_STRING = PhpVersion::PHP_74;
/**
* @var int
*/
public const DEPRECATE_REAL = PhpVersion::PHP_74;
/**
* @var int
*/
public const ARRAY_KEY_EXISTS_TO_PROPERTY_EXISTS = PhpVersion::PHP_74;
/**
* @var int
*/
public const FILTER_VAR_TO_ADD_SLASHES = PhpVersion::PHP_74;
/**
* @var int
*/
public const CHANGE_MB_STRPOS_ARG_POSITION = PhpVersion::PHP_74;
/**
* @var int
*/
public const RESERVED_FN_FUNCTION_NAME = PhpVersion::PHP_74;
/**
* @var int
*/
public const REFLECTION_TYPE_GETNAME = PhpVersion::PHP_74;
/**
* @var int
*/
public const EXPORT_TO_REFLECTION_FUNCTION = PhpVersion::PHP_74;
/** /**
* @var int * @var int
*/ */
@ -163,6 +397,21 @@ final class PhpVersionFeature
*/ */
public const STATIC_RETURN_TYPE = PhpVersion::PHP_80; public const STATIC_RETURN_TYPE = PhpVersion::PHP_80;
/**
* @var int
*/
public const NO_FINAL_PRIVATE = PhpVersion::PHP_80;
/**
* @var int
*/
public const DEPRECATE_REQUIRED_PARAMETER_AFTER_OPTIONAL = PhpVersion::PHP_80;
/**
* @var int
*/
public const STATIC_VISIBILITY_SET_STATE = PhpVersion::PHP_80;
/** /**
* @var int * @var int
*/ */
@ -195,6 +444,36 @@ final class PhpVersionFeature
*/ */
public const ATTRIBUTES = PhpVersion::PHP_80; public const ATTRIBUTES = PhpVersion::PHP_80;
/**
* @var int
*/
public const STRINGABLE = PhpVersion::PHP_80;
/**
* @var int
*/
public const PHP_TOKEN = PhpVersion::PHP_80;
/**
* @var int
*/
public const STR_ENDS_WITH = PhpVersion::PHP_80;
/**
* @var int
*/
public const STR_STARTS_WITH = PhpVersion::PHP_80;
/**
* @var int
*/
public const STR_CONTAINS = PhpVersion::PHP_80;
/**
* @var int
*/
public const GET_DEBUG_TYPE = PhpVersion::PHP_80;
/** /**
* @see https://wiki.php.net/rfc/noreturn_type * @see https://wiki.php.net/rfc/noreturn_type
* @var int * @var int

View File

@ -0,0 +1,96 @@
<?php
declare(strict_types=1);
namespace Rector\PHPStanRules\Rules;
use Nette\Utils\Strings;
use PhpParser\Node;
use PhpParser\Node\Name\FullyQualified;
use PhpParser\Node\Stmt\Class_;
use PHPStan\Analyser\Scope;
use Symplify\PHPStanRules\Rules\AbstractSymplifyRule;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\PHPStanRules\Tests\Rules\PhpUpgradeImplementsMinPhpVersionInterfaceRule\PhpUpgradeImplementsMinPhpVersionInterfaceRuleTest
*/
final class PhpUpgradeImplementsMinPhpVersionInterfaceRule extends AbstractSymplifyRule
{
/**
* @var string
*/
public const ERROR_MESSAGE = 'Rule %s must implements Rector\VersionBonding\Contract\MinPhpVersionInterface';
/**
* @var string
* @see https://regex101.com/r/9d3jGP/2/
*/
private const PREFIX_REGEX = '#\\\\Php\d+\\\\#';
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes(): array
{
return [Class_::class];
}
/**
* @param Class_ $node
* @return string[]
*/
public function process(Node $node, Scope $scope): array
{
/** @var string $className */
$className = (string) $node->namespacedName;
if (! str_ends_with($className, 'Rector')) {
return [];
}
if (! Strings::match($className, self::PREFIX_REGEX)) {
return [];
}
$implements = $node->implements;
foreach ($implements as $implement) {
if (! $implement instanceof FullyQualified) {
continue;
}
if ($implement->toString() !== 'Rector\VersionBonding\Contract\MinPhpVersionInterface') {
continue;
}
return [];
}
return [sprintf(self::ERROR_MESSAGE, $className)];
}
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(self::ERROR_MESSAGE, [
new CodeSample(
<<<'CODE_SAMPLE'
namespace Rector\Php80\Rector\Switch_;
final class ChangeSwitchToMatchRector extends AbstractRector
{
}
CODE_SAMPLE
,
<<<'CODE_SAMPLE'
namespace Rector\Php80\Rector\Switch_;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
final class ChangeSwitchToMatchRector extends AbstractRector implements MinPhpVersionInterface
{
}
CODE_SAMPLE
),
]);
}
}

View File

@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace Rector\DowngradePhp80\Rector\Class_;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
final class SkipAlreadyImplementsMinPhpVersionRector implements MinPhpVersionInterface
{
}

View File

@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Rector\DowngradePhp80\Rector\Class_;
final class SkipDowngradeRector
{
}

View File

@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Rector\Php80\Rector\Class_;
final class SomePhpFeatureRector
{
}

View File

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace Rector\PHPStanRules\Tests\Rules\PhpUpgradeImplementsMinPhpVersionInterfaceRule;
use Iterator;
use PHPStan\Rules\Rule;
use Rector\PHPStanRules\Rules\PhpUpgradeImplementsMinPhpVersionInterfaceRule;
use Symplify\PHPStanExtensions\Testing\AbstractServiceAwareRuleTestCase;
/**
* @extends AbstractServiceAwareRuleTestCase<PhpUpgradeImplementsMinPhpVersionInterfaceRule>
*/
final class PhpUpgradeImplementsMinPhpVersionInterfaceRuleTest extends AbstractServiceAwareRuleTestCase
{
/**
* @dataProvider provideData()
* @param array<string|int> $expectedErrorMessagesWithLines
*/
public function testRule(string $filePath, array $expectedErrorMessagesWithLines): void
{
$this->analyse([$filePath], $expectedErrorMessagesWithLines);
}
/**
* @return Iterator<string[]|array<int, mixed[]>>
*/
public function provideData(): Iterator
{
yield [__DIR__ . '/Fixture/SkipDowngradeRector.php', []];
yield [__DIR__ . '/Fixture/SkipAlreadyImplementsMinPhpVersionRector.php', []];
yield [__DIR__ . '/Fixture/SomePhpFeatureRector.php', [
[sprintf(PhpUpgradeImplementsMinPhpVersionInterfaceRule::ERROR_MESSAGE, 'Rector\Php80\Rector\Class_\SomePhpFeatureRector'), 7]
]];
}
protected function getRule(): Rule
{
return $this->getRuleFromConfig(
PhpUpgradeImplementsMinPhpVersionInterfaceRule::class,
__DIR__ . '/config/configured_rule.neon'
);
}
}

View File

@ -0,0 +1,5 @@
services:
- Symplify\SmartFileSystem\SmartFileSystem
-
class: Rector\PHPStanRules\Rules\PhpUpgradeImplementsMinPhpVersionInterfaceRule
tags: [phpstan.rules.rule]