Skip to content

Commit 1194e69

Browse files
committed
Updated Rector to commit 2b8855137508cda2d95ffb09c7819c43c6bbc72f
rectorphp/rector-src@2b88551 [PostRector] Clean up rename process on ClassRenamingPostRector (#6971)
1 parent a02ac9d commit 1194e69

File tree

11 files changed

+169
-22
lines changed

11 files changed

+169
-22
lines changed

vendor/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,6 +1452,7 @@
14521452
'Rector\\Doctrine\\TypedCollections\\NodeAnalyzer\\CollectionParamCallDetector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/NodeAnalyzer/CollectionParamCallDetector.php',
14531453
'Rector\\Doctrine\\TypedCollections\\NodeAnalyzer\\EntityLikeClassDetector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/NodeAnalyzer/EntityLikeClassDetector.php',
14541454
'Rector\\Doctrine\\TypedCollections\\Rector\\Assign\\ArrayDimFetchAssignToAddCollectionCallRector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/Rector/Assign/ArrayDimFetchAssignToAddCollectionCallRector.php',
1455+
'Rector\\Doctrine\\TypedCollections\\Rector\\Assign\\ArrayOffsetSetToSetCollectionCallRector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/Rector/Assign/ArrayOffsetSetToSetCollectionCallRector.php',
14551456
'Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionGetterNativeTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/CollectionGetterNativeTypeRector.php',
14561457
'Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionParamTypeSetterToCollectionPropertyRector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/CollectionParamTypeSetterToCollectionPropertyRector.php',
14571458
'Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionSetterParamNativeTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/CollectionSetterParamNativeTypeRector.php',

vendor/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,6 +1671,7 @@ class ComposerStaticInit78fb90a05527c4e1e3e0271783524c1e
16711671
'Rector\\Doctrine\\TypedCollections\\NodeAnalyzer\\CollectionParamCallDetector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/NodeAnalyzer/CollectionParamCallDetector.php',
16721672
'Rector\\Doctrine\\TypedCollections\\NodeAnalyzer\\EntityLikeClassDetector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/NodeAnalyzer/EntityLikeClassDetector.php',
16731673
'Rector\\Doctrine\\TypedCollections\\Rector\\Assign\\ArrayDimFetchAssignToAddCollectionCallRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/Rector/Assign/ArrayDimFetchAssignToAddCollectionCallRector.php',
1674+
'Rector\\Doctrine\\TypedCollections\\Rector\\Assign\\ArrayOffsetSetToSetCollectionCallRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/Rector/Assign/ArrayOffsetSetToSetCollectionCallRector.php',
16741675
'Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionGetterNativeTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/CollectionGetterNativeTypeRector.php',
16751676
'Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionParamTypeSetterToCollectionPropertyRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/CollectionParamTypeSetterToCollectionPropertyRector.php',
16761677
'Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionSetterParamNativeTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/CollectionSetterParamNativeTypeRector.php',

vendor/composer/installed.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,12 +1687,12 @@
16871687
"source": {
16881688
"type": "git",
16891689
"url": "https:\/\/github.com\/rectorphp\/rector-doctrine.git",
1690-
"reference": "56fe7ba5f1397864f984ac15cbbde3e5ac53306a"
1690+
"reference": "cea5e6617d0296b59b904bf95f950700ea12c36f"
16911691
},
16921692
"dist": {
16931693
"type": "zip",
1694-
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/56fe7ba5f1397864f984ac15cbbde3e5ac53306a",
1695-
"reference": "56fe7ba5f1397864f984ac15cbbde3e5ac53306a",
1694+
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/cea5e6617d0296b59b904bf95f950700ea12c36f",
1695+
"reference": "cea5e6617d0296b59b904bf95f950700ea12c36f",
16961696
"shasum": ""
16971697
},
16981698
"require": {
@@ -1715,7 +1715,7 @@
17151715
"tomasvotruba\/class-leak": "^2.0",
17161716
"tracy\/tracy": "^2.10"
17171717
},
1718-
"time": "2025-06-11T08:47:46+00:00",
1718+
"time": "2025-06-11T10:41:42+00:00",
17191719
"default-branch": true,
17201720
"type": "rector-extension",
17211721
"extra": {

vendor/composer/installed.php

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

vendor/rector/extension-installer/src/GeneratedConfig.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*/
1010
final class GeneratedConfig
1111
{
12-
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main 56fe7ba'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 1454a52'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 3bc079d'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 1a199fc'));
12+
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main cea5e66'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 1454a52'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 3bc079d'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 1a199fc'));
1313
private function __construct()
1414
{
1515
}

