rector: Getting Rector\Core\Exception\ShouldNotHappenException on php5.6 code
Bug Report
| Subject | Details |
|---|---|
| Rector version | v0.7.6 |
| Installed as | prefixed Rector PHAR |
I am on PHP 7.4.3 (cli) (built: Feb 26 2020 12:17:01)
I am running this command: vendor/bin/rector process . --set php74 --dry-run --verbose
After rector finishes parsing all the files I get the following:
[refactoring] admin/CategorySelection/CategorySelection.php
In NodeNameResolver.php line 81:
[Rector\Core\Exception\ShouldNotHappenException]
Pick more specific node than "PhpParser\Node\Expr\MethodCall"
Exception trace:
at phar:///projectName/common/vendor/rector/rector-prefixed/rector/packages/node-name-resolver/src/NodeNameResolver.php:81
Rector\NodeNameResolver\NodeNameResolver->getName() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/Node/Manipulator/ClassMethodPropertyFetchManipulator.php:47
Rector\Core\PhpParser\Node\Manipulator\ClassMethodPropertyFetchManipulator->Rector\Core\PhpParser\Node\Manipulator\{closure}() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/CallableNodeTraverser.php:42
class@anonymous\phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/CallableNodeTraverser.php:26$23b->enterNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:113
PhpParser\NodeTraverser->traverseNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:196
PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:85
PhpParser\NodeTraverser->traverse() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/CallableNodeTraverser.php:22
Rector\Core\PhpParser\NodeTraverser\CallableNodeTraverser->traverseNodesWithCallable() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/Node/Manipulator/ClassMethodPropertyFetchManipulator.php:49
Rector\Core\PhpParser\Node\Manipulator\ClassMethodPropertyFetchManipulator->resolveParamForPropertyFetch() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/rules/type-declaration/src/TypeInferer/PropertyTypeInferer/ConstructorPropertyTypeInferer.php:54
Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer\ConstructorPropertyTypeInferer->inferProperty() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/rules/type-declaration/src/TypeInferer/PropertyTypeInferer.php:40
Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer->inferProperty() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/rules/php-74/src/Rector/Property/TypedPropertyRector.php:78
Rector\Php74\Rector\Property\TypedPropertyRector->refactor() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Rector/AbstractRector.php:123
Rector\Core\Rector\AbstractRector->enterNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:176
PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:105
PhpParser\NodeTraverser->traverseNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:196
PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:105
PhpParser\NodeTraverser->traverseNode() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:196
PhpParser\NodeTraverser->traverseArray() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:85
PhpParser\NodeTraverser->traverse() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php:53
Rector\Core\PhpParser\NodeTraverser\RectorNodeTraverser->traverse() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/FileProcessor.php:100
Rector\Core\Application\FileProcessor->refactor() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/RectorApplication.php:123
Rector\Core\Application\RectorApplication->Rector\Core\Application\{closure}() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/RectorApplication.php:176
Rector\Core\Application\RectorApplication->tryCatchWrapper() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Application/RectorApplication.php:124
Rector\Core\Application\RectorApplication->runOnFileInfos() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Console/Command/ProcessCommand.php:128
Rector\Core\Console\Command\ProcessCommand->execute() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Command/Command.php:228
_HumbugBoxe941696e063c\Symfony\Component\Console\Command\Command->run() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Console/Command/AbstractCommand.php:30
Rector\Core\Console\Command\AbstractCommand->run() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Application.php:849
_HumbugBoxe941696e063c\Symfony\Component\Console\Application->doRunCommand() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Application.php:235
_HumbugBoxe941696e063c\Symfony\Component\Console\Application->doRun() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/src/Console/Application.php:76
Rector\Core\Console\Application->doRun() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/vendor/symfony/console/Application.php:136
_HumbugBoxe941696e063c\Symfony\Component\Console\Application->run() at phar:///projectName/common/vendor/rector/rector-prefixed/rector/bin/rector:40
require() at /projectName/common/vendor/rector/rector-prefixed/rector:6
Minimal PHP Code Causing Issue
This is the contents of the file admin/CategorySelection/CategorySelection.php
<?php
namespace ProjectName\Admin\CategorySelection;
abstract class CategorySelection
{
protected $categories = [];
public function __construct($category_mod)
{
$this->categories = Categories::getInstance($category_mod)->getCategories();
}
public function getSelectDropDown($selected_cat_id = 0)
{
return $this->getDisplayString($this->categories, $selected_cat_id, 1);
}
abstract protected function getDisplayString($categories, $selected_cat_id, $depth);
protected function getPrefix($depth)
{
if ($depth == 1) {
return '';
} else {
return str_repeat(" ", $depth) . "»";
}
}
}
Expected Behaviour
I have no idea because I haven’t been able to get rector to ever work on any of the projects I’ve tried it on, so I hope that this time is different and I do get it to work on my current project.
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 20 (14 by maintainers)
Sure, send PR
I don’t use Docker. Failing CI is need to verify though
I tried it running on the file content locally, but with no error.
What happens when you analyze only the file?
Also, you should never use
.in any command. Always specify the directories and files. It can analyse vendor and break on so many cases.