From b426e8294e8fbea0b3e081ac185dc432f55df135 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:36:05 +0900 Subject: [PATCH 01/20] build!: Drop PHP 8.1 support --- .github/workflows/php.yml | 8 +++---- composer.json | 4 ++-- composer.lock | 45 ++++++++++++++++++--------------------- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index d9607ae..ad7325d 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -11,10 +11,10 @@ jobs: strategy: matrix: php: - - '8.0' - '8.1' + - '8.2' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -26,7 +26,7 @@ jobs: - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-${{ hashFiles('**/composer.lock') }} @@ -44,7 +44,7 @@ jobs: run: composer run-script codecov - uses: codecov/codecov-action@v1 - if: ${{ matrix.php }} == '8.0' + if: ${{ matrix.php }} == '8.1' with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml diff --git a/composer.json b/composer.json index e1a9344..830c6ed 100644 --- a/composer.json +++ b/composer.json @@ -6,12 +6,12 @@ "authors": [ { "name": "Naoki Ikeguchi", - "email": "root@siketyan.dev" + "email": "me@s6n.jp" } ], "minimum-stability": "stable", "require": { - "php": "^8.0", + "php": "^8.1", "ext-json": "*", "guzzlehttp/guzzle": "^7.2", "mschop/pathogen": "^0.6.1", diff --git a/composer.lock b/composer.lock index 12f5110..144af13 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": "520cc59f8032f925c4084752dc3e46a3", + "content-hash": "5e7fa0e5c4025fd9ca34e89eb316d5e9", "packages": [ { "name": "guzzlehttp/guzzle", @@ -1170,12 +1170,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1417,12 +1417,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1884,12 +1884,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -2665,9 +2665,6 @@ "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" - }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", @@ -2675,12 +2672,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2923,6 +2920,7 @@ "issues": "https://github.com/PHP-CS-Fixer/diff/issues", "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" }, + "abandoned": true, "time": "2020-10-14T08:32:19+00:00" }, { @@ -3584,11 +3582,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4627,7 +4625,6 @@ "type": "github" } ], - "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { @@ -5208,7 +5205,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.0", + "php": "^8.1", "ext-json": "*" }, "platform-dev": [], From fd36137b25b464aa106c636654d46578dce387b4 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:36:29 +0900 Subject: [PATCH 02/20] build(deps): Update dependencies --- composer.lock | 842 ++++++++++++++++++++++++-------------------------- 1 file changed, 407 insertions(+), 435 deletions(-) diff --git a/composer.lock b/composer.lock index 144af13..397fe4a 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "guzzlehttp/guzzle", - "version": "7.4.5", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { @@ -32,10 +32,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -45,8 +45,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -112,7 +116,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -128,20 +132,20 @@ "type": "tidelift" } ], - "time": "2022-06-20T22:16:13+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -196,7 +200,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -212,20 +216,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.0", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "13388f00956b1503577598873fffb5ae994b5737" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", - "reference": "13388f00956b1503577598873fffb5ae994b5737", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { @@ -239,15 +243,19 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { "dev-master": "2.4-dev" } @@ -311,7 +319,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -327,7 +335,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:11+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "icecave/isolator", @@ -741,22 +749,22 @@ }, { "name": "symfony/config", - "version": "v5.3.11", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "f080af00c441f1df40cf5c269707fdebe5740557" + "reference": "9bd60843443cda9638efdca7c41eb82ed0026179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/f080af00c441f1df40cf5c269707fdebe5740557", - "reference": "f080af00c441f1df40cf5c269707fdebe5740557", + "url": "https://api.github.com/repos/symfony/config/zipball/9bd60843443cda9638efdca7c41eb82ed0026179", + "reference": "9bd60843443cda9638efdca7c41eb82ed0026179", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^4.4|^5.0|^6.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-php80": "^1.16", "symfony/polyfill-php81": "^1.22" @@ -765,11 +773,11 @@ "symfony/finder": "<4.4" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -800,7 +808,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.3.11" + "source": "https://github.com/symfony/config/tree/v5.4.19" }, "funding": [ { @@ -816,20 +824,20 @@ "type": "tidelift" } ], - "time": "2021-10-29T16:05:40+00:00" + "time": "2023-01-08T13:23:55+00:00" }, { "name": "symfony/console", - "version": "v5.4.3", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" + "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", + "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", "shasum": "" }, "require": { @@ -899,7 +907,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.3" + "source": "https://github.com/symfony/console/tree/v5.4.19" }, "funding": [ { @@ -915,27 +923,28 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.3.11", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "3793617321eb39b2e8e708f6fd61f875ec5f0ed6" + "reference": "99dae35f2b7d1bd9b800fcda4173215fc9f79ba3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3793617321eb39b2e8e708f6fd61f875ec5f0ed6", - "reference": "3793617321eb39b2e8e708f6fd61f875ec5f0ed6", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/99dae35f2b7d1bd9b800fcda4173215fc9f79ba3", + "reference": "99dae35f2b7d1bd9b800fcda4173215fc9f79ba3", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { @@ -943,16 +952,16 @@ "symfony/config": "<5.3", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" + "symfony/yaml": "<4.4.26" }, "provide": { "psr/container-implementation": "1.0", "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "^5.3", - "symfony/expression-language": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/config": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4.26|^5.0|^6.0" }, "suggest": { "symfony/config": "", @@ -987,7 +996,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.3.11" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.19" }, "funding": [ { @@ -1003,29 +1012,29 @@ "type": "tidelift" } ], - "time": "2021-11-17T12:16:12+00:00" + "time": "2023-01-23T15:37:22+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -1054,7 +1063,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" }, "funding": [ { @@ -1070,27 +1079,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0f0c4bf1840420f4aef3f32044a9dbb24682731b" + "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f0c4bf1840420f4aef3f32044a9dbb24682731b", - "reference": "0f0c4bf1840420f4aef3f32044a9dbb24682731b", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", + "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -1118,7 +1126,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.3" + "source": "https://github.com/symfony/filesystem/tree/v6.2.5" }, "funding": [ { @@ -1134,20 +1142,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -1162,7 +1170,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1200,7 +1208,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -1216,20 +1224,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -1241,7 +1249,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1281,7 +1289,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -1297,20 +1305,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -1322,7 +1330,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1365,7 +1373,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -1381,20 +1389,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -1409,7 +1417,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1448,7 +1456,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -1464,20 +1472,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { @@ -1486,7 +1494,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1527,7 +1535,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -1543,20 +1551,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -1565,7 +1573,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1610,7 +1618,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -1626,20 +1634,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -1648,7 +1656,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1689,7 +1697,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -1705,20 +1713,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v5.4.3", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "553f50487389a977eb31cf6b37faae56da00f753" + "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/553f50487389a977eb31cf6b37faae56da00f753", - "reference": "553f50487389a977eb31cf6b37faae56da00f753", + "url": "https://api.github.com/repos/symfony/process/zipball/c5ba874c9b636dbccf761e22ce750e88ec3f55e1", + "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1", "shasum": "" }, "require": { @@ -1751,7 +1759,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.3" + "source": "https://github.com/symfony/process/tree/v5.4.19" }, "funding": [ { @@ -1767,26 +1775,26 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -1834,7 +1842,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -1850,24 +1858,24 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", - "version": "v6.0.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", + "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -1879,6 +1887,7 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -1919,7 +1928,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.3" + "source": "https://github.com/symfony/string/tree/v6.2.5" }, "funding": [ { @@ -1935,32 +1944,32 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.11", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "226638aa877bc4104e619a15f27d8141cd6b4e4a" + "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/226638aa877bc4104e619a15f27d8141cd6b4e4a", - "reference": "226638aa877bc4104e619a15f27d8141cd6b4e4a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/71c05db20cb9b54d381a28255f17580e2b7e36a5", + "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -1994,7 +2003,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.11" + "source": "https://github.com/symfony/yaml/tree/v5.4.19" }, "funding": [ { @@ -2010,7 +2019,7 @@ "type": "tidelift" } ], - "time": "2021-11-20T16:42:42+00:00" + "time": "2023-01-10T18:51:14+00:00" }, { "name": "yosymfony/parser-utils", @@ -2126,30 +2135,30 @@ "packages-dev": [ { "name": "composer/pcre", - "version": "1.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.3", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2177,7 +2186,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -2193,20 +2202,20 @@ "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", - "version": "3.2.9", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { @@ -2258,7 +2267,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.9" + "source": "https://github.com/composer/semver/tree/3.3.2" }, "funding": [ { @@ -2274,24 +2283,24 @@ "type": "tidelift" } ], - "time": "2022-02-04T13:58:43+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8" + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/12f1b79476638a5615ed00ea6adbb269cec96fd8", - "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "composer/pcre": "^1", + "composer/pcre": "^1 || ^2 || ^3", "php": "^7.2.5 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, @@ -2324,7 +2333,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.1" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { @@ -2340,34 +2349,38 @@ "type": "tidelift" } ], - "time": "2022-01-04T18:29:42+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "doctrine/annotations", - "version": "1.13.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + "reference": "d02c9f3742044e17d5fa8d28d8402a2d95c33302" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/d02c9f3742044e17d5fa8d28d8402a2d95c33302", + "reference": "d02c9f3742044e17d5fa8d28d8402a2d95c33302", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", + "doctrine/lexer": "^2 || ^3", "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", + "php": "^7.2 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, "type": "library", "autoload": { @@ -2410,35 +2423,36 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" + "source": "https://github.com/doctrine/annotations/tree/2.0.0" }, - "time": "2021-08-05T19:00:23+00:00" + "time": "2022-12-19T18:17:20+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -2465,7 +2479,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -2481,35 +2495,36 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2541,7 +2556,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.2" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -2557,55 +2572,56 @@ "type": "tidelift" } ], - "time": "2022-01-12T08:27:12+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.6.0", + "version": "v3.14.3", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "1975e4453eb2726d1f50da0ce7fa91295029a4fa" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "b418036b95b4936a33fe906245d3044395935e73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1975e4453eb2726d1f50da0ce7fa91295029a4fa", - "reference": "1975e4453eb2726d1f50da0ce7fa91295029a4fa", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73", + "reference": "b418036b95b4936a33fe906245d3044395935e73", "shasum": "" }, "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0", - "doctrine/annotations": "^1.13", + "composer/semver": "^3.3", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "php-cs-fixer/diff": "^2.0", + "sebastian/diff": "^4.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.23", - "symfony/polyfill-php81": "^1.23", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", + "phpspec/prophecy": "^1.16", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^6.0", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { @@ -2637,8 +2653,8 @@ ], "description": "A tool to automatically fix PHP code style", "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.6.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3" }, "funding": [ { @@ -2646,29 +2662,33 @@ "type": "github" } ], - "time": "2022-02-07T18:02:40+00:00" + "time": "2023-01-30T00:24:29+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -2693,7 +2713,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -2701,20 +2721,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.1", + "version": "v4.15.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd" + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd", - "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", "shasum": "" }, "require": { @@ -2755,9 +2775,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" }, - "time": "2021-11-03T20:52:16+00:00" + "time": "2023-01-16T22:05:37+00:00" }, { "name": "phar-io/manifest", @@ -2821,16 +2841,16 @@ }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -2866,62 +2886,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "abandoned": true, - "time": "2020-10-14T08:32:19+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -3035,25 +3002,30 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -3079,27 +3051,27 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-10-14T12:47:21+00:00" }, { "name": "phpspec/prophecy", - "version": "1.14.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be8cac52a0827776ff9ccda8c381ac5b71aeb359", + "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" @@ -3146,9 +3118,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.16.0" }, - "time": "2021-09-10T09:02:12+00:00" + "time": "2022-11-29T15:06:56+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -3204,23 +3176,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.9", + "version": "9.2.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f301eb1453c9e7a1bc912ee8b0ea9db22c60223b" + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f301eb1453c9e7a1bc912ee8b0ea9db22c60223b", - "reference": "f301eb1453c9e7a1bc912ee8b0ea9db22c60223b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3269,7 +3241,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" }, "funding": [ { @@ -3277,20 +3249,20 @@ "type": "github" } ], - "time": "2021-11-19T15:21:02+00:00" + "time": "2023-01-26T08:26:55+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -3329,7 +3301,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -3337,7 +3309,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -3522,20 +3494,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "9.5.28", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -3546,28 +3518,23 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -3609,19 +3576,23 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2021-09-25T07:38:51+00:00" + "time": "2023-01-14T12:32:24+00:00" }, { "name": "psr/cache", @@ -3941,16 +3912,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -4003,7 +3974,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -4011,7 +3982,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -4138,16 +4109,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -4189,7 +4160,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -4197,20 +4168,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -4266,7 +4237,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -4274,20 +4245,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -4330,7 +4301,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -4338,7 +4309,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -4629,28 +4600,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -4673,7 +4644,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -4681,7 +4652,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -4738,40 +4709,38 @@ }, { "name": "symfony/event-dispatcher", - "version": "v5.4.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -4803,7 +4772,7 @@ "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/v5.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.5" }, "funding": [ { @@ -4819,24 +4788,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -4845,7 +4814,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -4882,7 +4851,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" }, "funding": [ { @@ -4898,24 +4867,27 @@ "type": "tidelift" } ], - "time": "2021-07-15T12:33:35+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/finder", - "version": "v6.0.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", - "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", + "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -4943,7 +4915,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.3" + "source": "https://github.com/symfony/finder/tree/v6.2.5" }, "funding": [ { @@ -4959,24 +4931,24 @@ "type": "tidelift" } ], - "time": "2022-01-26T17:23:29+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.0.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "51f7006670febe4cbcbae177cbffe93ff833250d" + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/51f7006670febe4cbcbae177cbffe93ff833250d", - "reference": "51f7006670febe4cbcbae177cbffe93ff833250d", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", @@ -5010,7 +4982,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.0.3" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" }, "funding": [ { @@ -5026,24 +4998,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.0.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "6835045bb9f00fa4486ea4f1bcaf623be761556f" + "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6835045bb9f00fa4486ea4f1bcaf623be761556f", - "reference": "6835045bb9f00fa4486ea4f1bcaf623be761556f", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", + "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", @@ -5072,7 +5044,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.3" + "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" }, "funding": [ { @@ -5088,7 +5060,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-01T08:36:55+00:00" }, { "name": "theseer/tokenizer", @@ -5142,21 +5114,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -5194,9 +5166,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], From 149ef1362e701f7f1053e3ee741c6f38266eaef5 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:37:34 +0900 Subject: [PATCH 03/20] build: Disable environment check of php-cs-fixer --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 830c6ed..c054240 100644 --- a/composer.json +++ b/composer.json @@ -45,8 +45,8 @@ } }, "scripts": { - "lint": "php-cs-fixer fix -v --allow-risky=yes --dry-run", - "fix": "php-cs-fixer fix -v --allow-risky=yes", + "lint": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix -v --allow-risky=yes --dry-run", + "fix": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix -v --allow-risky=yes", "coverage": "phpdbg -qrr ./vendor/bin/phpunit -c ./phpunit.xml --coverage-html ./coverage", "codecov": "phpdbg -qrr ./vendor/bin/phpunit -c ./phpunit.xml --coverage-clover ./coverage.xml", "test": "phpunit ./tests", From fc97bd0edc3ed50c1fa79d204d5e412d61f57d91 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:39:57 +0900 Subject: [PATCH 04/20] ci: Disable PHP 8.2 testing --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index ad7325d..2436965 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -12,7 +12,7 @@ jobs: matrix: php: - '8.1' - - '8.2' + # - '8.2' steps: - uses: actions/checkout@v3 From 9b5509e71f3886d5670c6da6a71c531fd2270a64 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:42:45 +0900 Subject: [PATCH 05/20] build: Stop using phpdbg for coverages --- composer.json | 4 ++-- phpunit.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index c054240..df23813 100644 --- a/composer.json +++ b/composer.json @@ -47,8 +47,8 @@ "scripts": { "lint": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix -v --allow-risky=yes --dry-run", "fix": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix -v --allow-risky=yes", - "coverage": "phpdbg -qrr ./vendor/bin/phpunit -c ./phpunit.xml --coverage-html ./coverage", - "codecov": "phpdbg -qrr ./vendor/bin/phpunit -c ./phpunit.xml --coverage-clover ./coverage.xml", + "coverage": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-html ./coverage", + "codecov": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-clover ./coverage.xml", "test": "phpunit ./tests", "tests": [ "@lint", diff --git a/phpunit.xml b/phpunit.xml index 36979e0..479301a 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,6 +1,6 @@ Date: Wed, 1 Feb 2023 12:43:47 +0900 Subject: [PATCH 06/20] ci: Re-enable PHP 8.2 testing --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 2436965..ad7325d 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -12,7 +12,7 @@ jobs: matrix: php: - '8.1' - # - '8.2' + - '8.2' steps: - uses: actions/checkout@v3 From 1bdafdb663d4278c21577ce48f1bf7829cfbc1a6 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:45:27 +0900 Subject: [PATCH 07/20] build(deps)!: Bump dependency requirements --- composer.json | 18 ++++----- composer.lock | 107 ++++++++++++++++++++++++-------------------------- 2 files changed, 61 insertions(+), 64 deletions(-) diff --git a/composer.json b/composer.json index df23813..389e0a1 100644 --- a/composer.json +++ b/composer.json @@ -13,21 +13,21 @@ "require": { "php": "^8.1", "ext-json": "*", - "guzzlehttp/guzzle": "^7.2", - "mschop/pathogen": "^0.6.1", + "guzzlehttp/guzzle": "^7.5", + "mschop/pathogen": "^0.7.1", "siketyan/yarn-lock": "^0.1.1", - "symfony/config": "^5.1", - "symfony/console": "^5.1", - "symfony/dependency-injection": "^5.1", - "symfony/process": "^5.1", - "symfony/yaml": "^5.1", + "symfony/config": "^5.4", + "symfony/console": "^5.4", + "symfony/dependency-injection": "^5.4", + "symfony/process": "^5.4", + "symfony/yaml": "^5.4", "yosymfony/toml": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.6", + "friendsofphp/php-cs-fixer": "^3.14", "phpspec/prophecy-phpunit": "^2.0", "phpunit/php-code-coverage": "^9.2", - "phpunit/phpunit": "^9.4", + "phpunit/phpunit": "^9.5", "psr/cache": "^1", "psr/log": "^1" }, diff --git a/composer.lock b/composer.lock index 397fe4a..c31154b 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": "5e7fa0e5c4025fd9ca34e89eb316d5e9", + "content-hash": "5a1509f6f76db70193aa702ea6bc01cc", "packages": [ { "name": "guzzlehttp/guzzle", @@ -338,32 +338,35 @@ "time": "2022-10-26T14:07:24+00:00" }, { - "name": "icecave/isolator", - "version": "2.3.0", + "name": "mschop/pathogen", + "version": "0.7.1", "source": { "type": "git", - "url": "https://github.com/icecave/isolator.git", - "reference": "97c51fafa39c57a8f1a31f978a48fbe6cea4a5d5" + "url": "https://github.com/mschop/pathogen.git", + "reference": "3566c3798c930f5dccad0a24d3416cac0926e334" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icecave/isolator/zipball/97c51fafa39c57a8f1a31f978a48fbe6cea4a5d5", - "reference": "97c51fafa39c57a8f1a31f978a48fbe6cea4a5d5", + "url": "https://api.github.com/repos/mschop/pathogen/zipball/3566c3798c930f5dccad0a24d3416cac0926e334", + "reference": "3566c3798c930f5dccad0a24d3416cac0926e334", "shasum": "" }, "require": { - "php": ">=5.3" + "mschop/simplified-isolator": "^0.1", + "php": ">=7.4", + "symfony/polyfill-mbstring": "*" }, "require-dev": { - "icecave/archer": "~1" - }, - "suggest": { - "eloquent/asplode": "Drop-in exception-based error handling." + "eloquent/liberator": "~3", + "ext-xdebug": "*", + "infection/infection": "^0.26.5", + "phake/phake": "^4.2", + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { "psr-4": { - "Icecave\\Isolator\\": "src" + "Eloquent\\Pathogen\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -372,54 +375,49 @@ ], "authors": [ { - "name": "James Harris", - "email": "james.harris@icecave.com.au", - "homepage": "https://github.com/jmalloc" + "name": "Martin Schophaus", + "email": "mschopdev@gmail.com", + "homepage": "https://mschop.de" } ], - "description": "Dependency injection for global functions.", - "homepage": "https://github.com/IcecaveStudios/isolator", + "description": "General-purpose path library for PHP.", + "homepage": "https://github.com/mschop/pathogen", "keywords": [ - "fake", - "mock", - "phake", - "phpunit", - "test", - "unit" + "file", + "filesystem", + "manipulation", + "path" ], "support": { - "issues": "https://github.com/icecave/isolator/issues", - "source": "https://github.com/icecave/isolator/tree/2.3.0" + "issues": "https://github.com/mschop/pathogen/issues", + "source": "https://github.com/mschop/pathogen/tree/0.7.1" }, - "time": "2014-08-12T03:16:11+00:00" + "time": "2022-02-21T19:04:17+00:00" }, { - "name": "mschop/pathogen", - "version": "0.6.1", + "name": "mschop/simplified-isolator", + "version": "v0.1.0", "source": { "type": "git", - "url": "https://github.com/mschop/pathogen.git", - "reference": "baa1376e1de56ad462cd67794de808d690904fb8" + "url": "https://github.com/mschop/simplified-isolator.git", + "reference": "907fe6f2ca3c7bb349fe54b89235da149b129d79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mschop/pathogen/zipball/baa1376e1de56ad462cd67794de808d690904fb8", - "reference": "baa1376e1de56ad462cd67794de808d690904fb8", + "url": "https://api.github.com/repos/mschop/simplified-isolator/zipball/907fe6f2ca3c7bb349fe54b89235da149b129d79", + "reference": "907fe6f2ca3c7bb349fe54b89235da149b129d79", "shasum": "" }, "require": { - "ext-mbstring": "*", - "icecave/isolator": "~2", - "php": ">=5.3" + "php": ">=7.4" }, "require-dev": { - "eloquent/liberator": "~2", - "icecave/archer": "~1" + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { "psr-4": { - "Eloquent\\Pathogen\\": "src" + "SimplifiedIsolator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -428,28 +426,27 @@ ], "authors": [ { - "name": "Erin Millard", - "email": "ezzatron@gmail.com", - "homepage": "http://ezzatron.com/" - }, - { - "name": "Darian Brown", - "email": "darianbr@gmail.com", - "homepage": "http://www.darian-brown.com/" + "name": "Martin Schophaus", + "email": "mschopdev@gmail.com", + "homepage": "https://mschop.de" } ], - "description": "General-purpose path library for PHP.", - "homepage": "https://github.com/eloquent/pathogen", + "description": "Simplified isolator without dynamic code generation as replacement for icecave/isolator.", + "homepage": "https://github.com/mschop/simplified-isolator", "keywords": [ - "file", - "filesystem", - "manipulation", - "path" + "Double", + "fake", + "mock", + "phpunit", + "stub", + "test", + "unit" ], "support": { - "source": "https://github.com/mschop/pathogen/tree/0.6.1" + "issues": "https://github.com/mschop/simplified-isolator/issues", + "source": "https://github.com/mschop/simplified-isolator/tree/v0.1.0" }, - "time": "2014-10-22T01:04:35+00:00" + "time": "2022-02-20T11:47:35+00:00" }, { "name": "psr/container", From da60d5c5d3a3983b7f3ca1ee9876a2a4e38ae65b Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:50:34 +0900 Subject: [PATCH 08/20] test: Fix mock behaviour --- tests/UseCase/ScanUseCaseTest.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/UseCase/ScanUseCaseTest.php b/tests/UseCase/ScanUseCaseTest.php index a23fcd6..2933a4b 100644 --- a/tests/UseCase/ScanUseCaseTest.php +++ b/tests/UseCase/ScanUseCaseTest.php @@ -44,11 +44,18 @@ protected function setUp(): void public function test(): void { + $makeRelativePath = function (string $path): RelativePathInterface { + $prophecy = $this->prophesize(RelativePathInterface::class); + $prophecy->string()->willReturn($path); + + return $prophecy->reveal(); + }; + $base = 'main'; $head = 'feature'; $files = [ - $this->prophesize(RelativePathInterface::class)->reveal(), - $this->prophesize(RelativePathInterface::class)->reveal(), + $makeRelativePath('./file1.php'), + $makeRelativePath('./file2.php'), ]; $file0Path = $this->prophesize(PathInterface::class); From cca7251419c0b65ebd1aa74213879dda34731c5c Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 12:52:01 +0900 Subject: [PATCH 09/20] build(deps)!: Upgrade Symfony to v6.2 --- composer.json | 10 +- composer.lock | 669 ++++++++++++++++++------------------ src/Command/ScanCommand.php | 6 +- 3 files changed, 339 insertions(+), 346 deletions(-) diff --git a/composer.json b/composer.json index 389e0a1..947a0d1 100644 --- a/composer.json +++ b/composer.json @@ -16,11 +16,11 @@ "guzzlehttp/guzzle": "^7.5", "mschop/pathogen": "^0.7.1", "siketyan/yarn-lock": "^0.1.1", - "symfony/config": "^5.4", - "symfony/console": "^5.4", - "symfony/dependency-injection": "^5.4", - "symfony/process": "^5.4", - "symfony/yaml": "^5.4", + "symfony/config": "^6.2", + "symfony/console": "^6.2", + "symfony/dependency-injection": "^6.2", + "symfony/process": "^6.2", + "symfony/yaml": "^6.2", "yosymfony/toml": "^1.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index c31154b..95ccd2b 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": "5a1509f6f76db70193aa702ea6bc01cc", + "content-hash": "49c28579d0bb69e14ece22c5ea61a391", "packages": [ { "name": "guzzlehttp/guzzle", @@ -450,22 +450,27 @@ }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -492,9 +497,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/http-client", @@ -746,35 +751,33 @@ }, { "name": "symfony/config", - "version": "v5.4.19", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9bd60843443cda9638efdca7c41eb82ed0026179" + "reference": "f31b3c78a3650157188a240695e688d6a182aa91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9bd60843443cda9638efdca7c41eb82ed0026179", - "reference": "9bd60843443cda9638efdca7c41eb82ed0026179", + "url": "https://api.github.com/repos/symfony/config/zipball/f31b3c78a3650157188a240695e688d6a182aa91", + "reference": "f31b3c78a3650157188a240695e688d6a182aa91", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<4.4" + "symfony/finder": "<5.4" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -805,7 +808,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.19" + "source": "https://github.com/symfony/config/tree/v6.2.5" }, "funding": [ { @@ -821,50 +824,47 @@ "type": "tidelift" } ], - "time": "2023-01-08T13:23:55+00:00" + "time": "2023-01-09T04:38:22+00:00" }, { "name": "symfony/console", - "version": "v5.4.19", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" + "reference": "3e294254f2191762c1d137aed4b94e966965e985" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", + "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", + "reference": "3e294254f2191762c1d137aed4b94e966965e985", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -904,7 +904,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.19" + "source": "https://github.com/symfony/console/tree/v6.2.5" }, "funding": [ { @@ -920,51 +920,49 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.19", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "99dae35f2b7d1bd9b800fcda4173215fc9f79ba3" + "reference": "6abd5658d0f7fea98f882a911bfdb8795d189509" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/99dae35f2b7d1bd9b800fcda4173215fc9f79ba3", - "reference": "99dae35f2b7d1bd9b800fcda4173215fc9f79ba3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6abd5658d0f7fea98f882a911bfdb8795d189509", + "reference": "6abd5658d0f7fea98f882a911bfdb8795d189509", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1.1", + "php": ">=8.1", + "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/service-contracts": "^1.1.6|^2" + "symfony/service-contracts": "^1.1.6|^2.0|^3.0", + "symfony/var-exporter": "^6.2" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4.26" + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<6.2", + "symfony/yaml": "<5.4" }, "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4.26|^5.0|^6.0" + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "", "symfony/expression-language": "For using expressions in service container configuration", "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, "type": "library", @@ -993,7 +991,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.19" + "source": "https://github.com/symfony/dependency-injection/tree/v6.2.5" }, "funding": [ { @@ -1009,7 +1007,7 @@ "type": "tidelift" } ], - "time": "2023-01-23T15:37:22+00:00" + "time": "2023-01-23T15:50:11+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1471,264 +1469,22 @@ ], "time": "2022-11-03T14:55:06+00:00" }, - { - "name": "symfony/polyfill-php73", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "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": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.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": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.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": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "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": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.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": "2022-11-03T14:55:06+00:00" - }, { "name": "symfony/process", - "version": "v5.4.19", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1" + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ba874c9b636dbccf761e22ce750e88ec3f55e1", - "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1", + "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -1756,7 +1512,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.19" + "source": "https://github.com/symfony/process/tree/v6.2.5" }, "funding": [ { @@ -1772,26 +1528,25 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:32:19+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -1802,7 +1557,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -1812,7 +1567,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1839,7 +1597,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" }, "funding": [ { @@ -1855,7 +1613,7 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/string", @@ -1943,30 +1701,103 @@ ], "time": "2023-01-01T08:38:09+00:00" }, + { + "name": "symfony/var-exporter", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "108f9c6451eea8e04a7fb83bbacb5b812ef30e35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/108f9c6451eea8e04a7fb83bbacb5b812ef30e35", + "reference": "108f9c6451eea8e04a7fb83bbacb5b812ef30e35", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.2.5" + }, + "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": "2023-01-13T08:35:57+00:00" + }, { "name": "symfony/yaml", - "version": "v5.4.19", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5" + "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/71c05db20cb9b54d381a28255f17580e2b7e36a5", - "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" + "symfony/console": "^5.4|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -2000,7 +1831,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.19" + "source": "https://github.com/symfony/yaml/tree/v6.2.5" }, "funding": [ { @@ -2016,7 +1847,7 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:51:14+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "yosymfony/parser-utils", @@ -4997,6 +4828,168 @@ ], "time": "2023-01-01T08:38:09+00:00" }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.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": "2022-11-03T14:55:06+00:00" + }, { "name": "symfony/stopwatch", "version": "v6.2.5", diff --git a/src/Command/ScanCommand.php b/src/Command/ScanCommand.php index 9ec5dd5..44fecae 100644 --- a/src/Command/ScanCommand.php +++ b/src/Command/ScanCommand.php @@ -11,6 +11,7 @@ use Siketyan\Loxcan\Versioning\VersionDiff; use Siketyan\Loxcan\UseCase\ReportUseCase; use Siketyan\Loxcan\UseCase\ScanUseCase; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Color; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; @@ -18,15 +19,14 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand('scan')] class ScanCommand extends Command { - private const NAME = 'scan'; - public function __construct( private ScanUseCase $useCase, private ReportUseCase $reportUseCase ) { - parent::__construct(self::NAME); + parent::__construct(); } protected function configure(): void From b0f83cc80d63f1553334bf917042fb9c34857004 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 13:22:23 +0900 Subject: [PATCH 10/20] build: Install quartetcom/static-analysis-kit --- .php-cs-fixer.dist.php | 17 ++-- composer.json | 34 ++++++-- composer.lock | 187 ++++++++++++++++++++++++++++++++++++++++- phpstan.neon | 5 ++ rector.php | 15 ++++ 5 files changed, 239 insertions(+), 19 deletions(-) create mode 100644 phpstan.neon create mode 100644 rector.php diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index d41f8ce..97045d2 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -1,19 +1,16 @@ in(__DIR__) ->exclude('vendor') ; -return (new PhpCsFixer\Config()) - ->setRules([ - '@PSR12' => true, - '@PSR12:risky' => true, - '@PHP80Migration' => true, - '@PHP80Migration:risky' => true, - '@PHPUnit84Migration:risky' => true, - 'array_syntax' => ['syntax' => 'short'], - 'no_trailing_whitespace_in_string' => false, - ]) +return (new Config()) ->setFinder($finder) ; diff --git a/composer.json b/composer.json index 947a0d1..ea9b054 100644 --- a/composer.json +++ b/composer.json @@ -29,8 +29,15 @@ "phpunit/php-code-coverage": "^9.2", "phpunit/phpunit": "^9.5", "psr/cache": "^1", - "psr/log": "^1" + "psr/log": "^1", + "quartetcom/static-analysis-kit": "~8.1" }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/quartetcom/static-analysis-kit.git" + } + ], "config": { "sort-packages": true }, @@ -44,18 +51,29 @@ "Siketyan\\Loxcan\\": "tests/" } }, + "bin": [ + "bin/loxcan" + ], "scripts": { - "lint": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix -v --allow-risky=yes --dry-run", - "fix": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix -v --allow-risky=yes", + "analyse": "static-analysis-kit analyse", + "fix": "static-analysis-kit fix", + "fix:all": "static-analysis-kit fix --risky --rector", + "fix:rector": "static-analysis-kit fix --rector", + "fix:risky": "static-analysis-kit fix --risky", "coverage": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-html ./coverage", "codecov": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-clover ./coverage.xml", - "test": "phpunit ./tests", + "test": "# To run your tests using this command, you must define your test script in composer.json.", "tests": [ - "@lint", + "@analyse", "@test" ] }, - "bin": [ - "bin/loxcan" - ] + "scripts-descriptions": { + "analyse": "Analyses code in this project fully.", + "fix": "Tries to fix code in this project automatically.", + "fix:all": "Tries to fix code in this project automatically fully.", + "fix:rector": "Tries to fix code in this project automatically with rector enabled.", + "fix:risky": "Tries to fix code in this project automatically with risky rules.", + "test": "Runs the tests." + } } diff --git a/composer.lock b/composer.lock index 95ccd2b..6c6c191 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": "49c28579d0bb69e14ece22c5ea61a391", + "content-hash": "bb6e32cb3ddf24ea1709e84fe0517b57", "packages": [ { "name": "guzzlehttp/guzzle", @@ -3002,6 +3002,65 @@ }, "time": "2020-07-09T08:33:42+00:00" }, + { + "name": "phpstan/phpstan", + "version": "1.9.14", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "e5fcc96289cf737304286a9b505fbed091f02e58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e5fcc96289cf737304286a9b505fbed091f02e58", + "reference": "e5fcc96289cf737304286a9b505fbed091f02e58", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.9.14" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-01-19T10:47:09+00:00" + }, { "name": "phpunit/php-code-coverage", "version": "9.2.24", @@ -3571,6 +3630,132 @@ }, "time": "2021-05-03T11:20:27+00:00" }, + { + "name": "quartetcom/static-analysis-kit", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/quartetcom/static-analysis-kit.git", + "reference": "6be510ceba1d5666a6cae54e1abfc85b87c5818b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/quartetcom/static-analysis-kit/zipball/6be510ceba1d5666a6cae54e1abfc85b87c5818b", + "reference": "6be510ceba1d5666a6cae54e1abfc85b87c5818b", + "shasum": "" + }, + "require": { + "friendsofphp/php-cs-fixer": "^3.13", + "php": "^8.1", + "phpstan/phpstan": "^1.9", + "rector/rector": "^0.15.10", + "symfony/console": "^6.2", + "symfony/process": "^6.2" + }, + "bin": [ + "./bin/static-analysis-kit" + ], + "type": "library", + "autoload": { + "psr-4": { + "Quartetcom\\StaticAnalysisKit\\": "src/" + } + }, + "scripts": { + "analyse": [ + "static-analysis-kit analyse" + ], + "fix": [ + "static-analysis-kit fix" + ], + "fix:all": [ + "static-analysis-kit fix --risky --rector" + ], + "fix:rector": [ + "static-analysis-kit fix --rector" + ], + "fix:risky": [ + "static-analysis-kit fix --risky" + ], + "test": [ + "# To run your tests using this command, you must define your test script in composer.json." + ], + "post-autoload-dump": [ + "[ -f './vendor/bin/static-analysis-kit' ] || ln -s $(pwd)/bin/static-analysis-kit ./vendor/bin/static-analysis-kit" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Naoki Ikeguchi (s6n.jp)", + "email": "n-ikeguchi@quartetcom.co.jp" + } + ], + "description": "Strict and modern kit to optimise the codebase defensively.", + "support": { + "source": "https://github.com/quartetcom/static-analysis-kit/tree/v8.1.2", + "issues": "https://github.com/quartetcom/static-analysis-kit/issues" + }, + "time": "2023-02-01T04:16:36+00:00" + }, + { + "name": "rector/rector", + "version": "0.15.10", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "000bfb6f7974449399f39e1a210458395b75c887" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/000bfb6f7974449399f39e1a210458395b75c887", + "reference": "000bfb6f7974449399f39e1a210458395b75c887", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.9.7" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-php-parser": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.14-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.15.10" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2023-01-21T14:30:16+00:00" + }, { "name": "sebastian/cli-parser", "version": "1.0.1", diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..08566d0 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,5 @@ +parameters: + level: 9 + paths: + - src + - tests diff --git a/rector.php b/rector.php new file mode 100644 index 0000000..c157031 --- /dev/null +++ b/rector.php @@ -0,0 +1,15 @@ +paths(array_map(fn (string $path) => __DIR__ . $path, [ + '/src', + '/tests', + ])); + + Config::use($rectorConfig); +}; From 06ff0627e24c7bf0468d0f8e7827a2d2bb22a125 Mon Sep 17 00:00:00 2001 From: Naoki Ikeguchi Date: Wed, 1 Feb 2023 13:23:24 +0900 Subject: [PATCH 11/20] style: Run php-cs-fixer --- src/Command/ScanCommand.php | 9 ++++----- src/Comparator/DependencyCollectionComparator.php | 2 +- src/Comparator/DependencyCollectionIntersector.php | 5 +---- src/Comparator/DependencyCollectionSubtractor.php | 3 --- src/Comparator/DependencyCollectionTrait.php | 2 -- src/Comparator/DependencyComparator.php | 2 +- src/Exception/InvalidPathException.php | 3 +-- src/Git/Git.php | 14 ++++---------- src/Git/GitProcessFactory.php | 2 +- src/Model/Dependency.php | 2 +- src/Model/DependencyCollection.php | 2 +- src/Model/DependencyCollectionDiff.php | 2 +- src/Model/DependencyCollectionPair.php | 2 +- src/Model/DependencyDiff.php | 2 +- src/Model/FileDiff.php | 2 +- src/Model/Package.php | 2 +- src/Model/Repository.php | 2 +- src/Reporter/GitHub/GitHubClient.php | 6 +----- src/Reporter/GitHub/GitHubComment.php | 2 +- src/Reporter/GitHub/GitHubMarkdownBuilder.php | 4 +--- src/Reporter/GitHub/GitHubReporter.php | 4 ++-- src/Reporter/GitHub/GitHubUser.php | 2 +- src/Reporter/GitHub/GitHubUserPool.php | 2 +- src/Reporter/ReporterInterface.php | 1 + src/Scanner/AbstractPackagePool.php | 2 +- src/Scanner/Cargo/CargoLockParser.php | 2 +- src/Scanner/Cargo/CargoScanner.php | 2 +- src/Scanner/Composer/ComposerLockParser.php | 5 ++--- src/Scanner/Composer/ComposerScanner.php | 2 +- src/Scanner/Npm/NpmLockParser.php | 5 ++--- src/Scanner/Npm/NpmScanner.php | 2 +- src/Scanner/Pip/PipLockParser.php | 5 ++--- src/Scanner/Pip/PipScanner.php | 2 +- src/Scanner/Pnpm/PnpmLockParser.php | 2 +- src/Scanner/Pnpm/PnpmScanner.php | 2 +- src/Scanner/Pub/PubLockParser.php | 2 +- src/Scanner/Pub/PubScanner.php | 2 +- src/Scanner/ScannerInterface.php | 1 + src/Scanner/ScannerResolver.php | 2 +- src/Scanner/Yarn/YarnLockParser.php | 2 +- src/Scanner/Yarn/YarnScanner.php | 2 +- src/UseCase/ReportUseCase.php | 2 +- src/UseCase/ScanUseCase.php | 6 +----- src/Versioning/Composer/ComposerVersion.php | 4 ++-- src/Versioning/SemVer/SemVerVersion.php | 5 +---- src/Versioning/SemVer/SemVerVersionComparator.php | 2 +- src/Versioning/SemVer/SemVerVersionParser.php | 2 +- src/Versioning/Simple/SimpleVersion.php | 2 +- src/Versioning/Simple/SimpleVersionComparator.php | 2 +- src/Versioning/Unknown/UnknownVersion.php | 2 +- src/Versioning/VersionComparatorInterface.php | 1 + src/Versioning/VersionComparatorResolver.php | 2 +- src/Versioning/VersionDiff.php | 8 ++++---- tests/Command/ScanCommandTest.php | 6 +++--- tests/Reporter/GitHub/GitHubClientTest.php | 11 ++++++----- tests/UseCase/ScanUseCaseTest.php | 2 +- .../Composer/ComposerVersionComparatorTest.php | 2 +- 57 files changed, 76 insertions(+), 104 deletions(-) diff --git a/src/Command/ScanCommand.php b/src/Command/ScanCommand.php index 44fecae..d673d49 100644 --- a/src/Command/ScanCommand.php +++ b/src/Command/ScanCommand.php @@ -8,9 +8,9 @@ use JetBrains\PhpStorm\Pure; use Siketyan\Loxcan\Model\DependencyCollectionDiff; use Siketyan\Loxcan\Model\Repository; -use Siketyan\Loxcan\Versioning\VersionDiff; use Siketyan\Loxcan\UseCase\ReportUseCase; use Siketyan\Loxcan\UseCase\ScanUseCase; +use Siketyan\Loxcan\Versioning\VersionDiff; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Color; use Symfony\Component\Console\Command\Command; @@ -24,7 +24,7 @@ class ScanCommand extends Command { public function __construct( private ScanUseCase $useCase, - private ReportUseCase $reportUseCase + private ReportUseCase $reportUseCase, ) { parent::__construct(); } @@ -43,9 +43,9 @@ public function execute(InputInterface $input, OutputInterface $output): int $repository = new Repository(Path::fromString(getcwd())); - /** @var string|null $base */ + /** @var null|string $base */ $base = $input->getArgument('base'); - /** @var string|null $head */ + /** @var null|string $head */ $head = $input->getArgument('head'); $diffs = $this->useCase->scan($repository, $base, $head); @@ -64,7 +64,6 @@ public function execute(InputInterface $input, OutputInterface $output): int } /** - * @param SymfonyStyle $io * @param DependencyCollectionDiff[] $diffs */ private function printDiffs(SymfonyStyle $io, array $diffs): void diff --git a/src/Comparator/DependencyCollectionComparator.php b/src/Comparator/DependencyCollectionComparator.php index 82c685f..4f3e564 100644 --- a/src/Comparator/DependencyCollectionComparator.php +++ b/src/Comparator/DependencyCollectionComparator.php @@ -11,7 +11,7 @@ class DependencyCollectionComparator { public function __construct( private DependencyCollectionSubtractor $subtractor, - private DependencyCollectionIntersector $intersector + private DependencyCollectionIntersector $intersector, ) { } diff --git a/src/Comparator/DependencyCollectionIntersector.php b/src/Comparator/DependencyCollectionIntersector.php index 5342963..6117e4b 100644 --- a/src/Comparator/DependencyCollectionIntersector.php +++ b/src/Comparator/DependencyCollectionIntersector.php @@ -13,14 +13,11 @@ class DependencyCollectionIntersector use DependencyCollectionTrait; public function __construct( - private DependencyComparator $comparator + private DependencyComparator $comparator, ) { } /** - * @param DependencyCollection $a - * @param DependencyCollection $b - * * @return DependencyDiff[] */ public function intersect(DependencyCollection $a, DependencyCollection $b): array diff --git a/src/Comparator/DependencyCollectionSubtractor.php b/src/Comparator/DependencyCollectionSubtractor.php index 184d67b..22c2ee7 100644 --- a/src/Comparator/DependencyCollectionSubtractor.php +++ b/src/Comparator/DependencyCollectionSubtractor.php @@ -12,9 +12,6 @@ class DependencyCollectionSubtractor use DependencyCollectionTrait; /** - * @param DependencyCollection $a - * @param DependencyCollection $b - * * @return Dependency[] */ public function subtract(DependencyCollection $a, DependencyCollection $b): array diff --git a/src/Comparator/DependencyCollectionTrait.php b/src/Comparator/DependencyCollectionTrait.php index 8eb1e07..a0f45f1 100644 --- a/src/Comparator/DependencyCollectionTrait.php +++ b/src/Comparator/DependencyCollectionTrait.php @@ -11,8 +11,6 @@ trait DependencyCollectionTrait { /** - * @param DependencyCollection $collection - * * @return Package[] */ private function getPackages(DependencyCollection $collection): array diff --git a/src/Comparator/DependencyComparator.php b/src/Comparator/DependencyComparator.php index 42dd225..c5abaac 100644 --- a/src/Comparator/DependencyComparator.php +++ b/src/Comparator/DependencyComparator.php @@ -13,7 +13,7 @@ class DependencyComparator { public function __construct( - private VersionComparatorResolver $versionComparatorResolver + private VersionComparatorResolver $versionComparatorResolver, ) { } diff --git a/src/Exception/InvalidPathException.php b/src/Exception/InvalidPathException.php index 2853f9a..4db0b0f 100644 --- a/src/Exception/InvalidPathException.php +++ b/src/Exception/InvalidPathException.php @@ -5,12 +5,11 @@ namespace Siketyan\Loxcan\Exception; use JetBrains\PhpStorm\Pure; -use Throwable; class InvalidPathException extends RuntimeException { #[Pure] - public function __construct($path, $code = 0, Throwable $previous = null) + public function __construct($path, $code = 0, ?\Throwable $previous = null) { parent::__construct( sprintf( diff --git a/src/Git/Git.php b/src/Git/Git.php index 5cd788c..4f86050 100644 --- a/src/Git/Git.php +++ b/src/Git/Git.php @@ -12,15 +12,11 @@ class Git { public function __construct( - private GitProcessFactory $processFactory + private GitProcessFactory $processFactory, ) { } /** - * @param Repository $repository - * @param string|null $base - * @param string|null $head - * * @return RelativePathInterface[] */ public function fetchChangedFiles(Repository $repository, ?string $base = null, ?string $head = null): array @@ -52,7 +48,7 @@ public function fetchChangedFiles(Repository $repository, ?string $base = null, array_filter( explode("\n", $process->getOutput()), fn (string $line): bool => $line !== '', - ) + ), ); } catch (NonRelativePathException $e) { throw new GitException( @@ -97,11 +93,9 @@ public function checkFileExists(Repository $repository, ?string $branch, Relativ $process->run(); - if (!$process->isSuccessful()) { - return false; - } + return !(!$process->isSuccessful()) - return true; + ; } public function supports(Repository $repository): bool diff --git a/src/Git/GitProcessFactory.php b/src/Git/GitProcessFactory.php index b347d7d..d64ef71 100644 --- a/src/Git/GitProcessFactory.php +++ b/src/Git/GitProcessFactory.php @@ -10,7 +10,7 @@ class GitProcessFactory { public function __construct( - private string $path = 'git' + private string $path = 'git', ) { } diff --git a/src/Model/Dependency.php b/src/Model/Dependency.php index 2bb1843..c972d24 100644 --- a/src/Model/Dependency.php +++ b/src/Model/Dependency.php @@ -10,7 +10,7 @@ class Dependency { public function __construct( private Package $package, - private VersionInterface $version + private VersionInterface $version, ) { } diff --git a/src/Model/DependencyCollection.php b/src/Model/DependencyCollection.php index d8ba8f9..b7b237e 100644 --- a/src/Model/DependencyCollection.php +++ b/src/Model/DependencyCollection.php @@ -10,7 +10,7 @@ class DependencyCollection * @param Dependency[] $dependencies */ public function __construct( - private array $dependencies + private array $dependencies, ) { } diff --git a/src/Model/DependencyCollectionDiff.php b/src/Model/DependencyCollectionDiff.php index 0b81824..1bd2586 100644 --- a/src/Model/DependencyCollectionDiff.php +++ b/src/Model/DependencyCollectionDiff.php @@ -14,7 +14,7 @@ class DependencyCollectionDiff public function __construct( private array $added = [], private array $updated = [], - private array $removed = [] + private array $removed = [], ) { } diff --git a/src/Model/DependencyCollectionPair.php b/src/Model/DependencyCollectionPair.php index a149160..358ad1c 100644 --- a/src/Model/DependencyCollectionPair.php +++ b/src/Model/DependencyCollectionPair.php @@ -8,7 +8,7 @@ class DependencyCollectionPair { public function __construct( private DependencyCollection $before, - private DependencyCollection $after + private DependencyCollection $after, ) { } diff --git a/src/Model/DependencyDiff.php b/src/Model/DependencyDiff.php index ea366e5..3b8f1c2 100644 --- a/src/Model/DependencyDiff.php +++ b/src/Model/DependencyDiff.php @@ -10,7 +10,7 @@ class DependencyDiff { public function __construct( private Package $package, - private VersionDiff $versionDiff + private VersionDiff $versionDiff, ) { } diff --git a/src/Model/FileDiff.php b/src/Model/FileDiff.php index 7e0d88d..b4b45ec 100644 --- a/src/Model/FileDiff.php +++ b/src/Model/FileDiff.php @@ -8,7 +8,7 @@ class FileDiff { public function __construct( private ?string $before, - private ?string $after + private ?string $after, ) { } diff --git a/src/Model/Package.php b/src/Model/Package.php index 29364e6..a24bbe5 100644 --- a/src/Model/Package.php +++ b/src/Model/Package.php @@ -7,7 +7,7 @@ class Package { public function __construct( - private string $name + private string $name, ) { } diff --git a/src/Model/Repository.php b/src/Model/Repository.php index 0a54dae..d721451 100644 --- a/src/Model/Repository.php +++ b/src/Model/Repository.php @@ -9,7 +9,7 @@ class Repository { public function __construct( - private PathInterface $path + private PathInterface $path, ) { } diff --git a/src/Reporter/GitHub/GitHubClient.php b/src/Reporter/GitHub/GitHubClient.php index c01f53a..b1ee0b2 100644 --- a/src/Reporter/GitHub/GitHubClient.php +++ b/src/Reporter/GitHub/GitHubClient.php @@ -15,15 +15,11 @@ class GitHubClient public function __construct( private ClientInterface $httpClient, - private GitHubUserPool $userPool + private GitHubUserPool $userPool, ) { } /** - * @param string $owner - * @param string $repo - * @param int $issueNumber - * * @return GitHubComment[] */ public function getComments(string $owner, string $repo, int $issueNumber): array diff --git a/src/Reporter/GitHub/GitHubComment.php b/src/Reporter/GitHub/GitHubComment.php index fff4007..598ac87 100644 --- a/src/Reporter/GitHub/GitHubComment.php +++ b/src/Reporter/GitHub/GitHubComment.php @@ -9,7 +9,7 @@ class GitHubComment public function __construct( private int $id, private string $body, - private GitHubUser $author + private GitHubUser $author, ) { } diff --git a/src/Reporter/GitHub/GitHubMarkdownBuilder.php b/src/Reporter/GitHub/GitHubMarkdownBuilder.php index dedb917..eb49093 100644 --- a/src/Reporter/GitHub/GitHubMarkdownBuilder.php +++ b/src/Reporter/GitHub/GitHubMarkdownBuilder.php @@ -46,8 +46,6 @@ public function buildSection(DependencyCollectionDiff $diff, string $filename): } /** - * @param DependencyCollectionDiff $diff - * * @return string[] */ #[Pure] @@ -111,7 +109,7 @@ private function getVersionDiffTypeEmoji(VersionDiff $diff): string private function emphasizeBreakingChanges(VersionDiff $diff, string $str): string { if (!$diff->isCompatible()) { - return "**$str**"; + return "**{$str}**"; } return $str; diff --git a/src/Reporter/GitHub/GitHubReporter.php b/src/Reporter/GitHub/GitHubReporter.php index fbc0073..8811f32 100644 --- a/src/Reporter/GitHub/GitHubReporter.php +++ b/src/Reporter/GitHub/GitHubReporter.php @@ -13,12 +13,12 @@ class GitHubReporter implements ReporterInterface public function __construct( private GitHubMarkdownBuilder $markdownBuilder, - private GitHubClient $client + private GitHubClient $client, ) { } /** - * @inheritDoc + * {@inheritDoc} */ public function report(array $diffs): void { diff --git a/src/Reporter/GitHub/GitHubUser.php b/src/Reporter/GitHub/GitHubUser.php index fdd2081..68de3e7 100644 --- a/src/Reporter/GitHub/GitHubUser.php +++ b/src/Reporter/GitHub/GitHubUser.php @@ -8,7 +8,7 @@ class GitHubUser { public function __construct( private int $id, - private string $login + private string $login, ) { } diff --git a/src/Reporter/GitHub/GitHubUserPool.php b/src/Reporter/GitHub/GitHubUserPool.php index 0164832..ab8e4fd 100644 --- a/src/Reporter/GitHub/GitHubUserPool.php +++ b/src/Reporter/GitHub/GitHubUserPool.php @@ -10,7 +10,7 @@ class GitHubUserPool * @param GitHubUser[] $users */ public function __construct( - private array $users = [] + private array $users = [], ) { } diff --git a/src/Reporter/ReporterInterface.php b/src/Reporter/ReporterInterface.php index 664c488..24a91e4 100644 --- a/src/Reporter/ReporterInterface.php +++ b/src/Reporter/ReporterInterface.php @@ -12,5 +12,6 @@ interface ReporterInterface * @param DependencyCollectionDiff[] $diffs */ public function report(array $diffs): void; + public function supports(): bool; } diff --git a/src/Scanner/AbstractPackagePool.php b/src/Scanner/AbstractPackagePool.php index f3fc488..c564526 100644 --- a/src/Scanner/AbstractPackagePool.php +++ b/src/Scanner/AbstractPackagePool.php @@ -12,7 +12,7 @@ abstract class AbstractPackagePool * @param Package[] $packages */ public function __construct( - private array $packages = [] + private array $packages = [], ) { } diff --git a/src/Scanner/Cargo/CargoLockParser.php b/src/Scanner/Cargo/CargoLockParser.php index 998b5b2..6abe4b8 100644 --- a/src/Scanner/Cargo/CargoLockParser.php +++ b/src/Scanner/Cargo/CargoLockParser.php @@ -14,7 +14,7 @@ class CargoLockParser { public function __construct( private CargoPackagePool $packagePool, - private SemVerVersionParser $versionParser + private SemVerVersionParser $versionParser, ) { } diff --git a/src/Scanner/Cargo/CargoScanner.php b/src/Scanner/Cargo/CargoScanner.php index 36f9815..41d4ca5 100644 --- a/src/Scanner/Cargo/CargoScanner.php +++ b/src/Scanner/Cargo/CargoScanner.php @@ -12,7 +12,7 @@ class CargoScanner implements ScannerInterface { public function __construct( - private CargoLockParser $parser + private CargoLockParser $parser, ) { } diff --git a/src/Scanner/Composer/ComposerLockParser.php b/src/Scanner/Composer/ComposerLockParser.php index 34605fc..667240e 100644 --- a/src/Scanner/Composer/ComposerLockParser.php +++ b/src/Scanner/Composer/ComposerLockParser.php @@ -4,7 +4,6 @@ namespace Siketyan\Loxcan\Scanner\Composer; -use JsonException; use Siketyan\Loxcan\Exception\ParseErrorException; use Siketyan\Loxcan\Model\Dependency; use Siketyan\Loxcan\Model\DependencyCollection; @@ -15,7 +14,7 @@ class ComposerLockParser { public function __construct( private ComposerPackagePool $packagePool, - private ComposerVersionParser $versionParser + private ComposerVersionParser $versionParser, ) { } @@ -27,7 +26,7 @@ public function parse(?string $json): DependencyCollection try { $assoc = json_decode($json, true, 512, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { + } catch (\JsonException $e) { throw new ParseErrorException( $e->getMessage(), $e->getCode(), diff --git a/src/Scanner/Composer/ComposerScanner.php b/src/Scanner/Composer/ComposerScanner.php index e44585e..8a2498d 100644 --- a/src/Scanner/Composer/ComposerScanner.php +++ b/src/Scanner/Composer/ComposerScanner.php @@ -12,7 +12,7 @@ class ComposerScanner implements ScannerInterface { public function __construct( - private ComposerLockParser $parser + private ComposerLockParser $parser, ) { } diff --git a/src/Scanner/Npm/NpmLockParser.php b/src/Scanner/Npm/NpmLockParser.php index 6f859da..7006c1c 100644 --- a/src/Scanner/Npm/NpmLockParser.php +++ b/src/Scanner/Npm/NpmLockParser.php @@ -4,7 +4,6 @@ namespace Siketyan\Loxcan\Scanner\Npm; -use JsonException; use Siketyan\Loxcan\Exception\ParseErrorException; use Siketyan\Loxcan\Model\Dependency; use Siketyan\Loxcan\Model\DependencyCollection; @@ -15,7 +14,7 @@ class NpmLockParser { public function __construct( private NpmPackagePool $packagePool, - private SemVerVersionParser $versionParser + private SemVerVersionParser $versionParser, ) { } @@ -27,7 +26,7 @@ public function parse(?string $json): DependencyCollection try { $assoc = json_decode($json, true, 512, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { + } catch (\JsonException $e) { throw new ParseErrorException( $e->getMessage(), $e->getCode(), diff --git a/src/Scanner/Npm/NpmScanner.php b/src/Scanner/Npm/NpmScanner.php index c6d19e5..24ff1b5 100644 --- a/src/Scanner/Npm/NpmScanner.php +++ b/src/Scanner/Npm/NpmScanner.php @@ -12,7 +12,7 @@ class NpmScanner implements ScannerInterface { public function __construct( - private NpmLockParser $parser + private NpmLockParser $parser, ) { } diff --git a/src/Scanner/Pip/PipLockParser.php b/src/Scanner/Pip/PipLockParser.php index 287b203..109f693 100644 --- a/src/Scanner/Pip/PipLockParser.php +++ b/src/Scanner/Pip/PipLockParser.php @@ -4,7 +4,6 @@ namespace Siketyan\Loxcan\Scanner\Pip; -use JsonException; use Siketyan\Loxcan\Exception\ParseErrorException; use Siketyan\Loxcan\Model\Dependency; use Siketyan\Loxcan\Model\DependencyCollection; @@ -15,7 +14,7 @@ class PipLockParser { public function __construct( private PipPackagePool $packagePool, - private SimpleVersionParser $versionParser + private SimpleVersionParser $versionParser, ) { } @@ -27,7 +26,7 @@ public function parse(?string $json): DependencyCollection try { $assoc = json_decode($json, true, 512, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { + } catch (\JsonException $e) { throw new ParseErrorException( $e->getMessage(), $e->getCode(), diff --git a/src/Scanner/Pip/PipScanner.php b/src/Scanner/Pip/PipScanner.php index accaf19..1dea3ec 100644 --- a/src/Scanner/Pip/PipScanner.php +++ b/src/Scanner/Pip/PipScanner.php @@ -12,7 +12,7 @@ class PipScanner implements ScannerInterface { public function __construct( - private PipLockParser $parser + private PipLockParser $parser, ) { } diff --git a/src/Scanner/Pnpm/PnpmLockParser.php b/src/Scanner/Pnpm/PnpmLockParser.php index ecdd956..ca452b6 100644 --- a/src/Scanner/Pnpm/PnpmLockParser.php +++ b/src/Scanner/Pnpm/PnpmLockParser.php @@ -14,7 +14,7 @@ class PnpmLockParser { public function __construct( private PnpmPackagePool $packagePool, - private SemVerVersionParser $versionParser + private SemVerVersionParser $versionParser, ) { } diff --git a/src/Scanner/Pnpm/PnpmScanner.php b/src/Scanner/Pnpm/PnpmScanner.php index 8994ba9..a85d4a5 100644 --- a/src/Scanner/Pnpm/PnpmScanner.php +++ b/src/Scanner/Pnpm/PnpmScanner.php @@ -12,7 +12,7 @@ class PnpmScanner implements ScannerInterface { public function __construct( - private PnpmLockParser $parser + private PnpmLockParser $parser, ) { } diff --git a/src/Scanner/Pub/PubLockParser.php b/src/Scanner/Pub/PubLockParser.php index c865c78..07a66eb 100644 --- a/src/Scanner/Pub/PubLockParser.php +++ b/src/Scanner/Pub/PubLockParser.php @@ -14,7 +14,7 @@ class PubLockParser { public function __construct( private PubPackagePool $packagePool, - private SemVerVersionParser $versionParser + private SemVerVersionParser $versionParser, ) { } diff --git a/src/Scanner/Pub/PubScanner.php b/src/Scanner/Pub/PubScanner.php index 02cfc99..5f600f5 100644 --- a/src/Scanner/Pub/PubScanner.php +++ b/src/Scanner/Pub/PubScanner.php @@ -12,7 +12,7 @@ class PubScanner implements ScannerInterface { public function __construct( - private PubLockParser $parser + private PubLockParser $parser, ) { } diff --git a/src/Scanner/ScannerInterface.php b/src/Scanner/ScannerInterface.php index 9474692..39a432c 100644 --- a/src/Scanner/ScannerInterface.php +++ b/src/Scanner/ScannerInterface.php @@ -11,5 +11,6 @@ interface ScannerInterface { public function scan(FileDiff $diff): DependencyCollectionPair; + public function supports(PathInterface $path): bool; } diff --git a/src/Scanner/ScannerResolver.php b/src/Scanner/ScannerResolver.php index 86e3933..f17004f 100644 --- a/src/Scanner/ScannerResolver.php +++ b/src/Scanner/ScannerResolver.php @@ -12,7 +12,7 @@ class ScannerResolver * @param ScannerInterface[] $scanners */ public function __construct( - private array $scanners + private array $scanners, ) { } diff --git a/src/Scanner/Yarn/YarnLockParser.php b/src/Scanner/Yarn/YarnLockParser.php index 498abe0..d6ba435 100644 --- a/src/Scanner/Yarn/YarnLockParser.php +++ b/src/Scanner/Yarn/YarnLockParser.php @@ -14,7 +14,7 @@ class YarnLockParser { public function __construct( private YarnPackagePool $packagePool, - private SemVerVersionParser $versionParser + private SemVerVersionParser $versionParser, ) { } diff --git a/src/Scanner/Yarn/YarnScanner.php b/src/Scanner/Yarn/YarnScanner.php index 568b679..b5268f7 100644 --- a/src/Scanner/Yarn/YarnScanner.php +++ b/src/Scanner/Yarn/YarnScanner.php @@ -12,7 +12,7 @@ class YarnScanner implements ScannerInterface { public function __construct( - private YarnLockParser $parser + private YarnLockParser $parser, ) { } diff --git a/src/UseCase/ReportUseCase.php b/src/UseCase/ReportUseCase.php index 997e920..44000a3 100644 --- a/src/UseCase/ReportUseCase.php +++ b/src/UseCase/ReportUseCase.php @@ -13,7 +13,7 @@ class ReportUseCase * @param ReporterInterface[] $reporters */ public function __construct( - private array $reporters + private array $reporters, ) { } diff --git a/src/UseCase/ScanUseCase.php b/src/UseCase/ScanUseCase.php index b27e867..86e3fc5 100644 --- a/src/UseCase/ScanUseCase.php +++ b/src/UseCase/ScanUseCase.php @@ -16,15 +16,11 @@ class ScanUseCase public function __construct( private Git $git, private ScannerResolver $scannerResolver, - private DependencyCollectionComparator $comparator + private DependencyCollectionComparator $comparator, ) { } /** - * @param Repository $repository - * @param string|null $base - * @param string|null $head - * * @return DependencyCollectionDiff[] */ public function scan(Repository $repository, ?string $base = null, ?string $head = null): array diff --git a/src/Versioning/Composer/ComposerVersion.php b/src/Versioning/Composer/ComposerVersion.php index a60f7ce..2083a31 100644 --- a/src/Versioning/Composer/ComposerVersion.php +++ b/src/Versioning/Composer/ComposerVersion.php @@ -32,8 +32,8 @@ public function __construct( private int $z, private int $stability = self::STABILITY_STABLE, private int $number = 0, - private string $hash = "", - private ?string $branch = null + private string $hash = '', + private ?string $branch = null, ) { } diff --git a/src/Versioning/SemVer/SemVerVersion.php b/src/Versioning/SemVer/SemVerVersion.php index 1ea37eb..66af555 100644 --- a/src/Versioning/SemVer/SemVerVersion.php +++ b/src/Versioning/SemVer/SemVerVersion.php @@ -14,9 +14,6 @@ class SemVerVersion implements VersionInterface, CompatibilityAwareInterface use HasSemVerLikeCompatibility; /** - * @param int $major - * @param int $minor - * @param int $patch * @param string[] $preRelease * @param string[] $build */ @@ -25,7 +22,7 @@ public function __construct( private int $minor, private int $patch, private array $preRelease = [], - private array $build = [] + private array $build = [], ) { } diff --git a/src/Versioning/SemVer/SemVerVersionComparator.php b/src/Versioning/SemVer/SemVerVersionComparator.php index ccf575f..d50557e 100644 --- a/src/Versioning/SemVer/SemVerVersionComparator.php +++ b/src/Versioning/SemVer/SemVerVersionComparator.php @@ -39,7 +39,7 @@ public function supports(string $beforeType, string $afterType): bool #[Pure] private function determineType(SemVerVersion $before, SemVerVersion $after): ?int { - /** @noinspection DuplicatedCode */ + /* @noinspection DuplicatedCode */ if ($before->getMajor() < $after->getMajor()) { return VersionDiff::UPGRADED; } diff --git a/src/Versioning/SemVer/SemVerVersionParser.php b/src/Versioning/SemVer/SemVerVersionParser.php index 0459521..d5e5132 100644 --- a/src/Versioning/SemVer/SemVerVersionParser.php +++ b/src/Versioning/SemVer/SemVerVersionParser.php @@ -8,7 +8,7 @@ class SemVerVersionParser { - private const PATTERN = /** @lang text */ + private const PATTERN = /* @lang text */ '/^(\d+)\.(\d+)\.(\d+)(?:\-(?
[A-Za-z0-9\-\.]+))?(?:\+(?[A-Za-z0-9\-\.]+))?$/';
 
     public function parse(string $version): SemVerVersion|UnknownVersion
