-
-
Notifications
You must be signed in to change notification settings - Fork 738
Closed
Labels
Description
Bug Report
| Subject | Details |
|---|---|
| Rector version | Rector 0.18.13 |
Hello,
I'm trying to remove a node with a custom rector rule, I've checked what is done in RemoveFuncCallRector.
The node I want to remove is a simple method call:
$this->something();I'm basically returning NodeTraverser::REMOVE_NODE from refactor() method.
And I got the following error:
[ERROR] Could not process
"tests/Domain/Program/Availability/ProgrammingsSpecification/AvailableScreensSpecificationTest.php" file, due
to:
"System error: "leaveNode() returned invalid value of type integer"
Stack trace:
#0 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode()
#1 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray()
#2 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode()
#3 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray()
#4 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode()
#5 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):
PhpParser\NodeTraverser->traverseArray()
#6 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):
PhpParser\NodeTraverser->traverseNode()
#7 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(85):
PhpParser\NodeTraverser->traverseArray()
#8 vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php(50):
PhpParser\NodeTraverser->traverse()
#9 vendor/rector/rector/src/Application/FileProcessor.php(116):
Rector\Core\PhpParser\NodeTraverser\RectorNodeTraverser->traverse()
#10 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(177):
Rector\Core\Application\FileProcessor->processFile()
#11 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(153):
Rector\Core\Application\ApplicationFileProcessor->processFile()
#12 vendor/rector/rector/src/Console/Command/WorkerCommand.php(132):
Rector\Core\Application\ApplicationFileProcessor->processFiles()
#13 vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTrait.php(111):
Rector\Core\Console\Command\WorkerCommand->Rector\Core\Console\Command\{closure}()
#14 vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php(117):
RectorPrefix202312\Evenement\EventEmitter->emit()
#15 vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTrait.php(111):
RectorPrefix202312\Clue\React\NDJson\Decoder->handleData()
#16 vendor/rector/rector/vendor/react/stream/src/Util.php(62):
RectorPrefix202312\Evenement\EventEmitter->emit()
#17 vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTrait.php(111):
RectorPrefix202312\React\Stream\Util::RectorPrefix202312\React\Stream\{closure}()
#18 vendor/rector/rector/vendor/react/stream/src/DuplexResourceStream.php(154):
RectorPrefix202312\Evenement\EventEmitter->emit()
#19 vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.php(201):
RectorPrefix202312\React\Stream\DuplexResourceStream->handleData()
#20 vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.php(173):
RectorPrefix202312\React\EventLoop\StreamSelectLoop->waitForStreamActivity()
#21 vendor/rector/rector/src/Console/Command/WorkerCommand.php(90):
RectorPrefix202312\React\EventLoop\StreamSelectLoop->run()
#22 vendor/rector/rector/vendor/symfony/console/Command/Command.php(327):
Rector\Core\Console\Command\WorkerCommand->execute()
#23 vendor/rector/rector/vendor/symfony/console/Application.php(960):
RectorPrefix202312\Symfony\Component\Console\Command\Command->run()
#24 vendor/rector/rector/vendor/symfony/console/Application.php(333):
RectorPrefix202312\Symfony\Component\Console\Application->doRunCommand()
#25 vendor/rector/rector/src/Console/ConsoleApplication.php(53):
RectorPrefix202312\Symfony\Component\Console\Application->doRun()
#26 vendor/rector/rector/vendor/symfony/console/Application.php(216):
Rector\Core\Console\ConsoleApplication->doRun()
#27 vendor/rector/rector/bin/rector.php(129): RectorPrefix202312\Symfony\Component\Console\Application->run()
#28 vendor/rector/rector/bin/rector(5): require_once('...')
#29 vendor/bin/rector(119): include('...')
#30 {main}". On line: 150
Minimal PHP Code Causing Issue
final class MyRectorRule extends AbstractRector
{
public function getNodeTypes(): array
{
return [Node\Expr\MethodCall::class];
}
/**
* @param Node\Expr\MethodCall $node
*/
public function refactor(Node $node): Node|int|null
{
if (/** some condition **/) {
return NodeTraverser::REMOVE_NODE;
}
return null;
}I'm 100% sure my condition here is good, and I can see thanks to print_node() that I'm targetting the right node
Expected Behaviour
no error, and the node removed 😁
Thanks for your answer and your awesome tool!