diff --git a/easy-coding-standard.neon b/easy-coding-standard.neon index efe47699991..49710f25589 100644 --- a/easy-coding-standard.neon +++ b/easy-coding-standard.neon @@ -52,3 +52,7 @@ parameters: SlevomatCodingStandard\Sniffs\Classes\UnusedPrivateElementsSniff: # will be used soon - packages/NodeTypeResolver/src/TypeContext.php + + PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineLengthSniff: + # long FQN classes that might not exist + - src/Rector/Contrib/Symfony/FrameworkBundleClassReplacementsRector.php diff --git a/src/NodeVisitor/NodeConnector.php b/src/NodeVisitor/NodeConnector.php index 76fa1bf614d..33138bc4457 100644 --- a/src/NodeVisitor/NodeConnector.php +++ b/src/NodeVisitor/NodeConnector.php @@ -13,7 +13,7 @@ final class NodeConnector extends NodeVisitorAbstract /** * @var Node */ - private $stack; + private $stack = []; /** * @var Node diff --git a/src/Rector/AbstractClassReplacerRector.php b/src/Rector/AbstractClassReplacerRector.php new file mode 100644 index 00000000000..40702c5feab --- /dev/null +++ b/src/Rector/AbstractClassReplacerRector.php @@ -0,0 +1,41 @@ +toString(); + + return isset($this->getOldToNewClasses()[$fqnName]); + } + + /** + * @param Name $node + */ + public function refactor(Node $node): ?Node + { + $newName = $this->getNewName($node->toString()); + + return new FullyQualified($newName); + } + + /** + * @return string[] + */ + abstract protected function getOldToNewClasses(): array; + + private function getNewName(string $oldName): string + { + return $this->getOldToNewClasses()[$oldName]; + } +} diff --git a/src/Rector/Contrib/Symfony/FrameworkBundleClassReplacementsRector.php b/src/Rector/Contrib/Symfony/FrameworkBundleClassReplacementsRector.php index ecc9f272ba6..cf0d4cc5970 100644 --- a/src/Rector/Contrib/Symfony/FrameworkBundleClassReplacementsRector.php +++ b/src/Rector/Contrib/Symfony/FrameworkBundleClassReplacementsRector.php @@ -2,21 +2,15 @@ namespace Rector\Rector\Contrib\Symfony; -use PhpParser\Node; -use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Name; -use PhpParser\Node\Name\FullyQualified; use Rector\Deprecation\SetNames; -use Rector\Rector\AbstractRector; +use Rector\Rector\AbstractClassReplacerRector; /** * Ref.: https://github.com/symfony/symfony/blob/master/UPGRADE-4.0.md#frameworkbundle * * FrameworkBundle classes replaced by new ones - * - * @todo extract AbstractClassReplacerRector */ -final class FrameworkBundleClassReplacementsRector extends AbstractRector +final class FrameworkBundleClassReplacementsRector extends AbstractClassReplacerRector { public function getSetName(): string { @@ -28,43 +22,13 @@ final class FrameworkBundleClassReplacementsRector extends AbstractRector return 4.0; } - public function isCandidate(Node $node): bool - { - if (! $node instanceof Name) { - return false; - } - - $fqnName = $node->toString(); - - if (! isset($this->getOldClassToNewClassMap()[$fqnName])) { - return false; - } - - return true; - } - /** - * @param Name $node + * @return string[] */ - public function refactor(Node $node): ?Node - { - $newName = $this->getNewName($node->toString()); - - return new FullyQualified($newName); - } - - /** - * @var string[] - */ - public function getOldClassToNewClassMap(): array + protected function getOldToNewClasses(): array { return [ - 'Symfony\Bundle\FrameworkBundle\DependencyInjectino\Compiler\SerializerPass' => 'Symfony\Component\Serializer\DependencyInjection\SerializerPass' + 'Symfony\Bundle\FrameworkBundle\DependencyInjectino\Compiler\SerializerPass' => 'Symfony\Component\Serializer\DependencyInjection\SerializerPass', ]; } - - private function getNewName(string $oldName): string - { - return $this->getOldClassToNewClassMap()[$oldName]; - } }