Skip to content

Commit

Permalink
[ci-review] Rector Rectify
Browse files Browse the repository at this point in the history
  • Loading branch information
rector-bot committed Jan 28, 2021
1 parent 3cc210d commit dd4f6fe
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 97 deletions.
30 changes: 2 additions & 28 deletions rules/symfony5/src/NodeFactory/BareLogoutClassMethodFactory.php
Expand Up @@ -12,9 +12,6 @@
use Rector\Core\Php\PhpVersionProvider;
use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NetteKdyby\NodeManipulator\ListeningClassMethodArgumentManipulator;
use Rector\NodeNameResolver\NodeNameResolver;
use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;

final class BareLogoutClassMethodFactory
{
Expand All @@ -28,33 +25,10 @@ final class BareLogoutClassMethodFactory
*/
private $phpVersionProvider;

/**
* @var ListeningClassMethodArgumentManipulator
*/
private $listeningClassMethodArgumentManipulator;

/**
* @var NodeNameResolver
*/
private $nodeNameResolver;

/**
* @var SimpleCallableNodeTraverser
*/
private $simpleCallableNodeTraverser;

public function __construct(
NodeFactory $nodeFactory,
PhpVersionProvider $phpVersionProvider,
ListeningClassMethodArgumentManipulator $listeningClassMethodArgumentManipulator,
NodeNameResolver $nodeNameResolver,
SimpleCallableNodeTraverser $simpleCallableNodeTraverser
) {
public function __construct(NodeFactory $nodeFactory, PhpVersionProvider $phpVersionProvider)
{
$this->nodeFactory = $nodeFactory;
$this->phpVersionProvider = $phpVersionProvider;
$this->listeningClassMethodArgumentManipulator = $listeningClassMethodArgumentManipulator;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
}

public function create(): ClassMethod
Expand Down
64 changes: 26 additions & 38 deletions rules/symfony5/src/NodeFactory/OnLogoutClassMethodFactory.php
Expand Up @@ -27,16 +27,6 @@ final class OnLogoutClassMethodFactory
'token' => 'getToken',
];

/**
* @var NodeFactory
*/
private $nodeFactory;

/**
* @var PhpVersionProvider
*/
private $phpVersionProvider;

/**
* @var ListeningClassMethodArgumentManipulator
*/
Expand All @@ -47,11 +37,6 @@ final class OnLogoutClassMethodFactory
*/
private $nodeNameResolver;

/**
* @var SimpleCallableNodeTraverser
*/
private $simpleCallableNodeTraverser;

/**
* @var BareLogoutClassMethodFactory
*/
Expand All @@ -65,11 +50,8 @@ public function __construct(
SimpleCallableNodeTraverser $simpleCallableNodeTraverser,
BareLogoutClassMethodFactory $bareLogoutClassMethodFactory
) {
$this->nodeFactory = $nodeFactory;
$this->phpVersionProvider = $phpVersionProvider;
$this->listeningClassMethodArgumentManipulator = $listeningClassMethodArgumentManipulator;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->bareLogoutClassMethodFactory = $bareLogoutClassMethodFactory;
}

Expand All @@ -84,28 +66,17 @@ public function createFromLogoutClassMethod(ClassMethod $logoutClassMethod): Cla
}

/**
* @param Param[] $params
* @return Expression[]
*/
private function createAssignStmts(array $params): array
private function createAssignStmtFromOldClassMethod(ClassMethod $onLogoutSuccessClassMethod): array
{
$logoutEventVariable = new Variable('logoutEvent');

$assignStmts = [];
foreach ($params as $param) {
foreach (self::PARAMETER_TO_GETTER_NAMES as $parameterName => $getterName) {
if (! $this->nodeNameResolver->isName($param, $parameterName)) {
continue;
}

$assign = new Assign($param->var, new MethodCall($logoutEventVariable, $getterName));
$assignStmts[] = new Expression($assign);
}
}

return $assignStmts;
$usedParams = $this->resolveUsedParams($onLogoutSuccessClassMethod);
return $this->createAssignStmts($usedParams);
}

/**
* @return Param[]
*/
private function resolveUsedParams(ClassMethod $logoutClassMethod): array
{
$usedParams = [];
Expand All @@ -122,9 +93,26 @@ private function resolveUsedParams(ClassMethod $logoutClassMethod): array
return $usedParams;
}

private function createAssignStmtFromOldClassMethod(ClassMethod $onLogoutSuccessClassMethod): array
/**
* @param Param[] $params
* @return Expression[]
*/
private function createAssignStmts(array $params): array
{
$usedParams = $this->resolveUsedParams($onLogoutSuccessClassMethod);
return $this->createAssignStmts($usedParams);
$logoutEventVariable = new Variable('logoutEvent');

$assignStmts = [];
foreach ($params as $param) {
foreach (self::PARAMETER_TO_GETTER_NAMES as $parameterName => $getterName) {
if (! $this->nodeNameResolver->isName($param, $parameterName)) {
continue;
}

$assign = new Assign($param->var, new MethodCall($logoutEventVariable, $getterName));
$assignStmts[] = new Expression($assign);
}
}

return $assignStmts;
}
}
Expand Up @@ -4,6 +4,7 @@

namespace Rector\Symfony5\NodeFactory;

