Skip to content

Commit abf7991

Browse files
committed
Updated Rector to commit ca9da16d1620daf8ca4a12912dee1aa8fbbb5b71
rectorphp/rector-src@ca9da16 Fix deep ArrayItem scope filling on Foreach_ value (#7873)
1 parent 044a026 commit abf7991

File tree

6 files changed

+66
-22
lines changed

6 files changed

+66
-22
lines changed

src/Application/VersionResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = 'eac1efd2ac2c2fce0ee6ed758d52f57acbf08a27';
22+
public const PACKAGE_VERSION = 'ca9da16d1620daf8ca4a12912dee1aa8fbbb5b71';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2026-02-01 16:47:01';
27+
public const RELEASE_DATE = '2026-02-03 14:12:25';
2828
/**
2929
* @var int
3030
*/

src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,9 @@ private function processArrayItem(ArrayItem $arrayItem, MutatingScope $mutatingS
455455
$arrayItem->key->setAttribute(AttributeKey::SCOPE, $mutatingScope);
456456
}
457457
$arrayItem->value->setAttribute(AttributeKey::SCOPE, $mutatingScope);
458+
if ($arrayItem->value instanceof List_) {
459+
$this->processArray($arrayItem->value, $mutatingScope);
460+
}
458461
}
459462
/**
460463
* @param callable(Node $trait, MutatingScope $scope): void $nodeCallback

vendor/composer/installed.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,12 +1818,12 @@
18181818
"source": {
18191819
"type": "git",
18201820
"url": "https:\/\/github.com\/rectorphp\/rector-phpunit.git",
1821-
"reference": "edebbb1b1f3a4faef4440cf6afeabfed809c9451"
1821+
"reference": "4608de8da300aed18e761830469d0ee159a0c6c8"
18221822
},
18231823
"dist": {
18241824
"type": "zip",
1825-
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/edebbb1b1f3a4faef4440cf6afeabfed809c9451",
1826-
"reference": "edebbb1b1f3a4faef4440cf6afeabfed809c9451",
1825+
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/4608de8da300aed18e761830469d0ee159a0c6c8",
1826+
"reference": "4608de8da300aed18e761830469d0ee159a0c6c8",
18271827
"shasum": ""
18281828
},
18291829
"require": {
@@ -1850,7 +1850,7 @@
18501850
"tomasvotruba\/unused-public": "^2.2",
18511851
"tracy\/tracy": "^2.11"
18521852
},
1853-
"time": "2026-02-02T12:11:03+00:00",
1853+
"time": "2026-02-02T18:58:21+00:00",
18541854
"default-branch": true,
18551855
"type": "rector-extension",
18561856
"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 46e4f77'), '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 a110e2f'), '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 edebbb1'), '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 582fc7c'));
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 46e4f77'), '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 a110e2f'), '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 4608de8'), '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 582fc7c'));
1313
private function __construct()
1414
{
1515
}

vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Expression/ConfiguredMockEntityToSetterObjectRector.php

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
declare (strict_types=1);
44
namespace Rector\PHPUnit\CodeQuality\Rector\Expression;
55

6-
use PhpParser\Node\Stmt\Class_;
6+
use RectorPrefix202602\Nette\Utils\Strings;
77
use PhpParser\Node;
88
use PhpParser\Node\Arg;
99
use PhpParser\Node\Expr;
1010
use PhpParser\Node\Expr\Array_;
1111
use PhpParser\Node\Expr\Assign;
1212
use PhpParser\Node\Expr\MethodCall;
1313
use PhpParser\Node\Expr\New_;
14+
use PhpParser\Node\Expr\Variable;
1415
use PhpParser\Node\Name\FullyQualified;
16+
use PhpParser\Node\Stmt;
17+
use PhpParser\Node\Stmt\Class_;
1518
use PhpParser\Node\Stmt\Expression;
19+
use PhpParser\Node\Stmt\Return_;
1620
use PHPStan\Reflection\ReflectionProvider;
1721
use Rector\Doctrine\NodeAnalyzer\DoctrineEntityDetector;
1822
use Rector\PhpParser\AstResolver;
@@ -21,6 +25,7 @@
2125
use Rector\Rector\AbstractRector;
2226
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2327
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
28+
use RectorPrefix202602\Webmozart\Assert\Assert;
2429
/**
2530
* @see \Rector\PHPUnit\Tests\CodeQuality\Rector\Expression\ConfiguredMockEntityToSetterObjectRector\ConfiguredMockEntityToSetterObjectRectorTest
2631
*/
@@ -90,26 +95,33 @@ public function test()
9095
*/
9196
public function getNodeTypes(): array
9297
{
93-
return [Expression::class];
98+
return [Expression::class, Return_::class];
9499
}
95100
/**
96-
* @param Expression $node
97-
* @return Expression[]|null
101+
* @param Expression|Return_ $node
102+
* @return Stmt[]|null
98103
*/
99104
public function refactor(Node $node): ?array
100105
{
101106
if (!$this->testsNodeAnalyzer->isInTestClass($node)) {
102107
return null;
103108
}
104-
if (!$node->expr instanceof Assign) {
105-
return null;
106-
}
107-
$assign = $node->expr;
108-
if (!$assign->expr instanceof MethodCall) {
109+
$assign = null;
110+
if ($node instanceof Return_) {
111+
if ($node->expr instanceof MethodCall) {
112+
$methodCall = $node->expr;
113+
} else {
114+
return null;
115+
}
116+
} elseif ($node->expr instanceof Assign) {
117+
$assign = $node->expr;
118+
if (!$assign->expr instanceof MethodCall) {
119+
return null;
120+
}
121+
$methodCall = $assign->expr;
122+
} else {
109123
return null;
110124
}
111-
$objectVariable = $assign->var;
112-
$methodCall = $assign->expr;
113125
if (!$this->isName($methodCall->name, 'createConfiguredMock')) {
114126
return null;
115127
}
@@ -125,9 +137,11 @@ public function refactor(Node $node): ?array
125137
if (!$definedGettersArg->value instanceof Array_) {
126138
return null;
127139
}
128-
$assign->expr = new New_(new FullyQualified($doctrineClass));
129-
$setterExpressions = $this->createEntitySetterExpressions($definedGettersArg->value, $objectVariable);
130-
return array_merge([$node], $setterExpressions);
140+
if ($node instanceof Expression) {
141+
Assert::isInstanceOf($assign, Assign::class);
142+
return $this->createForAssign($doctrineClass, $assign, $definedGettersArg->value, $node);
143+
}
144+
return $this->createForReturn($doctrineClass, $definedGettersArg->value, $node);
131145
}
132146
/**
133147
* @return Expression[]
@@ -162,6 +176,10 @@ private function matchDoctrineClassName(Expr $expr): ?string
162176
if (!$this->reflectionProvider->hasClass($mockedClassValue)) {
163177
return null;
164178
}
179+
$classReflection = $this->reflectionProvider->getClass($mockedClassValue);
180+
if ($classReflection->isInterface() || $classReflection->isAbstract()) {
181+
return null;
182+
}
165183
$mockedClass = $this->astResolver->resolveClassFromName($mockedClassValue);
166184
if (!$mockedClass instanceof Class_) {
167185
return null;
@@ -171,4 +189,27 @@ private function matchDoctrineClassName(Expr $expr): ?string
171189
}
172190
return $mockedClassValue;
173191
}
192+
/**
193+
* @return Stmt[]
194+
*/
195+
private function createForReturn(string $doctrineClass, Array_ $array, Return_ $return): array
196+
{
197+
$shortClassName = Strings::after($doctrineClass, '\\', -1);
198+
$objectVariable = new Variable(lcfirst((string) $shortClassName));
199+
$new = new New_(new FullyQualified($doctrineClass));
200+
$assign = new Assign($objectVariable, $new);
201+
$setterExpressions = $this->createEntitySetterExpressions($array, $objectVariable);
202+
$return->expr = $objectVariable;
203+
return array_merge([new Expression($assign)], $setterExpressions, [$return]);
204+
}
205+
/**
206+
* @return Stmt[]
207+
*/
208+
private function createForAssign(string $doctrineClass, Assign $assign, Array_ $definedGettersArray, Expression $expression): array
209+
{
210+
$assign->expr = new New_(new FullyQualified($doctrineClass));
211+
$objectVariable = $assign->var;
212+
$setterExpressions = $this->createEntitySetterExpressions($definedGettersArray, $objectVariable);
213+
return array_merge([$expression], $setterExpressions);
214+
}
174215
}

0 commit comments

Comments
 (0)