From 54b25e42912186831362b059cb52d48277b60645 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 5 Jun 2023 14:01:36 +0000 Subject: [PATCH] Updated Rector to commit 2dccbb6b176a836e174babbaf6611a0d4730c55c https://github.com/rectorphp/rector-src/commit/2dccbb6b176a836e174babbaf6611a0d4730c55c Remove removeNode() from RemoveDeadReturnRector, merge RemoveLastReturnRector to RemoveDeadReturnRector (#4085) --- config/set/dead-code.php | 2 - docs/rector_rules_overview.md | 25 +----- .../ClassMethod/RemoveLastReturnRector.php | 83 ------------------- .../FunctionLike/RemoveDeadReturnRector.php | 36 ++++++-- src/Application/VersionResolver.php | 4 +- src/Kernel/RectorKernel.php | 2 +- src/PhpParser/Node/BetterNodeFinder.php | 1 + vendor/autoload.php | 2 +- vendor/composer/autoload_classmap.php | 1 - vendor/composer/autoload_real.php | 10 +-- vendor/composer/autoload_static.php | 9 +- 11 files changed, 46 insertions(+), 129 deletions(-) delete mode 100644 rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php diff --git a/config/set/dead-code.php b/config/set/dead-code.php index 9f1f9f11fef..9d7678e950a 100644 --- a/config/set/dead-code.php +++ b/config/set/dead-code.php @@ -13,7 +13,6 @@ use Rector\DeadCode\Rector\Cast\RecastingRemovalRector; use Rector\DeadCode\Rector\ClassConst\RemoveUnusedPrivateClassConstantRector; use Rector\DeadCode\Rector\ClassMethod\RemoveDelegatingParentCallRector; use Rector\DeadCode\Rector\ClassMethod\RemoveEmptyClassMethodRector; -use Rector\DeadCode\Rector\ClassMethod\RemoveLastReturnRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedConstructorParamRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedPrivateMethodParameterRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedPrivateMethodRector; @@ -90,7 +89,6 @@ return static function (RectorConfig $rectorConfig) : void { RemoveNonExistingVarAnnotationRector::class, RemoveUselessVarTagRector::class, RemoveUnusedPromotedPropertyRector::class, - RemoveLastReturnRector::class, RemoveJustPropertyFetchForAssignRector::class, RemoveJustVariableAssignRector::class, RemoveAlwaysTrueIfConditionRector::class, diff --git a/docs/rector_rules_overview.md b/docs/rector_rules_overview.md index aa63933da58..59040604c2f 100644 --- a/docs/rector_rules_overview.md +++ b/docs/rector_rules_overview.md @@ -1,4 +1,4 @@ -# 384 Rules Overview +# 383 Rules Overview
@@ -10,7 +10,7 @@ - [CodingStyle](#codingstyle) (34) -- [DeadCode](#deadcode) (45) +- [DeadCode](#deadcode) (44) - [DependencyInjection](#dependencyinjection) (2) @@ -2914,27 +2914,6 @@ Remove variable just to assign value or return value
-### RemoveLastReturnRector - -Remove very last `return` that has no meaning - -- class: [`Rector\DeadCode\Rector\ClassMethod\RemoveLastReturnRector`](../rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php) - -```diff - function some_function($value) - { - if ($value === 1000) { - return; - } - - if ($value) { -- return; - } - } -``` - -
- ### RemoveNonExistingVarAnnotationRector Removes non-existing `@var` annotations above the code diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php deleted file mode 100644 index 6c16f66c152..00000000000 --- a/rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php +++ /dev/null @@ -1,83 +0,0 @@ -contextAnalyzer = $contextAnalyzer; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Remove very last `return` that has no meaning', [new CodeSample(<<<'CODE_SAMPLE' -function some_function($value) -{ - if ($value === 1000) { - return; - } - - if ($value) { - return; - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -function some_function($value) -{ - if ($value === 1000) { - return; - } - - if ($value) { - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [ClassMethod::class, Function_::class, Closure::class]; - } - /** - * @param ClassMethod|Function_ $node - */ - public function refactor(Node $node) : ?Node - { - // last node and last return - $lastNode = $this->betterNodeFinder->findLastInstanceOf((array) $node->stmts, Node::class); - $lastReturn = $this->betterNodeFinder->findLastInstanceOf((array) $node->stmts, Return_::class); - if (!$lastReturn instanceof Return_) { - return null; - } - if ($lastNode !== $lastReturn) { - return null; - } - if ($this->contextAnalyzer->isInLoop($lastReturn)) { - return null; - } - $this->removeNode($lastReturn); - return null; - } -} diff --git a/rules/DeadCode/Rector/FunctionLike/RemoveDeadReturnRector.php b/rules/DeadCode/Rector/FunctionLike/RemoveDeadReturnRector.php index f3bb1547b1b..48dabaa49e6 100644 --- a/rules/DeadCode/Rector/FunctionLike/RemoveDeadReturnRector.php +++ b/rules/DeadCode/Rector/FunctionLike/RemoveDeadReturnRector.php @@ -7,7 +7,9 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Stmt\ClassMethod; +use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\Function_; +use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; use Rector\Core\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -61,21 +63,43 @@ CODE_SAMPLE */ public function refactor(Node $node) : ?Node { - if ($node->stmts === []) { + if ($node->stmts === [] || $node->stmts === null) { return null; } - if ($node->stmts === null) { - return null; + \end($node->stmts); + $lastStmtKey = \key($node->stmts); + $lastStmt = $node->stmts[$lastStmtKey]; + if ($lastStmt instanceof If_) { + if (!$this->isBareIfWithOnlyStmtEmptyReturn($lastStmt)) { + return null; + } + $lastStmt->stmts = []; + return $node; } - $stmtValues = \array_values($node->stmts); - $lastStmt = \end($stmtValues); if (!$lastStmt instanceof Return_) { return null; } if ($lastStmt->expr instanceof Expr) { return null; } - $this->removeNode($lastStmt); + unset($node->stmts[$lastStmtKey]); return $node; } + private function isBareIfWithOnlyStmtEmptyReturn(If_ $if) : bool + { + if ($if->else instanceof Else_) { + return \false; + } + if ($if->elseifs !== []) { + return \false; + } + if (\count($if->stmts) !== 1) { + return \false; + } + $onlyStmt = $if->stmts[0]; + if (!$onlyStmt instanceof Return_) { + return \false; + } + return !$onlyStmt->expr instanceof Expr; + } } diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index 6f9c8912d89..bfe6dab1f6d 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 = 'cdc9e6b6d8ce2446e8860016997ad37e8d3b7d44'; + public const PACKAGE_VERSION = '2dccbb6b176a836e174babbaf6611a0d4730c55c'; /** * @api * @var string */ - public const RELEASE_DATE = '2023-06-05 13:42:45'; + public const RELEASE_DATE = '2023-06-05 13:57:36'; /** * @var int */ diff --git a/src/Kernel/RectorKernel.php b/src/Kernel/RectorKernel.php index 0791304ca54..f09a504d06c 100644 --- a/src/Kernel/RectorKernel.php +++ b/src/Kernel/RectorKernel.php @@ -15,7 +15,7 @@ final class RectorKernel /** * @var string */ - private const CACHE_KEY = 'v55'; + private const CACHE_KEY = 'v56'; /** * @var \Symfony\Component\DependencyInjection\ContainerInterface|null */ diff --git a/src/PhpParser/Node/BetterNodeFinder.php b/src/PhpParser/Node/BetterNodeFinder.php index 85076b5b707..732d1dc8275 100644 --- a/src/PhpParser/Node/BetterNodeFinder.php +++ b/src/PhpParser/Node/BetterNodeFinder.php @@ -205,6 +205,7 @@ final class BetterNodeFinder return \false; } /** + * @api used in Symfony * @template T of Node * * @param Stmt[] $nodes diff --git a/vendor/autoload.php b/vendor/autoload.php index 8f304383bd5..3c49be55a49 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) { require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit81fb50a001fc3a5b67552be5bc7095a0::getLoader(); +return ComposerAutoloaderInit4c14e8bace132daaa89443888a4a21a7::getLoader(); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 3482313a9e7..2baba91a469 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1583,7 +1583,6 @@ return array( 'Rector\\DeadCode\\Rector\\ClassLike\\RemoveAnnotationRector' => $baseDir . '/rules/DeadCode/Rector/ClassLike/RemoveAnnotationRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveDelegatingParentCallRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveDelegatingParentCallRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveEmptyClassMethodRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveEmptyClassMethodRector.php', - 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveLastReturnRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedConstructorParamRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodParameterRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php', diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index bd208dc48af..66e6de81b16 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit81fb50a001fc3a5b67552be5bc7095a0 +class ComposerAutoloaderInit4c14e8bace132daaa89443888a4a21a7 { private static $loader; @@ -22,17 +22,17 @@ class ComposerAutoloaderInit81fb50a001fc3a5b67552be5bc7095a0 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit81fb50a001fc3a5b67552be5bc7095a0', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit4c14e8bace132daaa89443888a4a21a7', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit81fb50a001fc3a5b67552be5bc7095a0', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit4c14e8bace132daaa89443888a4a21a7', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit4c14e8bace132daaa89443888a4a21a7::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInit4c14e8bace132daaa89443888a4a21a7::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index f19481408af..9f5f943b701 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0 +class ComposerStaticInit4c14e8bace132daaa89443888a4a21a7 { public static $files = array ( 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -1825,7 +1825,6 @@ class ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0 'Rector\\DeadCode\\Rector\\ClassLike\\RemoveAnnotationRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassLike/RemoveAnnotationRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveDelegatingParentCallRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveDelegatingParentCallRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveEmptyClassMethodRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveEmptyClassMethodRector.php', - 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveLastReturnRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveLastReturnRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedConstructorParamRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodParameterRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php', @@ -3050,9 +3049,9 @@ class ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit81fb50a001fc3a5b67552be5bc7095a0::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit4c14e8bace132daaa89443888a4a21a7::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit4c14e8bace132daaa89443888a4a21a7::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit4c14e8bace132daaa89443888a4a21a7::$classMap; }, null, ClassLoader::class); }