mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-29 22:23:30 +00:00
Updated Rector to commit 4923a147c3347d83b0cf302c03a4016e3b838a03
4923a147c3
[DeadCode] Skip nullable array on not empty on RemoveUnusedNonEmptyArrayBeforeForeachRector (#2935)
This commit is contained in:
parent
19672d6690
commit
ac77f3a400
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
2
vendor/autoload.php
vendored
|
@ -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();
|
||||||
|
|
14
vendor/composer/autoload_real.php
vendored
14
vendor/composer/autoload_real.php
vendored
|
@ -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;
|
||||||
|
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user