use PhpParser\Node;
use PhpParser\Node\Expr\BinaryOp\NotIdentical;
use PhpParser\Node\Expr\ConstFetch;
use PhpParser\Node\Expr\MethodCall;
Expand All @@ -12,28 +13,15 @@
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\If_;
use PhpParser\Node\Stmt\Return_;
use Rector\Core\Php\PhpVersionProvider;
use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\NetteKdyby\NodeManipulator\ListeningClassMethodArgumentManipulator;
use Rector\NodeNameResolver\NodeNameResolver;
use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;

final class OnSuccessLogoutClassMethodFactory
{
/**
* @var NodeFactory
* @var string
*/
private $nodeFactory;

/**
* @var PhpVersionProvider
*/
private $phpVersionProvider;

/**
* @var ListeningClassMethodArgumentManipulator
*/
private $listeningClassMethodArgumentManipulator;
private const LOGOUT_EVENT = 'logoutEvent';

/**
* @var NodeNameResolver
Expand All @@ -51,16 +39,10 @@ final class OnSuccessLogoutClassMethodFactory
private $bareLogoutClassMethodFactory;

public function __construct(
NodeFactory $nodeFactory,
PhpVersionProvider $phpVersionProvider,
ListeningClassMethodArgumentManipulator $listeningClassMethodArgumentManipulator,
NodeNameResolver $nodeNameResolver,
SimpleCallableNodeTraverser $simpleCallableNodeTraverser,
BareLogoutClassMethodFactory $bareLogoutClassMethodFactory
) {
$this->nodeFactory = $nodeFactory;
$this->phpVersionProvider = $phpVersionProvider;
$this->listeningClassMethodArgumentManipulator = $listeningClassMethodArgumentManipulator;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->bareLogoutClassMethodFactory = $bareLogoutClassMethodFactory;
Expand All @@ -70,7 +52,9 @@ public function createFromOnLogoutSuccessClassMethod(ClassMethod $onLogoutSucces
{
$classMethod = $this->bareLogoutClassMethodFactory->create();

$notIdentical = new NotIdentical(new MethodCall(new Variable('logoutEvent'), 'getResponse'), new ConstFetch(
$notIdentical = new NotIdentical(new MethodCall(new Variable(
self::LOGOUT_EVENT
), 'getResponse'), new ConstFetch(
new Name('null')
));
$if = new If_($notIdentical);
Expand All @@ -89,7 +73,7 @@ public function createFromOnLogoutSuccessClassMethod(ClassMethod $onLogoutSucces

private function replaceReturnResponseWithSetResponse(ClassMethod $classMethod): void
{
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (\PhpParser\Node $node) {
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (Node $node): ?MethodCall {
if (! $node instanceof Return_) {
return null;
}
Expand All @@ -98,13 +82,13 @@ private function replaceReturnResponseWithSetResponse(ClassMethod $classMethod):
return null;
}

return new MethodCall(new Variable('logoutEvent'), 'setResponse', [$node->expr]);
return new MethodCall(new Variable(self::LOGOUT_EVENT), 'setResponse', [$node->expr]);
});
}

private function replaceRequestWithGetRequest(ClassMethod $classMethod): void
{
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (\PhpParser\Node $node) {
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (Node $node): ?MethodCall {
if (! $node instanceof Variable) {
return null;
}
Expand All @@ -113,7 +97,7 @@ private function replaceRequestWithGetRequest(ClassMethod $classMethod): void
return null;
}

return new MethodCall(new Variable('logoutEvent'), 'getRequest');
return new MethodCall(new Variable(self::LOGOUT_EVENT), 'getRequest');
});
}
}
Expand Up @@ -9,6 +9,7 @@
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Rector\AbstractRector;
use Rector\Symfony5\NodeFactory\OnSuccessLogoutClassMethodFactory;
use Rector\SymfonyCodeQuality\NodeFactory\GetSubscribedEventsClassMethodFactory;
use Rector\SymfonyCodeQuality\ValueObject\EventReferenceToMethodNameWithPriority;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
Expand All @@ -32,12 +33,12 @@ final class LogoutSuccessHandlerToLogoutEventSubscriberRector extends AbstractRe
private $getSubscribedEventsClassMethodFactory;

/**
* @var \Rector\Symfony5\NodeFactory\OnSuccessLogoutClassMethodFactory
* @var OnSuccessLogoutClassMethodFactory
*/
private $onSuccessLogoutClassMethodFactory;

public function __construct(
\Rector\Symfony5\NodeFactory\OnSuccessLogoutClassMethodFactory $onSuccessLogoutClassMethodFactory,
OnSuccessLogoutClassMethodFactory $onSuccessLogoutClassMethodFactory,
GetSubscribedEventsClassMethodFactory $getSubscribedEventsClassMethodFactory
) {
$this->getSubscribedEventsClassMethodFactory = $getSubscribedEventsClassMethodFactory;
Expand Down
Expand Up @@ -4,25 +4,28 @@

namespace Rector\Symfony5\Tests\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector;

use Iterator;
use Rector\Symfony5\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;

final class LogoutSuccessHandlerToLogoutEventSubscriberRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(\Symplify\SmartFileSystem\SmartFileInfo $fileInfo): void
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}

public function provideData(): \Iterator
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
}

protected function getRectorClass(): string
{
return \Rector\Symfony5\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector::class;
return LogoutSuccessHandlerToLogoutEventSubscriberRector::class;
}
}

0 comments on commit dd4f6fe

Please sign in to comment.