Skip to content

PHPStan 2 fails with Symfony 7.1.7 due to Lexer argument changes #415

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

Closed
jbafford opened this issue Nov 11, 2024 · 3 comments
Closed

PHPStan 2 fails with Symfony 7.1.7 due to Lexer argument changes #415

jbafford opened this issue Nov 11, 2024 · 3 comments

Comments

@jbafford
Copy link

It appears that analysis fails when PHPStan calls into the container, which attempts to use symfony/type-info TypeResolver/StringTypeResolver to parse phpdocs. Specifically, StringTypeResolver hasn't been updated to PHPStan 2.0, so it's calling Lexer(), omitting the new required parameter.

Note that in this application, symfony/type-info is coming in as a transitive dependency of symfony/property-access -> symfony/property-info -> symfony/type-info. The application itself isn't directly using type-info, nor does it declare phpstan/phpdoc-parser in its dependencies. (phpstan/phpdoc-parser is not installed at all, except internally to phpstan.)

Since this appears to fail attempting to parse docblocks, I removed all phpdoc annotations from the specific file it's complaining about, but got the same result.

I will attempt to create a minimal test case later today and update this issue accordingly.

     Internal error: Too few arguments to function PHPStan\PhpDocParser\Lexer\Lexer::__construct(), 0 passed in /...application-root.../vendor/symfony/type-info/TypeResolver/StringTypeResolver.php on line 66 and exactly 1 expected while analysing file /...application-root.../src/Command/BannerStitchCommand.php                                                                  
     Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml:                                                                                                                                                                                                                                                                           
     ## phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php(59)                                                                                                                                                                                                                                                          
     #0 /...application-root.../vendor/symfony/type-info/TypeResolver/StringTypeResolver.php(66): PHPStan\PhpDocParser\Lexer\Lexer->__construct()                                                                                                                                                                                                                                        
     #1 /...application-root.../vendor/symfony/type-info/TypeResolver/TypeResolver.php(71): Symfony\Component\TypeInfo\TypeResolver\StringTypeResolver->__construct()                                                                                                                                                                                                                    
     #2 /...application-root.../vendor/symfony/type-info/TypeResolver/TypeResolver.php(66): Psr\Container\ContainerInterface@anonymous->__construct()                                                                                                                                                                                                                                    
     #3 /...application-root.../vendor/symfony/property-info/Extractor/ReflectionExtractor.php(102): Symfony\Component\TypeInfo\TypeResolver\TypeResolver::create()                                                                                                                                                                                                                      
     #4 /...application-root.../var/cache/dev/ContainerZr3ZcLD/getPropertyAccessorService.php(28): Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor->__construct()                                                                                                                                                                                                           
     #5 /...application-root.../var/cache/dev/ContainerZr3ZcLD/AppKernelDevDebugContainer.php(488): ContainerZr3ZcLD\getPropertyAccessorService::do(Object(ContainerZr3ZcLD\AppKernelDevDebugContainer), true)                                                                                                                                                                           
     #6 /...application-root.../var/cache/dev/ContainerZr3ZcLD/getSecurity_Authenticator_JsonLogin_MainService.php(31): ContainerZr3ZcLD\AppKernelDevDebugContainer->load('getPropertyAcce...')                                                                                                                                                                                          
     #7 /...application-root.../var/cache/dev/ContainerZr3ZcLD/AppKernelDevDebugContainer.php(488): ContainerZr3ZcLD\getSecurity_Authenticator_JsonLogin_MainService::do(Object(ContainerZr3ZcLD\AppKernelDevDebugContainer), true)                                                                                                                                                      
     #8 /...application-root.../var/cache/dev/ContainerZr3ZcLD/getSecurity_Command_DebugFirewallService.php(24): ContainerZr3ZcLD\AppKernelDevDebugContainer->load('getSecurity_Aut...')                                                                                                                                                                                                 
     #9 /...application-root.../var/cache/dev/ContainerZr3ZcLD/AppKernelDevDebugContainer.php(488): ContainerZr3ZcLD\getSecurity_Command_DebugFirewallService::do(Object(ContainerZr3ZcLD\AppKernelDevDebugContainer), true)                                                                                                                                                             
     #10 /...application-root.../var/cache/dev/ContainerZr3ZcLD/get_Security_Command_DebugFirewall_LazyService.php(24): ContainerZr3ZcLD\AppKernelDevDebugContainer->load('getSecurity_Com...')                                                                                                                                                                                          
     #11 /...application-root.../vendor/symfony/console/Command/LazyCommand.php(189): ContainerZr3ZcLD\get_Security_Command_DebugFirewall_LazyService::ContainerZr3ZcLD\{closure}()                                                                                                                                                                                                      
     #12 /...application-root.../vendor/phpstan/phpstan-symfony/src/Symfony/ConsoleApplicationResolver.php(74): Symfony\Component\Console\Command\LazyCommand->getCommand()                                                                                                                                                                                                              
     #13 /...application-root.../vendor/phpstan/phpstan-symfony/src/Type/Symfony/InputInterfaceGetArgumentDynamicReturnTypeExtension.php(59): PHPStan\Symfony\ConsoleApplicationResolver->findCommands(Object(PHPStan\Reflection\ClassReflection))                                                                                                                                       
     #14 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(3705): PHPStan\Type\Symfony\InputInterfaceGetArgumentDynamicReturnTypeExtension->getTypeFromMethodCall(Object(PHPStan\Reflection\ResolvedMethodReflection), Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Analyser\MutatingScope))                                   
     #15 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1485): PHPStan\Analyser\MutatingScope->methodCallReturnType(Object(PHPStan\Type\ObjectType), 'getArgument', Object(PhpParser\Node\Expr\MethodCall))                                                                                                                           
     #16 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1491): PHPStan\Analyser\MutatingScope->PHPStan\Analyser\{closure}()                                                                                                                                                                                                           
     #17 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(541): PHPStan\Analyser\MutatingScope->resolveType('$input->getArgu...', Object(PhpParser\Node\Expr\MethodCall))                                                                                                                                                               
     #18 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Rules/PhpDoc/VarTagTypeRuleHelper.php(80): PHPStan\Analyser\MutatingScope->getType(Object(PhpParser\Node\Expr\MethodCall))                                                                                                                                                                               
     #19 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Rules/PhpDoc/VarTagTypeRuleHelper.php(49): PHPStan\Rules\PhpDoc\VarTagTypeRuleHelper->checkExprType(Object(PHPStan\Analyser\MutatingScope), Object(PhpParser\Node\Expr\MethodCall), Object(PHPStan\Type\ArrayType))                                                                                      
     #20 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Rules/PhpDoc/WrongVariableNameInVarTagRule.php(136): PHPStan\Rules\PhpDoc\VarTagTypeRuleHelper->checkVarType(Object(PHPStan\Analyser\MutatingScope), Object(PhpParser\Node\Expr\Variable), Object(PhpParser\Node\Expr\MethodCall), Array, Array)                                                         
     #21 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Rules/PhpDoc/WrongVariableNameInVarTagRule.php(213): PHPStan\Rules\PhpDoc\WrongVariableNameInVarTagRule->processAssign(Object(PHPStan\Analyser\MutatingScope), Object(PhpParser\Node\Expr\Variable), Object(PhpParser\Node\Expr\MethodCall), Array)                                                      
     #22 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Rules/PhpDoc/WrongVariableNameInVarTagRule.php(76): PHPStan\Rules\PhpDoc\WrongVariableNameInVarTagRule->processExpression(Object(PHPStan\Analyser\MutatingScope), Object(PhpParser\Node\Expr\Assign), Array)                                                                                             
     #23 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(103): PHPStan\Rules\PhpDoc\WrongVariableNameInVarTagRule->processNode(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope))                                                                                                                          
     #24 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Node/ClassStatementsGatherer.php(116): PHPStan\Analyser\FileAnalyser->PHPStan\Analyser\{closure}(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope))                                                                                                                         
     #25 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(614): PHPStan\Node\ClassStatementsGatherer->__invoke(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope))                                                                                                                                      
     #26 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(495): PHPStan\Analyser\NodeScopeResolver::PHPStan\Analyser\{closure}(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope))                                                                                                                      
     #27 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(422): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Expression), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))                                                                     
     #28 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(613): PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\ClassMethod), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))                                                            
     #29 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(422): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\ClassMethod), Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Node\ClassStatementsGatherer), Object(PHPStan\Analyser\StatementContext))                                       
     #30 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(751): PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\Class_), Array, Object(PHPStan\Analyser\MutatingScope), Object(PHPStan\Node\ClassStatementsGatherer), Object(PHPStan\Analyser\StatementContext))                                    
     #31 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(422): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Class_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))                                                                         
     #32 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(721): PHPStan\Analyser\NodeScopeResolver->processStmtNodes(Object(PhpParser\Node\Stmt\Namespace_), Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))                                                             
     #33 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(390): PHPStan\Analyser\NodeScopeResolver->processStmtNode(Object(PhpParser\Node\Stmt\Namespace_), Object(PHPStan\Analyser\MutatingScope), Object(Closure), Object(PHPStan\Analyser\StatementContext))                                                                     
     #34 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(162): PHPStan\Analyser\NodeScopeResolver->processNodes(Array, Object(PHPStan\Analyser\MutatingScope), Object(Closure))                                                                                                                                                         
     #35 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(136): PHPStan\Analyser\FileAnalyser->analyseFile('...', Array, Object(PHPStan\Rules\LazyRegistry), Object(PHPStan\Collectors\Registry), NULL)                                                                                                                   
     #36 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): PHPStan\Command\WorkerCommand::PHPStan\Command\{closure}(Array)                                                                                                                                                                                   
     #37 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(117): _PHPStan_2a200beec\Evenement\EventEmitter->emit('data', Array)                                                                                                                                                                                                
     #38 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): _PHPStan_2a200beec\Clue\React\NDJson\Decoder->handleData(Array)                                                                                                                                                                                   
     #39 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_2a200beec\Evenement\EventEmitter->emit('data', Array)                                                                                                                                                                                                         
     #40 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): _PHPStan_2a200beec\React\Stream\Util::_PHPStan_2a200beec\React\Stream\{closure}('{"action":"anal...')                                                                                                                                             
     #41 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(168): _PHPStan_2a200beec\Evenement\EventEmitter->emit('data', Array)                                                                                                                                                                                        
     #42 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201): _PHPStan_2a200beec\React\Stream\DuplexResourceStream->handleData(Resource id #4513)                                                                                                                                                                   
     #43 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173): _PHPStan_2a200beec\React\EventLoop\StreamSelectLoop->waitForStreamActivity(NULL)                                                                                                                                                                      
     #44 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(96): _PHPStan_2a200beec\React\EventLoop\StreamSelectLoop->run()                                                                                                                                                                                                                
     #45 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259): PHPStan\Command\WorkerCommand->execute(Object(_PHPStan_2a200beec\Symfony\Component\Console\Input\ArgvInput), Object(_PHPStan_2a200beec\Symfony\Component\Console\Output\ConsoleOutput))                                                                     
     #46 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870): _PHPStan_2a200beec\Symfony\Component\Console\Command\Command->run(Object(_PHPStan_2a200beec\Symfony\Component\Console\Input\ArgvInput), Object(_PHPStan_2a200beec\Symfony\Component\Console\Output\ConsoleOutput))                                              
     #47 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261): _PHPStan_2a200beec\Symfony\Component\Console\Application->doRunCommand(Object(PHPStan\Command\WorkerCommand), Object(_PHPStan_2a200beec\Symfony\Component\Console\Input\ArgvInput), Object(_PHPStan_2a200beec\Symfony\Component\Console\Output\ConsoleOutput))  
     #48 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157): _PHPStan_2a200beec\Symfony\Component\Console\Application->doRun(Object(_PHPStan_2a200beec\Symfony\Component\Console\Input\ArgvInput), Object(_PHPStan_2a200beec\Symfony\Component\Console\Output\ConsoleOutput))                                                
     #49 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(114): _PHPStan_2a200beec\Symfony\Component\Console\Application->run()                                                                                                                                                                                                                            
     #50 phar:///...application-root.../vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(115): _PHPStan_2a200beec\{closure}()                                                                                                                                                                                                                                                             
     #51 /...application-root.../vendor/phpstan/phpstan/phpstan(8): require('phar:///...')                                                                                                                                                                                                                                                                                        
     #52 /...application-root.../vendor/bin/phpstan(119): include('...')                                                                                                                                                                                                                                                                                                  
     #53 {main}                                                                                                                                                                                                                                                                                                                                                                          
@ondrejmirtes
Copy link
Member

It's already fixed on Symfony's side but not yet released: symfony/type-info@51535dd

@jbafford
Copy link
Author

Confirmed, fixed in Symfony 7.1.8.

Copy link

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 15, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants