Skip to content

Identifier name cannot be empty #12778

@AJenbo

Description

@AJenbo

Bug report

As of 2.1.9 (2.1.10 is also affected) i get the following error when running PHPStan on this test code:

https://phpstan.org/r/4ef1477c-e976-41da-8169-30750a7c7e98

<?php

class Test
{
    public function test(): void
    {
		/** @var stdClass $category */
		echo $category->{''};
    }
}

 -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     Error                                                                                                                                                                                                                                                                  
 -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     Internal error: Identifier name cannot be empty while analysing file ...
     Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml:                                                                                                                                                              
     ## phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php(28)                                                                                  
     #0 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1606): PhpParser\Node\Identifier->__construct()                                                                 
     #1 [internal function]: PHPStan\Analyser\MutatingScope->PHPStan\Analyser\{closure}()                                                                                                                                                                                   
     #2 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1606): array_map()                                                                                              
     #3 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(554): PHPStan\Analyser\MutatingScope->resolveType()                                                             
     #4 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1171): PHPStan\Analyser\MutatingScope->getType()                                                                
     #5 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Reflection/InitializerExprTypeResolver.php(438): PHPStan\Analyser\MutatingScope->PHPStan\Analyser\{closure}()                              
     #6 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1171): PHPStan\Reflection\InitializerExprTypeResolver->getArrayType()                                           
     #7 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(554): PHPStan\Analyser\MutatingScope->resolveType()                                                             
     #8 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(768): PHPStan\Analyser\MutatingScope->getType()                                                                 
     #9 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(554): PHPStan\Analyser\MutatingScope->resolveType()                                                             
     #10 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(1849): PHPStan\Analyser\MutatingScope->getType()                                                           
     #11 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(727): PHPStan\Analyser\NodeScopeResolver->findEarlyTerminatingExpr()                                       
     #12 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(456): PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                
     #13 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(955): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                               
     #14 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(456): PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                
     #15 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(653): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                               
     #16 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(456): PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                
     #17 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(793): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                               
     #18 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(456): PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                
     #19 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(760): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                                               
     #20 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(404): PHPStan\Analyser\NodeScopeResolver->processStmtNode()                                                
     #21 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(175): PHPStan\Analyser\NodeScopeResolver->processNodes()                                                        
     #22 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(136): PHPStan\Analyser\FileAnalyser->analyseFile()                                                              
     #23 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): PHPStan\Command\WorkerCommand::PHPStan\Command\{closure}()                         
     #24 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(117): _PHPStan_72d2f3b5b\Evenement\EventEmitter->emit()                                              
     #25 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): _PHPStan_72d2f3b5b\Clue\React\NDJson\Decoder->handleData()                         
     #26 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_72d2f3b5b\Evenement\EventEmitter->emit()                                                       
     #27 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/EventEmitterTrait.php(111): _PHPStan_72d2f3b5b\React\Stream\Util::_PHPStan_72d2f3b5b\React\Stream\{closure}()  
     #28 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(168): _PHPStan_72d2f3b5b\Evenement\EventEmitter->emit()                                      
     #29 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201): _PHPStan_72d2f3b5b\React\Stream\DuplexResourceStream->handleData()                     
     #30 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173): _PHPStan_72d2f3b5b\React\EventLoop\StreamSelectLoop->waitForStreamActivity()           
     #31 phar:///vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(96): _PHPStan_72d2f3b5b\React\EventLoop\StreamSelectLoop->run()                                                 
     #32 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259): PHPStan\Command\WorkerCommand->execute()                                                     
     #33 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870): _PHPStan_72d2f3b5b\Symfony\Component\Console\Command\Command->run()                              
     #34 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261): _PHPStan_72d2f3b5b\Symfony\Component\Console\Application->doRunCommand()                         
     #35 phar:///vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157): _PHPStan_72d2f3b5b\Symfony\Component\Console\Application->doRun()                                
     #36 phar:///vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(114): _PHPStan_72d2f3b5b\Symfony\Component\Console\Application->run()                                                             
     #37 phar:///vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(115): _PHPStan_72d2f3b5b\{closure}()                                                                                              
     #38 ./vendor/phpstan/phpstan/phpstan(8): require('...')                                                                                                                                        
     #39 ./vendor/bin/phpstan(119): include('...')                         

Code snippet that reproduces the problem

No response

Expected output

[OK] No errors like in 2.1.8

Did PHPStan help you today? Did it make you happy in any way?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions