Updated Rector to commit caf08c4efa0c3351a9d899e568ded816bacd1993

caf08c4efa Skip `__construct()` in BoolReturnTypeFromStrictScalarReturnsRector (#5133)
This commit is contained in:
Tomas Votruba 2023-10-06 09:33:45 +00:00
parent d232b29090
commit 649f0f5ffb
2 changed files with 29 additions and 7 deletions

View File

@ -26,16 +26,19 @@ use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\BooleanType; use PHPStan\Type\BooleanType;
use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\Core\PhpParser\Node\Value\ValueResolver;
use Rector\Core\Rector\AbstractRector; use PHPStan\Analyser\Scope;
use Rector\Core\Rector\AbstractScopeAwareRector;
use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature; use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer;
use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard;
use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromStrictScalarReturnsRector\BoolReturnTypeFromStrictScalarReturnsRectorTest * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromStrictScalarReturnsRector\BoolReturnTypeFromStrictScalarReturnsRectorTest
*/ */
final class BoolReturnTypeFromStrictScalarReturnsRector extends AbstractRector implements MinPhpVersionInterface final class BoolReturnTypeFromStrictScalarReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface
{ {
/** /**
* @readonly * @readonly
@ -57,12 +60,18 @@ final class BoolReturnTypeFromStrictScalarReturnsRector extends AbstractRector i
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder * @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/ */
private $betterNodeFinder; private $betterNodeFinder;
public function __construct(ReturnAnalyzer $returnAnalyzer, ReflectionProvider $reflectionProvider, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder) /**
* @readonly
* @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard
*/
private $classMethodReturnTypeOverrideGuard;
public function __construct(ReturnAnalyzer $returnAnalyzer, ReflectionProvider $reflectionProvider, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard)
{ {
$this->returnAnalyzer = $returnAnalyzer; $this->returnAnalyzer = $returnAnalyzer;
$this->reflectionProvider = $reflectionProvider; $this->reflectionProvider = $reflectionProvider;
$this->valueResolver = $valueResolver; $this->valueResolver = $valueResolver;
$this->betterNodeFinder = $betterNodeFinder; $this->betterNodeFinder = $betterNodeFinder;
$this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard;
} }
public function getRuleDefinition() : RuleDefinition public function getRuleDefinition() : RuleDefinition
{ {
@ -104,9 +113,9 @@ CODE_SAMPLE
/** /**
* @param ClassMethod|Function_|Closure $node * @param ClassMethod|Function_|Closure $node
*/ */
public function refactor(Node $node) : ?Node public function refactorWithScope(Node $node, Scope $scope) : ?Node
{ {
if ($node->returnType instanceof Node) { if ($this->shouldSkip($node, $scope)) {
return null; return null;
} }
$returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($node, Return_::class); $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($node, Return_::class);
@ -116,6 +125,19 @@ CODE_SAMPLE
$node->returnType = new Identifier('bool'); $node->returnType = new Identifier('bool');
return $node; return $node;
} }
/**
* @param ClassMethod|Function_|Closure $node
*/
private function shouldSkip(Node $node, Scope $scope) : bool
{
if ($node->returnType instanceof Node) {
return \true;
}
if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) {
return \true;
}
return \false;
}
public function provideMinPhpVersion() : int public function provideMinPhpVersion() : int
{ {
return PhpVersionFeature::SCALAR_TYPES; return PhpVersionFeature::SCALAR_TYPES;

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '8179073d77b744e70404ec57a02ac730a877516a'; public const PACKAGE_VERSION = 'caf08c4efa0c3351a9d899e568ded816bacd1993';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2023-10-06 15:48:02'; public const RELEASE_DATE = '2023-10-06 16:30:14';
/** /**
* @var int * @var int
*/ */