vendor/rector/rector-doctrine/config/sets/typed-collections.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use Rector\Config\RectorConfig;
77
use Rector\Doctrine\TypedCollections\Rector\Assign\ArrayDimFetchAssignToAddCollectionCallRector;
8+
use Rector\Doctrine\TypedCollections\Rector\Assign\ArrayOffsetSetToSetCollectionCallRector;
89
use Rector\Doctrine\TypedCollections\Rector\Class_\CompleteParamDocblockFromSetterToCollectionRector;
910
use Rector\Doctrine\TypedCollections\Rector\Class_\CompletePropertyDocblockFromToManyRector;
1011
use Rector\Doctrine\TypedCollections\Rector\Class_\CompleteReturnDocblockFromToManyRector;
@@ -45,6 +46,7 @@
4546
RemoveIsArrayOnCollectionRector::class,
4647
// collection method calls
4748
ArrayDimFetchAssignToAddCollectionCallRector::class,
49+
ArrayOffsetSetToSetCollectionCallRector::class,
4850
ArrayMapOnCollectionToArrayRector::class,
4951
ArrayMergeOnCollectionToArrayRector::class,
5052
EmptyOnCollectionToIsEmptyCallRector::class,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?php
2+
3+
declare (strict_types=1);
4+
namespace Rector\Doctrine\TypedCollections\Rector\Assign;
5+
6+
use PhpParser\Node;
7+
use PhpParser\Node\Arg;
8+
use PhpParser\Node\Expr;
9+
use PhpParser\Node\Expr\ArrayDimFetch;
10+
use PhpParser\Node\Expr\Assign;
11+
use PhpParser\Node\Expr\MethodCall;
12+
use Rector\Doctrine\TypedCollections\TypeAnalyzer\CollectionTypeDetector;
13+
use Rector\Rector\AbstractRector;
14+
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
15+
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
16+
/**
17+
* @see \Rector\Doctrine\Tests\TypedCollections\Rector\Assign\ArrayOffsetSetToSetCollectionCallRector\ArrayOffsetSetToSetCollectionCallRectorTest
18+
*/
19+
final class ArrayOffsetSetToSetCollectionCallRector extends AbstractRector
20+
{
21+
/**
22+
* @readonly
23+
*/
24+
private CollectionTypeDetector $collectionTypeDetector;
25+
public function __construct(CollectionTypeDetector $collectionTypeDetector)
26+
{
27+
$this->collectionTypeDetector = $collectionTypeDetector;
28+
}
29+
public function getRuleDefinition() : RuleDefinition
30+
{
31+
return new RuleDefinition('Change dim assign on a Collection to clear ->set() call', [new CodeSample(<<<'CODE_SAMPLE'
32+
use Doctrine\Common\Collections\Collection;
33+
34+
final class SomeClass
35+
{
36+
/**
37+
* @var Collection<int, string>
38+
*/
39+
public $items;
40+
41+
public function setItem()
42+
{
43+
$this->items['key'] = 'value';
44+
}
45+
}
46+
CODE_SAMPLE
47+
, <<<'CODE_SAMPLE'
48+
use Doctrine\Common\Collections\Collection;
49+
50+
final class SomeClass
51+
{
52+
/**
53+
* @var Collection<int, string>
54+
*/
55+
public $items;
56+
57+
public function setItem()
58+
{
59+
$this->items->set('key', 'value');
60+
}
61+
}
62+
CODE_SAMPLE
63+
)]);
64+
}
65+
public function getNodeTypes() : array
66+
{
67+
return [Assign::class];
68+
}
69+
/**
70+
* @param Assign $node
71+
*/
72+
public function refactor(Node $node) : ?MethodCall
73+
{
74+
if (!$node->var instanceof ArrayDimFetch) {
75+
return null;
76+
}
77+
$arrayDimFetch = $node->var;
78+
if (!$arrayDimFetch->dim instanceof Expr) {
79+
return null;
80+
}
81+
$assignedExpr = $arrayDimFetch->var;
82+
if (!$this->collectionTypeDetector->isCollectionType($assignedExpr)) {
83+
return null;
84+
}
85+
$args = [new Arg($arrayDimFetch->dim), new Arg($node->expr)];
86+
return new MethodCall($assignedExpr, 'set', $args);
87+
}
88+
}

