From 6b83e443568e84dd08ab8345e732e0c3c9c87ccf Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 11 Oct 2023 22:41:12 +0700 Subject: [PATCH 1/2] [TypeDeclaration] Utilize ClassMethodReturnTypeOverrideGuard on NumericReturnTypeFromStrictScalarReturnsRector --- ...icReturnTypeFromStrictScalarReturnsRector.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php index 76ebfbe33af..2fc582c8039 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php @@ -24,10 +24,12 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; +use PHPStan\Analyser\Scope; use PHPStan\Type\FloatType; use PHPStan\Type\IntegerType; -use Rector\Core\Rector\AbstractRector; +use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\ValueObject\PhpVersionFeature; +use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -35,8 +37,12 @@ /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\NumericReturnTypeFromStrictScalarReturnsRector\NumericReturnTypeFromStrictScalarReturnsRectorTest */ -final class NumericReturnTypeFromStrictScalarReturnsRector extends AbstractRector implements MinPhpVersionInterface +final class NumericReturnTypeFromStrictScalarReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface { + public function __construct(private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard) + { + } + public function getRuleDefinition(): RuleDefinition { return new RuleDefinition('Change numeric return type based on strict returns type operations', [ @@ -76,7 +82,7 @@ public function getNodeTypes(): array /** * @param ClassMethod|Function_|Closure $node */ - public function refactor(Node $node): ?Node + public function refactorWithScope(Node $node, Scope $scope) { if ($node->returnType instanceof Node) { return null; @@ -86,6 +92,10 @@ public function refactor(Node $node): ?Node return null; } + if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { + return null; + } + $return = $this->matchRootReturnWithExpr($node); if (! $return instanceof Return_) { return null; From cc4856411086434415b983b893ab8cb3478786a6 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 11 Oct 2023 22:42:47 +0700 Subject: [PATCH 2/2] Fix phpstan --- .../NumericReturnTypeFromStrictScalarReturnsRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php index 2fc582c8039..dadff8a6553 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php @@ -82,7 +82,7 @@ public function getNodeTypes(): array /** * @param ClassMethod|Function_|Closure $node */ - public function refactorWithScope(Node $node, Scope $scope) + public function refactorWithScope(Node $node, Scope $scope): ?Node { if ($node->returnType instanceof Node) { return null;