Updated Rector to commit 4923a147c3347d83b0cf302c03a4016e3b838a03

4923a147c3 [DeadCode] Skip nullable array on not empty on RemoveUnusedNonEmptyArrayBeforeForeachRector (#2935)
This commit is contained in:
Tomas Votruba 2022-09-18 11:37:35 +00:00
parent 19672d6690
commit ac77f3a400
6 changed files with 25 additions and 30 deletions

View File

@ -9,10 +9,11 @@ use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt; use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\Foreach_;
use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\If_;
use PHPStan\Analyser\Scope;
use PHPStan\Type\ArrayType; use PHPStan\Type\ArrayType;
use Rector\Core\NodeManipulator\IfManipulator; use Rector\Core\NodeManipulator\IfManipulator;
use Rector\Core\Php\ReservedKeywordAnalyzer; use Rector\Core\Php\ReservedKeywordAnalyzer;
use Rector\Core\Rector\AbstractRector; use Rector\Core\Rector\AbstractScopeAwareRector;
use Rector\DeadCode\NodeManipulator\CountManipulator; use Rector\DeadCode\NodeManipulator\CountManipulator;
use Rector\DeadCode\UselessIfCondBeforeForeachDetector; use Rector\DeadCode\UselessIfCondBeforeForeachDetector;
use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\Node\AttributeKey;
@ -21,7 +22,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/** /**
* @see \Rector\Tests\DeadCode\Rector\If_\RemoveUnusedNonEmptyArrayBeforeForeachRector\RemoveUnusedNonEmptyArrayBeforeForeachRectorTest * @see \Rector\Tests\DeadCode\Rector\If_\RemoveUnusedNonEmptyArrayBeforeForeachRector\RemoveUnusedNonEmptyArrayBeforeForeachRectorTest
*/ */
final class RemoveUnusedNonEmptyArrayBeforeForeachRector extends AbstractRector final class RemoveUnusedNonEmptyArrayBeforeForeachRector extends AbstractScopeAwareRector
{ {
/** /**
* @readonly * @readonly
@ -91,9 +92,9 @@ CODE_SAMPLE
* @param If_ $node * @param If_ $node
* @return Stmt[]|Foreach_|null * @return Stmt[]|Foreach_|null
*/ */
public function refactor(Node $node) public function refactorWithScope(Node $node, Scope $scope)
{ {
if (!$this->isUselessBeforeForeachCheck($node)) { if (!$this->isUselessBeforeForeachCheck($node, $scope)) {
return null; return null;
} }
/** @var Foreach_ $stmt */ /** @var Foreach_ $stmt */
@ -107,7 +108,7 @@ CODE_SAMPLE
$stmt->setAttribute(AttributeKey::COMMENTS, $comments); $stmt->setAttribute(AttributeKey::COMMENTS, $comments);
return $stmt; return $stmt;
} }
private function isUselessBeforeForeachCheck(If_ $if) : bool private function isUselessBeforeForeachCheck(If_ $if, Scope $scope) : bool
{ {
if (!$this->ifManipulator->isIfWithOnly($if, Foreach_::class)) { if (!$this->ifManipulator->isIfWithOnly($if, Foreach_::class)) {
return \false; return \false;
@ -124,7 +125,7 @@ CODE_SAMPLE
if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotIdenticalEmptyArray($if, $foreachExpr)) { if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotIdenticalEmptyArray($if, $foreachExpr)) {
return \true; return \true;
} }
if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotEmpty($if, $foreachExpr)) { if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotEmpty($if, $foreachExpr, $scope)) {
return \true; return \true;
} }
// we know it's an array // we know it's an array

View File

@ -13,18 +13,13 @@ use PhpParser\Node\Expr\Empty_;
use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Param; use PhpParser\Node\Param;
use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\If_;
use PHPStan\Analyser\Scope;
use PHPStan\Type\ArrayType; use PHPStan\Type\ArrayType;
use Rector\Core\NodeAnalyzer\ParamAnalyzer; use Rector\Core\NodeAnalyzer\ParamAnalyzer;
use Rector\Core\PhpParser\Comparing\NodeComparator; use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class UselessIfCondBeforeForeachDetector final class UselessIfCondBeforeForeachDetector
{ {
/**
* @readonly
* @var \Rector\NodeTypeResolver\NodeTypeResolver
*/
private $nodeTypeResolver;
/** /**
* @readonly * @readonly
* @var \Rector\Core\PhpParser\Comparing\NodeComparator * @var \Rector\Core\PhpParser\Comparing\NodeComparator
@ -40,9 +35,8 @@ final class UselessIfCondBeforeForeachDetector
* @var \Rector\Core\NodeAnalyzer\ParamAnalyzer * @var \Rector\Core\NodeAnalyzer\ParamAnalyzer
*/ */
private $paramAnalyzer; private $paramAnalyzer;
public function __construct(NodeTypeResolver $nodeTypeResolver, NodeComparator $nodeComparator, BetterNodeFinder $betterNodeFinder, ParamAnalyzer $paramAnalyzer) public function __construct(NodeComparator $nodeComparator, BetterNodeFinder $betterNodeFinder, ParamAnalyzer $paramAnalyzer)
{ {
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeComparator = $nodeComparator; $this->nodeComparator = $nodeComparator;
$this->betterNodeFinder = $betterNodeFinder; $this->betterNodeFinder = $betterNodeFinder;
$this->paramAnalyzer = $paramAnalyzer; $this->paramAnalyzer = $paramAnalyzer;
@ -51,7 +45,7 @@ final class UselessIfCondBeforeForeachDetector
* Matches: * Matches:
* !empty($values) * !empty($values)
*/ */
public function isMatchingNotEmpty(If_ $if, Expr $foreachExpr) : bool public function isMatchingNotEmpty(If_ $if, Expr $foreachExpr, Scope $scope) : bool
{ {
$cond = $if->cond; $cond = $if->cond;
if (!$cond instanceof BooleanNot) { if (!$cond instanceof BooleanNot) {
@ -66,7 +60,7 @@ final class UselessIfCondBeforeForeachDetector
return \false; return \false;
} }
// is array though? // is array though?
$arrayType = $this->nodeTypeResolver->getType($empty->expr); $arrayType = $scope->getType($empty->expr);
if (!$arrayType instanceof ArrayType) { if (!$arrayType instanceof ArrayType) {
return \false; return \false;
} }

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '5f05178587b69ffcd530f1096bd5ed64ca8398d8'; public const PACKAGE_VERSION = '4923a147c3347d83b0cf302c03a4016e3b838a03';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2022-09-18 00:35:27'; public const RELEASE_DATE = '2022-09-18 13:33:08';
/** /**
* @var int * @var int
*/ */

2
vendor/autoload.php vendored
View File

@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php'; require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af::getLoader(); return ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer // autoload_real.php @generated by Composer
class ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af class ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5
{ {
private static $loader; private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af
return self::$loader; return self::$loader;
} }
spl_autoload_register(array('ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php'; require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit89d47363d210dcfd1592312236606fd5::getInitializer($loader));
$loader->setClassMapAuthoritative(true); $loader->setClassMapAuthoritative(true);
$loader->register(true); $loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af::$files; $includeFiles = \Composer\Autoload\ComposerStaticInit89d47363d210dcfd1592312236606fd5::$files;
foreach ($includeFiles as $fileIdentifier => $file) { foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirea598be8fa4ff2fb61934be2affd1a4af($fileIdentifier, $file); composerRequire89d47363d210dcfd1592312236606fd5($fileIdentifier, $file);
} }
return $loader; return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af
* @param string $file * @param string $file
* @return void * @return void
*/ */
function composerRequirea598be8fa4ff2fb61934be2affd1a4af($fileIdentifier, $file) function composerRequire89d47363d210dcfd1592312236606fd5($fileIdentifier, $file)
{ {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload; namespace Composer\Autoload;
class ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af class ComposerStaticInit89d47363d210dcfd1592312236606fd5
{ {
public static $files = array ( public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -3101,9 +3101,9 @@ class ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInit89d47363d210dcfd1592312236606fd5::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit89d47363d210dcfd1592312236606fd5::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af::$classMap; $loader->classMap = ComposerStaticInit89d47363d210dcfd1592312236606fd5::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }