Skip to content

Commit 3288dc1

Browse files
authored
[Php85] Skip defined int or string on ArrayKeyExistsNullToEmptyStringRector (#7758)
* [Php85] Skip defined int or string on ArrayKeyExistsNullToEmptyStringRector * early * simplify fixture
1 parent 234de21 commit 3288dc1

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Rector\Tests\Php85\Rector\FuncCall\ArrayKeyExistsNullToEmptyStringRector\Fixture;
4+
5+
final class SkipDefinedIntOrString
6+
{
7+
/**
8+
* @var array<string|int, bool>
9+
*/
10+
private array $shownTodos = [
11+
0 => false,
12+
'fallback_todo' => true,
13+
];
14+
15+
public function run(string|int $index): void
16+
{
17+
if (! array_key_exists($index, $this->shownTodos)) {
18+
return;
19+
}
20+
21+
$this->shownTodos[$index] = true;
22+
}
23+
}

rules/Php85/Rector/FuncCall/ArrayKeyExistsNullToEmptyStringRector.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace Rector\Php85\Rector\FuncCall;
66

7+
use PHPStan\Type\UnionType;
8+
use PHPStan\Type\TypeCombinator;
79
use PhpParser\Node;
810
use PhpParser\Node\Expr\FuncCall;
911
use PHPStan\Analyser\Scope;
@@ -88,12 +90,21 @@ public function refactor(Node $node): ?Node
8890
return null;
8991
}
9092

91-
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($functionReflection, $node, $scope);
93+
$argPosition = $this->argsAnalyzer->resolveArgPosition($args, 'key', 0);
94+
$originalType = $this->getType($args[$argPosition]->value);
95+
96+
if ($originalType instanceof UnionType) {
97+
$withoutNullParameterType = TypeCombinator::removeNull($originalType);
98+
if ($withoutNullParameterType->equals($originalType)) {
99+
return null;
100+
}
101+
}
92102

103+
$parametersAcceptor = ParametersAcceptorSelectorVariantsWrapper::select($functionReflection, $node, $scope);
93104
$result = $this->nullToStrictStringIntConverter->convertIfNull(
94105
$node,
95106
$args,
96-
$this->argsAnalyzer->resolveArgPosition($args, 'key', 0),
107+
$argPosition,
97108
$isTrait,
98109
$scope,
99110
$parametersAcceptor

0 commit comments

Comments
 (0)