Skip to content

Commit 4f9f49c

Browse files
[DeadCode] Handle with middle default not null on RemoveNullArgOnNullDefaultParamRector (rectorphp#7565)
* [DeadCode] Handle with middle default not null on RemoveNullArgOnNullDefaultParamRector * [DeadCode] Handle with middle default not null on RemoveNullArgOnNullDefaultParamRector * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action <actions@github.com>
1 parent 5a4c77b commit 4f9f49c

3 files changed

Lines changed: 51 additions & 6 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\DeadCode\Rector\MethodCall\RemoveNullArgOnNullDefaultParamRector\Fixture;
6+
7+
use Rector\Tests\DeadCode\Rector\MethodCall\RemoveNullArgOnNullDefaultParamRector\Source\SomeExternalClass;
8+
9+
class HandleMiddleDefaultNotNull
10+
{
11+
public function get(SomeExternalClass $someExternalClass)
12+
{
13+
$someExternalClass->withMiddleNotNullDefault(null, 1, null, null);
14+
}
15+
}
16+
17+
?>
18+
-----
19+
<?php
20+
21+
declare(strict_types=1);
22+
23+
namespace Rector\Tests\DeadCode\Rector\MethodCall\RemoveNullArgOnNullDefaultParamRector\Fixture;
24+
25+
use Rector\Tests\DeadCode\Rector\MethodCall\RemoveNullArgOnNullDefaultParamRector\Source\SomeExternalClass;
26+
27+
class HandleMiddleDefaultNotNull
28+
{
29+
public function get(SomeExternalClass $someExternalClass)
30+
{
31+
$someExternalClass->withMiddleNotNullDefault(null, 1);
32+
}
33+
}
34+
35+
?>

rules-tests/DeadCode/Rector/MethodCall/RemoveNullArgOnNullDefaultParamRector/Source/SomeExternalClass.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@ public function callWithDefaultNull(?string $name = null)
1515
public static function staticCallWithDefaultNull(?int $id = null)
1616
{
1717
}
18+
19+
public static function withMiddleNotNullDefault(?int $id = null, int $data = 1, ?string $name = null, ?string $item = null)
20+
{
21+
}
1822
}

rules/DeadCode/Rector/MethodCall/RemoveNullArgOnNullDefaultParamRector.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,33 @@ public function refactor(Node $node): StaticCall|MethodCall|New_|null
8888

8989
$hasChanged = false;
9090

91-
foreach ($node->getArgs() as $position => $arg) {
92-
if ($arg->unpack) {
91+
$args = $node->getArgs();
92+
$lastArgPosition = count($args) - 1;
93+
for ($position = $lastArgPosition; $position >=0; --$position) {
94+
if (! isset($args[$position])) {
9395
continue;
9496
}
9597

98+
$arg = $args[$position];
99+
if ($arg->unpack) {
100+
break;
101+
}
102+
96103
// skip named args
97104
if ($arg->name instanceof Node) {
98-
continue;
105+
break;
99106
}
100107

101108
if (! $this->valueResolver->isNull($arg->value)) {
102-
continue;
109+
break;
103110
}
104111

105112
$nullPositions = $this->callLikeParamDefaultResolver->resolveNullPositions($node);
106113
if (! in_array($position, $nullPositions)) {
107-
continue;
114+
break;
108115
}
109116

110117
unset($node->args[$position]);
111-
112118
$hasChanged = true;
113119
}
114120

0 commit comments

Comments
 (0)