diff --git a/src/Versioning/Simple/SimpleVersion.php b/src/Versioning/Simple/SimpleVersion.php
index 57ba631..b4ece92 100644
--- a/src/Versioning/Simple/SimpleVersion.php
+++ b/src/Versioning/Simple/SimpleVersion.php
@@ -13,7 +13,7 @@ public function __construct(
         private int $major,
         private int $minor,
         private ?int $patch,
-        private ?int $revision
+        private ?int $revision,
     ) {
     }
 
diff --git a/src/Versioning/Simple/SimpleVersionComparator.php b/src/Versioning/Simple/SimpleVersionComparator.php
index 0faa3d0..312025e 100644
--- a/src/Versioning/Simple/SimpleVersionComparator.php
+++ b/src/Versioning/Simple/SimpleVersionComparator.php
@@ -41,7 +41,7 @@ public function supports(string $beforeType, string $afterType): bool
     #[Pure]
     private function determineType(SimpleVersion $before, SimpleVersion $after): ?int
     {
-        /** @noinspection DuplicatedCode */
+        /* @noinspection DuplicatedCode */
         if ($before->getMajor() < $after->getMajor()) {
             return VersionDiff::UPGRADED;
         }
diff --git a/src/Versioning/Unknown/UnknownVersion.php b/src/Versioning/Unknown/UnknownVersion.php
index 5e68112..50f96f1 100644
--- a/src/Versioning/Unknown/UnknownVersion.php
+++ b/src/Versioning/Unknown/UnknownVersion.php
@@ -9,7 +9,7 @@
 class UnknownVersion implements VersionInterface
 {
     public function __construct(
-        private string $version
+        private string $version,
     ) {
     }
 
diff --git a/src/Versioning/VersionComparatorInterface.php b/src/Versioning/VersionComparatorInterface.php
index e15d3ee..fb7e905 100644
--- a/src/Versioning/VersionComparatorInterface.php
+++ b/src/Versioning/VersionComparatorInterface.php
@@ -7,5 +7,6 @@
 interface VersionComparatorInterface
 {
     public function compare(VersionInterface $before, VersionInterface $after): ?VersionDiff;
+
     public function supports(string $beforeType, string $afterType): bool;
 }
diff --git a/src/Versioning/VersionComparatorResolver.php b/src/Versioning/VersionComparatorResolver.php
index b726b75..4cc08ad 100644
--- a/src/Versioning/VersionComparatorResolver.php
+++ b/src/Versioning/VersionComparatorResolver.php
@@ -10,7 +10,7 @@ class VersionComparatorResolver
      * @param VersionComparatorInterface[] $comparators
      */
     public function __construct(
-        private array $comparators
+        private array $comparators,
     ) {
     }
 
diff --git a/src/Versioning/VersionDiff.php b/src/Versioning/VersionDiff.php
index 4861aff..368510b 100644
--- a/src/Versioning/VersionDiff.php
+++ b/src/Versioning/VersionDiff.php
@@ -16,7 +16,7 @@ class VersionDiff
     public function __construct(
         private int $type,
         private VersionInterface $before,
-        private VersionInterface $after
+        private VersionInterface $after,
     ) {
     }
 
@@ -28,12 +28,12 @@ public function __construct(
     #[Pure]
     public function isCompatible(): bool
     {
-        if (!(($before = $this->getBefore()) instanceof CompatibilityAwareInterface) ||
-            !(($after = $this->getAfter()) instanceof CompatibilityAwareInterface)) {
+        if (!(($before = $this->getBefore()) instanceof CompatibilityAwareInterface)
+            || !(($after = $this->getAfter()) instanceof CompatibilityAwareInterface)) {
             return false;
         }
 
-        /**
+        /*
          * @var CompatibilityAwareInterface $before
          * @var CompatibilityAwareInterface $after
          */
diff --git a/tests/Command/ScanCommandTest.php b/tests/Command/ScanCommandTest.php
index 89fc3ac..175b46a 100644
--- a/tests/Command/ScanCommandTest.php
+++ b/tests/Command/ScanCommandTest.php
@@ -147,13 +147,13 @@ public function testNoDiff(): void
         ;
 
         $exitCode = $this->tester->execute([
-           'base' => 'foo',
-           'head' => 'bar',
+            'base' => 'foo',
+            'head' => 'bar',
         ]);
 
         $this->assertSame(0, $exitCode);
         $this->assertSame(
-            << 'application/vnd.github.v3+json',
                         'Authorization' => 'token dummy_token',
                     ],
-                ]
+                ],
             )
             ->willReturn($response->reveal())
             ->shouldBeCalledOnce()
@@ -85,10 +85,11 @@ public function testGetComments(): void
         $this->userPool
             ->add(Argument::type(GitHubUser::class))
             ->will(function ($args) use ($pool): void {
-                /** @noinspection PhpUndefinedMethodInspection */
+                /* @noinspection PhpUndefinedMethodInspection */
                 $pool->get(111)->willReturn($args[0]);
             })
-            ->shouldBeCalledOnce();
+            ->shouldBeCalledOnce()
+        ;
 
         $comments = $this->client->getComments('foo', 'bar', 123);
 
@@ -116,7 +117,7 @@ public function testCreateComment(): void
                         'Accept' => 'application/vnd.github.v3+json',
                         'Authorization' => 'token dummy_token',
                     ],
-                ]
+                ],
             )
             ->willReturn($this->prophesize(ResponseInterface::class)->reveal())
             ->shouldBeCalledOnce()
