Updated Rector to commit 320cdcd8de

320cdcd8de [MockeryToProphecy] Deprecate micro set as not practical (#1899)
This commit is contained in:
Tomas Votruba 2022-03-03 16:37:48 +00:00
parent 4f32575b71
commit be1a72534c
10 changed files with 20 additions and 321 deletions

View File

@ -1,4 +1,4 @@
# 514 Rules Overview
# 512 Rules Overview
<br>
@ -42,8 +42,6 @@
- [EarlyReturn](#earlyreturn) (11)
- [MockeryToProphecy](#mockerytoprophecy) (2)
- [MysqlToMysqli](#mysqltomysqli) (4)
- [Naming](#naming) (6)
@ -6236,40 +6234,6 @@ Changes Single return of || to early returns
<br>
## MockeryToProphecy
### MockeryCloseRemoveRector
Removes mockery close from test classes
- class: [`Rector\MockeryToProphecy\Rector\StaticCall\MockeryCloseRemoveRector`](../rules/MockeryToProphecy/Rector/StaticCall/MockeryCloseRemoveRector.php)
```diff
public function tearDown() : void
{
- \Mockery::close();
}
```
<br>
### MockeryCreateMockToProphizeRector
Changes mockery mock creation to Prophesize
- class: [`Rector\MockeryToProphecy\Rector\ClassMethod\MockeryCreateMockToProphizeRector`](../rules/MockeryToProphecy/Rector/ClassMethod/MockeryCreateMockToProphizeRector.php)
```diff
-$mock = \Mockery::mock('MyClass');
+$mock = $this->prophesize('MyClass');
+
$service = new Service();
-$service->injectDependency($mock);
+$service->injectDependency($mock->reveal());
```
<br>
## MysqlToMysqli
### MysqlAssignToMysqliRector

View File

@ -1,60 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\MockeryToProphecy\Collector;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Expr\Variable;
use Rector\Core\PhpParser\Node\Value\ValueResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class MockVariableCollector
{
/**
* @readonly
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
/**
* @readonly
* @var \Rector\Core\PhpParser\Node\Value\ValueResolver
*/
private $valueResolver;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\Value\ValueResolver $valueResolver)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->valueResolver = $valueResolver;
}
/**
* @return array<string, class-string>
* @param \PhpParser\Node\Expr\FuncCall|\PhpParser\Node\Expr\StaticCall $node
*/
public function collectMockVariableName($node) : array
{
$mockVariableTypesByNames = [];
$parentNode = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::PARENT_NODE);
if (!$parentNode instanceof \PhpParser\Node\Expr\Assign) {
return [];
}
if (!$parentNode->var instanceof \PhpParser\Node\Expr\Variable) {
return [];
}
/** @var Variable $variable */
$variable = $parentNode->var;
/** @var string $variableName */
$variableName = $this->nodeNameResolver->getName($variable);
if (!isset($node->args[0])) {
return [];
}
if (!$node->args[0] instanceof \PhpParser\Node\Arg) {
return [];
}
$type = $node->args[0]->value;
$mockedType = $this->valueResolver->getValue($type);
$mockVariableTypesByNames[$variableName] = $mockedType;
return $mockVariableTypesByNames;
}
}

View File

@ -1,132 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\MockeryToProphecy\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\MockeryToProphecy\Collector\MockVariableCollector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\MockeryToProphecy\Rector\ClassMethod\MockeryToProphecyRector\MockeryToProphecyRectorTest
*/
final class MockeryCreateMockToProphizeRector extends \Rector\Core\Rector\AbstractRector
{
/**
* @var array<string, class-string>
*/
private $mockVariableTypesByNames = [];
/**
* @readonly
* @var \Rector\MockeryToProphecy\Collector\MockVariableCollector
*/
private $mockVariableCollector;
/**
* @readonly
* @var \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer
*/
private $testsNodeAnalyzer;
public function __construct(\Rector\MockeryToProphecy\Collector\MockVariableCollector $mockVariableCollector, \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer $testsNodeAnalyzer)
{
$this->mockVariableCollector = $mockVariableCollector;
$this->testsNodeAnalyzer = $testsNodeAnalyzer;
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [\PhpParser\Node\Stmt\ClassMethod::class];
}
/**
* @param ClassMethod $node
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
if (!$this->testsNodeAnalyzer->isInTestClass($node)) {
return null;
}
$this->replaceMockCreationsAndCollectVariableNames($node);
$this->revealMockArguments($node);
return $node;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Changes mockery mock creation to Prophesize', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample(<<<'CODE_SAMPLE'
$mock = \Mockery::mock('MyClass');
$service = new Service();
$service->injectDependency($mock);
CODE_SAMPLE
, <<<'CODE_SAMPLE'
$mock = $this->prophesize('MyClass');
$service = new Service();
$service->injectDependency($mock->reveal());
CODE_SAMPLE
)]);
}
private function replaceMockCreationsAndCollectVariableNames(\PhpParser\Node\Stmt\ClassMethod $classMethod) : void
{
if ($classMethod->stmts === null) {
return;
}
$this->traverseNodesWithCallable($classMethod->stmts, function (\PhpParser\Node $node) : ?MethodCall {
if (!$node instanceof \PhpParser\Node\Expr\StaticCall) {
return null;
}
$callerType = $this->nodeTypeResolver->getType($node->class);
if (!$callerType->isSuperTypeOf(new \PHPStan\Type\ObjectType('Mockery'))->yes()) {
return null;
}
if (!$this->isName($node->name, 'mock')) {
return null;
}
$collectedVariableTypesByNames = $this->mockVariableCollector->collectMockVariableName($node);
$item0Unpacked = $this->mockVariableTypesByNames;
/** @var array<string, class-string> $result */
$result = \array_merge($item0Unpacked, $collectedVariableTypesByNames);
$this->mockVariableTypesByNames = $result;
$parentNode = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::PARENT_NODE);
if ($parentNode instanceof \PhpParser\Node\Arg) {
$prophesizeMethodCall = $this->createProphesizeMethodCall($node);
return $this->nodeFactory->createMethodCall($prophesizeMethodCall, 'reveal');
}
return $this->createProphesizeMethodCall($node);
});
}
private function revealMockArguments(\PhpParser\Node\Stmt\ClassMethod $classMethod) : void
{
if ($classMethod->stmts === null) {
return;
}
$this->traverseNodesWithCallable($classMethod->stmts, function (\PhpParser\Node $node) : ?Arg {
if (!$node instanceof \PhpParser\Node\Arg) {
return null;
}
if (!$node->value instanceof \PhpParser\Node\Expr\Variable) {
return null;
}
/** @var string $variableName */
$variableName = $this->getName($node->value);
if (!isset($this->mockVariableTypesByNames[$variableName])) {
return null;
}
$methodCall = $this->nodeFactory->createMethodCall($node->value, 'reveal');
$node->value = $methodCall;
return $node;
});
}
private function createProphesizeMethodCall(\PhpParser\Node\Expr\StaticCall $staticCall) : \PhpParser\Node\Expr\MethodCall
{
return $this->nodeFactory->createLocalMethodCall('prophesize', [$staticCall->args[0]]);
}
}

