Skip to content

Commit 300c645

Browse files
authored
[TypeDeclaration] Skip conditional non-string on AddParamStringTypeFromSprintfUseRector (#7514)
* [TypeDeclaration] Skip conditional non-string on AddParamStringTypeFromSprintfUseRector * fix
1 parent dbfc750 commit 300c645

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddParamStringTypeFromSprintfUseRector\Fixture;
4+
5+
final class SkipConditionalNonString
6+
{
7+
/**
8+
* @param false|float|int|string $cell
9+
*
10+
* @return bool|float|int|string
11+
*/
12+
function run($data)
13+
{
14+
if (is_string($data)) {
15+
$data = sprintf('"%s"', $data);
16+
}
17+
18+
return $data;
19+
}
20+
}

rules/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use PhpParser\Node\Stmt\ClassMethod;
1414
use PhpParser\Node\Stmt\Function_;
1515
use Rector\Rector\AbstractRector;
16+
use Rector\TypeDeclaration\Guard\ParamTypeAddGuard;
1617
use Rector\TypeDeclaration\NodeAnalyzer\VariableInSprintfMaskMatcher;
1718
use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard;
1819
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@@ -26,6 +27,7 @@ final class AddParamStringTypeFromSprintfUseRector extends AbstractRector
2627
public function __construct(
2728
private readonly VariableInSprintfMaskMatcher $variableInSprintfMaskMatcher,
2829
private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard,
30+
private readonly ParamTypeAddGuard $paramTypeAddGuard
2931
) {
3032
}
3133

@@ -94,8 +96,11 @@ public function refactor(Node $node): ClassMethod|Function_|Closure|ArrowFunctio
9496
continue;
9597
}
9698

97-
$variableName = $this->getName($param);
99+
if (! $this->paramTypeAddGuard->isLegal($param, $node)) {
100+
continue;
101+
}
98102

103+
$variableName = $this->getName($param);
99104
if (! $this->variableInSprintfMaskMatcher->matchMask($node, $variableName, '%s')) {
100105
continue;
101106
}

0 commit comments

Comments
 (0)