@@ -148,7 +149,7 @@ public function testUpdateComment(): void
                         'Accept' => 'application/vnd.github.v3+json',
                         'Authorization' => 'token dummy_token',
                     ],
-                ]
+                ],
             )
             ->willReturn($this->prophesize(ResponseInterface::class)->reveal())
             ->shouldBeCalledOnce()
diff --git a/tests/UseCase/ScanUseCaseTest.php b/tests/UseCase/ScanUseCaseTest.php
index 2933a4b..7df1bb7 100644
--- a/tests/UseCase/ScanUseCaseTest.php
+++ b/tests/UseCase/ScanUseCaseTest.php
@@ -82,7 +82,7 @@ public function test(): void
 
         $scanner = $this->prophesize(ScannerInterface::class);
 
-        /** @noinspection PhpParamsInspection */
+        /* @noinspection PhpParamsInspection */
         $scanner
             ->scan(Argument::that(fn (FileDiff $d): bool => $d->getBefore() === 'foo'))
             ->willReturn($pair)
diff --git a/tests/Versioning/Composer/ComposerVersionComparatorTest.php b/tests/Versioning/Composer/ComposerVersionComparatorTest.php
index a0efa67..ca92dfb 100644
--- a/tests/Versioning/Composer/ComposerVersionComparatorTest.php
+++ b/tests/Versioning/Composer/ComposerVersionComparatorTest.php
@@ -20,7 +20,7 @@ public function test(): void
     {
         $this->assertCompare(
             VersionDiff::UPGRADED,
-            new ComposerVersion(1, 2, 3, ),
+            new ComposerVersion(1, 2, 3),
             new ComposerVersion(2, 0, 0),
         );
 

From d07fcfc353f17e544a202f463191682de0823f60 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:24:42 +0900
Subject: [PATCH 12/20] refactor: Run php-cs-fixer with risky rules

---
 composer.json                                 |  2 +-
 src/Command/ScanCommand.php                   |  2 +-
 .../DependencyCollectionSubtractor.php        |  2 +-
 src/Model/DependencyCollectionDiff.php        |  2 +-
 src/Reporter/EnvironmentTrait.php             |  2 +-
 src/Reporter/GitHub/GitHubMarkdownBuilder.php |  2 +-
 src/Reporter/GitHub/GitHubReporter.php        |  4 +-
 src/Scanner/Composer/ComposerLockParser.php   |  2 +-
 src/Scanner/Npm/NpmLockParser.php             |  2 +-
 src/Scanner/Pip/PipLockParser.php             |  2 +-
 .../Composer/ComposerVersionParser.php        |  4 +-
 src/Versioning/SemVer/SemVerVersion.php       |  6 +--
 .../SemVer/SemVerVersionComparator.php        |  8 ++--
 src/Versioning/SemVer/SemVerVersionParser.php |  4 +-
 src/Versioning/Simple/SimpleVersionParser.php |  4 +-
 tests/Command/ScanCommandTest.php             | 38 +++++++++----------
 tests/Scanner/Pnpm/PnpmLockParserTest.php     |  2 +-
 .../Composer/ComposerVersionParserTest.php    |  6 +--
 18 files changed, 47 insertions(+), 47 deletions(-)

diff --git a/composer.json b/composer.json
index ea9b054..c52aec9 100644
--- a/composer.json
+++ b/composer.json
@@ -62,7 +62,7 @@
         "fix:risky": "static-analysis-kit fix --risky",
         "coverage": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-html ./coverage",
         "codecov": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-clover ./coverage.xml",
-        "test": "# To run your tests using this command, you must define your test script in composer.json.",
+        "test": "phpunit -c ./phpunit.xml",
         "tests": [
             "@analyse",
             "@test"
diff --git a/src/Command/ScanCommand.php b/src/Command/ScanCommand.php
index d673d49..6c8f04c 100644
--- a/src/Command/ScanCommand.php
+++ b/src/Command/ScanCommand.php
@@ -50,7 +50,7 @@ public function execute(InputInterface $input, OutputInterface $output): int
 
         $diffs = $this->useCase->scan($repository, $base, $head);
 
-        if (count($diffs) === 0) {
+        if (\count($diffs) === 0) {
             $io->writeln(
                 '✨ No lock file changes found, looks shine!',
             );
diff --git a/src/Comparator/DependencyCollectionSubtractor.php b/src/Comparator/DependencyCollectionSubtractor.php
index 22c2ee7..2f6cc9e 100644
--- a/src/Comparator/DependencyCollectionSubtractor.php
+++ b/src/Comparator/DependencyCollectionSubtractor.php
@@ -21,7 +21,7 @@ public function subtract(DependencyCollection $a, DependencyCollection $b): arra
         return array_values(
             array_filter(
                 $a->getDependencies(),
-                fn (?Dependency $d): bool => !in_array($d->getPackage(), $packages, true),
+                fn (?Dependency $d): bool => !\in_array($d->getPackage(), $packages, true),
             ),
         );
     }
diff --git a/src/Model/DependencyCollectionDiff.php b/src/Model/DependencyCollectionDiff.php
index 1bd2586..e1e84b7 100644
--- a/src/Model/DependencyCollectionDiff.php
+++ b/src/Model/DependencyCollectionDiff.php
@@ -44,6 +44,6 @@ public function getRemoved(): array
 
     public function count(): int
     {
-        return count($this->added) + count($this->updated) + count($this->removed);
+        return \count($this->added) + \count($this->updated) + \count($this->removed);
     }
 }
diff --git a/src/Reporter/EnvironmentTrait.php b/src/Reporter/EnvironmentTrait.php
index ef1f841..716b02b 100644
--- a/src/Reporter/EnvironmentTrait.php
+++ b/src/Reporter/EnvironmentTrait.php
@@ -12,7 +12,7 @@ private function getEnv(string $key): string
     {
         $env = getenv($key);
 
-        if (!is_string($env) || $env === '') {
+        if (!\is_string($env) || $env === '') {
             throw new InvalidConfigurationException(
                 sprintf(
                     'The environment variable "%s" is needed, but it is not set.',
diff --git a/src/Reporter/GitHub/GitHubMarkdownBuilder.php b/src/Reporter/GitHub/GitHubMarkdownBuilder.php
index eb49093..f2b1c90 100644
--- a/src/Reporter/GitHub/GitHubMarkdownBuilder.php
+++ b/src/Reporter/GitHub/GitHubMarkdownBuilder.php
@@ -13,7 +13,7 @@ class GitHubMarkdownBuilder
     #[Pure]
     public function build(array $diffs): string
     {
-        if (count($diffs) === 0) {
+        if (\count($diffs) === 0) {
             return '✨ No lock file changes found, looks shine!';
         }
 
diff --git a/src/Reporter/GitHub/GitHubReporter.php b/src/Reporter/GitHub/GitHubReporter.php
index 8811f32..3df8cb6 100644
--- a/src/Reporter/GitHub/GitHubReporter.php
+++ b/src/Reporter/GitHub/GitHubReporter.php
@@ -34,7 +34,7 @@ public function report(array $diffs): void
             fn (GitHubComment $comment): bool => $comment->getAuthor()->getLogin() === $username,
         );
 
-        if (count($myComments) > 0) {
+        if (\count($myComments) > 0) {
             $this->client->updateComment(
                 $owner,
                 $repo,
@@ -52,6 +52,6 @@ public function supports(): bool
     {
         $env = getenv('LOXCAN_REPORTER_GITHUB');
 
-        return is_string($env) && $env !== '';
+        return \is_string($env) && $env !== '';
     }
 }
diff --git a/src/Scanner/Composer/ComposerLockParser.php b/src/Scanner/Composer/ComposerLockParser.php
index 667240e..2b4b450 100644
--- a/src/Scanner/Composer/ComposerLockParser.php
+++ b/src/Scanner/Composer/ComposerLockParser.php
@@ -25,7 +25,7 @@ public function parse(?string $json): DependencyCollection
         }
 
         try {
-            $assoc = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
+            $assoc = json_decode($json, true, 512, \JSON_THROW_ON_ERROR);
         } catch (\JsonException $e) {
             throw new ParseErrorException(
                 $e->getMessage(),
diff --git a/src/Scanner/Npm/NpmLockParser.php b/src/Scanner/Npm/NpmLockParser.php
index 7006c1c..fe321e6 100644
--- a/src/Scanner/Npm/NpmLockParser.php
+++ b/src/Scanner/Npm/NpmLockParser.php
@@ -25,7 +25,7 @@ public function parse(?string $json): DependencyCollection
         }
 
         try {
-            $assoc = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
+            $assoc = json_decode($json, true, 512, \JSON_THROW_ON_ERROR);
         } catch (\JsonException $e) {
             throw new ParseErrorException(
                 $e->getMessage(),
diff --git a/src/Scanner/Pip/PipLockParser.php b/src/Scanner/Pip/PipLockParser.php
index 109f693..75c5dfc 100644
--- a/src/Scanner/Pip/PipLockParser.php
+++ b/src/Scanner/Pip/PipLockParser.php
@@ -25,7 +25,7 @@ public function parse(?string $json): DependencyCollection
         }
 
         try {
-            $assoc = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
+            $assoc = json_decode($json, true, 512, \JSON_THROW_ON_ERROR);
         } catch (\JsonException $e) {
             throw new ParseErrorException(
                 $e->getMessage(),
diff --git a/src/Versioning/Composer/ComposerVersionParser.php b/src/Versioning/Composer/ComposerVersionParser.php
index e087659..f2b5c6e 100644
--- a/src/Versioning/Composer/ComposerVersionParser.php
+++ b/src/Versioning/Composer/ComposerVersionParser.php
@@ -32,8 +32,8 @@ public function parse(string $version, string $hash): ComposerVersion|UnknownVer
             (int) $matches[1],
             (int) $matches[2],
             (int) $matches[3],
-            count($matches) > 4 ? ComposerVersion::STABILITIES[$matches[4]] : ComposerVersion::STABILITY_STABLE,
-            count($matches) > 5 ? (int) $matches[5] : 0,
+            \count($matches) > 4 ? ComposerVersion::STABILITIES[$matches[4]] : ComposerVersion::STABILITY_STABLE,
+            \count($matches) > 5 ? (int) $matches[5] : 0,
             $hash,
         );
     }
diff --git a/src/Versioning/SemVer/SemVerVersion.php b/src/Versioning/SemVer/SemVerVersion.php
index 66af555..38dae09 100644
--- a/src/Versioning/SemVer/SemVerVersion.php
+++ b/src/Versioning/SemVer/SemVerVersion.php
@@ -35,14 +35,14 @@ public function __toString(): string
             $this->patch,
         );
 
-        if (count($this->preRelease)) {
+        if (\count($this->preRelease)) {
             $version .= sprintf(
                 '-%s',
                 implode('.', $this->preRelease),
             );
         }
 
-        if (count($this->build)) {
+        if (\count($this->build)) {
             $version .= sprintf(
                 '+%s',
                 implode('.', $this->build),
@@ -85,7 +85,7 @@ public function getBuild(): array
 
     public function isPreRelease(): bool
     {
-        return count($this->preRelease) > 0;
+        return \count($this->preRelease) > 0;
     }
 
     // region Aliases for HasSemVerLikeCompatibility trait
diff --git a/src/Versioning/SemVer/SemVerVersionComparator.php b/src/Versioning/SemVer/SemVerVersionComparator.php
index d50557e..07f65d4 100644
--- a/src/Versioning/SemVer/SemVerVersionComparator.php
+++ b/src/Versioning/SemVer/SemVerVersionComparator.php
@@ -75,7 +75,7 @@ private function determineType(SemVerVersion $before, SemVerVersion $after): ?in
         $beforePreRelease = $before->getPreRelease();
         $afterPreRelease = $after->getPreRelease();
 
-        for ($i = 0; $i < max(count($beforePreRelease), count($afterPreRelease)); ++$i) {
+        for ($i = 0; $i < max(\count($beforePreRelease), \count($afterPreRelease)); ++$i) {
             $beforeIdentifier = $beforePreRelease[$i] ?? 0;
             $afterIdentifier = $afterPreRelease[$i] ?? 0;
 
@@ -83,15 +83,15 @@ private function determineType(SemVerVersion $before, SemVerVersion $after): ?in
                 continue;
             }
 
-            if (is_int($beforeIdentifier) && is_int($afterIdentifier)) {
+            if (\is_int($beforeIdentifier) && \is_int($afterIdentifier)) {
                 return $beforeIdentifier < $afterIdentifier ? VersionDiff::UPGRADED : VersionDiff::DOWNGRADED;
             }
 
-            if (is_string($beforeIdentifier) && is_string($afterIdentifier)) {
+            if (\is_string($beforeIdentifier) && \is_string($afterIdentifier)) {
                 return strcmp($beforeIdentifier, $afterIdentifier) < 0 ? VersionDiff::UPGRADED : VersionDiff::DOWNGRADED;
             }
 
-            return is_int($beforeIdentifier) ? VersionDiff::UPGRADED : VersionDiff::DOWNGRADED;
+            return \is_int($beforeIdentifier) ? VersionDiff::UPGRADED : VersionDiff::DOWNGRADED;
         }
 
         return null;
diff --git a/src/Versioning/SemVer/SemVerVersionParser.php b/src/Versioning/SemVer/SemVerVersionParser.php
index d5e5132..020774d 100644
--- a/src/Versioning/SemVer/SemVerVersionParser.php
+++ b/src/Versioning/SemVer/SemVerVersionParser.php
@@ -20,13 +20,13 @@ public function parse(string $version): SemVerVersion|UnknownVersion
         $preRelease = [];
         $build = [];
 
-        if (array_key_exists('pre', $matches)) {
+        if (\array_key_exists('pre', $matches)) {
             foreach (explode('.', $matches['pre']) as $identifier) {
                 $preRelease[] = is_numeric($identifier) ? (int) $identifier : $identifier;
             }
         }
 
-        if (array_key_exists('build', $matches)) {
+        if (\array_key_exists('build', $matches)) {
             foreach (explode('.', $matches['build']) as $identifier) {
                 $build[] = is_numeric($identifier) ? (int) $identifier : $identifier;
             }
diff --git a/src/Versioning/Simple/SimpleVersionParser.php b/src/Versioning/Simple/SimpleVersionParser.php
index b7cdedb..00ae482 100644
--- a/src/Versioning/Simple/SimpleVersionParser.php
+++ b/src/Versioning/Simple/SimpleVersionParser.php
@@ -19,8 +19,8 @@ public function parse(string $version): SimpleVersion|UnknownVersion
         return new SimpleVersion(
             (int) $matches[1],
             (int) $matches[2],
-            count($matches) > 3 ? (int) $matches[3] : null,
-            count($matches) > 4 ? (int) $matches[4] : null,
+            \count($matches) > 3 ? (int) $matches[3] : null,
+            \count($matches) > 4 ? (int) $matches[4] : null,
         );
     }
 }
diff --git a/tests/Command/ScanCommandTest.php b/tests/Command/ScanCommandTest.php
index 175b46a..e3e373c 100644
--- a/tests/Command/ScanCommandTest.php
+++ b/tests/Command/ScanCommandTest.php
@@ -80,22 +80,22 @@ public function test(): void
 
         // In PHP 8.1.0, the problem is fixed that some emojis are counted as 2 chars.
         // So we need to switch the expectation in this test.
-        if (version_compare(PHP_VERSION, '8.1.0', '>=')) {
+        if (version_compare(\PHP_VERSION, '8.1.0', '>=')) {
             $this->assertSame(
                 <<<'EOS'
 
                     foo.lock
                     --------
 
-                     ---- ------------ -------- -------- 
-                           Package      Before   After   
-                     ---- ------------ -------- -------- 
-                      ➕   added                 v1.2.3  
-                      ⬆️   upgraded     v1.1.1   v2.2.2  
-                      ⬇️   downgraded   v4.4.4   v3.3.3  
-                      🔄   unknown      v5.5.5   v5.5.5  
-                      ➖   removed      v3.2.1           
-                     ---- ------------ -------- -------- 
+                     ---- ------------ -------- --------
+                           Package      Before   After
+                     ---- ------------ -------- --------
+                      ➕   added                 v1.2.3
+                      ⬆️   upgraded     v1.1.1   v2.2.2
+                      ⬇️   downgraded   v4.4.4   v3.3.3
+                      🔄   unknown      v5.5.5   v5.5.5
+                      ➖   removed      v3.2.1
+                     ---- ------------ -------- --------
 
                     bar.lock
                     --------
@@ -112,15 +112,15 @@ public function test(): void
                     foo.lock
                     --------
 
-                     ---- ------------ -------- -------- 
-                           Package      Before   After   
-                     ---- ------------ -------- -------- 
-                      ➕    added                 v1.2.3  
-                      ⬆️   upgraded     v1.1.1   v2.2.2  
-                      ⬇️   downgraded   v4.4.4   v3.3.3  
-                      🔄    unknown      v5.5.5   v5.5.5  
-                      ➖    removed      v3.2.1           
-                     ---- ------------ -------- -------- 
+                     ---- ------------ -------- --------
+                           Package      Before   After
+                     ---- ------------ -------- --------
+                      ➕    added                 v1.2.3
+                      ⬆️   upgraded     v1.1.1   v2.2.2
+                      ⬇️   downgraded   v4.4.4   v3.3.3
+                      🔄    unknown      v5.5.5   v5.5.5
+                      ➖    removed      v3.2.1
+                     ---- ------------ -------- --------
 
                     bar.lock
                     --------
diff --git a/tests/Scanner/Pnpm/PnpmLockParserTest.php b/tests/Scanner/Pnpm/PnpmLockParserTest.php
index c5330ae..f5ea998 100644
--- a/tests/Scanner/Pnpm/PnpmLockParserTest.php
+++ b/tests/Scanner/Pnpm/PnpmLockParserTest.php
@@ -20,7 +20,7 @@ class PnpmLockParserTest extends TestCase
     private const CONTENTS = <<<'EOS'
         dependencies:
           foo: 1.2.3-dev
-         
+
         devDependencies:
           bar: 3.2.1
         EOS;
diff --git a/tests/Versioning/Composer/ComposerVersionParserTest.php b/tests/Versioning/Composer/ComposerVersionParserTest.php
index ec35a8c..e8e1f55 100644
--- a/tests/Versioning/Composer/ComposerVersionParserTest.php
+++ b/tests/Versioning/Composer/ComposerVersionParserTest.php
@@ -18,7 +18,7 @@ protected function setUp(): void
 
     public function test(): void
     {
-        /* @var ComposerVersion $version */
+        /** @var ComposerVersion $version */
         $version = $this->parser->parse('v1.2.3-dev123', 'hash');
         $this->assertSame(1, $version->getX());
         $this->assertSame(2, $version->getY());
@@ -27,7 +27,7 @@ public function test(): void
         $this->assertSame(123, $version->getNumber());
         $this->assertSame('hash', $version->getHash());
 
-        /* @var ComposerVersion $version */
+        /** @var ComposerVersion $version */
         $version = $this->parser->parse('4.3.2', 'hash');
         $this->assertSame(4, $version->getX());
         $this->assertSame(3, $version->getY());
@@ -36,7 +36,7 @@ public function test(): void
         $this->assertSame(0, $version->getNumber());
         $this->assertSame('hash', $version->getHash());
 
-        /* @var ComposerVersion $version */
+        /** @var ComposerVersion $version */
         $version = $this->parser->parse('dev-branch', 'hash');
         $this->assertSame('dev-branch', $version->getBranch());
         $this->assertSame('hash', $version->getHash());

From fd8c06dce23c262d6f708f5a43a77b2fdd62fa4d Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:26:30 +0900
Subject: [PATCH 13/20] refactor: Run rector

---
 src/Comparator/DependencyCollectionIntersector.php | 7 ++++---
 src/Comparator/DependencyComparator.php            | 7 ++++---
 src/Git/GitProcessFactory.php                      | 2 +-
 src/Model/DependencyCollection.php                 | 2 +-
 src/Model/DependencyCollectionPair.php             | 4 ++--
 src/Model/FileDiff.php                             | 4 ++--
 tests/Versioning/VersionComparatorResolverTest.php | 2 +-
 7 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/Comparator/DependencyCollectionIntersector.php b/src/Comparator/DependencyCollectionIntersector.php
index 6117e4b..4c29cf8 100644
--- a/src/Comparator/DependencyCollectionIntersector.php
+++ b/src/Comparator/DependencyCollectionIntersector.php
@@ -4,6 +4,7 @@
 
 namespace Siketyan\Loxcan\Comparator;
 
+use Siketyan\Loxcan\Model\Dependency;
 use Siketyan\Loxcan\Model\DependencyCollection;
 use Siketyan\Loxcan\Model\DependencyDiff;
 use Siketyan\Loxcan\Model\Package;
@@ -13,7 +14,7 @@ class DependencyCollectionIntersector
     use DependencyCollectionTrait;
 
     public function __construct(
-        private DependencyComparator $comparator,
+        private readonly DependencyComparator $comparator,
     ) {
     }
 
@@ -33,7 +34,7 @@ public function intersect(DependencyCollection $a, DependencyCollection $b): arr
             $before = $this->getDependencyByPackage($a, $package);
             $after = $this->getDependencyByPackage($b, $package);
 
-            if ($before === null || $after === null) {
+            if (!$before instanceof Dependency || !$after instanceof Dependency) {
                 continue;
             }
 
@@ -42,7 +43,7 @@ public function intersect(DependencyCollection $a, DependencyCollection $b): arr
 
         return array_filter(
             $diff,
-            fn (?DependencyDiff $d) => $d !== null,
+            fn (?DependencyDiff $d): bool => $d !== null,
         );
     }
 }
diff --git a/src/Comparator/DependencyComparator.php b/src/Comparator/DependencyComparator.php
index c5abaac..92b853d 100644
--- a/src/Comparator/DependencyComparator.php
+++ b/src/Comparator/DependencyComparator.php
@@ -7,13 +7,14 @@
 use Siketyan\Loxcan\Exception\InvalidComparisonException;
 use Siketyan\Loxcan\Model\Dependency;
 use Siketyan\Loxcan\Model\DependencyDiff;
+use Siketyan\Loxcan\Versioning\VersionComparatorInterface;
 use Siketyan\Loxcan\Versioning\VersionComparatorResolver;
 use Siketyan\Loxcan\Versioning\VersionDiff;
 
 class DependencyComparator
 {
     public function __construct(
-        private VersionComparatorResolver $versionComparatorResolver,
+        private readonly VersionComparatorResolver $versionComparatorResolver,
     ) {
     }
 
@@ -30,7 +31,7 @@ public function compare(Dependency $before, Dependency $after): ?DependencyDiff
             $after->getVersion(),
         );
 
-        if ($versionComparator === null) {
+        if (!$versionComparator instanceof VersionComparatorInterface) {
             $versionDiff = new VersionDiff(
                 VersionDiff::UNKNOWN,
                 $before->getVersion(),
@@ -43,7 +44,7 @@ public function compare(Dependency $before, Dependency $after): ?DependencyDiff
             );
         }
 
-        if ($versionDiff === null) {
+        if (!$versionDiff instanceof VersionDiff) {
             return null;
         }
 
diff --git a/src/Git/GitProcessFactory.php b/src/Git/GitProcessFactory.php
index d64ef71..ed3c89c 100644
--- a/src/Git/GitProcessFactory.php
+++ b/src/Git/GitProcessFactory.php
@@ -10,7 +10,7 @@
 class GitProcessFactory
 {
     public function __construct(
-        private string $path = 'git',
+        private readonly string $path = 'git',
     ) {
     }
 
diff --git a/src/Model/DependencyCollection.php b/src/Model/DependencyCollection.php
index b7b237e..3462240 100644
--- a/src/Model/DependencyCollection.php
+++ b/src/Model/DependencyCollection.php
@@ -10,7 +10,7 @@ class DependencyCollection
      * @param Dependency[] $dependencies
      */
     public function __construct(
-        private array $dependencies,
+        private readonly array $dependencies,
     ) {
     }
 
diff --git a/src/Model/DependencyCollectionPair.php b/src/Model/DependencyCollectionPair.php
index 358ad1c..1aefcea 100644
--- a/src/Model/DependencyCollectionPair.php
+++ b/src/Model/DependencyCollectionPair.php
@@ -7,8 +7,8 @@
 class DependencyCollectionPair
 {
     public function __construct(
-        private DependencyCollection $before,
-        private DependencyCollection $after,
+        private readonly DependencyCollection $before,
+        private readonly DependencyCollection $after,
     ) {
     }
 
diff --git a/src/Model/FileDiff.php b/src/Model/FileDiff.php
index b4b45ec..8a68268 100644
--- a/src/Model/FileDiff.php
+++ b/src/Model/FileDiff.php
@@ -7,8 +7,8 @@
 class FileDiff
 {
     public function __construct(
-        private ?string $before,
-        private ?string $after,
+        private readonly ?string $before,
+        private readonly ?string $after,
     ) {
     }
 
diff --git a/tests/Versioning/VersionComparatorResolverTest.php b/tests/Versioning/VersionComparatorResolverTest.php
index 930a7e5..12769df 100644
--- a/tests/Versioning/VersionComparatorResolverTest.php
+++ b/tests/Versioning/VersionComparatorResolverTest.php
@@ -46,7 +46,7 @@ public function test(): void
     }
 }
 
-abstract class AbstractVersion implements VersionInterface
+abstract class AbstractVersion implements VersionInterface, \Stringable
 {
     public function __toString(): string
     {

From 492d8199bcba1d7378e5b754fb9bca1d910711e8 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:27:05 +0900
Subject: [PATCH 14/20] ci: Fix command line

---
 .github/workflows/php.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
index ad7325d..ac4c5f4 100644
--- a/.github/workflows/php.yml
+++ b/.github/workflows/php.yml
@@ -38,7 +38,7 @@ jobs:
         run: composer install --prefer-dist --no-progress
 
       - name: Run linter
-        run: composer run-script lint
+        run: composer run-script analyse
 
       - name: Run test suite
         run: composer run-script codecov

From ba8f61a98a1032654fea5e227651964a1e68db82 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:31:31 +0900
Subject: [PATCH 15/20] build: Disable PHPStan temporary

---
 composer.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/composer.json b/composer.json
index c52aec9..53540a3 100644
--- a/composer.json
+++ b/composer.json
@@ -55,7 +55,7 @@
         "bin/loxcan"
     ],
     "scripts": {
-        "analyse": "static-analysis-kit analyse",
+        "analyse": "static-analysis-kit analyse --no-phpstan",
         "fix": "static-analysis-kit fix",
         "fix:all": "static-analysis-kit fix --risky --rector",
         "fix:rector": "static-analysis-kit fix --rector",

From 27436e57e525342e045a20c76a6f3861c23631b9 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:32:59 +0900
Subject: [PATCH 16/20] build: PHP_CS_FIXER_IGNORE_ENV=1

---
 composer.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.json b/composer.json
index 53540a3..200845f 100644
--- a/composer.json
+++ b/composer.json
@@ -55,11 +55,11 @@
         "bin/loxcan"
     ],
     "scripts": {
-        "analyse": "static-analysis-kit analyse --no-phpstan",
-        "fix": "static-analysis-kit fix",
-        "fix:all": "static-analysis-kit fix --risky --rector",
-        "fix:rector": "static-analysis-kit fix --rector",
-        "fix:risky": "static-analysis-kit fix --risky",
+        "analyse": "PHP_CS_FIXER_IGNORE_ENV=1 static-analysis-kit analyse --no-phpstan",
+        "fix": "PHP_CS_FIXER_IGNORE_ENV=1 static-analysis-kit fix",
+        "fix:all": "PHP_CS_FIXER_IGNORE_ENV=1 static-analysis-kit fix --risky --rector",
+        "fix:rector": "PHP_CS_FIXER_IGNORE_ENV=1 static-analysis-kit fix --rector",
+        "fix:risky": "PHP_CS_FIXER_IGNORE_ENV=1 static-analysis-kit fix --risky",
         "coverage": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-html ./coverage",
         "codecov": "XDEBUG_MODE=coverage phpunit -c ./phpunit.xml --coverage-clover ./coverage.xml",
         "test": "phpunit -c ./phpunit.xml",

From d36a1bacb77820b54c67a8a90f372eb13f421786 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:55:53 +0900
Subject: [PATCH 17/20] refactor: Run rector again

---
 rector.php                                    |  5 ++
 src/Command/ScanCommand.php                   |  6 +-
 .../DependencyCollectionComparator.php        |  4 +-
 src/Git/Git.php                               |  8 +-
 src/Model/Dependency.php                      |  4 +-
 src/Model/DependencyCollectionDiff.php        |  6 +-
 src/Model/DependencyDiff.php                  |  4 +-
 src/Model/Package.php                         |  2 +-
 src/Model/Repository.php                      |  2 +-
 src/Reporter/GitHub/GitHubClient.php          | 25 ++++--
 src/Reporter/GitHub/GitHubComment.php         |  6 +-
 src/Reporter/GitHub/GitHubMarkdownBuilder.php |  2 +-
 src/Reporter/GitHub/GitHubReporter.php        |  6 +-
 src/Reporter/GitHub/GitHubUser.php            |  4 +-
 src/Scanner/Cargo/CargoLockParser.php         |  6 +-
 src/Scanner/Cargo/CargoScanner.php            |  2 +-
 src/Scanner/Composer/ComposerLockParser.php   |  6 +-
 src/Scanner/Composer/ComposerScanner.php      |  2 +-
 src/Scanner/Npm/NpmLockParser.php             |  8 +-
 src/Scanner/Npm/NpmScanner.php                |  2 +-
 src/Scanner/Pip/PipLockParser.php             |  8 +-
 src/Scanner/Pip/PipScanner.php                |  2 +-
 src/Scanner/Pnpm/PnpmLockParser.php           |  6 +-
 src/Scanner/Pnpm/PnpmScanner.php              |  2 +-
 src/Scanner/Pub/PubLockParser.php             |  6 +-
 src/Scanner/Pub/PubScanner.php                |  2 +-
 src/Scanner/ScannerResolver.php               |  2 +-
 src/Scanner/Yarn/YarnLockParser.php           |  6 +-
 src/Scanner/Yarn/YarnScanner.php              |  2 +-
 src/UseCase/ReportUseCase.php                 |  2 +-
 src/UseCase/ScanUseCase.php                   |  9 ++-
 .../CompatibilityAwareInterface.php           |  3 -
 src/Versioning/Composer/ComposerVersion.php   | 16 ++--
 src/Versioning/HasSemVerLikeCompatibility.php |  3 -
 src/Versioning/SemVer/SemVerVersion.php       | 18 ++---
 src/Versioning/SemVer/SemVerVersionParser.php |  4 +-
 src/Versioning/Simple/SimpleVersion.php       | 10 +--
 src/Versioning/Unknown/UnknownVersion.php     |  4 +-
 src/Versioning/VersionComparatorResolver.php  |  2 +-
 src/Versioning/VersionDiff.php                | 12 ++-
 tests/Command/ScanCommandTest.php             | 76 ++++++-------------
 41 files changed, 140 insertions(+), 165 deletions(-)

diff --git a/rector.php b/rector.php
index c157031..ae52060 100644
--- a/rector.php
+++ b/rector.php
@@ -3,6 +3,7 @@
 declare(strict_types=1);
 
 use Quartetcom\StaticAnalysisKit\Rector\Config;
+use Rector\CodeQuality\Rector\For_\ForRepeatedCountToOwnVariableRector;
 use Rector\Config\RectorConfig;
 
 return static function (RectorConfig $rectorConfig): void {
@@ -11,5 +12,9 @@
         '/tests',
     ]));
 
+    $rectorConfig->skip([
+        ForRepeatedCountToOwnVariableRector::class,
+    ]);
+
     Config::use($rectorConfig);
 };
diff --git a/src/Command/ScanCommand.php b/src/Command/ScanCommand.php
index 6c8f04c..18f411e 100644
--- a/src/Command/ScanCommand.php
+++ b/src/Command/ScanCommand.php
@@ -23,8 +23,8 @@
 class ScanCommand extends Command
 {
     public function __construct(
-        private ScanUseCase $useCase,
-        private ReportUseCase $reportUseCase,
+        private readonly ScanUseCase $useCase,
+        private readonly ReportUseCase $reportUseCase,
     ) {
         parent::__construct();
     }
@@ -50,7 +50,7 @@ public function execute(InputInterface $input, OutputInterface $output): int
 
         $diffs = $this->useCase->scan($repository, $base, $head);
 
-        if (\count($diffs) === 0) {
+        if ($diffs === []) {
             $io->writeln(
                 '✨ No lock file changes found, looks shine!',
             );
diff --git a/src/Comparator/DependencyCollectionComparator.php b/src/Comparator/DependencyCollectionComparator.php
index 4f3e564..17f73ac 100644
--- a/src/Comparator/DependencyCollectionComparator.php
+++ b/src/Comparator/DependencyCollectionComparator.php
@@ -10,8 +10,8 @@
 class DependencyCollectionComparator
 {
     public function __construct(
-        private DependencyCollectionSubtractor $subtractor,
-        private DependencyCollectionIntersector $intersector,
+        private readonly DependencyCollectionSubtractor $subtractor,
+        private readonly DependencyCollectionIntersector $intersector,
     ) {
     }
 
diff --git a/src/Git/Git.php b/src/Git/Git.php
index 4f86050..3fed868 100644
--- a/src/Git/Git.php
+++ b/src/Git/Git.php
@@ -12,7 +12,7 @@
 class Git
 {
     public function __construct(
-        private GitProcessFactory $processFactory,
+        private readonly GitProcessFactory $processFactory,
     ) {
     }
 
@@ -44,7 +44,7 @@ public function fetchChangedFiles(Repository $repository, ?string $base = null,
 
         try {
             return array_map(
-                fn (string $path) => RelativePath::fromString($path),
+                fn (string $path): RelativePathInterface => RelativePath::fromString($path),
                 array_filter(
                     explode("\n", $process->getOutput()),
                     fn (string $line): bool => $line !== '',
@@ -93,9 +93,7 @@ public function checkFileExists(Repository $repository, ?string $branch, Relativ
 
         $process->run();
 
-        return !(!$process->isSuccessful())
-
-        ;
+        return $process->isSuccessful();
     }
 
     public function supports(Repository $repository): bool
diff --git a/src/Model/Dependency.php b/src/Model/Dependency.php
index c972d24..7b75dcd 100644
--- a/src/Model/Dependency.php
+++ b/src/Model/Dependency.php
@@ -9,8 +9,8 @@
 class Dependency
 {
     public function __construct(
-        private Package $package,
-        private VersionInterface $version,
+        private readonly Package $package,
+        private readonly VersionInterface $version,
     ) {
     }
 
diff --git a/src/Model/DependencyCollectionDiff.php b/src/Model/DependencyCollectionDiff.php
index e1e84b7..9e11696 100644
--- a/src/Model/DependencyCollectionDiff.php
+++ b/src/Model/DependencyCollectionDiff.php
@@ -12,9 +12,9 @@ class DependencyCollectionDiff
      * @param Dependency[]     $removed
      */
     public function __construct(
-        private array $added = [],
-        private array $updated = [],
-        private array $removed = [],
+        private readonly array $added = [],
+        private readonly array $updated = [],
+        private readonly array $removed = [],
     ) {
     }
 
diff --git a/src/Model/DependencyDiff.php b/src/Model/DependencyDiff.php
index 3b8f1c2..2720845 100644
--- a/src/Model/DependencyDiff.php
+++ b/src/Model/DependencyDiff.php
@@ -9,8 +9,8 @@
 class DependencyDiff
 {
     public function __construct(
-        private Package $package,
-        private VersionDiff $versionDiff,
+        private readonly Package $package,
+        private readonly VersionDiff $versionDiff,
     ) {
     }
 
diff --git a/src/Model/Package.php b/src/Model/Package.php
index a24bbe5..8399ed7 100644
--- a/src/Model/Package.php
+++ b/src/Model/Package.php
@@ -7,7 +7,7 @@
 class Package
 {
     public function __construct(
-        private string $name,
+        private readonly string $name,
     ) {
     }
 
diff --git a/src/Model/Repository.php b/src/Model/Repository.php
index d721451..f5b8144 100644
--- a/src/Model/Repository.php
+++ b/src/Model/Repository.php
@@ -9,7 +9,7 @@
 class Repository
 {
     public function __construct(
-        private PathInterface $path,
+        private readonly PathInterface $path,
     ) {
     }
 
diff --git a/src/Reporter/GitHub/GitHubClient.php b/src/Reporter/GitHub/GitHubClient.php
index b1ee0b2..ac7c192 100644
--- a/src/Reporter/GitHub/GitHubClient.php
+++ b/src/Reporter/GitHub/GitHubClient.php
@@ -6,7 +6,6 @@
 
 use GuzzleHttp\ClientInterface;
 use GuzzleHttp\Exception\GuzzleException;
-use JetBrains\PhpStorm\ArrayShape;
 use Siketyan\Loxcan\Reporter\EnvironmentTrait;
 
 class GitHubClient
@@ -14,13 +13,15 @@ class GitHubClient
     use EnvironmentTrait;
 
     public function __construct(
-        private ClientInterface $httpClient,
-        private GitHubUserPool $userPool,
+        private readonly ClientInterface $httpClient,
+        private readonly GitHubUserPool $userPool,
     ) {
     }
 
     /**
      * @return GitHubComment[]
+     *
+     * @throws \JsonException
      */
     public function getComments(string $owner, string $repo, int $issueNumber): array
     {
@@ -39,7 +40,7 @@ public function getComments(string $owner, string $repo, int $issueNumber): arra
         }
 
         $json = $response->getBody()->getContents();
-        $assoc = json_decode($json, true);
+        $assoc = json_decode($json, true, 512, \JSON_THROW_ON_ERROR);
         $comments = [];
 
         foreach ($assoc as $row) {
@@ -53,6 +54,9 @@ public function getComments(string $owner, string $repo, int $issueNumber): arra
         return $comments;
     }
 
+    /**
+     * @throws \JsonException
+     */
     public function createComment(string $owner, string $repo, int $issueNumber, string $body): void
     {
         try {
@@ -63,7 +67,7 @@ public function createComment(string $owner, string $repo, int $issueNumber, str
                     'headers' => $this->getDefaultHeaders(),
                     'body' => json_encode([
                         'body' => $body,
-                    ]),
+                    ], \JSON_THROW_ON_ERROR),
                 ],
             );
         } catch (GuzzleException $e) {
@@ -75,6 +79,9 @@ public function createComment(string $owner, string $repo, int $issueNumber, str
         }
     }
 
+    /**
+     * @throws \JsonException
+     */
     public function updateComment(string $owner, string $repo, GitHubComment $comment, string $body): void
     {
         try {
@@ -85,7 +92,7 @@ public function updateComment(string $owner, string $repo, GitHubComment $commen
                     'headers' => $this->getDefaultHeaders(),
                     'body' => json_encode([
                         'body' => $body,
-                    ]),
+                    ], \JSON_THROW_ON_ERROR),
                 ],
             );
         } catch (GuzzleException $e) {
@@ -97,7 +104,9 @@ public function updateComment(string $owner, string $repo, GitHubComment $commen
         }
     }
 
-    #[ArrayShape(['Accept' => 'string', 'Authorization' => 'string'])]
+    /**
+     * @return array{Accept: string, Authorization: string}
+     */
     private function getDefaultHeaders(): array
     {
         return [
@@ -114,7 +123,7 @@ private function getOrCreateUser(array $assoc): GitHubUser
         $id = $assoc['id'];
         $user = $this->userPool->get($id);
 
-        if ($user === null) {
+        if (!$user instanceof GitHubUser) {
             $user = new GitHubUser($id, $assoc['login']);
             $this->userPool->add($user);
         }
diff --git a/src/Reporter/GitHub/GitHubComment.php b/src/Reporter/GitHub/GitHubComment.php
index 598ac87..66d2bdd 100644
--- a/src/Reporter/GitHub/GitHubComment.php
+++ b/src/Reporter/GitHub/GitHubComment.php
@@ -7,9 +7,9 @@
 class GitHubComment
 {
     public function __construct(
-        private int $id,
-        private string $body,
-        private GitHubUser $author,
+        private readonly int $id,
+        private readonly string $body,
+        private readonly GitHubUser $author,
     ) {
     }
 
diff --git a/src/Reporter/GitHub/GitHubMarkdownBuilder.php b/src/Reporter/GitHub/GitHubMarkdownBuilder.php
index f2b1c90..aae02bc 100644
--- a/src/Reporter/GitHub/GitHubMarkdownBuilder.php
+++ b/src/Reporter/GitHub/GitHubMarkdownBuilder.php
@@ -13,7 +13,7 @@ class GitHubMarkdownBuilder
     #[Pure]
     public function build(array $diffs): string
     {
-        if (\count($diffs) === 0) {
+        if ($diffs === []) {
             return '✨ No lock file changes found, looks shine!';
         }
 
diff --git a/src/Reporter/GitHub/GitHubReporter.php b/src/Reporter/GitHub/GitHubReporter.php
index 3df8cb6..4b4d7a4 100644
--- a/src/Reporter/GitHub/GitHubReporter.php
+++ b/src/Reporter/GitHub/GitHubReporter.php
@@ -12,8 +12,8 @@ class GitHubReporter implements ReporterInterface
     use EnvironmentTrait;
 
     public function __construct(
-        private GitHubMarkdownBuilder $markdownBuilder,
-        private GitHubClient $client,
+        private readonly GitHubMarkdownBuilder $markdownBuilder,
+        private readonly GitHubClient $client,
     ) {
     }
 
@@ -34,7 +34,7 @@ public function report(array $diffs): void
             fn (GitHubComment $comment): bool => $comment->getAuthor()->getLogin() === $username,
         );
 
-        if (\count($myComments) > 0) {
+        if ($myComments !== []) {
             $this->client->updateComment(
                 $owner,
                 $repo,
diff --git a/src/Reporter/GitHub/GitHubUser.php b/src/Reporter/GitHub/GitHubUser.php
index 68de3e7..adf1c1a 100644
--- a/src/Reporter/GitHub/GitHubUser.php
+++ b/src/Reporter/GitHub/GitHubUser.php
@@ -7,8 +7,8 @@
 class GitHubUser
 {
     public function __construct(
-        private int $id,
-        private string $login,
+        private readonly int $id,
+        private readonly string $login,
     ) {
     }
 
diff --git a/src/Scanner/Cargo/CargoLockParser.php b/src/Scanner/Cargo/CargoLockParser.php
index 6abe4b8..182a875 100644
--- a/src/Scanner/Cargo/CargoLockParser.php
+++ b/src/Scanner/Cargo/CargoLockParser.php
@@ -13,8 +13,8 @@
 class CargoLockParser
 {
     public function __construct(
-        private CargoPackagePool $packagePool,
-        private SemVerVersionParser $versionParser,
+        private readonly CargoPackagePool $packagePool,
+        private readonly SemVerVersionParser $versionParser,
     ) {
     }
 
@@ -32,7 +32,7 @@ public function parse(?string $toml): DependencyCollection
             $version = $package['version'];
             $package = $this->packagePool->get($name);
 
-            if ($package === null) {
+            if (!$package instanceof Package) {
                 $package = new Package($name);
                 $this->packagePool->add($package);
             }
diff --git a/src/Scanner/Cargo/CargoScanner.php b/src/Scanner/Cargo/CargoScanner.php
index 41d4ca5..b65d1f1 100644
--- a/src/Scanner/Cargo/CargoScanner.php
+++ b/src/Scanner/Cargo/CargoScanner.php
@@ -12,7 +12,7 @@
 class CargoScanner implements ScannerInterface
 {
     public function __construct(
-        private CargoLockParser $parser,
+        private readonly CargoLockParser $parser,
     ) {
     }
 
diff --git a/src/Scanner/Composer/ComposerLockParser.php b/src/Scanner/Composer/ComposerLockParser.php
index 2b4b450..70526c2 100644
--- a/src/Scanner/Composer/ComposerLockParser.php
+++ b/src/Scanner/Composer/ComposerLockParser.php
@@ -13,8 +13,8 @@
 class ComposerLockParser
 {
     public function __construct(
-        private ComposerPackagePool $packagePool,
-        private ComposerVersionParser $versionParser,
+        private readonly ComposerPackagePool $packagePool,
+        private readonly ComposerVersionParser $versionParser,
     ) {
     }
 
@@ -47,7 +47,7 @@ public function parse(?string $json): DependencyCollection
             $hash = $package['dist']['reference'] ?? '';
             $package = $this->packagePool->get($name);
 
-            if ($package === null) {
+            if (!$package instanceof Package) {
                 $package = new Package($name);
                 $this->packagePool->add($package);
             }
diff --git a/src/Scanner/Composer/ComposerScanner.php b/src/Scanner/Composer/ComposerScanner.php
index 8a2498d..88a31eb 100644
--- a/src/Scanner/Composer/ComposerScanner.php
+++ b/src/Scanner/Composer/ComposerScanner.php
@@ -12,7 +12,7 @@
 class ComposerScanner implements ScannerInterface
 {
     public function __construct(
-        private ComposerLockParser $parser,
+        private readonly ComposerLockParser $parser,
     ) {
     }
 
diff --git a/src/Scanner/Npm/NpmLockParser.php b/src/Scanner/Npm/NpmLockParser.php
index fe321e6..ab75763 100644
--- a/src/Scanner/Npm/NpmLockParser.php
+++ b/src/Scanner/Npm/NpmLockParser.php
@@ -13,8 +13,8 @@
 class NpmLockParser
 {
     public function __construct(
-        private NpmPackagePool $packagePool,
-        private SemVerVersionParser $versionParser,
+        private readonly NpmPackagePool $packagePool,
+        private readonly SemVerVersionParser $versionParser,
     ) {
     }
 
@@ -38,7 +38,7 @@ public function parse(?string $json): DependencyCollection
         $dependencies = [];
 
         foreach ($packages as $name => $package) {
-            $name = preg_replace('/^node_modules\//', '', $name);
+            $name = preg_replace('/^node_modules\//', '', (string) $name);
             $version = $package['version'];
             $package = $this->packagePool->get($name);
 
@@ -46,7 +46,7 @@ public function parse(?string $json): DependencyCollection
                 continue;
             }
 
-            if ($package === null) {
+            if (!$package instanceof Package) {
                 $package = new Package($name);
                 $this->packagePool->add($package);
             }
diff --git a/src/Scanner/Npm/NpmScanner.php b/src/Scanner/Npm/NpmScanner.php
index 24ff1b5..15eb09b 100644
--- a/src/Scanner/Npm/NpmScanner.php
+++ b/src/Scanner/Npm/NpmScanner.php
@@ -12,7 +12,7 @@
 class NpmScanner implements ScannerInterface
 {
     public function __construct(
-        private NpmLockParser $parser,
+        private readonly NpmLockParser $parser,
     ) {
     }
 
diff --git a/src/Scanner/Pip/PipLockParser.php b/src/Scanner/Pip/PipLockParser.php
index 75c5dfc..66d8358 100644
--- a/src/Scanner/Pip/PipLockParser.php
+++ b/src/Scanner/Pip/PipLockParser.php
@@ -13,8 +13,8 @@
 class PipLockParser
 {
     public function __construct(
-        private PipPackagePool $packagePool,
-        private SimpleVersionParser $versionParser,
+        private readonly PipPackagePool $packagePool,
+        private readonly SimpleVersionParser $versionParser,
     ) {
     }
 
@@ -38,7 +38,7 @@ public function parse(?string $json): DependencyCollection
         $dependencies = [];
 
         foreach ($packages as $name => $package) {
-            $version = $package['version'];
+            $version = (string) $package['version'];
             if (!str_starts_with($version, '==')) {
                 continue;
             }
@@ -46,7 +46,7 @@ public function parse(?string $json): DependencyCollection
             $version = substr($version, 2);
             $package = $this->packagePool->get($name);
 
-            if ($package === null) {
+            if (!$package instanceof Package) {
                 $package = new Package($name);
                 $this->packagePool->add($package);
             }
diff --git a/src/Scanner/Pip/PipScanner.php b/src/Scanner/Pip/PipScanner.php
index 1dea3ec..43c7787 100644
--- a/src/Scanner/Pip/PipScanner.php
+++ b/src/Scanner/Pip/PipScanner.php
@@ -12,7 +12,7 @@
 class PipScanner implements ScannerInterface
 {
     public function __construct(
-        private PipLockParser $parser,
+        private readonly PipLockParser $parser,
     ) {
     }
 
diff --git a/src/Scanner/Pnpm/PnpmLockParser.php b/src/Scanner/Pnpm/PnpmLockParser.php
index ca452b6..9b72625 100644
--- a/src/Scanner/Pnpm/PnpmLockParser.php
+++ b/src/Scanner/Pnpm/PnpmLockParser.php
@@ -13,8 +13,8 @@
 class PnpmLockParser
 {
     public function __construct(
-        private PnpmPackagePool $packagePool,
-        private SemVerVersionParser $versionParser,
+        private readonly PnpmPackagePool $packagePool,
+        private readonly SemVerVersionParser $versionParser,
     ) {
     }
 
@@ -31,7 +31,7 @@ public function parse(?string $yaml): DependencyCollection
         foreach ($packages as $name => $version) {
             $package = $this->packagePool->get($name);
 
-            if ($package === null) {
+            if (!$package instanceof Package) {
                 $package = new Package($name);
                 $this->packagePool->add($package);
             }
diff --git a/src/Scanner/Pnpm/PnpmScanner.php b/src/Scanner/Pnpm/PnpmScanner.php
index a85d4a5..fb9b11f 100644
--- a/src/Scanner/Pnpm/PnpmScanner.php
+++ b/src/Scanner/Pnpm/PnpmScanner.php
@@ -12,7 +12,7 @@
 class PnpmScanner implements ScannerInterface
 {
     public function __construct(
-        private PnpmLockParser $parser,
+        private readonly PnpmLockParser $parser,
     ) {
     }
 
diff --git a/src/Scanner/Pub/PubLockParser.php b/src/Scanner/Pub/PubLockParser.php
index 07a66eb..1cd8e14 100644
--- a/src/Scanner/Pub/PubLockParser.php
+++ b/src/Scanner/Pub/PubLockParser.php
@@ -13,8 +13,8 @@
 class PubLockParser
 {
     public function __construct(
-        private PubPackagePool $packagePool,
-        private SemVerVersionParser $versionParser,
+        private readonly PubPackagePool $packagePool,
+        private readonly SemVerVersionParser $versionParser,
     ) {
     }
 
@@ -32,7 +32,7 @@ public function parse(?string $yaml): DependencyCollection
             $version = $package['version'];
             $package = $this->packagePool->get($name);
 
-            if ($package === null) {
+            if (!$package instanceof Package) {
                 $package = new Package($name);
                 $this->packagePool->add($package);
             }
diff --git a/src/Scanner/Pub/PubScanner.php b/src/Scanner/Pub/PubScanner.php
index 5f600f5..b74b240 100644
--- a/src/Scanner/Pub/PubScanner.php
+++ b/src/Scanner/Pub/PubScanner.php
@@ -12,7 +12,7 @@
 class PubScanner implements ScannerInterface
 {
     public function __construct(
-        private PubLockParser $parser,
+        private readonly PubLockParser $parser,
     ) {
     }
 
diff --git a/src/Scanner/ScannerResolver.php b/src/Scanner/ScannerResolver.php
index f17004f..8b67a93 100644
--- a/src/Scanner/ScannerResolver.php
+++ b/src/Scanner/ScannerResolver.php
@@ -12,7 +12,7 @@ class ScannerResolver
      * @param ScannerInterface[] $scanners
      */
     public function __construct(
-        private array $scanners,
+        private readonly array $scanners,
     ) {
     }
 
diff --git a/src/Scanner/Yarn/YarnLockParser.php b/src/Scanner/Yarn/YarnLockParser.php
index d6ba435..a77a68e 100644
--- a/src/Scanner/Yarn/YarnLockParser.php
+++ b/src/Scanner/Yarn/YarnLockParser.php
@@ -13,8 +13,8 @@
 class YarnLockParser
 {
     public function __construct(
-        private YarnPackagePool $packagePool,
-        private SemVerVersionParser $versionParser,
+        private readonly YarnPackagePool $packagePool,
+        private readonly SemVerVersionParser $versionParser,
     ) {
     }
 
@@ -30,7 +30,7 @@ public function parse(?string $lock): DependencyCollection
                 $name = substr($name, 0, strrpos($name, '@', -1));
                 $pkg = $this->packagePool->get($name);
 
-                if ($pkg === null) {
+                if (!$pkg instanceof Package) {
                     $pkg = new Package($name);
                     $this->packagePool->add($pkg);
                 }
diff --git a/src/Scanner/Yarn/YarnScanner.php b/src/Scanner/Yarn/YarnScanner.php
index b5268f7..9c83941 100644
--- a/src/Scanner/Yarn/YarnScanner.php
+++ b/src/Scanner/Yarn/YarnScanner.php
@@ -12,7 +12,7 @@
 class YarnScanner implements ScannerInterface
 {
     public function __construct(
-        private YarnLockParser $parser,
+        private readonly YarnLockParser $parser,
     ) {
     }
 
diff --git a/src/UseCase/ReportUseCase.php b/src/UseCase/ReportUseCase.php
index 44000a3..293c2a5 100644
--- a/src/UseCase/ReportUseCase.php
+++ b/src/UseCase/ReportUseCase.php
@@ -13,7 +13,7 @@ class ReportUseCase
      * @param ReporterInterface[] $reporters
      */
     public function __construct(
-        private array $reporters,
+        private readonly array $reporters,
     ) {
     }
 
diff --git a/src/UseCase/ScanUseCase.php b/src/UseCase/ScanUseCase.php
index 86e3fc5..2eaa417 100644
--- a/src/UseCase/ScanUseCase.php
+++ b/src/UseCase/ScanUseCase.php
@@ -9,14 +9,15 @@
 use Siketyan\Loxcan\Model\DependencyCollectionDiff;
 use Siketyan\Loxcan\Model\FileDiff;
 use Siketyan\Loxcan\Model\Repository;
+use Siketyan\Loxcan\Scanner\ScannerInterface;
 use Siketyan\Loxcan\Scanner\ScannerResolver;
 
 class ScanUseCase
 {
     public function __construct(
-        private Git $git,
-        private ScannerResolver $scannerResolver,
-        private DependencyCollectionComparator $comparator,
+        private readonly Git $git,
+        private readonly ScannerResolver $scannerResolver,
+        private readonly DependencyCollectionComparator $comparator,
     ) {
     }
 
@@ -32,7 +33,7 @@ public function scan(Repository $repository, ?string $base = null, ?string $head
             $absolutePath = $repository->getPath()->join($path);
             $scanner = $this->scannerResolver->resolve($absolutePath);
 
-            if ($scanner === null) {
+            if (!$scanner instanceof ScannerInterface) {
                 continue;
             }
 
diff --git a/src/Versioning/CompatibilityAwareInterface.php b/src/Versioning/CompatibilityAwareInterface.php
index ac30aba..e02d1d2 100644
--- a/src/Versioning/CompatibilityAwareInterface.php
+++ b/src/Versioning/CompatibilityAwareInterface.php
@@ -4,10 +4,7 @@
 
 namespace Siketyan\Loxcan\Versioning;
 
-use JetBrains\PhpStorm\Pure;
-
 interface CompatibilityAwareInterface
 {
-    #[Pure]
     public function isCompatibleWith(self $another): bool;
 }
diff --git a/src/Versioning/Composer/ComposerVersion.php b/src/Versioning/Composer/ComposerVersion.php
index 2083a31..03dbbe6 100644
--- a/src/Versioning/Composer/ComposerVersion.php
+++ b/src/Versioning/Composer/ComposerVersion.php
@@ -8,7 +8,7 @@
 use Siketyan\Loxcan\Versioning\HasSemVerLikeCompatibility;
 use Siketyan\Loxcan\Versioning\VersionInterface;
 
-class ComposerVersion implements VersionInterface, CompatibilityAwareInterface
+class ComposerVersion implements VersionInterface, CompatibilityAwareInterface, \Stringable
 {
     use HasSemVerLikeCompatibility;
 
@@ -27,13 +27,13 @@ class ComposerVersion implements VersionInterface, CompatibilityAwareInterface
     public const STABILITY_STABLE = 100;
 
     public function __construct(
-        private int $x,
-        private int $y,
-        private int $z,
-        private int $stability = self::STABILITY_STABLE,
-        private int $number = 0,
-        private string $hash = '',
-        private ?string $branch = null,
+        private readonly int $x,
+        private readonly int $y,
+        private readonly int $z,
+        private readonly int $stability = self::STABILITY_STABLE,
+        private readonly int $number = 0,
+        private readonly string $hash = '',
+        private readonly ?string $branch = null,
     ) {
     }
 
diff --git a/src/Versioning/HasSemVerLikeCompatibility.php b/src/Versioning/HasSemVerLikeCompatibility.php
index 858fe95..98a0116 100644
--- a/src/Versioning/HasSemVerLikeCompatibility.php
+++ b/src/Versioning/HasSemVerLikeCompatibility.php
@@ -4,14 +4,11 @@
 
 namespace Siketyan\Loxcan\Versioning;
 
-use JetBrains\PhpStorm\Pure;
-
 /**
  * @implements CompatibilityAwareInterface
  */
 trait HasSemVerLikeCompatibility
 {
-    #[Pure]
     public function isCompatibleWith(CompatibilityAwareInterface $another): bool
     {
         // Let the version has a format of X.Y.Z.
diff --git a/src/Versioning/SemVer/SemVerVersion.php b/src/Versioning/SemVer/SemVerVersion.php
index 38dae09..534f8e1 100644
--- a/src/Versioning/SemVer/SemVerVersion.php
+++ b/src/Versioning/SemVer/SemVerVersion.php
@@ -9,7 +9,7 @@
 use Siketyan\Loxcan\Versioning\HasSemVerLikeCompatibility;
 use Siketyan\Loxcan\Versioning\VersionInterface;
 
-class SemVerVersion implements VersionInterface, CompatibilityAwareInterface
+class SemVerVersion implements VersionInterface, CompatibilityAwareInterface, \Stringable
 {
     use HasSemVerLikeCompatibility;
 
@@ -18,11 +18,11 @@ class SemVerVersion implements VersionInterface, CompatibilityAwareInterface
      * @param string[] $build
      */
     public function __construct(
-        private int $major,
-        private int $minor,
-        private int $patch,
-        private array $preRelease = [],
-        private array $build = [],
+        private readonly int $major,
+        private readonly int $minor,
+        private readonly int $patch,
+        private readonly array $preRelease = [],
+        private readonly array $build = [],
     ) {
     }
 
@@ -35,14 +35,14 @@ public function __toString(): string
             $this->patch,
         );
 
-        if (\count($this->preRelease)) {
+        if ($this->preRelease !== []) {
             $version .= sprintf(
                 '-%s',
                 implode('.', $this->preRelease),
             );
         }
 
-        if (\count($this->build)) {
+        if ($this->build !== []) {
             $version .= sprintf(
                 '+%s',
                 implode('.', $this->build),
@@ -85,7 +85,7 @@ public function getBuild(): array
 
     public function isPreRelease(): bool
     {
-        return \count($this->preRelease) > 0;
+        return $this->preRelease !== [];
     }
 
     // region Aliases for HasSemVerLikeCompatibility trait
diff --git a/src/Versioning/SemVer/SemVerVersionParser.php b/src/Versioning/SemVer/SemVerVersionParser.php
index 020774d..163f70b 100644
--- a/src/Versioning/SemVer/SemVerVersionParser.php
+++ b/src/Versioning/SemVer/SemVerVersionParser.php
@@ -36,8 +36,8 @@ public function parse(string $version): SemVerVersion|UnknownVersion
             (int) $matches[1],
             (int) $matches[2],
             (int) $matches[3],
-            array_filter($preRelease, fn ($i) => $i !== ''),
-            array_filter($build, fn ($i) => $i !== ''),
+            array_filter($preRelease, fn ($i): bool => $i !== ''),
+            array_filter($build, fn ($i): bool => $i !== ''),
         );
     }
 }
diff --git a/src/Versioning/Simple/SimpleVersion.php b/src/Versioning/Simple/SimpleVersion.php
index b4ece92..2b8ba95 100644
--- a/src/Versioning/Simple/SimpleVersion.php
+++ b/src/Versioning/Simple/SimpleVersion.php
@@ -7,13 +7,13 @@
 use JetBrains\PhpStorm\Pure;
 use Siketyan\Loxcan\Versioning\VersionInterface;
 
-class SimpleVersion implements VersionInterface
+class SimpleVersion implements VersionInterface, \Stringable
 {
     public function __construct(
-        private int $major,
-        private int $minor,
-        private ?int $patch,
-        private ?int $revision,
+        private readonly int $major,
+        private readonly int $minor,
+        private readonly ?int $patch,
+        private readonly ?int $revision,
     ) {
     }
 
diff --git a/src/Versioning/Unknown/UnknownVersion.php b/src/Versioning/Unknown/UnknownVersion.php
index 50f96f1..d826182 100644
--- a/src/Versioning/Unknown/UnknownVersion.php
+++ b/src/Versioning/Unknown/UnknownVersion.php
@@ -6,10 +6,10 @@
 
 use Siketyan\Loxcan\Versioning\VersionInterface;
 
-class UnknownVersion implements VersionInterface
+class UnknownVersion implements VersionInterface, \Stringable
 {
     public function __construct(
-        private string $version,
+        private readonly string $version,
     ) {
     }
 
diff --git a/src/Versioning/VersionComparatorResolver.php b/src/Versioning/VersionComparatorResolver.php
index 4cc08ad..1555730 100644
--- a/src/Versioning/VersionComparatorResolver.php
+++ b/src/Versioning/VersionComparatorResolver.php
@@ -10,7 +10,7 @@ class VersionComparatorResolver
      * @param VersionComparatorInterface[] $comparators
      */
     public function __construct(
-        private array $comparators,
+        private readonly array $comparators,
     ) {
     }
 
diff --git a/src/Versioning/VersionDiff.php b/src/Versioning/VersionDiff.php
index 368510b..0411b5f 100644
--- a/src/Versioning/VersionDiff.php
+++ b/src/Versioning/VersionDiff.php
@@ -14,9 +14,9 @@ class VersionDiff
     public const UNKNOWN = 0;
 
     public function __construct(
-        private int $type,
-        private VersionInterface $before,
-        private VersionInterface $after,
+        private readonly int $type,
+        private readonly VersionInterface $before,
+        private readonly VersionInterface $after,
     ) {
     }
 
@@ -33,10 +33,8 @@ public function isCompatible(): bool
             return false;
         }
 
-        /*
-         * @var CompatibilityAwareInterface $before
-         * @var CompatibilityAwareInterface $after
-         */
+        /* @var CompatibilityAwareInterface $before
+         * @var CompatibilityAwareInterface $after */
         return $before->isCompatibleWith($after);
     }
 
diff --git a/tests/Command/ScanCommandTest.php b/tests/Command/ScanCommandTest.php
index e3e373c..e700d38 100644
--- a/tests/Command/ScanCommandTest.php
+++ b/tests/Command/ScanCommandTest.php
@@ -77,60 +77,30 @@ public function test(): void
         ]);
 
         $this->assertSame(0, $exitCode);
+        $this->assertSame(
+            <<<'EOS'
+
+                foo.lock
+                --------
+
+                 ---- ------------ -------- --------
+                       Package      Before   After
+                 ---- ------------ -------- --------
+                  ➕   added                 v1.2.3
+                  ⬆️   upgraded     v1.1.1   v2.2.2
+                  ⬇️   downgraded   v4.4.4   v3.3.3
+                  🔄   unknown      v5.5.5   v5.5.5
+                  ➖   removed      v3.2.1
+                 ---- ------------ -------- --------
 
-        // In PHP 8.1.0, the problem is fixed that some emojis are counted as 2 chars.
-        // So we need to switch the expectation in this test.
-        if (version_compare(\PHP_VERSION, '8.1.0', '>=')) {
-            $this->assertSame(
-                <<<'EOS'
-
-                    foo.lock
-                    --------
-
-                     ---- ------------ -------- --------
-                           Package      Before   After
-                     ---- ------------ -------- --------
-                      ➕   added                 v1.2.3
-                      ⬆️   upgraded     v1.1.1   v2.2.2
-                      ⬇️   downgraded   v4.4.4   v3.3.3
-                      🔄   unknown      v5.5.5   v5.5.5
-                      ➖   removed      v3.2.1
-                     ---- ------------ -------- --------
-
-                    bar.lock
-                    --------
-
-                    🔄 The file was updated, but no dependency changes found.
-
-                    EOS,
-                $this->removeTextStyles($this->tester->getDisplay()),
-            );
-        } else {
-            $this->assertSame(
-                <<<'EOS'
-
-                    foo.lock
-                    --------
-
-                     ---- ------------ -------- --------
-                           Package      Before   After
-                     ---- ------------ -------- --------
-                      ➕    added                 v1.2.3
-                      ⬆️   upgraded     v1.1.1   v2.2.2
-                      ⬇️   downgraded   v4.4.4   v3.3.3
-                      🔄    unknown      v5.5.5   v5.5.5
-                      ➖    removed      v3.2.1
-                     ---- ------------ -------- --------
-
-                    bar.lock
-                    --------
-
-                    🔄 The file was updated, but no dependency changes found.
-
-                    EOS,
-                $this->removeTextStyles($this->tester->getDisplay()),
-            );
-        }
+                bar.lock
+                --------
+
+                🔄 The file was updated, but no dependency changes found.
+
+                EOS,
+            $this->removeTextStyles($this->tester->getDisplay()),
+        );
     }
 
     public function testNoDiff(): void

From a121b22c353c4453e788b034e913a06aa1069bc9 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 13:58:18 +0900
Subject: [PATCH 18/20] fix: Fix rector config

---
 rector.php | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/rector.php b/rector.php
index ae52060..b286951 100644
--- a/rector.php
+++ b/rector.php
@@ -5,16 +5,18 @@
 use Quartetcom\StaticAnalysisKit\Rector\Config;
 use Rector\CodeQuality\Rector\For_\ForRepeatedCountToOwnVariableRector;
 use Rector\Config\RectorConfig;
+use Rector\Php81\Rector\ClassConst\FinalizePublicClassConstantRector;
 
 return static function (RectorConfig $rectorConfig): void {
+    Config::use($rectorConfig);
+
     $rectorConfig->paths(array_map(fn (string $path) => __DIR__ . $path, [
         '/src',
         '/tests',
     ]));
 
     $rectorConfig->skip([
+        FinalizePublicClassConstantRector::class,
         ForRepeatedCountToOwnVariableRector::class,
     ]);
-
-    Config::use($rectorConfig);
 };

From 42e817473c00e8d18317d133b5b350f06c4824e6 Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 14:00:53 +0900
Subject: [PATCH 19/20] test: Fix spaces

---
 tests/Command/ScanCommandTest.php | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/tests/Command/ScanCommandTest.php b/tests/Command/ScanCommandTest.php
index e700d38..5f36e22 100644
--- a/tests/Command/ScanCommandTest.php
+++ b/tests/Command/ScanCommandTest.php
@@ -83,15 +83,15 @@ public function test(): void
                 foo.lock
                 --------
 
-                 ---- ------------ -------- --------
-                       Package      Before   After
-                 ---- ------------ -------- --------
-                  ➕   added                 v1.2.3
-                  ⬆️   upgraded     v1.1.1   v2.2.2
-                  ⬇️   downgraded   v4.4.4   v3.3.3
-                  🔄   unknown      v5.5.5   v5.5.5
-                  ➖   removed      v3.2.1
-                 ---- ------------ -------- --------
+                 ---- ------------ -------- -------- 
+                       Package      Before   After   
+                 ---- ------------ -------- -------- 
+                  ➕   added                 v1.2.3  
+                  ⬆️   upgraded     v1.1.1   v2.2.2  
+                  ⬇️   downgraded   v4.4.4   v3.3.3  
+                  🔄   unknown      v5.5.5   v5.5.5  
+                  ➖   removed      v3.2.1           
+                 ---- ------------ -------- -------- 
 
                 bar.lock
                 --------

From b812bbf0c3e12ad1d9deb67b24159f00786115fb Mon Sep 17 00:00:00 2001
From: Naoki Ikeguchi 
Date: Wed, 1 Feb 2023 14:03:45 +0900
Subject: [PATCH 20/20] build: Disable no_trailing_whitespace_in_string rule

---
 .php-cs-fixer.dist.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index 97045d2..d8a6bf0 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -12,5 +12,8 @@
 ;
 
 return (new Config())
+    ->addRiskyRules([
+        'no_trailing_whitespace_in_string' => false,
+    ])
     ->setFinder($finder)
 ;