driftingly/rector-laravel

rule AddGenericReturnTypeToRelationsRector trigger Error

Closed this issue · 2 comments

With

 "rector/rector": "^0.18.12",
  "driftingly/rector-laravel": "^0.26.2",
 "phpstan/phpstan": "^1.10",
 "nunomaduro/larastan": "^2.7",

when the rule AddGenericReturnTypeToRelationsRector::class is activated

I get this error on multiple class:

 [ERROR] Could not process "app/Models/User.php" file, due to:                                                          
         "System error: "Call to a member function mapPHPStanPhpDocTypeNodeToPHPStanType() on null"                     
                                                                                                                        
         Stack trace:                                                                                                   
         #0 vendor/driftingly/rector-laravel/src/Rector/ClassMethod/AddGenericReturnTypeToRelationsRector.php(162):     
         RectorLaravel\Rector\ClassMethod\AddGenericReturnTypeToRelationsRector->areNativeTypeAndPhpDocReturnTypeEqual( 
         Object(PhpParser\Node\Stmt\ClassMethod), Object(PhpParser\Node\Name\FullyQualified),                           
         Object(PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode))                                                    
         #1 vendor/rector/rector/src/Rector/AbstractScopeAwareRector.php(27):                                           
         RectorLaravel\Rector\ClassMethod\AddGenericReturnTypeToRelationsRector->refactorWithScope(Object(PhpParser\Nod 
         e\Stmt\ClassMethod), Object(PHPStan\Analyser\MutatingScope))                                                   
         #2 vendor/rector/rector/src/Rector/AbstractRector.php(132):                                                    
         Rector\Core\Rector\AbstractScopeAwareRector->refactor(Object(PhpParser\Node\Stmt\ClassMethod))                 
         #3 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(176):                          
         Rector\Core\Rector\AbstractRector->enterNode(Object(PhpParser\Node\Stmt\ClassMethod))                          
         #4 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):                          
         PhpParser\NodeTraverser->traverseArray(Array)                                                                  
         #5 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):                          
         PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Class_))                                      
         #6 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(105):                          
         PhpParser\NodeTraverser->traverseArray(Array)                                                                  
         #7 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(196):                          
         PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Namespace_))                                  
         #8 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(85):                           
         PhpParser\NodeTraverser->traverseArray(Array)                                                                  
         #9 vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php(50):                               
         PhpParser\NodeTraverser->traverse(Array)                                                                       
         #10 vendor/rector/rector/src/Application/FileProcessor.php(116):                                               
         Rector\Core\PhpParser\NodeTraverser\RectorNodeTraverser->traverse(Array)                                       
         #11 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(177):                                    
         Rector\Core\Application\FileProcessor->processFile(Object(Rector\Core\ValueObject\Application\File),           
         Object(Rector\Core\ValueObject\Configuration))                                                                 
         #12 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(153):                                    
         Rector\Core\Application\ApplicationFileProcessor->processFile(Object(Rector\Core\ValueObject\Application\File) 
         , Object(Rector\Core\ValueObject\Configuration))                                                               
         #13 vendor/rector/rector/src/Console/Command/WorkerCommand.php(132):                                           
         Rector\Core\Application\ApplicationFileProcessor->processFiles(Array,                                          
         Object(Rector\Core\ValueObject\Configuration), Object(Closure))                                                
         #14 vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTrait.php(111):                            
         Rector\Core\Console\Command\WorkerCommand->Rector\Core\Console\Command\{closure}(Array)                        
         #15 vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php(117):                                        
         RectorPrefix202312\Evenement\EventEmitter->emit('data', Array)                                                 
         #16 vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTrait.php(111):                            
         RectorPrefix202312\Clue\React\NDJson\Decoder->handleData(Array)                                                
         #17 vendor/rector/rector/vendor/react/stream/src/Util.php(62):                                                 
         RectorPrefix202312\Evenement\EventEmitter->emit('data', Array)                                                 
         #18 vendor/rector/rector/vendor/evenement/evenement/src/EventEmitterTrait.php(111):                            
         RectorPrefix202312\React\Stream\Util::RectorPrefix202312\React\Stream\{closure}('{"action":"main...')          
         #19 vendor/rector/rector/vendor/react/stream/src/DuplexResourceStream.php(154):                                
         RectorPrefix202312\Evenement\EventEmitter->emit('data', Array)                                                 
         #20 vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.php(201):                                
         RectorPrefix202312\React\Stream\DuplexResourceStream->handleData(Resource id #1883)                            
         #21 vendor/rector/rector/vendor/react/event-loop/src/StreamSelectLoop.php(173):                                
         RectorPrefix202312\React\EventLoop\StreamSelectLoop->waitForStreamActivity(NULL)                               
         #22 vendor/rector/rector/src/Console/Command/WorkerCommand.php(90):                                            
         RectorPrefix202312\React\EventLoop\StreamSelectLoop->run()                                                     
         #23 vendor/rector/rector/vendor/symfony/console/Command/Command.php(327):                                      
         Rector\Core\Console\Command\WorkerCommand->execute(Object(RectorPrefix202312\Symfony\Component\Console\Input\A 
         rgvInput), Object(RectorPrefix202312\Symfony\Component\Console\Output\ConsoleOutput))                          
         #24 vendor/rector/rector/vendor/symfony/console/Application.php(960):                                          
         RectorPrefix202312\Symfony\Component\Console\Command\Command->run(Object(RectorPrefix202312\Symfony\Component\ 
         Console\Input\ArgvInput), Object(RectorPrefix202312\Symfony\Component\Console\Output\ConsoleOutput))           
         #25 vendor/rector/rector/vendor/symfony/console/Application.php(333):                                          
         RectorPrefix202312\Symfony\Component\Console\Application->doRunCommand(Object(Rector\Core\Console\Command\Work 
         erCommand), Object(RectorPrefix202312\Symfony\Component\Console\Input\ArgvInput),                              
         Object(RectorPrefix202312\Symfony\Component\Console\Output\ConsoleOutput))                                     
         #26 vendor/rector/rector/src/Console/ConsoleApplication.php(53):                                               
         RectorPrefix202312\Symfony\Component\Console\Application->doRun(Object(RectorPrefix202312\Symfony\Component\Co 
         nsole\Input\ArgvInput), Object(RectorPrefix202312\Symfony\Component\Console\Output\ConsoleOutput))             
         #27 vendor/rector/rector/vendor/symfony/console/Application.php(216):                                          
         Rector\Core\Console\ConsoleApplication->doRun(Object(RectorPrefix202312\Symfony\Component\Console\Input\ArgvIn 
         put), Object(RectorPrefix202312\Symfony\Component\Console\Output\ConsoleOutput))                               
         #28 vendor/rector/rector/bin/rector.php(129): RectorPrefix202312\Symfony\Component\Console\Application->run()  
         #29 vendor/rector/rector/bin/rector(5): require_once('vendor...')                                              
         #30 vendor/bin/rector(119): include('vendor...')                                                               
         #31 {main}". On line: 290   

When the rule is disabled, no errors occurs

With this packages version:

"rector/rector": "^0.18.4",
"driftingly/rector-laravel": "^0.26.0",
"phpstan/phpstan": "^1.10",
"nunomaduro/larastan": "^2.6",

No errors are triggered, and command line display Rector is done!/
But I get this warning in the console when rule AddGenericReturnTypeToRelationsRector is enabled

Get staticTypeMapper property from AbstractRector on RectorLaravel\Rector\ClassMethod\AddGenericReturnTypeToRelationsRector is deprecated, inject via __construct() instead

Try to install the dev-main version of rector-laravel, that could solve the issue.

@GeniJaho
Thanks, that worked.

my current composer.json deps:

{
    "require-dev": {
        "driftingly/rector-laravel": "dev-main",
        "larastan/larastan": "^2.7",
        "phpstan/phpstan": "^1.10",
        "rector/rector": "^0.18.12"
    },
}