rectorphp / rector

Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
https://getrector.com
MIT License
8.32k stars 670 forks source link

"System error: "Scope not available on "PhpParser\Node\Expr\Array_" node, but is required by a refactorWithScope() method of "Rector\CodeQuality\Rector\Array_\CallableThisArrayToAnonymousFunctionRector" #8622

Closed alex7070m closed 4 weeks ago

alex7070m commented 4 weeks ago

Hello! I ran into the following problem.

     "System error: "Scope not available on "PhpParser\Node\Expr\Array_" node, but is required by a
     refactorWithScope() method of "Rector\CodeQuality\Rector\Array_\CallableThisArrayToAnonymousFunctionRector"

     Run Rector with "--debug" option and post the report here: https://github.com/rectorphp/rector/issues/new". On line: 25

What does this mean and how to fix it?

samsonasik commented 4 weeks ago

Please provide simple reproducible code and config, otherwise, nothing we can do.

alex7070m commented 4 weeks ago

composer.json:

{ "require": { "php": "^8.2" }, "require-dev": { "rector/rector": "^1.0" } }

rector.php:

`<?php

use Rector\Config\RectorConfig; use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;

return RectorConfig::configure()

// register single rule
->withRules([
    TypedPropertyFromStrictConstructorRector::class
])
// here we can define, what prepared sets of rules will be applied
->withPreparedSets(
    deadCode: true,
    codeQuality: true
)
->withoutParallel();`

The php file is very large (16468 lines) and the code does not fit here.

I give a report from the rector:

                          \Users\alexa\www\someproject\src\index.php" file, due to:
     "System error: "Scope not available on "PhpParser\Node\Expr\Array_" node, but is required by a
     refactorWithScope() method of "Rector\CodeQuality\Rector\Array_\CallableThisArrayToAnonymousFunctionRector"

     #0 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Rector\AbstractRector.php(136):
     Rector\Rector\AbstractScopeAwareRector->refactor()
     #1
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(11
     3): Rector\Rector\AbstractRector->enterNode()
     #2
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(13
     3): PhpParser\NodeTraverser->traverseNode()
     #3
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #4
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(10
     5): PhpParser\NodeTraverser->traverseArray()
     #5
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #6
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(10
     5): PhpParser\NodeTraverser->traverseArray()
     #7
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #8
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(10
     5): PhpParser\NodeTraverser->traverseArray()
     #9
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #10
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(10
     5): PhpParser\NodeTraverser->traverseArray()
     #11
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #12
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(10
     5): PhpParser\NodeTraverser->traverseArray()
     #13
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(13
     3): PhpParser\NodeTraverser->traverseNode()
     #14
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #15
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(10
     5): PhpParser\NodeTraverser->traverseArray()
     #16
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(19
     6): PhpParser\NodeTraverser->traverseNode()
     #17
     C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\nikic\php-parser\lib\PhpParser\NodeTraverser.php(85
     ): PhpParser\NodeTraverser->traverseArray()
     #18
     C:\Users\alexa\www\someproject\vendor\rector\rector\src\PhpParser\NodeTraverser\RectorNodeTraverser.php(41):
     PhpParser\NodeTraverser->traverse()
     #19 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Application\FileProcessor.php(111):
     Rector\PhpParser\NodeTraverser\RectorNodeTraverser->traverse()
     #20 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Application\ApplicationFileProcessor.php(184):
     Rector\Application\FileProcessor->processFile()
     #21 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Application\ApplicationFileProcessor.php(161):
     Rector\Application\ApplicationFileProcessor->processFile()
     #22 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Application\ApplicationFileProcessor.php(138):
     Rector\Application\ApplicationFileProcessor->processFiles()
     #23 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Console\Command\ProcessCommand.php(117):
     Rector\Application\ApplicationFileProcessor->run()
     #24 C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\symfony\console\Command\Command.php(327):
     Rector\Console\Command\ProcessCommand->execute()
     #25 C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\symfony\console\Application.php(960):
     RectorPrefix202404\Symfony\Component\Console\Command\Command->run()
     #26 C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\symfony\console\Application.php(333):
     RectorPrefix202404\Symfony\Component\Console\Application->doRunCommand()
     #27 C:\Users\alexa\www\someproject\vendor\rector\rector\src\Console\ConsoleApplication.php(53):
     RectorPrefix202404\Symfony\Component\Console\Application->doRun()
     #28 C:\Users\alexa\www\someproject\vendor\rector\rector\vendor\symfony\console\Application.php(216):
     Rector\Console\ConsoleApplication->doRun()
     #29 C:\Users\alexa\www\someproject\vendor\rector\rector\bin\rector.php(130):
     RectorPrefix202404\Symfony\Component\Console\Application->run()
     #30 C:\Users\alexa\www\someproject\vendor\rector\rector\bin\rector(5): require_once('...')
     #31 C:\Users\alexa\www\someproject\vendor\bin\rector(119): include('...')
     #32 {main}". On line: 25
samsonasik commented 4 weeks ago

No code example, nothing we can do, please provide code example and config at https://getrector.com/demo

Like other issue you created, You need to invest time to narrow down rules half by half until it found the minimal rule(s) that cause it, and the expected output.

Read this post: https://tomasvotruba.com/blog/2021/02/01/effective-debug-tricks-narrow-scoping/