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\Foreach_;
use PhpParser\Node\Stmt\If_;
use PHPStan\Analyser\Scope;
use PHPStan\Type\ArrayType;
use Rector\Core\NodeManipulator\IfManipulator;
use Rector\Core\Php\ReservedKeywordAnalyzer;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\Rector\AbstractScopeAwareRector;
use Rector\DeadCode\NodeManipulator\CountManipulator;
use Rector\DeadCode\UselessIfCondBeforeForeachDetector;
use Rector\NodeTypeResolver\Node\AttributeKey;
@ -21,7 +22,7 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\DeadCode\Rector\If_\RemoveUnusedNonEmptyArrayBeforeForeachRector\RemoveUnusedNonEmptyArrayBeforeForeachRectorTest
*/
final class RemoveUnusedNonEmptyArrayBeforeForeachRector extends AbstractRector
final class RemoveUnusedNonEmptyArrayBeforeForeachRector extends AbstractScopeAwareRector
{
/**
* @readonly
@ -91,9 +92,9 @@ CODE_SAMPLE
* @param If_ $node
* @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;
}
/** @var Foreach_ $stmt */
@ -107,7 +108,7 @@ CODE_SAMPLE
$stmt->setAttribute(AttributeKey::COMMENTS, $comments);
return $stmt;
}
private function isUselessBeforeForeachCheck(If_ $if) : bool
private function isUselessBeforeForeachCheck(If_ $if, Scope $scope) : bool
{
if (!$this->ifManipulator->isIfWithOnly($if, Foreach_::class)) {
return \false;
@ -124,7 +125,7 @@ CODE_SAMPLE
if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotIdenticalEmptyArray($if, $foreachExpr)) {
return \true;
}
if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotEmpty($if, $foreachExpr)) {
if ($this->uselessIfCondBeforeForeachDetector->isMatchingNotEmpty($if, $foreachExpr, $scope)) {
return \true;
}
// 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\Param;
use PhpParser\Node\Stmt\If_;
use PHPStan\Analyser\Scope;
use PHPStan\Type\ArrayType;
use Rector\Core\NodeAnalyzer\ParamAnalyzer;
use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class UselessIfCondBeforeForeachDetector
{
/**
* @readonly
* @var \Rector\NodeTypeResolver\NodeTypeResolver
*/
private $nodeTypeResolver;
/**
* @readonly
* @var \Rector\Core\PhpParser\Comparing\NodeComparator
@ -40,9 +35,8 @@ final class UselessIfCondBeforeForeachDetector
* @var \Rector\Core\NodeAnalyzer\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->betterNodeFinder = $betterNodeFinder;
$this->paramAnalyzer = $paramAnalyzer;
@ -51,7 +45,7 @@ final class UselessIfCondBeforeForeachDetector
* Matches:
* !empty($values)
*/
public function isMatchingNotEmpty(If_ $if, Expr $foreachExpr) : bool
public function isMatchingNotEmpty(If_ $if, Expr $foreachExpr, Scope $scope) : bool
{
$cond = $if->cond;
if (!$cond instanceof BooleanNot) {
@ -66,7 +60,7 @@ final class UselessIfCondBeforeForeachDetector
return \false;
}
// is array though?
$arrayType = $this->nodeTypeResolver->getType($empty->expr);
$arrayType = $scope->getType($empty->expr);
if (!$arrayType instanceof ArrayType) {
return \false;
}

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = '5f05178587b69ffcd530f1096bd5ed64ca8398d8';
public const PACKAGE_VERSION = '4923a147c3347d83b0cf302c03a4016e3b838a03';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2022-09-18 00:35:27';
public const RELEASE_DATE = '2022-09-18 13:33:08';
/**
* @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';
return ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af::getLoader();
return ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af
class ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af
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__));
spl_autoload_unregister(array('ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit89d47363d210dcfd1592312236606fd5', 'loadClassLoader'));
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->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInita598be8fa4ff2fb61934be2affd1a4af::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInit89d47363d210dcfd1592312236606fd5::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirea598be8fa4ff2fb61934be2affd1a4af($fileIdentifier, $file);
composerRequire89d47363d210dcfd1592312236606fd5($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInita598be8fa4ff2fb61934be2affd1a4af
* @param string $file
* @return void
*/
function composerRequirea598be8fa4ff2fb61934be2affd1a4af($fileIdentifier, $file)
function composerRequire89d47363d210dcfd1592312236606fd5($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

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