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

CI: Introduce composer-unused #7536

Merged
merged 6 commits into from Dec 11, 2023

Conversation

Wirone
Copy link
Member

@Wirone Wirone commented Dec 9, 2023

This tool verifies if composer.json contains dependencies that are not used in the code, so it's possible to find packages that can be removed.

@Wirone Wirone added the topic/ci Github Actions, tooling label Dec 9, 2023
@Wirone Wirone requested a review from keradus December 9, 2023 00:46
@Wirone Wirone self-assigned this Dec 9, 2023
@coveralls
Copy link

coveralls commented Dec 9, 2023

Coverage Status

coverage: 94.908%. remained the same
when pulling afbc001 on Wirone:codito/composer-unused
into 1dc9c05 on PHP-CS-Fixer:master.

@Wirone
Copy link
Member Author

Wirone commented Dec 9, 2023

I wanted to handle composer/xdebug-handler 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:

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

So in the end I just excluded this package.

CC: @icanhazstring

`XdebugHandler` is used in `php-cs-fixer` file, but it can't be processed properly by `composer-unused` (using custom config file):

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
@icanhazstring
Copy link

Nice catch. Would You be so kind to create a quick issue in https://github.com/composer-unused/symbol-parser

I will take a look 🙂

@Wirone
Copy link
Member Author

Wirone commented Dec 9, 2023

Currently AFK and 🚘, so maybe later or manage it by yourself if it's not a problem 🙂.

@icanhazstring
Copy link

Also abroad. 😅
Let's see who gets to it first 🙂

@kubawerlos kubawerlos merged commit 0e76b3c into PHP-CS-Fixer:master Dec 11, 2023
26 checks passed
@kubawerlos
Copy link
Contributor

Thank you @Wirone

@Wirone Wirone deleted the codito/composer-unused branch December 11, 2023 11:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic/ci Github Actions, tooling
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants