-
-
Notifications
You must be signed in to change notification settings - Fork 738
Closed
Labels
Description
Bug Report
| Subject | Details |
|---|---|
| Rector version | 2.2.14 |
| PHP version | 8.2.30 NTS x64 (Ubuntu) |
| Symfony version | 5.4.50 |
Hello team,
I was testing an upgrade from an old symfony code - from 3.4 to 5.4 - and it was going great until today.
Everytime I try to run the demo, it returns the folloing exception: "System error: "PhpParser\NodeAbstract::getComments(): Return value must be of type array, bool returned".
Minimal PHP Code Causing Issue
For some reason, the demo throws the message: Expected config should return callable RectorConfig instance
rector.php
<?php
declare(strict_types=1);
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
use Rector\Symfony\Set\SymfonySetList;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/src',
__DIR__ . '/tests',
]);
$rectorConfig->importNames(true, false);
$rectorConfig->skip([
__DIR__ . '/assets',
__DIR__ . '/templates',
__DIR__ . '/docs',
__DIR__ . '/public',
__DIR__ . '/web',
__DIR__ . '/node_modules',
__DIR__ . '/vendor',
// Skip all naming rules in entities
SetList::NAMING => [
__DIR__ . '/src/GroupName/*/Entity/*',
],
]);
$rectorConfig->sets([
\Rector\Set\ValueObject\LevelSetList::UP_TO_PHP_82,
SymfonySetList::SYMFONY_54,
SymfonySetList::SYMFONY_CODE_QUALITY,
SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
SetList::CODE_QUALITY,
SetList::DEAD_CODE,
SetList::TYPE_DECLARATION,
SetList::PRIVATIZATION,
SetList::INSTANCEOF,
SetList::EARLY_RETURN,
]);
};
IpListTextareaType.php
<?php
declare(strict_types=1);
namespace GroupName\PackageBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
final class IpListTextareaType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
parent::buildForm($builder, $options);
$builder->addModelTransformer(new CallbackTransformer(
function ($ipsAsArray): string {
return (!empty($ipsAsArray)) ? implode(';', $ipsAsArray) : '';
},
function ($ipsAsString): array {
return array_unique(
preg_split(
"/[\s;,\r\n]/",
(string)$ipsAsString,
0,
PREG_SPLIT_NO_EMPTY
)
);
}
));
}
public function getParent(): string
{
return TextareaType::class;
}
}
Stack trace
[ERROR] Could not process
"/home/username/projects/project-upgrade/src/GroupName/PackageBundle/Form/Type/IpListTex
tareaType.php" file, due to:
"System error: "PhpParser\NodeAbstract::getComments(): Return value must be of type array, bool returned"
Stack trace:
#0 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php(119):
PhpParser\NodeAbstract->getComments()
#1 vendor/rector/rector/src/BetterPhpDocParser/PhpDocInfo/PhpDocInfoFactory.php(77):
PhpParser\NodeAbstract->getDocComment()
#2 vendor/rector/rector/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php(152):
Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory->createFromNode()
#3 vendor/rector/rector/src/Rector/AbstractRector.php(115):
Rector\Php80\Rector\Class_\AnnotationToAttributeRector->refactor()
#4 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(91):
Rector\Rector\AbstractRector->enterNode()
#5 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#6 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()
#7 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(114):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#8 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#9 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()
#10 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(114):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#11 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#12 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()
#13 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#14 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()
#15 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#16 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(78):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()
#17 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(187):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseNode()
#18 vendor/rector/rector/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php(60):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverseArray()
#19 vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php(51):
Rector\PhpParser\NodeTraverser\AbstractImmutableNodeTraverser->traverse()
#20 vendor/rector/rector/src/Application/FileProcessor.php(95):
Rector\PhpParser\NodeTraverser\RectorNodeTraverser->traverse()
#21 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(178):
Rector\Application\FileProcessor->processFile()
#22 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(152):
Rector\Application\ApplicationFileProcessor->processFile()
#23 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(128):
Rector\Application\ApplicationFileProcessor->processFiles()
#24 vendor/rector/rector/src/Console/Command/ProcessCommand.php(182):
Rector\Application\ApplicationFileProcessor->run()
#25 vendor/rector/rector/vendor/symfony/console/Command/Command.php(289):
Rector\Console\Command\ProcessCommand->execute()
#26 vendor/rector/rector/vendor/symfony/console/Application.php(899):
RectorPrefix202512\Symfony\Component\Console\Command\Command->run()
#27 vendor/rector/rector/vendor/symfony/console/Application.php(279):
RectorPrefix202512\Symfony\Component\Console\Application->doRunCommand()
#28 vendor/rector/rector/src/Console/ConsoleApplication.php(60):
RectorPrefix202512\Symfony\Component\Console\Application->doRun()
#29 vendor/rector/rector/vendor/symfony/console/Application.php(162):
Rector\Console\ConsoleApplication->doRun()
#30 vendor/rector/rector/bin/rector.php(130): RectorPrefix202512\Symfony\Component\Console\Application->run()
#31 vendor/rector/rector/bin/rector(5): require_once('...')
#32 vendor/bin/rector(117): include('...')
#33 {main}". On line: 110
Expected Behaviour
The minimum behaviour is to warn the developer to refactor the code or to rector change it by itself.