diff --git a/src/Contract/Rector/RectorInterface.php b/src/Contract/Rector/RectorInterface.php index e060860395d..9be5a353d4b 100644 --- a/src/Contract/Rector/RectorInterface.php +++ b/src/Contract/Rector/RectorInterface.php @@ -11,5 +11,5 @@ interface RectorInterface /** * @param Node $node */ - public function refactor($node): void; + public function refactor($node): ?Node; } diff --git a/src/Rector/AbstractRector.php b/src/Rector/AbstractRector.php index dcdeb515d6d..48ca7a5870e 100644 --- a/src/Rector/AbstractRector.php +++ b/src/Rector/AbstractRector.php @@ -10,10 +10,16 @@ use Rector\Contract\Rector\RectorInterface; abstract class AbstractRector extends NodeVisitorAbstract implements DeprecationInterface, RectorInterface { - public function enterNode(Node $node): ?int + /** + * @return int|null|Node + */ + public function enterNode(Node $node) { if ($this->isCandidate($node)) { - $this->refactor($node); + if ($newNode = $this->refactor($node)) { + return $newNode; + } + return NodeTraverser::DONT_TRAVERSE_CHILDREN; } diff --git a/src/Rector/Contrib/Nette/FormCallbackRector.php b/src/Rector/Contrib/Nette/FormCallbackRector.php index b129529d076..5a843afce0f 100644 --- a/src/Rector/Contrib/Nette/FormCallbackRector.php +++ b/src/Rector/Contrib/Nette/FormCallbackRector.php @@ -25,6 +25,7 @@ final class FormCallbackRector extends NodeVisitorAbstract implements Deprecatio public function enterNode(Node $node): ?int { if ($this->isCandidate($node)) { + return false; dump($node); // get next node! die; diff --git a/src/Rector/Contrib/Nette/NetteObjectToSmartTraitRector.php b/src/Rector/Contrib/Nette/NetteObjectToSmartTraitRector.php index 82c99655ce0..26c26a0b421 100644 --- a/src/Rector/Contrib/Nette/NetteObjectToSmartTraitRector.php +++ b/src/Rector/Contrib/Nette/NetteObjectToSmartTraitRector.php @@ -56,13 +56,15 @@ final class NetteObjectToSmartTraitRector extends AbstractRector /** * @param Class_ $classNode */ - public function refactor($classNode): void + public function refactor($classNode): ?Node { // remove parent class $classNode->extends = null; $traitUseNode = $this->createTraitUse('Nette\SmartObject'); $this->statementGlue->addAsFirstTrait($classNode, $traitUseNode); + + return null; } private function createTraitUse(string $traitName): TraitUse diff --git a/src/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector.php b/src/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector.php index 55614ea0739..a2c2eb26bde 100644 --- a/src/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector.php +++ b/src/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector.php @@ -6,13 +6,16 @@ use PhpParser\Node; use PhpParser\Node\Expr\ClassConstFetch; use Rector\Deprecation\SetNames; use Rector\Rector\AbstractRector; +use PhpParser\Node\Scalar\String_; final class RemoveConfiguratorConstantsRector extends AbstractRector { public function isCandidate(Node $node): bool { if ($node instanceof ClassConstFetch) { - if ((string) $node->class !== 'Nette\Configurator') { + // @todo: check FQN namespace + $className = (string) $node->class; + if (! in_array($className, ['Nette\Configurator', 'Configurator'], true)) { return false; } @@ -29,12 +32,12 @@ final class RemoveConfiguratorConstantsRector extends AbstractRector /** * @param ClassConstFetch $classConstFetchNode */ - public function refactor($classConstFetchNode): void + public function refactor($classConstFetchNode): ?Node { - dump($classConstFetchNode->name->name); - die; + $constantName = (string) $classConstFetchNode->name; + $string = strtolower($constantName); - $classConstFetchNode->name->name = $this->getNewConstantName(); + return new String_($string); } public function getSetName(): string diff --git a/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/correct/correct.php.inc b/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/correct/correct.php.inc index 5cf52e94219..49cee4c3dd0 100644 --- a/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/correct/correct.php.inc +++ b/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/correct/correct.php.inc @@ -4,6 +4,6 @@ class ClassWithExternalConstant { public function getValue() { - return ClassWithConstants::NEW_CONSTANT; + return 'development'; } } diff --git a/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/wrong/wrong.php.inc b/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/wrong/wrong.php.inc index 76c747b641a..f1abc503dd2 100644 --- a/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/wrong/wrong.php.inc +++ b/tests/Rector/Contrib/Nette/RemoveConfiguratorConstantsRector/wrong/wrong.php.inc @@ -1,9 +1,11 @@