Updated Rector to commit 9939ced45eb3479a1d8b2b9339512398118b92d9

9939ced45e [CodeQuality] Skip never type on default switch on ExplicitReturnNullRector (#5808)
This commit is contained in:
Tomas Votruba 2024-04-08 09:20:15 +00:00
parent 6fb3352189
commit 53fb366ec6
4 changed files with 17 additions and 15 deletions

View File

@ -20,7 +20,6 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
use Rector\Rector\AbstractRector; use Rector\Rector\AbstractRector;
use Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer;
use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer;
use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver; use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver;
use Rector\ValueObject\MethodName; use Rector\ValueObject\MethodName;
@ -51,23 +50,17 @@ final class ExplicitReturnNullRector extends AbstractRector
* @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger * @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger
*/ */
private $phpDocTypeChanger; private $phpDocTypeChanger;
/**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer
*/
private $neverFuncCallAnalyzer;
/** /**
* @readonly * @readonly
* @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer
*/ */
private $returnTypeInferer; private $returnTypeInferer;
public function __construct(SilentVoidResolver $silentVoidResolver, PhpDocInfoFactory $phpDocInfoFactory, TypeFactory $typeFactory, PhpDocTypeChanger $phpDocTypeChanger, NeverFuncCallAnalyzer $neverFuncCallAnalyzer, ReturnTypeInferer $returnTypeInferer) public function __construct(SilentVoidResolver $silentVoidResolver, PhpDocInfoFactory $phpDocInfoFactory, TypeFactory $typeFactory, PhpDocTypeChanger $phpDocTypeChanger, ReturnTypeInferer $returnTypeInferer)
{ {
$this->silentVoidResolver = $silentVoidResolver; $this->silentVoidResolver = $silentVoidResolver;
$this->phpDocInfoFactory = $phpDocInfoFactory; $this->phpDocInfoFactory = $phpDocInfoFactory;
$this->typeFactory = $typeFactory; $this->typeFactory = $typeFactory;
$this->phpDocTypeChanger = $phpDocTypeChanger; $this->phpDocTypeChanger = $phpDocTypeChanger;
$this->neverFuncCallAnalyzer = $neverFuncCallAnalyzer;
$this->returnTypeInferer = $returnTypeInferer; $this->returnTypeInferer = $returnTypeInferer;
} }
public function getRuleDefinition() : RuleDefinition public function getRuleDefinition() : RuleDefinition
@ -139,7 +132,7 @@ CODE_SAMPLE
} }
return null; return null;
}); });
if (!$this->silentVoidResolver->hasSilentVoid($node) || $this->neverFuncCallAnalyzer->hasNeverFuncCall($node)) { if (!$this->silentVoidResolver->hasSilentVoid($node)) {
if ($hasChanged) { if ($hasChanged) {
$this->transformDocUnionVoidToUnionNull($node); $this->transformDocUnionVoidToUnionNull($node);
return $node; return $node;

View File

@ -4,6 +4,7 @@ declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer; namespace Rector\TypeDeclaration\NodeAnalyzer;
use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Closure;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt; use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Expression;
@ -22,12 +23,13 @@ final class NeverFuncCallAnalyzer
$this->nodeTypeResolver = $nodeTypeResolver; $this->nodeTypeResolver = $nodeTypeResolver;
} }
/** /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike * @param ClassMethod|Closure|Function_|Stmt[] $functionLike
*/ */
public function hasNeverFuncCall($functionLike) : bool public function hasNeverFuncCall($functionLike) : bool
{ {
$hasNeverType = \false; $hasNeverType = \false;
foreach ((array) $functionLike->stmts as $stmt) { $stmts = $functionLike instanceof FunctionLike ? (array) $functionLike->stmts : $functionLike;
foreach ($stmts as $stmt) {
if ($stmt instanceof Expression) { if ($stmt instanceof Expression) {
$stmt = $stmt->expr; $stmt = $stmt->expr;
} }

View File

@ -30,6 +30,7 @@ use PhpParser\Node\Stmt\TryCatch;
use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ClassReflection;
use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\BetterNodeFinder;
use Rector\Reflection\ReflectionResolver; use Rector\Reflection\ReflectionResolver;
use Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer;
final class SilentVoidResolver final class SilentVoidResolver
{ {
/** /**
@ -42,10 +43,16 @@ final class SilentVoidResolver
* @var \Rector\Reflection\ReflectionResolver * @var \Rector\Reflection\ReflectionResolver
*/ */
private $reflectionResolver; private $reflectionResolver;
public function __construct(BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver) /**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer
*/
private $neverFuncCallAnalyzer;
public function __construct(BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, NeverFuncCallAnalyzer $neverFuncCallAnalyzer)
{ {
$this->betterNodeFinder = $betterNodeFinder; $this->betterNodeFinder = $betterNodeFinder;
$this->reflectionResolver = $reflectionResolver; $this->reflectionResolver = $reflectionResolver;
$this->neverFuncCallAnalyzer = $neverFuncCallAnalyzer;
} }
/** /**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike
@ -98,7 +105,7 @@ final class SilentVoidResolver
return \true; return \true;
} }
} }
return \false; return $this->neverFuncCallAnalyzer->hasNeverFuncCall($stmts);
} }
private function isDoWithAlwaysReturnOrExit(Do_ $do) : bool private function isDoWithAlwaysReturnOrExit(Do_ $do) : bool
{ {

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '690fe892750028e239a01f1b13cd252359994522'; public const PACKAGE_VERSION = '9939ced45eb3479a1d8b2b9339512398118b92d9';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2024-04-07 16:13:24'; public const RELEASE_DATE = '2024-04-08 16:17:37';
/** /**
* @var int * @var int
*/ */