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

Call to undefined method PhpParser\Node\Expr\Closure::getParts() in DefinedSymbolCollector #122

Closed
Wirone opened this issue Dec 9, 2023 · 5 comments

Comments

@Wirone
Copy link

Wirone commented Dec 9, 2023

Describe the bug

I wanted to handle composer/xdebug-handler in PHP-CS-Fixer with custom config:

<?php

declare(strict_types=1);

use ComposerUnused\ComposerUnused\Configuration\Configuration;

return static function (Configuration $config): Configuration {
    $config
        ->setAdditionalFilesFor('composer/xdebug-handler', [
            __DIR__.'/../php-cs-fixer',
        ])
    ;

    return $config;
};

but it fails on php-cs-fixer entrypoint script:

Fatal error: Uncaught Error: Call to undefined method PhpParser\Node\Expr\Closure::getParts() in dev-tools/vendor/composer-unused/symbol-parser/src/Parser/PHP/DefinedSymbolCollector.php:65

Stack trace:
#0 dev-tools/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): ComposerUnused\SymbolParser\Parser\PHP\DefinedSymbolCollector->enterNode(Object(PhpParser\Node\Stmt\Expression))
#1 dev-tools/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray(Array)
#2 dev-tools/vendor/composer-unused/symbol-parser/src/Parser/PHP/SymbolNameParser.php(55): PhpParser\NodeTraverser->traverse(Array)
#3 dev-tools/vendor/composer-unused/symbol-parser/src/Symbol/Provider/FileSymbolProvider.php(44): ComposerUnused\SymbolParser\Parser\PHP\SymbolNameParser->parseSymbolNames('#!/usr/bin/env ...')
#4 dev-tools/vendor/composer-unused/symbol-parser/src/Symbol/Loader/FileSymbolLoader.php(70): ComposerUnused\SymbolParser\Symbol\Provider\FileSymbolProvider->provide()
#5 dev-tools/vendor/composer-unused/symbol-parser/src/Symbol/Loader/CompositeSymbolLoader.php(29): ComposerUnused\SymbolParser\Symbol\Loader\FileSymbolLoader->load(Object(ComposerUnused\ComposerUnused\Composer\Package))
#6 [internal function]: ComposerUnused\SymbolParser\Symbol\Loader\CompositeSymbolLoader->load(Object(ComposerUnused\ComposerUnused\Composer\Package))
#7 dev-tools/vendor/composer-unused/symbol-parser/src/Symbol/SymbolList.php(23): iterator_to_array(Object(Generator))
#8 dev-tools/vendor/icanhazstring/composer-unused/src/Command/Handler/CollectRequiredDependenciesCommandHandler.php(60): ComposerUnused\SymbolParser\Symbol\SymbolList->addAll(Object(Generator))
#9 dev-tools/vendor/icanhazstring/composer-unused/src/Console/Command/UnusedCommand.php(182): ComposerUnused\ComposerUnused\Command\Handler\CollectRequiredDependenciesCommandHandler->collect(Object(ComposerUnused\ComposerUnused\Command\LoadRequiredDependenciesCommand))
#10 dev-tools/vendor/symfony/console/Command/Command.php(326): ComposerUnused\ComposerUnused\Console\Command\UnusedCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 dev-tools/vendor/symfony/console/Application.php(1078): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 dev-tools/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand(Object(ComposerUnused\ComposerUnused\Console\Command\UnusedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 dev-tools/vendor/symfony/console/Application.php(175): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 dev-tools/vendor/icanhazstring/composer-unused/bin/composer-unused(66): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput))
#15 dev-tools/vendor/icanhazstring/composer-unused/bin/composer-unused(67): {closure}(Array)
#16 dev-tools/vendor/bin/composer-unused(119): include('/Volumes/Projec...')
#17 {main}
  thrown in dev-tools/vendor/composer-unused/symbol-parser/src/Parser/PHP/DefinedSymbolCollector.php on line 65

Originally posted by @Wirone in PHP-CS-Fixer/PHP-CS-Fixer#7536 (comment)

@llaville
Copy link
Contributor

Ok found origin of problem. I've just got a same issue with my new DefineStrategy contribution #137

It came from https://github.com/composer-unused/symbol-parser/blob/0.2.2/src/Parser/PHP/DefinedSymbolCollector.php#L62-L65 where we did not check that $node->expr->name is really a Node\Name.

See code from PHP-Parser

At least, I'll fix my contrib #137 (FYI: @icanhazstring)

@TomasVotruba
Copy link

TomasVotruba commented Mar 6, 2024

I have the same issue. I've tried to use both php-parser 5 and 4.18 and it still fails.
Any idea how to work around this? Thanks 👍

Edit: current workaround is to downgrade to Symfony 6.4 and symbol parser 0.2.1:

composer require "symfony/finder:^6.4"
composer require "composer-unused/symbol-parser:0.2.1"

@llaville
Copy link
Contributor

llaville commented Mar 7, 2024

@TomasVotruba All issues I've already fixed and other that are pending validation were summarized in my RFC composer-unused/composer-unused#630

llaville added a commit to llaville/symbol-parser that referenced this issue Mar 8, 2024
@llaville llaville mentioned this issue Mar 8, 2024
5 tasks
icanhazstring pushed a commit that referenced this issue Mar 8, 2024
@icanhazstring
Copy link
Member

Closed with 0.2.4

@TomasVotruba
Copy link

Thank you @icanhazstring 🥳

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

No branches or pull requests

4 participants