Skip to content

Commit ab3c25f

Browse files
authored
fix: bugs in ServerVariableToRequestFacadeRector (#392)
1 parent 97ece0a commit ab3c25f

File tree

5 files changed

+43
-4
lines changed

5 files changed

+43
-4
lines changed

src/Rector/ArrayDimFetch/ServerVariableToRequestFacadeRector.php

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@
44

55
use PhpParser\Node;
66
use PhpParser\Node\Arg;
7+
use PhpParser\Node\Expr;
78
use PhpParser\Node\Expr\ArrayDimFetch;
9+
use PhpParser\Node\Expr\Assign;
10+
use PhpParser\Node\Expr\Isset_;
811
use PhpParser\Node\Expr\StaticCall;
12+
use PhpParser\Node\Scalar\InterpolatedString;
13+
use PhpParser\Node\Stmt\Unset_;
14+
use PhpParser\NodeVisitor;
915
use RectorLaravel\AbstractRector;
1016
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1117
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@@ -32,19 +38,32 @@ public function getRuleDefinition(): RuleDefinition
3238

3339
public function getNodeTypes(): array
3440
{
35-
return [ArrayDimFetch::class];
41+
return [Assign::class, Isset_::class, Unset_::class, InterpolatedString::class, ArrayDimFetch::class];
3642
}
3743

3844
/**
39-
* @param ArrayDimFetch $node
45+
* @param ArrayDimFetch|Assign|Isset_|Unset_|InterpolatedString $node
46+
* @return StaticCall|NodeVisitor::DONT_TRAVERSE_CHILDREN|null
4047
*/
41-
public function refactor(Node $node): ?StaticCall
48+
public function refactor(Node $node): StaticCall|int|null
4249
{
50+
if (! $node instanceof ArrayDimFetch) {
51+
if (! $node instanceof Assign) {
52+
return NodeVisitor::DONT_TRAVERSE_CHILDREN;
53+
}
54+
55+
if (! $node->var instanceof ArrayDimFetch || ! $this->isName($node->var->var, '_SERVER')) {
56+
return null;
57+
}
58+
59+
return NodeVisitor::DONT_TRAVERSE_CHILDREN;
60+
}
61+
4362
if (! $this->isName($node->var, '_SERVER')) {
4463
return null;
4564
}
4665

47-
if ($node->dim === null) {
66+
if (! $node->dim instanceof Expr) {
4867
return null;
4968
}
5069

tests/Rector/ArrayDimFetch/ServerVariableToRequestFacadeRector/Fixture/fixture.php.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ namespace RectorLaravel\Tests\Rector\ArrayDimFetch\ServerVariableToRequestFacade
44

55
$_SERVER['VARIABLE'];
66

7+
$variable = $_SERVER['VARIABLE'];
8+
79
?>
810
-----
911
<?php
@@ -12,4 +14,6 @@ namespace RectorLaravel\Tests\Rector\ArrayDimFetch\ServerVariableToRequestFacade
1214

1315
\Illuminate\Support\Facades\Request::server('VARIABLE');
1416

17+
$variable = \Illuminate\Support\Facades\Request::server('VARIABLE');
18+
1519
?>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Rector\ArrayDimFetch\ServerVariableToRequestFacadeRector\Fixture;
4+
5+
$_SERVER['APP_ENV'] = 'production';
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Rector\ArrayDimFetch\ServerVariableToRequestFacadeRector\Fixture;
4+
5+
"string{$_SERVER['APP_ENV']}";
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Rector\ArrayDimFetch\ServerVariableToRequestFacadeRector\Fixture;
4+
5+
isset($_SERVER['APP_ENV']);
6+
unset($_SERVER['APP_ENV']);

0 commit comments

Comments
 (0)