From 53fb366ec685bff4564d2304d00f2211a9736e4e Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 8 Apr 2024 09:20:15 +0000 Subject: [PATCH] Updated Rector to commit 9939ced45eb3479a1d8b2b9339512398118b92d9 https://github.com/rectorphp/rector-src/commit/9939ced45eb3479a1d8b2b9339512398118b92d9 [CodeQuality] Skip never type on default switch on ExplicitReturnNullRector (#5808) --- .../Rector/ClassMethod/ExplicitReturnNullRector.php | 11 ++--------- .../NodeAnalyzer/NeverFuncCallAnalyzer.php | 6 ++++-- .../TypeInferer/SilentVoidResolver.php | 11 +++++++++-- src/Application/VersionResolver.php | 4 ++-- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php b/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php index 1a5db41f471..6cf5d3d168c 100644 --- a/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/ExplicitReturnNullRector.php @@ -20,7 +20,6 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\Rector\AbstractRector; -use Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver; use Rector\ValueObject\MethodName; @@ -51,23 +50,17 @@ final class ExplicitReturnNullRector extends AbstractRector * @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger */ private $phpDocTypeChanger; - /** - * @readonly - * @var \Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer - */ - private $neverFuncCallAnalyzer; /** * @readonly * @var \Rector\TypeDeclaration\TypeInferer\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->phpDocInfoFactory = $phpDocInfoFactory; $this->typeFactory = $typeFactory; $this->phpDocTypeChanger = $phpDocTypeChanger; - $this->neverFuncCallAnalyzer = $neverFuncCallAnalyzer; $this->returnTypeInferer = $returnTypeInferer; } public function getRuleDefinition() : RuleDefinition @@ -139,7 +132,7 @@ CODE_SAMPLE } return null; }); - if (!$this->silentVoidResolver->hasSilentVoid($node) || $this->neverFuncCallAnalyzer->hasNeverFuncCall($node)) { + if (!$this->silentVoidResolver->hasSilentVoid($node)) { if ($hasChanged) { $this->transformDocUnionVoidToUnionNull($node); return $node; diff --git a/rules/TypeDeclaration/NodeAnalyzer/NeverFuncCallAnalyzer.php b/rules/TypeDeclaration/NodeAnalyzer/NeverFuncCallAnalyzer.php index b34d28d0a62..0d743211445 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/NeverFuncCallAnalyzer.php +++ b/rules/TypeDeclaration/NodeAnalyzer/NeverFuncCallAnalyzer.php @@ -4,6 +4,7 @@ declare (strict_types=1); namespace Rector\TypeDeclaration\NodeAnalyzer; use PhpParser\Node\Expr\Closure; +use PhpParser\Node\FunctionLike; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; @@ -22,12 +23,13 @@ final class NeverFuncCallAnalyzer $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 { $hasNeverType = \false; - foreach ((array) $functionLike->stmts as $stmt) { + $stmts = $functionLike instanceof FunctionLike ? (array) $functionLike->stmts : $functionLike; + foreach ($stmts as $stmt) { if ($stmt instanceof Expression) { $stmt = $stmt->expr; } diff --git a/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php b/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php index 9ca81672897..20f8fbb9510 100644 --- a/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php +++ b/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php @@ -30,6 +30,7 @@ use PhpParser\Node\Stmt\TryCatch; use PHPStan\Reflection\ClassReflection; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Reflection\ReflectionResolver; +use Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer; final class SilentVoidResolver { /** @@ -42,10 +43,16 @@ final class SilentVoidResolver * @var \Rector\Reflection\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->reflectionResolver = $reflectionResolver; + $this->neverFuncCallAnalyzer = $neverFuncCallAnalyzer; } /** * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike @@ -98,7 +105,7 @@ final class SilentVoidResolver return \true; } } - return \false; + return $this->neverFuncCallAnalyzer->hasNeverFuncCall($stmts); } private function isDoWithAlwaysReturnOrExit(Do_ $do) : bool { diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index 763060eb071..b38bdd5de53 100644 --- a/src/Application/VersionResolver.php +++ b/src/Application/VersionResolver.php @@ -19,12 +19,12 @@ final class VersionResolver * @api * @var string */ - public const PACKAGE_VERSION = '690fe892750028e239a01f1b13cd252359994522'; + public const PACKAGE_VERSION = '9939ced45eb3479a1d8b2b9339512398118b92d9'; /** * @api * @var string */ - public const RELEASE_DATE = '2024-04-07 16:13:24'; + public const RELEASE_DATE = '2024-04-08 16:17:37'; /** * @var int */