Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ final class AlsoArrowFunction

public function go()
{
$closure = fn ($value) => $this->someTypedService->run($value);
$closure = fn ($value) => $this->someTypedService->runInt($value);
}
}

Expand All @@ -34,7 +34,7 @@ final class AlsoArrowFunction

public function go()
{
$closure = fn (string $value) => $this->someTypedService->run($value);
$closure = fn (int $value) => $this->someTypedService->runInt($value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ final class AlsoClosure
public function go()
{
$closure = function ($value) {
$this->someTypedService->run($value);
$this->someTypedService->runInt($value);
};
}
}
Expand All @@ -36,8 +36,8 @@ final class AlsoClosure

public function go()
{
$closure = function (string $value) {
$this->someTypedService->run($value);
$closure = function (int $value) {
$this->someTypedService->runInt($value);
};
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\ScalarParamTypeByMethodCallTypeRector\Fixture;

use Rector\Tests\TypeDeclaration\Rector\ClassMethod\ScalarParamTypeByMethodCallTypeRector\Source\SomeTypedService;

final class SkipStringCallerParam
{
public function __construct(
private SomeTypedService $someTypedService
) {
}

public function go($value)
{
// string param accepts int/float/bool via coercion, so caller type stays open
$this->someTypedService->run($value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ final class UseDependency

public function go($value)
{
$this->someTypedService->run($value);
$this->someTypedService->runInt($value);
}
}

Expand All @@ -32,9 +32,9 @@ final class UseDependency
) {
}

public function go(string $value)
public function go(int $value)
{
$this->someTypedService->run($value);
$this->someTypedService->runInt($value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ final class StaticCallElsewhere
{
public function go($value, $first)
{
SomeTypedService::fun($first, $value);
SomeTypedService::funInt($first, $value);
}
}

Expand All @@ -22,9 +22,9 @@ use Rector\Tests\TypeDeclaration\Rector\ClassMethod\ScalarParamTypeByMethodCallT

final class StaticCallElsewhere
{
public function go(string $value, $first)
public function go(int $value, $first)
{
SomeTypedService::fun($first, $value);
SomeTypedService::funInt($first, $value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,18 @@ public function run(string $name)
{
}

public function runInt(int $count)
{
}

public static function fun($surname, string $name)
{
}

public static function funInt($surname, int $count)
{
}

public function withDefaultNullUnion(bool|string $name = null)
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public function getRuleDefinition(): RuleDefinition
<<<'CODE_SAMPLE'
class SomeTypedService
{
public function run(string $name)
public function run(int $value)
{
}
}
Expand All @@ -45,7 +45,7 @@ public function go($value)
<<<'CODE_SAMPLE'
class SomeTypedService
{
public function run(string $name)
public function run(int $value)
{
}
}
Expand All @@ -57,7 +57,7 @@ public function __construct(
) {
}

public function go(string $value)
public function go(int $value)
{
$this->someTypedService->run($value);
}
Expand All @@ -69,7 +69,14 @@ public function go(string $value)

protected function isMatchingParamType(Type $type): bool
{
return TypeCombinator::removeNull($type)->isScalar()
$type = TypeCombinator::removeNull($type);
if (! $type->isScalar()->yes()) {
return false;
}

// a string param accepts int/float/bool via scalar coercion, so a caller
// may pass another scalar - inferring string from it would be unsafe
return ! $type->isString()
->yes();
}
}
Loading