PHPStan 2 fails with Symfony 7.1.7 due to Lexer argument changes
jbafford opened this issue · 3 comments
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}
It's already fixed on Symfony's side but not yet released: symfony/type-info@51535dd
Confirmed, fixed in Symfony 7.1.8.
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.