vendor/rector/rector-doctrine/rules/TypedCollections/Rector/ClassMethod/RemoveNullFromNullableCollectionTypeRector.php

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,15 @@
44
namespace Rector\Doctrine\TypedCollections\Rector\ClassMethod;
55

66
use PhpParser\Node;
7+
use PhpParser\Node\Name;
78
use PhpParser\Node\NullableType;
89
use PhpParser\Node\Stmt\ClassMethod;
10+
use PhpParser\Node\Stmt\Property;
11+
use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
12+
use PHPStan\PhpDocParser\Ast\Type\NullableTypeNode;
13+
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
14+
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
15+
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
916
use Rector\Doctrine\Enum\DoctrineClass;
1017
use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer;
1118
use Rector\Rector\AbstractRector;
@@ -20,9 +27,19 @@ final class RemoveNullFromNullableCollectionTypeRector extends AbstractRector
2027
* @readonly
2128
*/
2229
private TestsNodeAnalyzer $testsNodeAnalyzer;
23-
public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer)
30+
/**
31+
* @readonly
32+
*/
33+
private PhpDocInfoFactory $phpDocInfoFactory;
34+
/**
35+
* @readonly
36+
*/
37+
private DocBlockUpdater $docBlockUpdater;
38+
public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer, PhpDocInfoFactory $phpDocInfoFactory, DocBlockUpdater $docBlockUpdater)
2439
{
2540
$this->testsNodeAnalyzer = $testsNodeAnalyzer;
41+
$this->phpDocInfoFactory = $phpDocInfoFactory;
42+
$this->docBlockUpdater = $docBlockUpdater;
2643
}
2744
public function getRuleDefinition() : RuleDefinition
2845
{
@@ -56,21 +73,29 @@ public function setItems(Collection $items): void
5673
}
5774
public function getNodeTypes() : array
5875
{
59-
return [ClassMethod::class];
76+
return [ClassMethod::class, Property::class];
6077
}
6178
/**
62-
* @param ClassMethod $node
79+
* @param ClassMethod|Property $node
80+
* @return \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|null
6381
*/
64-
public function refactor(Node $node) : ?\PhpParser\Node\Stmt\ClassMethod
82+
public function refactor(Node $node)
6583
{
66-
if (\count($node->params) !== 1) {
84+
if ($node instanceof Property) {
85+
return $this->refactorProperty($node);
86+
}
87+
return $this->refactorClassMethod($node);
88+
}
89+
private function refactorClassMethod(ClassMethod $classMethod) : ?\PhpParser\Node\Stmt\ClassMethod
90+
{
91+
if (\count($classMethod->params) !== 1) {
6792
return null;
6893
}
69-
if ($this->testsNodeAnalyzer->isInTestClass($node)) {
94+
if ($this->testsNodeAnalyzer->isInTestClass($classMethod)) {
7095
return null;
7196
}
7297
$hasChanged = \false;
73-
foreach ($node->params as $param) {
98+
foreach ($classMethod->params as $param) {
7499
if (!$param->type instanceof NullableType) {
75100
continue;
76101
}
@@ -82,8 +107,39 @@ public function refactor(Node $node) : ?\PhpParser\Node\Stmt\ClassMethod
82107
$hasChanged = \true;
83108
}
84109
if ($hasChanged) {
85-
return $node;
110+
return $classMethod;
86111
}
87112
return null;
88113
}
114+
private function refactorProperty(Property $property) : ?Property
115+
{
116+
if (!$this->hasNativeCollectionType($property)) {
117+
return null;
118+
}
119+
$phpDocInfo = $this->phpDocInfoFactory->createFromNode($property);
120+
if (!$phpDocInfo instanceof PhpDocInfo) {
121+
return null;
122+
}
123+
$varTagValueNode = $phpDocInfo->getVarTagValueNode();
124+
if (!$varTagValueNode instanceof VarTagValueNode) {
125+
return null;
126+
}
127+
// remove nullable if has one
128+
if (!$varTagValueNode->type instanceof NullableTypeNode) {
129+
return null;
130+
}
131+
// unwrap nullable type
132+
$varTagValueNode->type = $varTagValueNode->type->type;
133+
$phpDocInfo->removeByType(VarTagValueNode::class);
134+
$phpDocInfo->addTagValueNode($varTagValueNode);
135+
$this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($property);
136+
return $property;
137+
}
138+
private function hasNativeCollectionType(Property $property) : bool
139+
{
140+
if (!$property->type instanceof Name) {
141+
return \false;
142+
}
143+
return $this->isName($property->type, DoctrineClass::COLLECTION);
144+
}
89145
}

vendor/rector/rector-doctrine/rules/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,6 @@ public function refactor(Node $node) : ?int
7070
if (!$this->isName($staticCall->class, PHPUnitClassName::ASSERT)) {
7171
return null;
7272
}
73-
if (\count($staticCall->args) !== 1) {
74-
return null;
75-
}
7673
$firstArg = $staticCall->getArgs()[0];
7774
if (!$this->collectionTypeDetector->isCollectionType($firstArg->value)) {
7875
return null;

vendor/rector/rector-doctrine/rules/TypedCollections/Rector/MethodCall/AssertSameCountOnCollectionToAssertCountRector.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PhpParser\Node;
77
use PhpParser\Node\Arg;
88
use PhpParser\Node\Expr\MethodCall;
9+
use PhpParser\Node\Expr\StaticCall;
910
use PhpParser\Node\Identifier;
1011
use Rector\Doctrine\TypedCollections\TypeAnalyzer\CollectionTypeDetector;
1112
use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer;
@@ -62,20 +63,21 @@ public function test(): void
6263
}
6364
public function getNodeTypes() : array
6465
{
65-
return [MethodCall::class];
66+
return [MethodCall::class, StaticCall::class];
6667
}
6768
/**
68-
* @param MethodCall $node
69+
* @param MethodCall|StaticCall $node
70+
* @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null
6971
*/
70-
public function refactor(Node $node) : ?\PhpParser\Node\Expr\MethodCall
72+
public function refactor(Node $node)
7173
{
7274
if ($node->isFirstClassCallable()) {
7375
return null;
7476
}
7577
if (!$this->isName($node->name, 'assertSame')) {
7678
return null;
7779
}
78-
if (!$this->testsNodeAnalyzer->isInTestClass($node)) {
80+
if ($node instanceof MethodCall && !$this->testsNodeAnalyzer->isInTestClass($node)) {
7981
return null;
8082
}
8183
$comparedArg = $node->getArgs()[1]->value;

0 commit comments

Comments
 (0)