Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rectorphp or rector have a problem with fluent function \TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression::add #4196

Closed
hdietrich-timespin opened this issue Mar 25, 2024 · 6 comments
Labels

Comments

@hdietrich-timespin
Copy link

hdietrich-timespin commented Mar 25, 2024

The following Code throw an Error durinfg process

typo3-rector version 2.2.0

return RectorConfig::configure()
 ->withSets([
        Typo3LevelSetList::UP_TO_TYPO3_12,
        LevelSetList::UP_TO_PHP_82,
    ])
    // uncomment to reach your current PHP version
    // ->withPhpSets()
    ->withRules([
        AddVoidReturnTypeWhereNoReturnRector::class,
    ]);

Code:

 /** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
            $or = $queryBuilder->expr()->or();
            $or->add($queryBuilder->expr()->like('city', ":search"))
                  ->add($queryBuilder->expr()->like('zip', ":search"))
                  ->add($queryBuilder->expr()->like('company_name', ":search"))
                  ->add($queryBuilder->expr()->like('scope', ":search"))
            ;

Error: (see trace in the end of that description!)

[ERROR] Could not process
         "/www/typo3conf
         /ext/myext/Classes/Domain/Repository/CertificateGlkRepository.php" file, due to:
         "System error: "Scope not available on "PhpParser\Node\Expr\MethodCall" node, but is required by a
         refactorWithScope() method of "Rector\Renaming\Rector\MethodCall\RenameMethodRector" rule. Fix scope refresh on
         changed nodes first"

if i change the Code to:

            /** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
            $or = $queryBuilder->expr()->or();
            $or->add($queryBuilder->expr()->like('city', ":search"));
            $or->add($queryBuilder->expr()->like('zip', ":search"));
            $or->add($queryBuilder->expr()->like('company_name', ":search"));
            $or->add($queryBuilder->expr()->like('scope', ":search"));

It will be processed without Error:
grafik

Errortrace:


[ERROR] Could not process
         "/www/typo3conf
         /ext/myext/Classes/Domain/Repository/CertificateGlkRepository.php" file, due to:
         "System error: "Scope not available on "PhpParser\Node\Expr\MethodCall" node, but is required by a
         refactorWithScope() method of "Rector\Renaming\Rector\MethodCall\RenameMethodRector" rule. Fix scope refresh on
         changed nodes first"

         Stack trace:
         #0 /www/typo3-rector-2.0.0/vendor/rector/rector/src/Rector/AbstractRector.php(136):
         Rector\Rector\AbstractScopeAwareRector->refactor()
         #1
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(113): Rector\Rector\AbstractRector->enterNode()
         #2
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(133): PhpParser\NodeTraverser->traverseNode()
         #3
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(133): PhpParser\NodeTraverser->traverseNode()
         #4
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(196): PhpParser\NodeTraverser->traverseNode()
         #5
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(105): PhpParser\NodeTraverser->traverseArray()
         #6
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(196): PhpParser\NodeTraverser->traverseNode()
         #7
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(105): PhpParser\NodeTraverser->traverseArray()
         #8
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(196): PhpParser\NodeTraverser->traverseNode()
         #9
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(105): PhpParser\NodeTraverser->traverseArray()
         #10
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(196): PhpParser\NodeTraverser->traverseNode()
         #11
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(105): PhpParser\NodeTraverser->traverseArray()
         #12
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(196): PhpParser\NodeTraverser->traverseNode()
         #13
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTrav
         erser.php(85): PhpParser\NodeTraverser->traverseArray()
         #14
         /www/typo3-rector-2.0.0/vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverse
         r.php(41): PhpParser\NodeTraverser->traverse()
         #15 /www/typo3-rector-2.0.0/vendor/rector/rector/src/Application/FileProcessor.php(105):
         Rector\PhpParser\NodeTraverser\RectorNodeTraverser->traverse()
         #16
         /www/typo3-rector-2.0.0/vendor/rector/rector/src/Application/ApplicationFileProcessor.php(1
         84): Rector\Application\FileProcessor->processFile()
         #17
         /www/typo3-rector-2.0.0/vendor/rector/rector/src/Application/ApplicationFileProcessor.php(1
         61): Rector\Application\ApplicationFileProcessor->processFile()
         #18
         /www/typo3-rector-2.0.0/vendor/rector/rector/src/Console/Command/WorkerCommand.php(118):
         Rector\Application\ApplicationFileProcessor->processFiles()
         #19
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTra
         it.php(111): Rector\Console\Command\WorkerCommand->Rector\Console\Command\{closure}()
         #20
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php(117):
         RectorPrefix202402\Evenement\EventEmitter->emit()
         #21
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTra
         it.php(111): RectorPrefix202402\Clue\React\NDJson\Decoder->handleData()
         #22 /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/react/stream/src/Util.php(62):
         RectorPrefix202402\Evenement\EventEmitter->emit()
         #23
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTra
         it.php(111): RectorPrefix202402\React\Stream\Util::RectorPrefix202402\React\Stream\{closure}()
         #24
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/react/stream/src/DuplexResourceStream.p
         hp(154): RectorPrefix202402\Evenement\EventEmitter->emit()
         #25
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.p
         hp(201): RectorPrefix202402\React\Stream\DuplexResourceStream->handleData()
         #26
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.p
         hp(173): RectorPrefix202402\React\EventLoop\StreamSelectLoop->waitForStreamActivity()
         #27 /www/typo3-rector-2.0.0/vendor/rector/rector/src/Console/Command/WorkerCommand.php(89):
         RectorPrefix202402\React\EventLoop\StreamSelectLoop->run()
         #28
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/symfony/console/Command/Command.php(327
         ): Rector\Console\Command\WorkerCommand->execute()
         #29
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/symfony/console/Application.php(960):
         RectorPrefix202402\Symfony\Component\Console\Command\Command->run()
         #30
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/symfony/console/Application.php(333):
         RectorPrefix202402\Symfony\Component\Console\Application->doRunCommand()
         #31 /www/typo3-rector-2.0.0/vendor/rector/rector/src/Console/ConsoleApplication.php(53):
         RectorPrefix202402\Symfony\Component\Console\Application->doRun()
         #32
         /www/typo3-rector-2.0.0/vendor/rector/rector/vendor/symfony/console/Application.php(216):
         Rector\Console\ConsoleApplication->doRun()
         #33 /www/typo3-rector-2.0.0/vendor/rector/rector/bin/rector.php(130):
         RectorPrefix202402\Symfony\Component\Console\Application->run()
         #34 /www/typo3-rector-2.0.0/vendor/rector/rector/bin/rector(5): require_once('...')
         #35 /www/typo3-rector-2.0.0/vendor/bin/rector(119): include('...')
         #36 {main}". On line: 25
@hdietrich-timespin
Copy link
Author

hdietrich-timespin commented Mar 25, 2024

is related to rectorphp/rector#8563. I test the patch https://github.com/rectorphp/rector-src/pull/5743/files in vendor/rector/rector/src/PHPStan/NodeVisitor/ExprScopeFromStmtNodeVisitor.php fom @samsonasik , but it do not solved the problem.

Can you help?

@samsonasik
Copy link
Contributor

Like mentioned on original issue, It is better to create a github repo with step by step to reproduce, otherwise, nothing we can do.

@hdietrich-timespin
Copy link
Author

hdietrich-timespin commented Mar 26, 2024

You can find reproduceable repo here https://github.com/hdietrich-timespin/typo3-rector-testrepo/tree/bug_issues_4196.

You can start rector process with:

cd /path_to/hdietrich-timespin/typo3-rector-testrepo
composer install
cd Projects/Typo3_12
php ../../vendor/bin/rector  process typo3conf/ext/t3tstest/Classes/Domain/Repository --dry-run -vvv --debug

@samsonasik
Copy link
Contributor

Fixed at rectorphp/rector-src#5743

@hdietrich-timespin
Copy link
Author

hdietrich-timespin commented Mar 27, 2024

It works. Thanks for the Bugfix!

But is it possible that the changed code more human readable?

rector changes is very complicate, horrible and have to much redundancy code:
grafik

See new issue #4201

@hdietrich-timespin
Copy link
Author

If I do not use fluent calls the rector changes are very better:

grafik

hdietrich-timespin added a commit to hdietrich-timespin/typo3-rector-testrepo that referenced this issue Apr 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants