Skip to content

Commit c9c7734

Browse files
authored
Remove NodeVisitor::DONT_TRAVERSE_* on ServerVariableToRequestFacadeRector (part 3) (#439)
* Remove NodeVisitor::DONT_TRAVERSE_* on ServerVariableToRequestFacadeRector (part 3) * clean up set attribute * clean up set node definiton
1 parent c8d05e6 commit c9c7734

File tree

1 file changed

+35
-15
lines changed

1 file changed

+35
-15
lines changed

src/Rector/ArrayDimFetch/ServerVariableToRequestFacadeRector.php

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace RectorLaravel\Rector\ArrayDimFetch;
44

5+
use Override;
56
use PhpParser\Node;
67
use PhpParser\Node\Arg;
78
use PhpParser\Node\Expr;
@@ -11,7 +12,6 @@
1112
use PhpParser\Node\Expr\StaticCall;
1213
use PhpParser\Node\Scalar\InterpolatedString;
1314
use PhpParser\Node\Stmt\Unset_;
14-
use PhpParser\NodeVisitor;
1515
use RectorLaravel\AbstractRector;
1616
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1717
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@@ -21,6 +21,8 @@
2121
*/
2222
class ServerVariableToRequestFacadeRector extends AbstractRector
2323
{
24+
private const string IS_IN_SERVER_VARIABLE = 'is_in_server_variable';
25+
2426
public function getRuleDefinition(): RuleDefinition
2527
{
2628
return new RuleDefinition(
@@ -38,27 +40,41 @@ public function getRuleDefinition(): RuleDefinition
3840

3941
public function getNodeTypes(): array
4042
{
41-
return [Assign::class, Isset_::class, Unset_::class, InterpolatedString::class, ArrayDimFetch::class];
43+
return [ArrayDimFetch::class];
4244
}
4345

44-
/**
45-
* @param ArrayDimFetch|Assign|Isset_|Unset_|InterpolatedString $node
46-
* @return StaticCall|NodeVisitor::DONT_TRAVERSE_CHILDREN|null
47-
*/
48-
public function refactor(Node $node): StaticCall|int|null
46+
#[Override]
47+
public function beforeTraverse(array $nodes): array
4948
{
50-
if (! $node instanceof ArrayDimFetch) {
51-
if (! $node instanceof Assign) {
52-
return NodeVisitor::DONT_TRAVERSE_CHILDREN;
53-
}
49+
parent::beforeTraverse($nodes);
50+
51+
$this->traverseNodesWithCallable($nodes, function (Node $node) {
52+
if (in_array($node::class, [Assign::class, Isset_::class, Unset_::class, InterpolatedString::class], true)
53+
&& (! $node instanceof Assign || $node->var instanceof ArrayDimFetch && $this->isName($node->var->var, '_SERVER'))) {
54+
$this->traverseNodesWithCallable($node, function (Node $subNode) {
55+
if (! $subNode instanceof ArrayDimFetch) {
56+
return null;
57+
}
5458

55-
if (! $node->var instanceof ArrayDimFetch || ! $this->isName($node->var->var, '_SERVER')) {
56-
return null;
59+
$subNode->setAttribute(self::IS_IN_SERVER_VARIABLE, true);
60+
61+
return $subNode;
62+
});
63+
64+
return $node;
5765
}
5866

59-
return NodeVisitor::DONT_TRAVERSE_CHILDREN;
60-
}
67+
return null;
68+
});
6169

70+
return $nodes;
71+
}
72+
73+
/**
74+
* @param ArrayDimFetch $node
75+
*/
76+
public function refactor(Node $node): ?StaticCall
77+
{
6278
if (! $this->isName($node->var, '_SERVER')) {
6379
return null;
6480
}
@@ -67,6 +83,10 @@ public function refactor(Node $node): StaticCall|int|null
6783
return null;
6884
}
6985

86+
if ($node->getAttribute(self::IS_IN_SERVER_VARIABLE) === true) {
87+
return null;
88+
}
89+
7090
return $this->nodeFactory->createStaticCall('Illuminate\Support\Facades\Request', 'server', [
7191
new Arg($node->dim),
7292
]);

0 commit comments

Comments
 (0)