View File

@ -1,67 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\MockeryToProphecy\Rector\StaticCall;
use PhpParser\Node;
use PhpParser\Node\Expr\StaticCall;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\MockeryToProphecy\Rector\StaticCall\MockeryToProphecyRector\MockeryToProphecyRectorTest
*/
final class MockeryCloseRemoveRector extends \Rector\Core\Rector\AbstractRector
{
/**
* @readonly
* @var \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer
*/
private $testsNodeAnalyzer;
public function __construct(\Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer $testsNodeAnalyzer)
{
$this->testsNodeAnalyzer = $testsNodeAnalyzer;
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [\PhpParser\Node\Expr\StaticCall::class];
}
/**
* @param StaticCall $node
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
if (!$this->testsNodeAnalyzer->isInTestClass($node)) {
return null;
}
$callerType = $this->nodeTypeResolver->getType($node->class);
if (!$callerType->isSuperTypeOf(new \PHPStan\Type\ObjectType('Mockery'))->yes()) {
return null;
}
if (!$this->isName($node->name, 'close')) {
return null;
}
$this->removeNode($node);
return null;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Removes mockery close from test classes', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample(<<<'CODE_SAMPLE'
public function tearDown() : void
{
\Mockery::close();
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
public function tearDown() : void
{
}
CODE_SAMPLE
)]);
}
}

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = '77a4582d5044446b8da43ab91a09082fa0413a23';
public const PACKAGE_VERSION = '320cdcd8dec579a3bb9a6138d1e50f72a22c0419';
/**
* @var string
*/
public const RELEASE_DATE = '2022-03-03 11:31:45';
public const RELEASE_DATE = '2022-03-03 17:31:12';
public static function resolvePackageVersion() : string
{
$process = new \RectorPrefix20220303\Symfony\Component\Process\Process(['git', 'log', '--pretty="%H"', '-n1', 'HEAD'], __DIR__);

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b::getLoader();
return ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f::getLoader();

View File

@ -2146,9 +2146,6 @@ return array(
'Rector\\Laravel\\ValueObject\\AddArgumentDefaultValue' => $vendorDir . '/rector/rector-laravel/src/ValueObject/AddArgumentDefaultValue.php',
'Rector\\Laravel\\ValueObject\\ServiceNameTypeAndVariableName' => $vendorDir . '/rector/rector-laravel/src/ValueObject/ServiceNameTypeAndVariableName.php',
'Rector\\Laravel\\ValueObject\\TypeToTimeMethodAndPosition' => $vendorDir . '/rector/rector-laravel/src/ValueObject/TypeToTimeMethodAndPosition.php',
'Rector\\MockeryToProphecy\\Collector\\MockVariableCollector' => $baseDir . '/rules/MockeryToProphecy/Collector/MockVariableCollector.php',
'Rector\\MockeryToProphecy\\Rector\\ClassMethod\\MockeryCreateMockToProphizeRector' => $baseDir . '/rules/MockeryToProphecy/Rector/ClassMethod/MockeryCreateMockToProphizeRector.php',
'Rector\\MockeryToProphecy\\Rector\\StaticCall\\MockeryCloseRemoveRector' => $baseDir . '/rules/MockeryToProphecy/Rector/StaticCall/MockeryCloseRemoveRector.php',
'Rector\\MysqlToMysqli\\Rector\\Assign\\MysqlAssignToMysqliRector' => $baseDir . '/rules/MysqlToMysqli/Rector/Assign/MysqlAssignToMysqliRector.php',
'Rector\\MysqlToMysqli\\Rector\\FuncCall\\MysqlFuncCallToMysqliRector' => $baseDir . '/rules/MysqlToMysqli/Rector/FuncCall/MysqlFuncCallToMysqliRector.php',
'Rector\\MysqlToMysqli\\Rector\\FuncCall\\MysqlPConnectToMysqliConnectRector' => $baseDir . '/rules/MysqlToMysqli/Rector/FuncCall/MysqlPConnectToMysqliConnectRector.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b
class ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f
{
private static $loader;
@ -22,15 +22,15 @@ class ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitc291b87a1b4ce0b46a8e2f223b98b62f::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
@ -42,12 +42,12 @@ class ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b::$files;
$includeFiles = Composer\Autoload\ComposerStaticInitc291b87a1b4ce0b46a8e2f223b98b62f::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirebaf8dc6c11080cb8e64f50b2c241eb3b($fileIdentifier, $file);
composerRequirec291b87a1b4ce0b46a8e2f223b98b62f($fileIdentifier, $file);
}
return $loader;
@ -59,7 +59,7 @@ class ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b
* @param string $file
* @return void
*/
function composerRequirebaf8dc6c11080cb8e64f50b2c241eb3b($fileIdentifier, $file)
function composerRequirec291b87a1b4ce0b46a8e2f223b98b62f($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 ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b
class ComposerStaticInitc291b87a1b4ce0b46a8e2f223b98b62f
{
public static $files = array (
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@ -2520,9 +2520,6 @@ class ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b
'Rector\\Laravel\\ValueObject\\AddArgumentDefaultValue' => __DIR__ . '/..' . '/rector/rector-laravel/src/ValueObject/AddArgumentDefaultValue.php',
'Rector\\Laravel\\ValueObject\\ServiceNameTypeAndVariableName' => __DIR__ . '/..' . '/rector/rector-laravel/src/ValueObject/ServiceNameTypeAndVariableName.php',
'Rector\\Laravel\\ValueObject\\TypeToTimeMethodAndPosition' => __DIR__ . '/..' . '/rector/rector-laravel/src/ValueObject/TypeToTimeMethodAndPosition.php',
'Rector\\MockeryToProphecy\\Collector\\MockVariableCollector' => __DIR__ . '/../..' . '/rules/MockeryToProphecy/Collector/MockVariableCollector.php',
'Rector\\MockeryToProphecy\\Rector\\ClassMethod\\MockeryCreateMockToProphizeRector' => __DIR__ . '/../..' . '/rules/MockeryToProphecy/Rector/ClassMethod/MockeryCreateMockToProphizeRector.php',
'Rector\\MockeryToProphecy\\Rector\\StaticCall\\MockeryCloseRemoveRector' => __DIR__ . '/../..' . '/rules/MockeryToProphecy/Rector/StaticCall/MockeryCloseRemoveRector.php',
'Rector\\MysqlToMysqli\\Rector\\Assign\\MysqlAssignToMysqliRector' => __DIR__ . '/../..' . '/rules/MysqlToMysqli/Rector/Assign/MysqlAssignToMysqliRector.php',
'Rector\\MysqlToMysqli\\Rector\\FuncCall\\MysqlFuncCallToMysqliRector' => __DIR__ . '/../..' . '/rules/MysqlToMysqli/Rector/FuncCall/MysqlFuncCallToMysqliRector.php',
'Rector\\MysqlToMysqli\\Rector\\FuncCall\\MysqlPConnectToMysqliConnectRector' => __DIR__ . '/../..' . '/rules/MysqlToMysqli/Rector/FuncCall/MysqlPConnectToMysqliConnectRector.php',
@ -3848,9 +3845,9 @@ class ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitbaf8dc6c11080cb8e64f50b2c241eb3b::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitc291b87a1b4ce0b46a8e2f223b98b62f::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitc291b87a1b4ce0b46a8e2f223b98b62f::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitc291b87a1b4ce0b46a8e2f223b98b62f::$classMap;
}, null, ClassLoader::class);
}

View File

@ -9,8 +9,8 @@ $loader = require_once __DIR__.'/autoload.php';
if (!class_exists('AutoloadIncluder', false) && !interface_exists('AutoloadIncluder', false) && !trait_exists('AutoloadIncluder', false)) {
spl_autoload_call('RectorPrefix20220303\AutoloadIncluder');
}
if (!class_exists('ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b', false) && !interface_exists('ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b', false) && !trait_exists('ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b', false)) {
spl_autoload_call('RectorPrefix20220303\ComposerAutoloaderInitbaf8dc6c11080cb8e64f50b2c241eb3b');
if (!class_exists('ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f', false) && !interface_exists('ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f', false) && !trait_exists('ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f', false)) {
spl_autoload_call('RectorPrefix20220303\ComposerAutoloaderInitc291b87a1b4ce0b46a8e2f223b98b62f');
}
if (!class_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !interface_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !trait_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false)) {
spl_autoload_call('RectorPrefix20220303\Helmich\TypoScriptParser\Parser\AST\Statement');
@ -59,9 +59,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20220303\print_node(...func_get_args());
}
}
if (!function_exists('composerRequirebaf8dc6c11080cb8e64f50b2c241eb3b')) {
function composerRequirebaf8dc6c11080cb8e64f50b2c241eb3b() {
return \RectorPrefix20220303\composerRequirebaf8dc6c11080cb8e64f50b2c241eb3b(...func_get_args());
if (!function_exists('composerRequirec291b87a1b4ce0b46a8e2f223b98b62f')) {
function composerRequirec291b87a1b4ce0b46a8e2f223b98b62f() {
return \RectorPrefix20220303\composerRequirec291b87a1b4ce0b46a8e2f223b98b62f(...func_get_args());
}
}
if (!function_exists('scanPath')) {