Skip to content
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

DefinedSymbolCollector - Breaks on anonymous classes #23

Closed
SpacePossum opened this issue Jun 23, 2017 · 9 comments · Fixed by #24
Closed

DefinedSymbolCollector - Breaks on anonymous classes #23

SpacePossum opened this issue Jun 23, 2017 · 9 comments · Fixed by #24

Comments

@SpacePossum
Copy link
Contributor

SpacePossum commented Jun 23, 2017

$ cd /var/www/my_project
$ php composer-require-checker check composer.json 
ComposerRequireChecker 0.1.4

                                                                                                                                                     
  [UnexpectedValueException]                                                                                                                         
  Given node of type "PhpParser\Node\Stmt\Class_" (defined at line 129)does not have an assigned "namespacedName" property: did you pass it through  
   a name resolver visitor?                                                                                                                          
                                                                                                                                                     

check [--config-file CONFIG-FILE] [--] [<composer-json>]

not sure how to proceed?

This seems to cause the exception; from composer.json

  "autoload": {
    "psr-4": {
      "ProjectName\\": "src"
    }
  },
@Ocramius
Copy link
Collaborator

Ocramius commented Jun 23, 2017 via email

@SpacePossum
Copy link
Contributor Author

Install through composer.

$ php -v
PHP 7.1.6-1~ubuntu16.04.1+deb.sury.org+1 (cli) (built: Jun  9 2017 08:26:34) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.6-1~ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.1, Copyright (c) 2002-2017, by Derick Rethans
$ ./vendor/bin/composer-require-checker check  composer.json -vvv
ComposerRequireChecker 1.2.98-63-gd02a3a3-dev
  [UnexpectedValueException]                                                                                                                         
  Given node of type "PhpParser\Node\Stmt\Class_" (defined at line 129)does not have an assigned "namespacedName" property: did you pass it through  
   a name resolver visitor?                                                                                                                          

@Ocramius
Copy link
Collaborator

Ocramius commented Jun 23, 2017 via email

@SpacePossum
Copy link
Contributor Author

$ cd /var/www/my_project
$ ./vendor/bin/composer-require-checker check composer.json  -vvv
ComposerRequireChecker 1.2.98-63-gd02a3a3-dev


  [UnexpectedValueException]
  Given node of type "PhpParser\Node\Stmt\Class_" (defined at line 129)does not have an assigned "namespacedName" property: did you pass it through
   a name resolver visitor?


Exception trace:
 () at /var/www/my_project/vendor/maglnet/composer-require-checker/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php:94
 ComposerRequireChecker\NodeVisitor\DefinedSymbolCollector->recordDefinitionOf() at /var/www/my_project/vendor/maglnet/composer-require-checker/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php:52
 ComposerRequireChecker\NodeVisitor\DefinedSymbolCollector->recordClassDefinition() at /var/www/my_project/vendor/maglnet/composer-require-checker/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php:42
 ComposerRequireChecker\NodeVisitor\DefinedSymbolCollector->enterNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:108
 PhpParser\NodeTraverser->traverseNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:120
 PhpParser\NodeTraverser->traverseNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:171
 PhpParser\NodeTraverser->traverseArray() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:101
 PhpParser\NodeTraverser->traverseNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:171
 PhpParser\NodeTraverser->traverseArray() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:101
 PhpParser\NodeTraverser->traverseNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:171
 PhpParser\NodeTraverser->traverseArray() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:101
 PhpParser\NodeTraverser->traverseNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:171
 PhpParser\NodeTraverser->traverseArray() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:101
 PhpParser\NodeTraverser->traverseNode() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:171
 PhpParser\NodeTraverser->traverseArray() at /var/www/my_project/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:85
 PhpParser\NodeTraverser->traverse() at /var/www/my_project/vendor/maglnet/composer-require-checker/src/ComposerRequireChecker/DefinedSymbolsLocator/LocateDefinedSymbolsFromASTRoots.php:29
 ComposerRequireChecker\DefinedSymbolsLocator\LocateDefinedSymbolsFromASTRoots->__invoke() at /var/www/my_project/vendor/maglnet/composer-require-checker/src/ComposerRequireChecker/Cli/CheckCommand.php:72
 ComposerRequireChecker\Cli\CheckCommand->execute() at /var/www/my_project/vendor/symfony/console/Command/Command.php:264
 Symfony\Component\Console\Command\Command->run() at /var/www/my_project/vendor/symfony/console/Application.php:835
 Symfony\Component\Console\Application->doRunCommand() at /var/www/my_project/vendor/symfony/console/Application.php:200
 Symfony\Component\Console\Application->doRun() at /var/www/my_project/vendor/symfony/console/Application.php:124
 Symfony\Component\Console\Application->run() at /var/www/my_project/vendor/maglnet/composer-require-checker/bin/composer-require-checker.php:32
 include() at /var/www/my_project/vendor/maglnet/composer-require-checker/bin/composer-require-checker:3

check [--config-file CONFIG-FILE] [--] [<composer-json>]



maybe I can have a look into this later on, let me know if I can provide more useful data :)

@Ocramius
Copy link
Collaborator

@SpacePossum I think we'd need to know the offending file here: was hoping to see such information in the trace :-\

@SpacePossum
Copy link
Contributor Author

I pinned it down to anonymous class, for example;

namespace MyProject\CLI\Commands;

abstract class AbstractCommand extends Command
{
    public function execute(InputInterface $input, OutputInterface $output)
    {
//        $ended = new class() {
//            public $controlledEnd = false;
//        };

         // ...
    }

I'll try to come up with utest and fix PR when I find the time :)

@Ocramius
Copy link
Collaborator

Aha, that's a nasty one indeed :-)

Thanks for pinning it down - wouldn't be able to do so otherwise.

I guess it's something around

public function testBasicLocate()
{
$roots = [
[new Class_('MyClassA'), new Class_('MyClassB')],
[new Class_('MyClassC')],
];
$symbols = $this->locate([$roots]);
$this->assertContains('MyClassA', $symbols);
$this->assertContains('MyClassB', $symbols);
$this->assertContains('MyClassC', $symbols);
}

@SpacePossum SpacePossum changed the title Phar 0.1.4 - exception when running DefinedSymbolCollector - Breaks on anonymous classes Jun 30, 2017
@SpacePossum
Copy link
Contributor Author

thanks for the pointer @Ocramius , is a good help 👍

@weirdan
Copy link
Contributor

weirdan commented Jul 18, 2017

Would love to see this released.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants