Skip to content

Commit 572089f

Browse files
committed
feat: convert all deprecation rules to split required / deprecated versioning
Since all PHP migration rules required a minimum version (per custom linting rule), and I wanted to make sure we were being clear _why_, I've introduced a new baseline constant in the PHP version features dictionary; this indicates that whatever rule can ALWAYS be run. I *believe* this covers everything, but it's hard to audit the whole ruleset.
1 parent 5d2cf96 commit 572089f

29 files changed

Lines changed: 235 additions & 29 deletions

rules/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@
2222
use Rector\Rector\AbstractRector;
2323
use Rector\ValueObject\MethodName;
2424
use Rector\ValueObject\PhpVersionFeature;
25+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
2526
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
2627
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2728
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2829

2930
/**
3031
* @see \Rector\Tests\CodeQuality\Rector\Class_\DynamicDocBlockPropertyToNativePropertyRector\DynamicDocBlockPropertyToNativePropertyRectorTest
3132
*/
32-
final class DynamicDocBlockPropertyToNativePropertyRector extends AbstractRector implements MinPhpVersionInterface
33+
final class DynamicDocBlockPropertyToNativePropertyRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
3334
{
3435
public function __construct(
3536
private readonly PhpAttributeAnalyzer $phpAttributeAnalyzer,
@@ -136,6 +137,11 @@ public function refactor(Node $node): ?Node
136137
}
137138

138139
public function provideMinPhpVersion(): int
140+
{
141+
return PhpVersionFeature::TYPED_PROPERTIES;
142+
}
143+
144+
public function provideDeprecatedAtVersion(): int
139145
{
140146
return PhpVersionFeature::DEPRECATE_DYNAMIC_PROPERTIES;
141147
}

rules/Php72/Rector/Assign/ListEachRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,27 @@
1414
use Rector\Php72\ValueObject\ListAndEach;
1515
use Rector\Rector\AbstractRector;
1616
use Rector\ValueObject\PhpVersionFeature;
17+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1718
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1819
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1920
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2021

2122
/**
2223
* @see \Rector\Tests\Php72\Rector\Assign\ListEachRector\ListEachRectorTest
2324
*/
24-
final class ListEachRector extends AbstractRector implements MinPhpVersionInterface
25+
final class ListEachRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2526
{
2627
public function __construct(
2728
private readonly AssignManipulator $assignManipulator,
2829
) {
2930
}
3031

3132
public function provideMinPhpVersion(): int
33+
{
34+
return PhpVersionFeature::BASELINE_SUPPORTED_PHP;
35+
}
36+
37+
public function provideDeprecatedAtVersion(): int
3238
{
3339
return PhpVersionFeature::DEPRECATE_EACH;
3440
}

rules/Php72/Rector/FuncCall/CreateFunctionToAnonymousFunctionRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@
2323
use Rector\PhpParser\Parser\InlineCodeParser;
2424
use Rector\Rector\AbstractRector;
2525
use Rector\ValueObject\PhpVersionFeature;
26+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
2627
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
2728
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2829
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2930

3031
/**
3132
* @see \Rector\Tests\Php72\Rector\FuncCall\CreateFunctionToAnonymousFunctionRector\CreateFunctionToAnonymousFunctionRectorTest
3233
*/
33-
final class CreateFunctionToAnonymousFunctionRector extends AbstractRector implements MinPhpVersionInterface
34+
final class CreateFunctionToAnonymousFunctionRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
3435
{
3536
public function __construct(
3637
private readonly InlineCodeParser $inlineCodeParser,
@@ -40,6 +41,11 @@ public function __construct(
4041
}
4142

4243
public function provideMinPhpVersion(): int
44+
{
45+
return PhpVersionFeature::ANONYMOUS_FUNCTION;
46+
}
47+
48+
public function provideDeprecatedAtVersion(): int
4349
{
4450
return PhpVersionFeature::DEPRECATE_CREATE_FUNCTION;
4551
}

rules/Php72/Rector/While_/WhileEachToForeachRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,27 @@
1313
use Rector\Php72\ValueObject\ListAndEach;
1414
use Rector\Rector\AbstractRector;
1515
use Rector\ValueObject\PhpVersionFeature;
16+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1617
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1718
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1819
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
1920

2021
/**
2122
* @see \Rector\Tests\Php72\Rector\While_\WhileEachToForeachRector\WhileEachToForeachRectorTest
2223
*/
23-
final class WhileEachToForeachRector extends AbstractRector implements MinPhpVersionInterface
24+
final class WhileEachToForeachRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2425
{
2526
public function __construct(
2627
private readonly AssignManipulator $assignManipulator
2728
) {
2829
}
2930

3031
public function provideMinPhpVersion(): int
32+
{
33+
return PhpVersionFeature::BASELINE_SUPPORTED_PHP;
34+
}
35+
36+
public function provideDeprecatedAtVersion(): int
3137
{
3238
return PhpVersionFeature::DEPRECATE_EACH;
3339
}

rules/Php73/Rector/ConstFetch/SensitiveConstantNameRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111
use PHPStan\Reflection\ReflectionProvider;
1212
use Rector\Rector\AbstractRector;
1313
use Rector\ValueObject\PhpVersionFeature;
14+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1415
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1516
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1617
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
1718

1819
/**
1920
* @see \Rector\Tests\Php73\Rector\ConstFetch\SensitiveConstantNameRector\SensitiveConstantNameRectorTest
2021
*/
21-
final class SensitiveConstantNameRector extends AbstractRector implements MinPhpVersionInterface
22+
final class SensitiveConstantNameRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2223
{
2324
/**
2425
* @see http://php.net/manual/en/reserved.constants.php
@@ -89,6 +90,11 @@ public function __construct(
8990
}
9091

9192
public function provideMinPhpVersion(): int
93+
{
94+
return PhpVersionFeature::NAMESPACES;
95+
}
96+
97+
public function provideDeprecatedAtVersion(): int
9298
{
9399
return PhpVersionFeature::DEPRECATE_INSENSITIVE_CONSTANT_NAME;
94100
}

rules/Php73/Rector/FuncCall/SensitiveDefineRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,22 @@
88
use PhpParser\Node\Expr\FuncCall;
99
use Rector\Rector\AbstractRector;
1010
use Rector\ValueObject\PhpVersionFeature;
11+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1112
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1213
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1314
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
1415

1516
/**
1617
* @see \Rector\Tests\Php73\Rector\FuncCall\SensitiveDefineRector\SensitiveDefineRectorTest
1718
*/
18-
final class SensitiveDefineRector extends AbstractRector implements MinPhpVersionInterface
19+
final class SensitiveDefineRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
1920
{
2021
public function provideMinPhpVersion(): int
22+
{
23+
return PhpVersionFeature::BASELINE_SUPPORTED_PHP;
24+
}
25+
26+
public function provideDeprecatedAtVersion(): int
2127
{
2228
return PhpVersionFeature::DEPRECATE_INSENSITIVE_CONSTANT_DEFINE;
2329
}

rules/Php73/Rector/FuncCall/StringifyStrNeedlesRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111
use PhpParser\Node\Scalar\InterpolatedString;
1212
use Rector\Rector\AbstractRector;
1313
use Rector\ValueObject\PhpVersionFeature;
14+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1415
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1516
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1617
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
1718

1819
/**
1920
* @see \Rector\Tests\Php73\Rector\FuncCall\StringifyStrNeedlesRector\StringifyStrNeedlesRectorTest
2021
*/
21-
final class StringifyStrNeedlesRector extends AbstractRector implements MinPhpVersionInterface
22+
final class StringifyStrNeedlesRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2223
{
2324
/**
2425
* @var string[]
@@ -37,6 +38,11 @@ final class StringifyStrNeedlesRector extends AbstractRector implements MinPhpVe
3738
];
3839

3940
public function provideMinPhpVersion(): int
41+
{
42+
return PhpVersionFeature::BASELINE_SUPPORTED_PHP;
43+
}
44+
45+
public function provideDeprecatedAtVersion(): int
4046
{
4147
return PhpVersionFeature::DEPRECATE_INT_IN_STR_NEEDLES;
4248
}

rules/Php74/Rector/ArrayDimFetch/CurlyToSquareBracketArrayStringRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,22 @@
1010
use Rector\Rector\AbstractRector;
1111
use Rector\ValueObject\Application\File;
1212
use Rector\ValueObject\PhpVersionFeature;
13+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1314
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1415
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1516
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
1617

1718
/**
1819
* @see \Rector\Tests\Php74\Rector\ArrayDimFetch\CurlyToSquareBracketArrayStringRector\CurlyToSquareBracketArrayStringRectorTest
1920
*/
20-
final class CurlyToSquareBracketArrayStringRector extends AbstractRector implements MinPhpVersionInterface
21+
final class CurlyToSquareBracketArrayStringRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2122
{
2223
public function provideMinPhpVersion(): int
24+
{
25+
return PhpVersionFeature::BASELINE_SUPPORTED_PHP;
26+
}
27+
28+
public function provideDeprecatedAtVersion(): int
2329
{
2430
return PhpVersionFeature::DEPRECATE_CURLY_BRACKET_ARRAY_STRING;
2531
}

rules/Php74/Rector/FuncCall/HebrevcToNl2brHebrevRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,22 @@
1010
use PhpParser\Node\Name;
1111
use Rector\Rector\AbstractRector;
1212
use Rector\ValueObject\PhpVersionFeature;
13+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1314
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
1415
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1516
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
1617

1718
/**
1819
* @see \Rector\Tests\Php74\Rector\FuncCall\HebrevcToNl2brHebrevRector\HebrevcToNl2brHebrevRectorTest
1920
*/
20-
final class HebrevcToNl2brHebrevRector extends AbstractRector implements MinPhpVersionInterface
21+
final class HebrevcToNl2brHebrevRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2122
{
2223
public function provideMinPhpVersion(): int
24+
{
25+
return PhpVersionFeature::BASELINE_SUPPORTED_PHP;
26+
}
27+
28+
public function provideDeprecatedAtVersion(): int
2329
{
2430
return PhpVersionFeature::DEPRECATE_HEBREVC;
2531
}

rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
use Rector\PhpParser\Node\Value\ValueResolver;
1717
use Rector\Rector\AbstractRector;
1818
use Rector\ValueObject\PhpVersionFeature;
19+
use Rector\VersionBonding\Contract\DeprecatedAtVersionInterface;
1920
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
2021
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2122
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2223

2324
/**
2425
* @see \Rector\Tests\Php74\Rector\FuncCall\MoneyFormatToNumberFormatRector\MoneyFormatToNumberFormatRectorTest
2526
*/
26-
final class MoneyFormatToNumberFormatRector extends AbstractRector implements MinPhpVersionInterface
27+
final class MoneyFormatToNumberFormatRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedAtVersionInterface
2728
{
2829
public function __construct(
2930
private readonly ArgsAnalyzer $argsAnalyzer,
@@ -32,6 +33,11 @@ public function __construct(
3233
}
3334

3435
public function provideMinPhpVersion(): int
36+
{
37+
return PhpVersionFeature::LEGACY_ROUNDING_MODES;
38+
}
39+
40+
public function provideDeprecatedAtVersion(): int
3541
{
3642
return PhpVersionFeature::DEPRECATE_MONEY_FORMAT;
3743
}

0 commit comments

Comments
 (0)