From 3a18487fa1862e90bbfcc0177e5ad96e4ca8113e Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sat, 8 Aug 2026 08:21:25 +0300 Subject: [PATCH 1/2] Add Composer Dependency Analyser --- ...ecker.yml => composer-dependency-analyser.yml} | 12 +++++------- composer-dependency-analyser.php | 15 +++++++++++++++ composer-require-checker.json | 13 ------------- composer.json | 2 ++ docs/internals.md | 6 +++--- 5 files changed, 25 insertions(+), 23 deletions(-) rename .github/workflows/{composer-require-checker.yml => composer-dependency-analyser.yml} (57%) create mode 100644 composer-dependency-analyser.php delete mode 100644 composer-require-checker.json diff --git a/.github/workflows/composer-require-checker.yml b/.github/workflows/composer-dependency-analyser.yml similarity index 57% rename from .github/workflows/composer-require-checker.yml rename to .github/workflows/composer-dependency-analyser.yml index d4c3069..beb599f 100644 --- a/.github/workflows/composer-require-checker.yml +++ b/.github/workflows/composer-dependency-analyser.yml @@ -1,4 +1,4 @@ -name: Composer require checker +name: composer dependency analyser on: pull_request: @@ -6,9 +6,9 @@ on: - 'config/**' - 'src/**' - 'tests/**' + - '.github/workflows/composer-dependency-analyser.yml' - 'composer.json' - - 'composer-require-checker.json' - - '.github/workflows/composer-require-checker.yml' + - 'composer-dependency-analyser.php' push: branches: ['master'] paths: *paths @@ -21,10 +21,8 @@ concurrency: cancel-in-progress: true jobs: - composer-require-checker: - uses: yiisoft/actions/.github/workflows/composer-require-checker.yml@master + composer-dependency-analyser: + uses: yiisoft/actions/.github/workflows/composer-dependency-analyser.yml@master with: - os: >- - ['ubuntu-latest'] php: >- ['8.0', '8.1', '8.2', '8.3', '8.4', '8.5'] diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php new file mode 100644 index 0000000..afac312 --- /dev/null +++ b/composer-dependency-analyser.php @@ -0,0 +1,15 @@ +disableComposerAutoloadPathScan() + ->setFileExtensions(['php']) + ->addPathToScan(__DIR__ . '/config', isDev: false) + ->addPathToScan(__DIR__ . '/src', isDev: false) + ->addPathToScan(__DIR__ . '/tests', isDev: true) + ->ignoreErrorsOnExtension('ext-session', [ErrorType::SHADOW_DEPENDENCY]) + ->ignoreErrorsOnPackages(['psr/http-message-implementation'], [ErrorType::UNUSED_DEPENDENCY]); diff --git a/composer-require-checker.json b/composer-require-checker.json deleted file mode 100644 index 112faf5..0000000 --- a/composer-require-checker.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "php-core-extensions": [ - "Core", - "date", - "json", - "pcre", - "Phar", - "Reflection", - "SPL", - "standard", - "session" - ] -} diff --git a/composer.json b/composer.json index 41f3173..3ab1e57 100644 --- a/composer.json +++ b/composer.json @@ -43,6 +43,7 @@ "phpunit/phpunit": "^9.6.22", "rector/rector": "^2.0.10", "roave/infection-static-analysis-plugin": "^1.25", + "shipmonk/composer-dependency-analyser": "^1.8", "spatie/phpunit-watcher": "^1.23.6", "vimeo/psalm": "^4.30 || ^5.6 || ^6.8.8", "yiisoft/code-style": "^1.0", @@ -85,6 +86,7 @@ }, "scripts": { "cs-fix": "php-cs-fixer fix", + "dependency-analyser": "composer-dependency-analyser", "rector": "rector", "test": "phpunit --testdox --no-interaction", "test-watch": "phpunit-watcher watch" diff --git a/docs/internals.md b/docs/internals.md index 087a514..b77907c 100644 --- a/docs/internals.md +++ b/docs/internals.md @@ -36,9 +36,9 @@ use either newest or any specific version of PHP: ## Dependencies -This package uses [composer-require-checker](https://github.com/maglnet/ComposerRequireChecker) to check if -all dependencies are correctly defined in `composer.json`. To run the checker, execute the following command: +Use [Composer Dependency Analyser](https://github.com/shipmonk-rnd/composer-dependency-analyser) to detect unknown, +shadow, and unused [Composer](https://getcomposer.org) dependencies: ```shell -./vendor/bin/composer-require-checker +./vendor/bin/composer-dependency-analyser ``` From 81baa39b723b26e6ab620e69f60577b30e2f1db0 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 9 Aug 2026 19:28:55 +0300 Subject: [PATCH 2/2] fix --- composer-dependency-analyser.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php index afac312..4f94dcb 100644 --- a/composer-dependency-analyser.php +++ b/composer-dependency-analyser.php @@ -5,7 +5,7 @@ use ShipMonk\ComposerDependencyAnalyser\Config\Configuration; use ShipMonk\ComposerDependencyAnalyser\Config\ErrorType; -return (new Configuration()) +$config = (new Configuration()) ->disableComposerAutoloadPathScan() ->setFileExtensions(['php']) ->addPathToScan(__DIR__ . '/config', isDev: false) @@ -13,3 +13,12 @@ ->addPathToScan(__DIR__ . '/tests', isDev: true) ->ignoreErrorsOnExtension('ext-session', [ErrorType::SHADOW_DEPENDENCY]) ->ignoreErrorsOnPackages(['psr/http-message-implementation'], [ErrorType::UNUSED_DEPENDENCY]); + +// The `ReturnTypeWillChange` attribute used in tests is native since PHP 8.1 and is polyfilled by +// symfony/polyfill-php81 (pulled in transitively) on PHP 8.0, so it only shows up as a shadow +// dependency when running under PHP 8.0. +if (PHP_VERSION_ID < 80100) { + $config->ignoreErrorsOnPackages(['symfony/polyfill-php81'], [ErrorType::SHADOW_DEPENDENCY]); +} + +return $config;