Skip to content

Commit 990d5b1

Browse files
committed
avoid type casting against stmts aware interface, as no node has it
1 parent b5ea28c commit 990d5b1

File tree

8 files changed

+54
-17
lines changed

8 files changed

+54
-17
lines changed

config/phpstan/parser.neon

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,3 @@ services:
2525
arguments:
2626
parser: @currentPhpVersionPhpParser
2727
autowired: no
28-
29-
# use StmtsAwareNode
30-
# -
31-
# class: Rector\PHPStan\NodeVisitor\StmtsAwareWrappingNodeVisitor
32-
# tags:
33-
# - phpstan.parser.richParserNodeVisitor

phpstan.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ parameters:
381381
-
382382
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php
383383
identifier: symplify.forbiddenFuncCall
384-
- '#Parameter 1 should use "Rector\\Contract\\PhpParser\\Node\\StmtsAwareInterface" type as the only type passed to this method#'
384+
- '#Parameter \d should use "Rector\\Contract\\PhpParser\\Node\\StmtsAwareInterface" type as the only type passed to this method#'
385385
- '#Parameter \#1 \$stmtsAware of method (.*?) expects Rector\\Contract\\PhpParser\\Node\\StmtsAwareInterface#'
386386

387387
- '#Method (.*?) should return Rector\\Contract\\PhpParser\\Node\\StmtsAwareInterface\|null but returns (.*?)\|null#'

rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@
2525
use Rector\NodeManipulator\StmtsManipulator;
2626
use Rector\Php\ReservedKeywordAnalyzer;
2727
use Rector\PhpParser\Node\BetterNodeFinder;
28+
use Rector\PhpParser\NodeGroups;
2829
use Rector\Rector\AbstractRector;
2930
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
3031
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
32+
use Webmozart\Assert\Assert;
3133

3234
/**
3335
* @see \Rector\Tests\DeadCode\Rector\Assign\RemoveUnusedVariableAssignRector\RemoveUnusedVariableAssignRectorTest
@@ -164,10 +166,12 @@ private function shouldSkip(array $stmts): bool
164166
*/
165167
private function collectAssignRefVariableNames(Stmt $stmt, array &$refVariableNames): void
166168
{
167-
if (! $stmt instanceof StmtsAwareInterface) {
169+
if (! NodeGroups::matchesStmtsAware($stmt)) {
168170
return;
169171
}
170172

173+
Assert::propertyExists($stmt, 'stmts');
174+
171175
$this->traverseNodesWithCallable(
172176
$stmt,
173177
function (Node $subNode) use (&$refVariableNames): Node {

rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,10 @@ public function refactor(Node $node): Node|null
113113
return null;
114114
}
115115

116-
private function processIf(If_ $if, int $key, StmtsAwareInterface $stmtsAware): void
116+
/**
117+
* @param StmtsAwareInterface $stmtsAware
118+
*/
119+
private function processIf(If_ $if, int $key, \PhpParser\Node $stmtsAware): void
117120
{
118121
if ($if->elseifs !== []) {
119122
return;
@@ -137,7 +140,10 @@ private function processIf(If_ $if, int $key, StmtsAwareInterface $stmtsAware):
137140
$this->hasChanged = true;
138141
}
139142

140-
private function processForForeach(For_|Foreach_ $for, int $key, StmtsAwareInterface $stmtsAware): void
143+
/**
144+
* @param StmtsAwareInterface $stmtsAware
145+
*/
146+
private function processForForeach(For_|Foreach_ $for, int $key, \PhpParser\Node $stmtsAware): void
141147
{
142148
if ($for instanceof For_) {
143149
$variables = $this->betterNodeFinder->findInstanceOf(

rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Rector\Rector\AbstractRector;
2626
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2727
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
28+
use Webmozart\Assert\Assert;
2829

2930
/**
3031
* @see \Rector\Tests\DeadCode\Rector\If_\RemoveUnusedNonEmptyArrayBeforeForeachRector\RemoveUnusedNonEmptyArrayBeforeForeachRectorTest
@@ -151,8 +152,13 @@ private function isUselessBooleanAnd(BooleanAnd $booleanAnd, Expr $foreachExpr):
151152
return $this->countManipulator->isCounterHigherThanOne($booleanAnd->right, $foreachExpr);
152153
}
153154

154-
private function refactorStmtsAware(StmtsAwareInterface $stmtsAware): ?StmtsAwareInterface
155+
/**
156+
* @param StmtsAwareInterface $stmtsAware
157+
*/
158+
private function refactorStmtsAware(\PhpParser\Node $stmtsAware): ?StmtsAwareInterface
155159
{
160+
Assert::propertyExists($stmtsAware, 'stmts');
161+
156162
if ($stmtsAware->stmts === null) {
157163
return null;
158164
}

rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,11 @@ public function refactor(Node $node): ?StmtsAwareInterface
183183

184184
/**
185185
* @param If_[] $ifs
186+
* @param StmtsAwareInterface $stmtsAware
187+
*
186188
* @return BareSingleAssignIf[]
187189
*/
188-
private function getMatchingBareSingleAssignIfs(array $ifs, StmtsAwareInterface $stmtsAware): array
190+
private function getMatchingBareSingleAssignIfs(array $ifs, \PhpParser\Node $stmtsAware): array
189191
{
190192
$bareSingleAssignIfs = [];
191193
foreach ($ifs as $key => $if) {
@@ -233,7 +235,10 @@ private function isVariableSharedInAssignIfsAndReturn(
233235
return true;
234236
}
235237

236-
private function matchBareSingleAssignIf(Stmt $stmt, int $key, StmtsAwareInterface $stmtsAware): ?BareSingleAssignIf
238+
/**
239+
* @param StmtsAwareInterface $stmtsAware
240+
*/
241+
private function matchBareSingleAssignIf(Stmt $stmt, int $key, \PhpParser\Node $stmtsAware): ?BareSingleAssignIf
237242
{
238243
if (! $stmt instanceof If_) {
239244
return null;

rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
2626
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2727
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
28+
use Webmozart\Assert\Assert;
2829

2930
/**
3031
* @see \Rector\Tests\Php84\Rector\Foreach_\ForeachToArrayAllRector\ForeachToArrayAllRectorTest
@@ -102,8 +103,13 @@ public function provideMinPhpVersion(): int
102103
return PhpVersionFeature::ARRAY_ALL;
103104
}
104105

105-
private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAware): ?Node
106+
/**
107+
* @param StmtsAwareInterface $stmtsAware
108+
*/
109+
private function refactorBooleanAssignmentPattern(\PhpParser\Node $stmtsAware): ?Node
106110
{
111+
Assert::propertyExists($stmtsAware, 'stmts');
112+
107113
foreach ($stmtsAware->stmts as $key => $stmt) {
108114
if (! $stmt instanceof Foreach_) {
109115
continue;
@@ -185,8 +191,13 @@ private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAwar
185191
return null;
186192
}
187193

188-
private function refactorEarlyReturnPattern(StmtsAwareInterface $stmtsAware): ?Node
194+
/**
195+
* @param StmtsAwareInterface $stmtsAware
196+
*/
197+
private function refactorEarlyReturnPattern(\PhpParser\Node $stmtsAware): ?Node
189198
{
199+
Assert::propertyExists($stmtsAware, 'stmts');
200+
190201
foreach ($stmtsAware->stmts as $key => $stmt) {
191202
if (! $stmt instanceof Foreach_) {
192203
continue;

rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
2525
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2626
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
27+
use Webmozart\Assert\Assert;
2728

2829
/**
2930
* @see \Rector\Tests\Php84\Rector\Foreach_\ForeachToArrayAnyRector\ForeachToArrayAnyRectorTest
@@ -101,8 +102,13 @@ public function provideMinPhpVersion(): int
101102
return PhpVersionFeature::ARRAY_ANY;
102103
}
103104

104-
private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAware): ?Node
105+
/**
106+
* @param StmtsAwareInterface $stmtsAware
107+
*/
108+
private function refactorBooleanAssignmentPattern(\PhpParser\Node $stmtsAware): ?Node
105109
{
110+
Assert::propertyExists($stmtsAware, 'stmts');
111+
106112
foreach ($stmtsAware->stmts as $key => $stmt) {
107113
if (! $stmt instanceof Foreach_) {
108114
continue;
@@ -182,8 +188,13 @@ private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAwar
182188
return null;
183189
}
184190

185-
private function refactorEarlyReturnPattern(StmtsAwareInterface $stmtsAware): ?Node
191+
/**
192+
* @param StmtsAwareInterface $stmtsAware
193+
*/
194+
private function refactorEarlyReturnPattern(\PhpParser\Node $stmtsAware): ?Node
186195
{
196+
Assert::propertyExists($stmtsAware, 'stmts');
197+
187198
foreach ($stmtsAware->stmts as $key => $stmt) {
188199
if (! $stmt instanceof Foreach_) {
189200
continue;

0 commit comments

Comments
 (0)