diff --git a/.gitattributes b/.gitattributes
index 20bba50a..8dd7881f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -11,3 +11,4 @@
/.laminas-ci.json export-ignore
/composer.lock export-ignore
/renovate.json export-ignore
+/composer-dependency-analyser.php export-ignore
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 26c58025..445804db 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -6,6 +6,22 @@ on:
branches:
tags:
+env:
+ default_php: 8.2
+
jobs:
ci:
uses: laminas/workflow-continuous-integration/.github/workflows/continuous-integration.yml@1.x
+
+ dep-analyser:
+ runs-on: ubuntu-latest
+ name: Run Dependency analysis
+ steps:
+ - uses: actions/checkout@v4.2.2
+ - uses: shivammathur/setup-php@2.34.1
+ with:
+ php-version: ${{ env.default_php }}
+ extensions: swoole
+ tools: composer
+ - uses: ramsey/composer-install@v3
+ - run: composer dep-analysis
\ No newline at end of file
diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php
new file mode 100644
index 00000000..216f3fee
--- /dev/null
+++ b/composer-dependency-analyser.php
@@ -0,0 +1,14 @@
+ignoreUnknownClasses([Override::class])
+ ->ignoreUnknownFunctions(["inotify_add_watch", "inotify_init", "inotify_read"])
+ //meta-package with no code; only declares requirement for PSR-7 implementation
+ ->ignoreErrorsOnPackage('psr/http-message-implementation', [ErrorType::UNUSED_DEPENDENCY]);
diff --git a/composer.json b/composer.json
index cc8baa19..762d039a 100644
--- a/composer.json
+++ b/composer.json
@@ -39,25 +39,26 @@
"ext-swoole": "^6.0",
"ext-zlib": "*",
"dflydev/fig-cookies": "^2.0.1 || ^3.0",
- "laminas/laminas-cli": "^1.8",
+ "filp/whoops": "^2.18",
"laminas/laminas-diactoros": "^2.25.2 || ^3.0",
"laminas/laminas-httphandlerrunner": "^2.5",
"mezzio/mezzio": "^3.15",
"psr/container": "^1.1.2 || ^2.0.2",
"psr/event-dispatcher": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
- "psr/http-message-implementation": "^1.0 || ^2.0",
+ "psr/http-message-implementation": "^1.1 || ^2.0",
"psr/http-server-handler": "^1.0.2",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"symfony/console": "^5.3 || ^6.0.19 || ^7.0",
"webmozart/assert": "^1.11"
},
"require-dev": {
- "filp/whoops": "^2.15.2",
"laminas/laminas-coding-standard": "~3.1.0",
"laminas/laminas-servicemanager": "^4.0",
+ "laminas/laminas-stdlib": "^3.20",
"phpunit/phpunit": "^10.5",
"psalm/plugin-phpunit": "^0.19.5",
+ "shipmonk/composer-dependency-analyser": "^1.8",
"swoole/ide-helper": "^6.0",
"vimeo/psalm": "^6.13"
},
@@ -77,10 +78,12 @@
"scripts": {
"check": [
"@cs-check",
- "@test"
+ "@test",
+ "@dep-analysis"
],
"cs-check": "phpcs",
"cs-fix": "phpcbf",
+ "dep-analysis": "composer-dependency-analyser --disable-ext-analysis",
"static-analysis": "psalm --shepherd --stats",
"test": "phpunit --colors=always",
"test-coverage": "phpunit --colors=always --coverage-clover clover.xml"
diff --git a/composer.lock b/composer.lock
index 2ae551a9..864b6210 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "efef9d23d401b4f677db2fe64c1cbb36",
+ "content-hash": "fa2ca64dc8f0635be25c8102a2be0eab",
"packages": [
{
"name": "dflydev/fig-cookies",
@@ -125,91 +125,92 @@
"time": "2020-11-24T22:02:12+00:00"
},
{
- "name": "laminas/laminas-cli",
- "version": "1.11.0",
+ "name": "filp/whoops",
+ "version": "2.18.4",
"source": {
"type": "git",
- "url": "https://github.com/laminas/laminas-cli.git",
- "reference": "159b48f896fb2502cb6618a95307b56a0f23e592"
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-cli/zipball/159b48f896fb2502cb6618a95307b56a0f23e592",
- "reference": "159b48f896fb2502cb6618a95307b56a0f23e592",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
"shasum": ""
},
"require": {
- "composer-runtime-api": "^2.0.0",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
- "psr/container": "^1.0 || ^2.0",
- "symfony/console": "^6.0 || ^7.0",
- "symfony/event-dispatcher": "^6.0 || ^7.0",
- "webmozart/assert": "^1.10"
- },
- "conflict": {
- "amphp/amp": "<2.6.4"
+ "php": "^7.1 || ^8.0",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"require-dev": {
- "laminas/laminas-coding-standard": "^3.0.1",
- "laminas/laminas-mvc": "^3.8.0",
- "laminas/laminas-servicemanager": "^3.23.0",
- "mikey179/vfsstream": "2.0.x-dev",
- "phpunit/phpunit": "^10.5.38",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.26.1"
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
+ "symfony/var-dumper": "^4.0 || ^5.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
},
- "bin": [
- "bin/laminas"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Laminas\\Cli\\": "src/"
+ "Whoops\\": "src/Whoops/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
+ }
],
- "description": "Command-line interface for Laminas projects",
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
"keywords": [
- "cli",
- "command",
- "console",
- "laminas"
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
],
"support": {
- "chat": "https://laminas.dev/chat",
- "docs": "https://docs.laminas.dev/laminas-cli/",
- "forum": "https://discourse.laminas.dev",
- "issues": "https://github.com/mezzio/laminas-cli/issues",
- "rss": "https://github.com/mezzio/laminas-cli/releases.atom",
- "source": "https://github.com/mezzio/laminas-cli"
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.18.4"
},
"funding": [
{
- "url": "https://funding.communitybridge.org/projects/laminas-project",
- "type": "community_bridge"
+ "url": "https://github.com/denis-sokolov",
+ "type": "github"
}
],
- "time": "2024-11-22T12:39:15+00:00"
+ "time": "2025-08-08T12:00:00+00:00"
},
{
"name": "laminas/laminas-diactoros",
- "version": "3.6.0",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f"
+ "reference": "60c182916b2749480895601649563970f3f12ec4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/b068eac123f21c0e592de41deeb7403b88e0a89f",
- "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4",
+ "reference": "60c182916b2749480895601649563970f3f12ec4",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"psr/http-factory": "^1.1",
"psr/http-message": "^1.1 || ^2.0"
},
@@ -226,11 +227,11 @@
"ext-gd": "*",
"ext-libxml": "*",
"http-interop/http-factory-tests": "^2.2.0",
- "laminas/laminas-coding-standard": "~3.0.0",
+ "laminas/laminas-coding-standard": "~3.1.0",
"php-http/psr7-integration-tests": "^1.4.0",
"phpunit/phpunit": "^10.5.36",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.26.1"
+ "psalm/plugin-phpunit": "^0.19.5",
+ "vimeo/psalm": "^6.13"
},
"type": "library",
"extra": {
@@ -280,7 +281,7 @@
"type": "community_bridge"
}
],
- "time": "2025-05-05T16:03:34+00:00"
+ "time": "2025-10-12T15:31:36+00:00"
},
{
"name": "laminas/laminas-escaper",
@@ -597,21 +598,21 @@
},
{
"name": "mezzio/mezzio-router",
- "version": "3.18.0",
+ "version": "3.19.0",
"source": {
"type": "git",
"url": "https://github.com/mezzio/mezzio-router.git",
- "reference": "75e9a3e636ee69f3a51006772cf29c00cb5da675"
+ "reference": "3df4363e70611ddf096db95c62df6aa98817872c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mezzio/mezzio-router/zipball/75e9a3e636ee69f3a51006772cf29c00cb5da675",
- "reference": "75e9a3e636ee69f3a51006772cf29c00cb5da675",
+ "url": "https://api.github.com/repos/mezzio/mezzio-router/zipball/3df4363e70611ddf096db95c62df6aa98817872c",
+ "reference": "3df4363e70611ddf096db95c62df6aa98817872c",
"shasum": ""
},
"require": {
"fig/http-message-util": "^1.1.5",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"psr/container": "^1.1.2 || ^2.0",
"psr/http-factory": "^1.0.2",
"psr/http-message": "^1.0.1 || ^2.0.0",
@@ -623,13 +624,13 @@
"zendframework/zend-expressive-router": "*"
},
"require-dev": {
- "laminas/laminas-coding-standard": "~2.5.0",
- "laminas/laminas-diactoros": "^3.4.0",
- "laminas/laminas-servicemanager": "^4.2.0",
- "laminas/laminas-stratigility": "^4.0.2",
- "phpunit/phpunit": "^10.5.36",
+ "laminas/laminas-coding-standard": "~3.1.0",
+ "laminas/laminas-diactoros": "^3.6.0",
+ "laminas/laminas-servicemanager": "^4.4.0",
+ "laminas/laminas-stratigility": "^4.2.0",
+ "phpunit/phpunit": "^11.5.42",
"psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.26.1"
+ "vimeo/psalm": "^6.13.1"
},
"suggest": {
"mezzio/mezzio-aurarouter": "^3.0 to use the Aura.Router routing adapter",
@@ -675,33 +676,33 @@
"type": "community_bridge"
}
],
- "time": "2024-10-16T21:18:01+00:00"
+ "time": "2025-10-11T08:41:44+00:00"
},
{
"name": "mezzio/mezzio-template",
- "version": "2.12.0",
+ "version": "2.13.0",
"source": {
"type": "git",
"url": "https://github.com/mezzio/mezzio-template.git",
- "reference": "6a3c0211b8e4d403fefce39b65f7a7cd704635fd"
+ "reference": "ad72bb31036d0639a5c5a502af234217faf6932f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mezzio/mezzio-template/zipball/6a3c0211b8e4d403fefce39b65f7a7cd704635fd",
- "reference": "6a3c0211b8e4d403fefce39b65f7a7cd704635fd",
+ "url": "https://api.github.com/repos/mezzio/mezzio-template/zipball/ad72bb31036d0639a5c5a502af234217faf6932f",
+ "reference": "ad72bb31036d0639a5c5a502af234217faf6932f",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"zendframework/zend-expressive-template": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~3.1.0",
- "phpunit/phpunit": "^10.5.45",
+ "phpunit/phpunit": "^11.5.42",
"psalm/plugin-phpunit": "^0.19.5",
- "vimeo/psalm": "^6.10.0"
+ "vimeo/psalm": "^6.13.1"
},
"suggest": {
"mezzio/mezzio-laminasviewrenderer": "^2.0 to use the laminas-view PhpRenderer template renderer",
@@ -739,7 +740,7 @@
"type": "community_bridge"
}
],
- "time": "2025-09-30T08:42:10+00:00"
+ "time": "2025-10-11T08:45:28+00:00"
},
{
"name": "psr/container",
@@ -1280,166 +1281,6 @@
],
"time": "2024-09-25T14:21:43+00:00"
},
- {
- "name": "symfony/event-dispatcher",
- "version": "v7.3.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191",
- "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2",
- "symfony/event-dispatcher-contracts": "^2.5|^3"
- },
- "conflict": {
- "symfony/dependency-injection": "<6.4",
- "symfony/service-contracts": "<2.5"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0|3.0"
- },
- "require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/error-handler": "^6.4|^7.0",
- "symfony/expression-language": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^6.4|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-13T11:49:31+00:00"
- },
- {
- "name": "symfony/event-dispatcher-contracts",
- "version": "v3.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "psr/event-dispatcher": "^1"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.6-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\EventDispatcher\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to dispatching event",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:21:43+00:00"
- },
{
"name": "symfony/polyfill-ctype",
"version": "v1.33.0",
@@ -3481,77 +3322,6 @@
],
"time": "2025-08-14T07:29:31+00:00"
},
- {
- "name": "filp/whoops",
- "version": "2.18.4",
- "source": {
- "type": "git",
- "url": "https://github.com/filp/whoops.git",
- "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
- "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0",
- "psr/log": "^1.0.1 || ^2.0 || ^3.0"
- },
- "require-dev": {
- "mockery/mockery": "^1.0",
- "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
- "symfony/var-dumper": "^4.0 || ^5.0"
- },
- "suggest": {
- "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
- "whoops/soap": "Formats errors as SOAP responses"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.7-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Whoops\\": "src/Whoops/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Filipe Dobreira",
- "homepage": "https://github.com/filp",
- "role": "Developer"
- }
- ],
- "description": "php error handling for cool kids",
- "homepage": "https://filp.github.io/whoops/",
- "keywords": [
- "error",
- "exception",
- "handling",
- "library",
- "throwable",
- "whoops"
- ],
- "support": {
- "issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.18.4"
- },
- "funding": [
- {
- "url": "https://github.com/denis-sokolov",
- "type": "github"
- }
- ],
- "time": "2025-08-08T12:00:00+00:00"
- },
{
"name": "kelunik/certificate",
"version": "v1.1.3",
@@ -3750,30 +3520,30 @@
},
{
"name": "laminas/laminas-stdlib",
- "version": "3.20.0",
+ "version": "3.21.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-stdlib.git",
- "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4"
+ "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/8974a1213be42c3e2f70b2c27b17f910291ab2f4",
- "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4",
+ "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/b1c81514cfe158aadf724c42b34d3d0a8164c096",
+ "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"zendframework/zend-stdlib": "*"
},
"require-dev": {
- "laminas/laminas-coding-standard": "^3.0",
- "phpbench/phpbench": "^1.3.1",
- "phpunit/phpunit": "^10.5.38",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.26.1"
+ "laminas/laminas-coding-standard": "^3.1.0",
+ "phpbench/phpbench": "^1.4.1",
+ "phpunit/phpunit": "^11.5.42",
+ "psalm/plugin-phpunit": "^0.19.5",
+ "vimeo/psalm": "^6.13.1"
},
"type": "library",
"autoload": {
@@ -3805,7 +3575,7 @@
"type": "community_bridge"
}
],
- "time": "2024-10-29T13:46:07+00:00"
+ "time": "2025-10-11T18:13:12+00:00"
},
{
"name": "league/uri",
@@ -6003,6 +5773,72 @@
],
"time": "2023-02-07T11:34:05+00:00"
},
+ {
+ "name": "shipmonk/composer-dependency-analyser",
+ "version": "1.8.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/shipmonk-rnd/composer-dependency-analyser.git",
+ "reference": "ca6b2725cd4854d97c1ce08e6954a74fbdd25372"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/shipmonk-rnd/composer-dependency-analyser/zipball/ca6b2725cd4854d97c1ce08e6954a74fbdd25372",
+ "reference": "ca6b2725cd4854d97c1ce08e6954a74fbdd25372",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "editorconfig-checker/editorconfig-checker": "^10.6.0",
+ "ergebnis/composer-normalize": "^2.19.0",
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "phpcompatibility/php-compatibility": "^9.3.5",
+ "phpstan/phpstan": "^1.12.3",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.0",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "shipmonk/name-collision-detector": "^2.1.1",
+ "slevomat/coding-standard": "^8.15.0"
+ },
+ "bin": [
+ "bin/composer-dependency-analyser"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ShipMonk\\ComposerDependencyAnalyser\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Fast detection of composer dependency issues (dead dependencies, shadow dependencies, misplaced dependencies)",
+ "keywords": [
+ "analyser",
+ "composer",
+ "composer dependency",
+ "dead code",
+ "dead dependency",
+ "detector",
+ "dev",
+ "misplaced dependency",
+ "shadow dependency",
+ "static analysis",
+ "unused code",
+ "unused dependency"
+ ],
+ "support": {
+ "issues": "https://github.com/shipmonk-rnd/composer-dependency-analyser/issues",
+ "source": "https://github.com/shipmonk-rnd/composer-dependency-analyser/tree/1.8.3"
+ },
+ "time": "2025-02-10T13:31:57+00:00"
+ },
{
"name": "slevomat/coding-standard",
"version": "8.22.1",
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
index 5f98c048..986a2630 100644
--- a/phpcs.xml.dist
+++ b/phpcs.xml.dist
@@ -14,6 +14,7 @@
src
test
+ composer-dependency-analyser.php