mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-06 03:10:50 +00:00
add SymfonyContainerClassAnalyzer
This commit is contained in:
parent
3611715075
commit
57d57843a7
|
@ -28,7 +28,7 @@ checkers:
|
|||
|
||||
Symplify\CodingStandard\Sniffs\DependencyInjection\NoClassInstantiationSniff:
|
||||
extraAllowedClasses:
|
||||
# - 'PhpParser\Node\*'
|
||||
- 'PhpParser\Node\*'
|
||||
- 'PhpParser\Comment\Doc'
|
||||
|
||||
parameters:
|
||||
|
|
45
src/NodeAnalyzer/SymfonyContainerCallsAnalyzer.php
Normal file
45
src/NodeAnalyzer/SymfonyContainerCallsAnalyzer.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeAnalyzer;
|
||||
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
|
||||
final class SymfonyContainerCallsAnalyzer
|
||||
{
|
||||
/**
|
||||
* Finds $this->get(...);
|
||||
*/
|
||||
public function isThisCall(MethodCall $methodCall): bool
|
||||
{
|
||||
if ($methodCall->var->name !== 'this' || (string) $methodCall->name !== 'get') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->hasOneStringArgument($methodCall);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds $this->getContainer()->get(...);
|
||||
*/
|
||||
public function isGetContainerCall(MethodCall $methodCall): bool
|
||||
{
|
||||
if (! $methodCall->var instanceof MethodCall) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((string) $methodCall->var->var->name !== 'this' || (string) $methodCall->name !== 'get') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->hasOneStringArgument($methodCall);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds ('some_service')
|
||||
*/
|
||||
private function hasOneStringArgument(MethodCall $methodCall): bool
|
||||
{
|
||||
return count($methodCall->args) === 1 && $methodCall->args[0]->value instanceof String_;
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
namespace Rector\Rector;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Name\FullyQualified;
|
||||
use PhpParser\Node\Stmt\Class_;
|
||||
|
||||
abstract class AbstractChangeParentClassRector extends AbstractRector
|
||||
|
@ -22,7 +22,7 @@ abstract class AbstractChangeParentClassRector extends AbstractRector
|
|||
*/
|
||||
public function refactor(Node $node): ?Node
|
||||
{
|
||||
$node->extends = new Name\FullyQualified($this->getNewClassName());
|
||||
$node->extends = new FullyQualified($this->getNewClassName());
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
|
|
@ -6,11 +6,11 @@ use Nette\Utils\Strings;
|
|||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use Rector\Builder\Class_\ClassPropertyCollector;
|
||||
use Rector\Builder\Kernel\ServiceFromKernelResolver;
|
||||
use Rector\Builder\Naming\NameResolver;
|
||||
use Rector\Deprecation\SetNames;
|
||||
use Rector\NodeAnalyzer\SymfonyContainerCallsAnalyzer;
|
||||
use Rector\NodeFactory\NodeFactory;
|
||||
use Rector\Rector\AbstractRector;
|
||||
use Rector\Tests\Rector\Contrib\SymfonyExtra\GetterToPropertyRector\Source\LocalKernel;
|
||||
|
@ -59,17 +59,23 @@ final class CommandToConstructorInjectionRector extends AbstractRector
|
|||
* @var NodeFactory
|
||||
*/
|
||||
private $nodeFactory;
|
||||
/**
|
||||
* @var SymfonyContainerCallsAnalyzer
|
||||
*/
|
||||
private $symfonyContainerCallsAnalyzer;
|
||||
|
||||
public function __construct(
|
||||
ServiceFromKernelResolver $serviceFromKernelResolver,
|
||||
ClassPropertyCollector $classPropertyCollector,
|
||||
NameResolver $nameResolver,
|
||||
NodeFactory $nodeFactory
|
||||
NodeFactory $nodeFactory,
|
||||
SymfonyContainerCallsAnalyzer $symfonyContainerCallsAnalyzer
|
||||
) {
|
||||
$this->serviceFromKernelResolver = $serviceFromKernelResolver;
|
||||
$this->classPropertyCollector = $classPropertyCollector;
|
||||
$this->nameResolver = $nameResolver;
|
||||
$this->nodeFactory = $nodeFactory;
|
||||
$this->symfonyContainerCallsAnalyzer = $symfonyContainerCallsAnalyzer;
|
||||
}
|
||||
|
||||
public function getSetName(): string
|
||||
|
@ -88,22 +94,11 @@ final class CommandToConstructorInjectionRector extends AbstractRector
|
|||
return false;
|
||||
}
|
||||
|
||||
// finds **$this->getContainer()->get**('some_service');
|
||||
if (! $node instanceof MethodCall || ! $node->var instanceof MethodCall) {
|
||||
if (! $node instanceof MethodCall) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// finds **$this**->getContainer()->**get**('some_service');
|
||||
if ((string) $node->var->var->name !== 'this' || (string) $node->name !== 'get') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// finds $this->getContainer()->get**('some_service')**;
|
||||
if (count($node->args) !== 1 || ! $node->args[0]->value instanceof String_) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return $this->symfonyContainerCallsAnalyzer->isGetContainerCall($node);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,11 +4,11 @@ namespace Rector\Rector\Contrib\SymfonyExtra;
|
|||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use Rector\Builder\Class_\ClassPropertyCollector;
|
||||
use Rector\Builder\Kernel\ServiceFromKernelResolver;
|
||||
use Rector\Builder\Naming\NameResolver;
|
||||
use Rector\Deprecation\SetNames;
|
||||
use Rector\NodeAnalyzer\SymfonyContainerCallsAnalyzer;
|
||||
use Rector\NodeFactory\NodeFactory;
|
||||
use Rector\Rector\AbstractRector;
|
||||
use Rector\Tests\Rector\Contrib\SymfonyExtra\GetterToPropertyRector\Source\LocalKernel;
|
||||
|
@ -41,17 +41,23 @@ final class GetterToPropertyRector extends AbstractRector
|
|||
* @var NodeFactory
|
||||
*/
|
||||
private $nodeFactory;
|
||||
/**
|
||||
* @var SymfonyContainerCallsAnalyzer
|
||||
*/
|
||||
private $symfonyContainerCallsAnalyzer;
|
||||
|
||||
public function __construct(
|
||||
NameResolver $nameResolver,
|
||||
ServiceFromKernelResolver $serviceFromKernelResolver,
|
||||
ClassPropertyCollector $classPropertyCollector,
|
||||
NodeFactory $nodeFactory
|
||||
NodeFactory $nodeFactory,
|
||||
SymfonyContainerCallsAnalyzer $symfonyContainerCallsAnalyzer
|
||||
) {
|
||||
$this->nameResolver = $nameResolver;
|
||||
$this->serviceFromKernelResolver = $serviceFromKernelResolver;
|
||||
$this->classPropertyCollector = $classPropertyCollector;
|
||||
$this->nodeFactory = $nodeFactory;
|
||||
$this->symfonyContainerCallsAnalyzer = $symfonyContainerCallsAnalyzer;
|
||||
}
|
||||
|
||||
public function isCandidate(Node $node): bool
|
||||
|
@ -60,17 +66,7 @@ final class GetterToPropertyRector extends AbstractRector
|
|||
return false;
|
||||
}
|
||||
|
||||
// finds **$this->get**('string')
|
||||
if ($node->var->name !== 'this' || (string) $node->name !== 'get') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// finds $this->get(**'string'**)
|
||||
if (count($node->args) !== 1 || ! $node->args[0]->value instanceof String_) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return $this->symfonyContainerCallsAnalyzer->isThisCall($node);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user