From b1d0927d86337ecc15f674d8d2b999111a1a7cf6 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Thu, 12 Jun 2025 20:27:51 +0200 Subject: [PATCH 01/11] test-workflow --- src/Acriss/AcrissCodeParser.php | 9 ++------- src/Acriss/AcrissTranslator.php | 2 ++ tests/AcrissCodeDetailsTests.php | 7 +++---- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/Acriss/AcrissCodeParser.php b/src/Acriss/AcrissCodeParser.php index 55be1c5..02c8813 100644 --- a/src/Acriss/AcrissCodeParser.php +++ b/src/Acriss/AcrissCodeParser.php @@ -15,17 +15,12 @@ class AcrissCodeParser * Décode un code ACRISS à 4 lettres et retourne les enums correspondantes. * * @param string $code Code ACRISS (ex: CDMR) - * @return array{ - * category: AcrissCategory|null, - * type: AcrissType|null, - * transmission: TransmissionDrive|null, - * fuel_aircon: FuelAirConditioning|null - * } + * @return AcrissCode */ public function parse(string $code): AcrissCode { if (strlen($code) !== 4) { - throw new \InvalidArgumentException("ACRISS code must be exactly 4 characters."); + throw new \InvalidArgumentException('ACRISS code must be exactly 4 characters.'); } [$c, $t, $tr, $f] = str_split(strtoupper($code)); diff --git a/src/Acriss/AcrissTranslator.php b/src/Acriss/AcrissTranslator.php index a28fc7f..c42092e 100644 --- a/src/Acriss/AcrissTranslator.php +++ b/src/Acriss/AcrissTranslator.php @@ -1,5 +1,7 @@ Date: Thu, 12 Jun 2025 20:37:53 +0200 Subject: [PATCH 02/11] add phpcs workflow --- .github/php-cs-fixer/.php-cs-fixer.php | 20 ++++++++++++++++++++ .github/workflows/php-cs-fixer.yml | 26 ++++++++++++++++++++++++++ composer.json | 10 +++++++++- 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 .github/php-cs-fixer/.php-cs-fixer.php create mode 100644 .github/workflows/php-cs-fixer.yml diff --git a/.github/php-cs-fixer/.php-cs-fixer.php b/.github/php-cs-fixer/.php-cs-fixer.php new file mode 100644 index 0000000..88d46b9 --- /dev/null +++ b/.github/php-cs-fixer/.php-cs-fixer.php @@ -0,0 +1,20 @@ +in(__DIR__) + ->exclude('var') + ->exclude('vendor') +; + +return new PhpCsFixer\Config() + ->setRules([ + '@Symfony' => true, + ]) + ->setParallelConfig(ParallelConfigFactory::detect()) + ->setFinder($finder) + ->setUsingCache(false) +; diff --git a/.github/workflows/php-cs-fixer.yml b/.github/workflows/php-cs-fixer.yml new file mode 100644 index 0000000..3986f15 --- /dev/null +++ b/.github/workflows/php-cs-fixer.yml @@ -0,0 +1,26 @@ +name: PHP Lint & CS Fixer + +on: + pull_request: + branches: [ main ] + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + coverage: none + + - name: Install dependencies + run: composer install --no-progress --no-interaction --prefer-dist + + - name: Run PHP-CS-Fixer + run: | + vendor/bin/php-cs-fixer fix --dry-run --diff diff --git a/composer.json b/composer.json index 05b59d3..fb6b20f 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,8 @@ }, "require-dev": { "phpunit/phpunit": "^10.0", - "symfony/yaml": "*" + "symfony/yaml": "*", + "friendsofphp/php-cs-fixer": "*" }, "extra": { "branch-alias": { @@ -36,6 +37,13 @@ "bundle": "Acriss\\Bridge\\Symfony\\AcrissCodeBundle" } }, + "scripts": { + "codesniffer": "PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix src tests --dry-run --config=.github/php-cs-fixer/.php-cs-fixer.php", + "codesniffer-fix": "PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix src tests --config=.github/php-cs-fixer/.php-cs-fixer.php", + "phpstan": "php ./vendor/bin/phpstan analyse --configuration .github/phpstan/phpstan.neon", + "phpunit": "php ./vendor/bin/phpunit --configuration ./phpunit.xml.dist ./tests" + }, + "minimum-stability": "stable", "prefer-stable": true } From 59e7752e1b1cd192e40ece343dac8d49ade204b8 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Fri, 13 Jun 2025 09:42:10 +0200 Subject: [PATCH 03/11] add lock --- .gitignore | 3 +- README.md | 8 +- composer.lock | 4363 ++++++++++++++++++++++++++++++++ tests/AcrissCodeParserTest.php | 2 + 4 files changed, 4374 insertions(+), 2 deletions(-) create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 723ef36..331c58f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.idea \ No newline at end of file +.idea +vendor \ No newline at end of file diff --git a/README.md b/README.md index 2838078..f4bdaea 100644 --- a/README.md +++ b/README.md @@ -185,4 +185,10 @@ Want to add more? PRs welcome 👌 ## 📄 License -This library is open-sourced under the MIT license. \ No newline at end of file +This library is open-sourced under the MIT license. + +## Launch phpunit, phpstan, composer without anything + +```bash + docker run --rm -v "${PWD}:/app" -w /app php:8.3-cli bash -c "apt update && apt install -y git unzip curl > /dev/null && curl -sS https://getcomposer.org/installer | php && php composer.phar install && php vendor/bin/phpunit" +``` \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..693d678 --- /dev/null +++ b/composer.lock @@ -0,0 +1,4363 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "b2ca07d447b71daf92db69d6899aa454", + "packages": [ + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "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 for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.3.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": "2025-05-29T07:19:49+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-27T08:32:26+00:00" + } + ], + "packages-dev": [ + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-09-19T14:15:21+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" + }, + "time": "2023-08-08T05:53:35+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.75.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/399a128ff2fdaf4281e4e79b755693286cdf325c", + "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c", + "shasum": "" + }, + "require": { + "clue/ndjson-react": "^1.0", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.2", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", + "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.4 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", + "symfony/finder": "^5.4 || ^6.4 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", + "symfony/polyfill-mbstring": "^1.31", + "symfony/polyfill-php80": "^1.31", + "symfony/polyfill-php81": "^1.31", + "symfony/process": "^5.4 || ^6.4 || ^7.2", + "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + }, + "require-dev": { + "facile-it/paraunit": "^1.3.1 || ^2.6", + "infection/infection": "^0.29.14", + "justinrainbow/json-schema": "^5.3 || ^6.2", + "keradus/cli-executor": "^2.1", + "mikey179/vfsstream": "^1.6.12", + "php-coveralls/php-coveralls": "^2.7", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12", + "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3", + "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.75.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2025-03-31T18:40:42+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "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.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-04-29T12:36:36+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", + "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" + }, + "time": "2025-05-31T08:24:38+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "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.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.46", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8080be387a5be380dda48c6f41cee4a13aadab3d", + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.3", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.46" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-05-02T06:46:24+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "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/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.6", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.6" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-01-01T16:37:48+00:00" + }, + { + "name": "react/dns", + "version": "v1.13.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.13.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-13T14:18:03+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/promise", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" + }, + { + "name": "react/socket", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.16.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-07-26T10:38:09+00:00" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-18T14:56:07+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "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": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:17:12+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "symfony/console", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", + "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.3.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": "2025-05-24T10:34:04+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.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": "2025-04-22T09:11:45+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:15:23+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", + "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-30T19:00:26+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/afb9a8038025e5dbc657378bfab9198d75f10fca", + "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.3.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": "2025-04-04T13:12:05+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "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 for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "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 for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.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": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.3.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": "2025-04-17T09:11:12+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-25T09:37:31+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.3.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": "2025-02-24T10:49:57+00:00" + }, + { + "name": "symfony/string", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.3.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": "2025-04-20T20:19:01+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "cea40a48279d58dc3efee8112634cb90141156c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2", + "reference": "cea40a48279d58dc3efee8112634cb90141156c2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.3.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": "2025-04-04T10:10:33+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.2" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/tests/AcrissCodeParserTest.php b/tests/AcrissCodeParserTest.php index 0f211f4..1e25c5f 100644 --- a/tests/AcrissCodeParserTest.php +++ b/tests/AcrissCodeParserTest.php @@ -1,5 +1,7 @@ Date: Mon, 30 Jun 2025 14:33:34 +0200 Subject: [PATCH 04/11] Update enums & tests --- README.md | 14 +-- src/Acriss/AcrissCodeParser.php | 8 +- src/Acriss/AcrissTranslator.php | 16 +-- src/Acriss/Enum/AcrissCategory.php | 61 ++++++++---- src/Acriss/Enum/AcrissType.php | 61 ++++++++---- src/Acriss/Enum/FuelAirConditioning.php | 61 ++++++++---- src/Acriss/Enum/TransmissionDrive.php | 29 ++++-- tests/AcrissCodeDetailsTests.php | 4 +- tests/AcrissCodeParserTest.php | 10 +- tests/AcrissTranslatorTest.php | 16 +-- tests/Enum/AcrissCategoryTest.php | 16 ++- tests/Enum/AcrissTypeTest.php | 13 ++- tests/Enum/FuelAirConditioningTest.php | 13 ++- tests/Enum/TransmissionDriveTest.php | 13 ++- tests/TranslationIntegrityTest.php | 5 +- translations/messages.de.yaml | 127 +++++++++++------------- translations/messages.en.yaml | 124 +++++++++++------------ translations/messages.fr.yaml | 124 +++++++++++------------ translations/messages.it.yaml | 124 +++++++++++------------ 19 files changed, 463 insertions(+), 376 deletions(-) diff --git a/README.md b/README.md index f4bdaea..396b9da 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,7 @@ use Acriss\AcrissCodeParser; $parser = new AcrissCodeParser(); $code = $parser->parse('CDMR'); -// $code is an instance of Acriss\Model\AcrissCode - -echo $code->category->value; // COMPACT +echo $code->category->value; ``` ### Translate a code @@ -56,13 +54,11 @@ echo $code->category->value; // COMPACT ```php use Acriss\AcrissTranslator; -$translator = new AcrissTranslator($translatorService); // Symfony's TranslatorInterface +$translator = new AcrissTranslator($translatorService); $labels = $translator->translate($code, 'fr'); -// $labels is an instance of Acriss\Model\TranslatedAcrissCode - -echo $labels->category; // "Compacte" -echo $labels->fuelAirCon; // "Essence, avec climatisation" +echo $labels->category; +echo $labels->fuelAirCon; ``` ### Get full details @@ -125,7 +121,7 @@ composer install ```php use Acriss\AcrissTranslator; -$translator = new AcrissTranslator($this->translator); // Symfony\Contracts\Translation\TranslatorInterface +$translator = new AcrissTranslator($this->translator); ``` * Compatible with Symfony translation (TranslatorInterface) diff --git a/src/Acriss/AcrissCodeParser.php b/src/Acriss/AcrissCodeParser.php index 02c8813..bb14d75 100644 --- a/src/Acriss/AcrissCodeParser.php +++ b/src/Acriss/AcrissCodeParser.php @@ -26,10 +26,10 @@ public function parse(string $code): AcrissCode [$c, $t, $tr, $f] = str_split(strtoupper($code)); return new AcrissCode( - AcrissCategory::tryFrom($c), - AcrissType::tryFrom($t), - TransmissionDrive::tryFrom($tr), - FuelAirConditioning::tryFrom($f) + AcrissCategory::fromLetter($c), + AcrissType::fromLetter($t), + TransmissionDrive::fromLetter($tr), + FuelAirConditioning::fromLetter($f) ); } } diff --git a/src/Acriss/AcrissTranslator.php b/src/Acriss/AcrissTranslator.php index c42092e..6ad5cd3 100644 --- a/src/Acriss/AcrissTranslator.php +++ b/src/Acriss/AcrissTranslator.php @@ -12,27 +12,21 @@ class AcrissTranslator { public function __construct(private TranslatorInterface $translator) {} - /** - * Traduit les composants d’un code ACRISS dans la langue spécifiée. - * - * @param AcrissCode $code Objet contenant les enums - * @param string|null $locale - * @return TranslatedAcrissCode - */ + /** Traduit les composants d’un code ACRISS dans la langue spécifiée */ public function translate(AcrissCode $code, ?string $locale = null): TranslatedAcrissCode { return new TranslatedAcrissCode( category: $code->category - ? $this->translator->trans("acriss.category.{$code->category->name}", [], null, $locale) + ? $this->translator->trans("acriss.category.{$code->category->value}", [], null, $locale) : 'Unknown', type: $code->type - ? $this->translator->trans("acriss.type.{$code->type->name}", [], null, $locale) + ? $this->translator->trans("acriss.type.{$code->type->value}", [], null, $locale) : 'Unknown', transmission: $code->transmission - ? $this->translator->trans("acriss.transmission.{$code->transmission->name}", [], null, $locale) + ? $this->translator->trans("acriss.transmission.{$code->transmission->value}", [], null, $locale) : 'Unknown', fuelAircon: $code->fuelAircon - ? $this->translator->trans("acriss.fuel_aircon.{$code->fuelAircon->name}", [], null, $locale) + ? $this->translator->trans("acriss.fuel_aircon.{$code->fuelAircon->value}", [], null, $locale) : 'Unknown', ); } diff --git a/src/Acriss/Enum/AcrissCategory.php b/src/Acriss/Enum/AcrissCategory.php index 21cf03e..b771e68 100644 --- a/src/Acriss/Enum/AcrissCategory.php +++ b/src/Acriss/Enum/AcrissCategory.php @@ -6,22 +6,47 @@ enum AcrissCategory: string { - case M = 'MINI'; - case N = 'MINI_ELITE'; - case E = 'ECONOMY'; - case H = 'ECONOMY_ELITE'; - case C = 'COMPACT'; - case D = 'COMPACT_ELITE'; - case I = 'INTERMEDIATE'; - case J = 'INTERMEDIATE_ELITE'; - case S = 'STANDARD'; - case R = 'STANDARD_ELITE'; - case F = 'FULLSIZE'; - case G = 'FULLSIZE_ELITE'; - case P = 'PREMIUM'; - case U = 'PREMIUM_ELITE'; - case L = 'LUXURY'; - case W = 'LUXURY_ELITE'; - case O = 'OVERSIZE'; - case X = 'SPECIAL'; + case MINI = 'MINI'; + case MINI_ELITE = 'MINI_ELITE'; + case ECONOMY = 'ECONOMY'; + case ECONOMY_ELITE = 'ECONOMY_ELITE'; + case COMPACT = 'COMPACT'; + case COMPACT_ELITE = 'COMPACT_ELITE'; + case INTERMEDIATE = 'INTERMEDIATE'; + case INTERMEDIATE_ELITE = 'INTERMEDIATE_ELITE'; + case STANDARD = 'STANDARD'; + case STANDARD_ELITE = 'STANDARD_ELITE'; + case FULLSIZE = 'FULLSIZE'; + case FULLSIZE_ELITE = 'FULLSIZE_ELITE'; + case PREMIUM = 'PREMIUM'; + case PREMIUM_ELITE = 'PREMIUM_ELITE'; + case LUXURY = 'LUXURY'; + case LUXURY_ELITE = 'LUXURY_ELITE'; + case OVERSIZE = 'OVERSIZE'; + case SPECIAL = 'SPECIAL'; + + public static function fromLetter(string $letter): ?self + { + return match (strtoupper($letter)) { + 'M' => self::MINI, + 'N' => self::MINI_ELITE, + 'E' => self::ECONOMY, + 'H' => self::ECONOMY_ELITE, + 'C' => self::COMPACT, + 'D' => self::COMPACT_ELITE, + 'I' => self::INTERMEDIATE, + 'J' => self::INTERMEDIATE_ELITE, + 'S' => self::STANDARD, + 'R' => self::STANDARD_ELITE, + 'F' => self::FULLSIZE, + 'G' => self::FULLSIZE_ELITE, + 'P' => self::PREMIUM, + 'U' => self::PREMIUM_ELITE, + 'L' => self::LUXURY, + 'W' => self::LUXURY_ELITE, + 'O' => self::OVERSIZE, + 'X' => self::SPECIAL, + default => null, + }; + } } diff --git a/src/Acriss/Enum/AcrissType.php b/src/Acriss/Enum/AcrissType.php index f4e70e1..1efac9c 100644 --- a/src/Acriss/Enum/AcrissType.php +++ b/src/Acriss/Enum/AcrissType.php @@ -6,26 +6,43 @@ enum AcrissType: string { - case B = 'TWO_THREE_DOOR'; - case C = 'TWO_FOUR_DOOR'; - case D = 'FOUR_FIVE_DOOR'; - case W = 'WAGON_ESTATE'; - case V = 'PASSENGER_VAN'; - case L = 'LIMOUSINE_SEDAN'; - case S = 'SPORT'; - case T = 'CONVERTIBLE'; - case F = 'SUV'; - case J = 'OPEN_AIR_ALL_TERRAIN'; - case X = 'SPECIAL'; - case P = 'PICK_UP_SINGLE_EXTENDED_CAB_TWO_DOOR'; - case Q = 'PICK_UP_DOUBLE_CAB_FOUR_DOOR'; - case Z = 'SPECIAL_OFFER_CAR'; - case E = 'COUPE'; - case M = 'MONOSPACE'; - case R = 'RECREATIONAL_VEHICLE'; - case H = 'MOTOR_HOME'; - case Y = 'TWO_WHEEL_VEHICLE'; - case N = 'ROADSTER'; - case G = 'CROSSOVER'; - case K = 'COMMERCIAL_VAN_TRUCK'; + case TWO_DOOR = 'TWO_DOOR'; + case THREE_DOOR = 'THREE_DOOR'; + case FOUR_FIVE_DOOR = 'FOUR_FIVE_DOOR'; + case FIVE_DOOR = 'FIVE_DOOR'; + case SUV = 'SUV'; + case MONOSPACE = 'MONOSPACE'; + case CONVERTIBLE = 'CONVERTIBLE'; + case COUPE = 'COUPE'; + case ESTATE = 'ESTATE'; + case OPEN_AIR_ALL_TERRAIN = 'OPEN_AIR_ALL_TERRAIN'; + case PICKUP_REGULAR_CAB = 'PICKUP_REGULAR_CAB'; + case PICKUP_EXTENDED_CAB = 'PICKUP_EXTENDED_CAB'; + case PASSENGER_VAN = 'PASSENGER_VAN'; + case CARGO_VAN = 'CARGO_VAN'; + case MOTOR_HOME = 'MOTOR_HOME'; + case LIMOUSINE = 'LIMOUSINE'; + + public static function fromLetter(string $letter): ?self + { + return match (strtoupper($letter)) { + 'B' => self::TWO_DOOR, + 'C' => self::THREE_DOOR, + 'D' => self::FOUR_FIVE_DOOR, + 'E' => self::FIVE_DOOR, + 'F' => self::ESTATE, + 'G' => self::COUPE, + 'H' => self::CONVERTIBLE, + 'I' => self::SUV, + 'J' => self::OPEN_AIR_ALL_TERRAIN, + 'K' => self::MONOSPACE, + 'L' => self::PICKUP_REGULAR_CAB, + 'M' => self::PICKUP_EXTENDED_CAB, + 'N' => self::PASSENGER_VAN, + 'O' => self::CARGO_VAN, + 'P' => self::MOTOR_HOME, + 'Q' => self::LIMOUSINE, + default => null, + }; + } } diff --git a/src/Acriss/Enum/FuelAirConditioning.php b/src/Acriss/Enum/FuelAirConditioning.php index e699b91..8e4e5d2 100644 --- a/src/Acriss/Enum/FuelAirConditioning.php +++ b/src/Acriss/Enum/FuelAirConditioning.php @@ -6,22 +6,47 @@ enum FuelAirConditioning: string { - case R = 'UNSPECIFIED_FUEL_POWER_WITH_AIR'; - case N = 'UNSPECIFIED_FUEL_POWER_WITHOUT_AIR'; - case D = 'DIESEL_AIR'; - case Q = 'DIESEL_NO_AIR'; - case H = 'HYBRID'; - case I = 'HYBRID_PLUG_IN'; - case E = 'ELECTRIC'; - case C = 'ELECTRIC_PLUS'; - case L = 'LPG_COMPRESSED_GAS_AIR'; - case S = 'LPG_COMPRESSED_GAS_NO_AIR'; - case A = 'HYDROGEN_AIR'; - case B = 'HYDROGEN_NO_AIR'; - case M = 'MULTI_FUEL_POWER_AIR'; - case F = 'MULTI_FUEL_POWER_NO_AIR'; - case V = 'PETROL_AIR'; - case Z = 'PETROL_NO_AIR'; - case U = 'ETHANOL_AIR'; - case X = 'ETHANOL_NO_AIR'; + case PETROL_NO_AC = 'PETROL_NO_AC'; + case PETROL_AC = 'PETROL_AC'; + case DIESEL_NO_AC = 'DIESEL_NO_AC'; + case DIESEL_AC = 'DIESEL_AC'; + case HYBRID_NO_AC = 'HYBRID_NO_AC'; + case HYBRID_AC = 'HYBRID_AC'; + case ELECTRIC_NO_AC = 'ELECTRIC_NO_AC'; + case ELECTRIC_AC = 'ELECTRIC_AC'; + case LPG_NO_AC = 'LPG_NO_AC'; + case LPG_AC = 'LPG_AC'; + case HYDROGEN_NO_AC = 'HYDROGEN_NO_AC'; + case HYDROGEN_AC = 'HYDROGEN_AC'; + case MULTIFUEL_NO_AC = 'MULTIFUEL_NO_AC'; + case MULTIFUEL_AC = 'MULTIFUEL_AC'; + case ETHANOL_NO_AC = 'ETHANOL_NO_AC'; + case ETHANOL_AC = 'ETHANOL_AC'; + case UNKNOWN_NO_AC = 'UNKNOWN_NO_AC'; + case UNKNOWN_AC = 'UNKNOWN_AC'; + + public static function fromLetter(string $letter): ?self + { + return match (strtoupper($letter)) { + 'N' => self::PETROL_NO_AC, + 'R' => self::PETROL_AC, + 'D' => self::DIESEL_NO_AC, + 'Q' => self::DIESEL_AC, + 'H' => self::HYBRID_NO_AC, + 'I' => self::HYBRID_AC, + 'E' => self::ELECTRIC_NO_AC, + 'C' => self::ELECTRIC_AC, + 'L' => self::LPG_NO_AC, + 'S' => self::LPG_AC, + 'A' => self::HYDROGEN_NO_AC, + 'B' => self::HYDROGEN_AC, + 'M' => self::MULTIFUEL_NO_AC, + 'V' => self::MULTIFUEL_AC, + 'X' => self::ETHANOL_NO_AC, + 'Z' => self::ETHANOL_AC, + 'U' => self::UNKNOWN_NO_AC, + 'Y' => self::UNKNOWN_AC, + default => null, + }; + } } diff --git a/src/Acriss/Enum/TransmissionDrive.php b/src/Acriss/Enum/TransmissionDrive.php index cad1bd8..39e5948 100644 --- a/src/Acriss/Enum/TransmissionDrive.php +++ b/src/Acriss/Enum/TransmissionDrive.php @@ -6,10 +6,27 @@ enum TransmissionDrive: string { - case M = 'MANUAL_UNSPECIFIED_DRIVE'; - case N = 'MANUAL_FOUR_WHEEL_DRIVE'; - case C = 'MANUAL_ALL_WHEEL_DRIVE'; - case A = 'AUTOMATIC_UNSPECIFIED_DRIVE'; - case B = 'AUTOMATIC_FOUR_WHEEL_DRIVE'; - case D = 'AUTOMATIC_ALL_WHEEL_DRIVE'; + case MANUAL_UNSPECIFIED_DRIVE = 'MANUAL_UNSPECIFIED_DRIVE'; + case MANUAL_2WD = 'MANUAL_2WD'; + case MANUAL_4WD = 'MANUAL_4WD'; + case MANUAL_AWD = 'MANUAL_AWD'; + case AUTOMATIC_UNSPECIFIED_DRIVE = 'AUTOMATIC_UNSPECIFIED_DRIVE'; + case AUTOMATIC_2WD = 'AUTOMATIC_2WD'; + case AUTOMATIC_4WD = 'AUTOMATIC_4WD'; + case AUTOMATIC_AWD = 'AUTOMATIC_AWD'; + + public static function fromLetter(string $letter): ?self + { + return match (strtoupper($letter)) { + 'M' => self::MANUAL_UNSPECIFIED_DRIVE, + 'N' => self::MANUAL_2WD, + 'C' => self::MANUAL_4WD, + 'R' => self::MANUAL_AWD, + 'A' => self::AUTOMATIC_UNSPECIFIED_DRIVE, + 'B' => self::AUTOMATIC_2WD, + 'D' => self::AUTOMATIC_4WD, + 'S' => self::AUTOMATIC_AWD, + default => null, + }; + } } diff --git a/tests/AcrissCodeDetailsTests.php b/tests/AcrissCodeDetailsTests.php index 26b2e58..7bfa6a3 100644 --- a/tests/AcrissCodeDetailsTests.php +++ b/tests/AcrissCodeDetailsTests.php @@ -14,7 +14,7 @@ use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\Loader\ArrayLoader; -class AcrissCodeDetailsTest extends TestCase +class AcrissCodeDetailsTests extends TestCase { public function test_get_returns_full_details_object(): void { @@ -37,7 +37,7 @@ public function test_get_returns_full_details_object(): void self::assertInstanceOf(AcrissCodeDetailsResult::class, $result); self::assertSame('CDMR', $result->code); - self::assertSame(AcrissCategory::C, $result->raw->category); + self::assertSame(AcrissCategory::COMPACT, $result->raw->category); self::assertInstanceOf(TranslatedAcrissCode::class, $result->translated); self::assertSame('Compacte', $result->translated->category); self::assertSame('4/5 portes', $result->translated->type); diff --git a/tests/AcrissCodeParserTest.php b/tests/AcrissCodeParserTest.php index 1e25c5f..0f13366 100644 --- a/tests/AcrissCodeParserTest.php +++ b/tests/AcrissCodeParserTest.php @@ -20,10 +20,10 @@ public function test_parse_valid_code_returns_acriss_code_object(): void $code = $parser->parse('CDMR'); self::assertInstanceOf(AcrissCode::class, $code); - self::assertSame(AcrissCategory::C, $code->category); - self::assertSame(AcrissType::D, $code->type); - self::assertSame(TransmissionDrive::M, $code->transmission); - self::assertSame(FuelAirConditioning::R, $code->fuelAircon); + self::assertSame(AcrissCategory::COMPACT, $code->category); + self::assertSame(AcrissType::FOUR_FIVE_DOOR, $code->type); + self::assertSame(TransmissionDrive::MANUAL_UNSPECIFIED_DRIVE, $code->transmission); + self::assertSame(FuelAirConditioning::PETROL_AC, $code->fuelAircon); } public function test_invalid_code_length_throws_exception(): void @@ -37,7 +37,7 @@ public function test_invalid_code_length_throws_exception(): void public function test_unknown_code_letters_result_in_null_properties(): void { $parser = new AcrissCodeParser(); - $code = $parser->parse('ZZZZ'); // If Z is unmapped + $code = $parser->parse('ZZZW'); self::assertNull($code->category); self::assertNull($code->type); diff --git a/tests/AcrissTranslatorTest.php b/tests/AcrissTranslatorTest.php index c5a6a0b..d3affb3 100644 --- a/tests/AcrissTranslatorTest.php +++ b/tests/AcrissTranslatorTest.php @@ -20,19 +20,19 @@ public function test_translate_returns_translated_object(): void $translator = new Translator('fr'); $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', [ - 'acriss.category.C' => 'Compacte', - 'acriss.type.D' => '4/5 portes', - 'acriss.transmission.M' => 'Manuelle', - 'acriss.fuel_aircon.R' => 'Essence, Clim.' + 'acriss.category.COMPACT' => 'Compacte', + 'acriss.type.FOUR_FIVE_DOOR' => '4/5 portes', + 'acriss.transmission.MANUAL_UNSPECIFIED_DRIVE' => 'Manuelle', + 'acriss.fuel_aircon.PETROL_AC' => 'Essence, Clim.' ], 'fr'); $acrissTranslator = new AcrissTranslator($translator); $code = new AcrissCode( - AcrissCategory::C, - AcrissType::D, - TransmissionDrive::M, - FuelAirConditioning::R + AcrissCategory::COMPACT, + AcrissType::FOUR_FIVE_DOOR, + TransmissionDrive::MANUAL_UNSPECIFIED_DRIVE, + FuelAirConditioning::PETROL_AC ); $translated = $acrissTranslator->translate($code); diff --git a/tests/Enum/AcrissCategoryTest.php b/tests/Enum/AcrissCategoryTest.php index 9a7a205..86f8879 100644 --- a/tests/Enum/AcrissCategoryTest.php +++ b/tests/Enum/AcrissCategoryTest.php @@ -1,17 +1,20 @@ */ use Acriss\Enum\AcrissCategory; use PHPUnit\Framework\TestCase; +/** + * @author Louis-Arnaud Catoire + */ class AcrissCategoryTest extends TestCase { - public function test_all_enum_keys_are_single_uppercase_letter(): void + public function test_all_enum_names_are_uppercase_words(): void { foreach (AcrissCategory::cases() as $case) { - self::assertMatchesRegularExpression('/^[A-Z]$/', $case->name); + self::assertMatchesRegularExpression('/^[A-Z][A-Z_]*$/', $case->name); } } @@ -22,4 +25,11 @@ public function test_all_enum_values_are_non_empty_strings(): void self::assertNotEmpty($case->value); } } + + public function test_from_letter_returns_expected_case(): void + { + self::assertSame(AcrissCategory::COMPACT, AcrissCategory::fromLetter('C')); + self::assertSame(AcrissCategory::PREMIUM, AcrissCategory::fromLetter('P')); + self::assertNull(AcrissCategory::fromLetter('Z')); + } } diff --git a/tests/Enum/AcrissTypeTest.php b/tests/Enum/AcrissTypeTest.php index dbf830e..60221e8 100644 --- a/tests/Enum/AcrissTypeTest.php +++ b/tests/Enum/AcrissTypeTest.php @@ -8,18 +8,25 @@ class AcrissTypeTest extends TestCase { - public function test_enum_keys_are_valid(): void + public function test_enum_case_names_are_uppercase_words(): void { foreach (AcrissType::cases() as $case) { - $this->assertMatchesRegularExpression('/^[A-Z]$/', $case->name); + $this->assertMatchesRegularExpression('/^[A-Z][A-Z_]*$/', $case->name); } } - public function test_enum_values_are_not_empty(): void + public function test_enum_values_are_not_empty_strings(): void { foreach (AcrissType::cases() as $case) { self::assertIsString($case->value); self::assertNotEmpty($case->value); } } + + public function test_from_letter_returns_expected_case(): void + { + self::assertSame(AcrissType::FOUR_FIVE_DOOR, AcrissType::fromLetter('D')); + self::assertSame(AcrissType::SUV, AcrissType::fromLetter('I')); + self::assertNull(AcrissType::fromLetter('W')); + } } diff --git a/tests/Enum/FuelAirConditioningTest.php b/tests/Enum/FuelAirConditioningTest.php index aab7833..17c7bf0 100644 --- a/tests/Enum/FuelAirConditioningTest.php +++ b/tests/Enum/FuelAirConditioningTest.php @@ -8,18 +8,25 @@ class FuelAirConditioningTest extends TestCase { - public function test_enum_keys_are_valid(): void + public function test_enum_case_names_are_uppercase_words(): void { foreach (FuelAirConditioning::cases() as $case) { - self::assertMatchesRegularExpression('/^[A-Z]$/', $case->name); + self::assertMatchesRegularExpression('/^[A-Z][A-Z_]*$/', $case->name); } } - public function test_enum_values_are_not_empty(): void + public function test_enum_values_are_not_empty_strings(): void { foreach (FuelAirConditioning::cases() as $case) { self::assertIsString($case->value); self::assertNotEmpty($case->value); } } + + public function test_from_letter_returns_expected_case(): void + { + self::assertSame(FuelAirConditioning::PETROL_AC, FuelAirConditioning::fromLetter('R')); + self::assertSame(FuelAirConditioning::ELECTRIC_AC, FuelAirConditioning::fromLetter('C')); + self::assertNull(FuelAirConditioning::fromLetter('W')); + } } diff --git a/tests/Enum/TransmissionDriveTest.php b/tests/Enum/TransmissionDriveTest.php index f23d30b..7120151 100644 --- a/tests/Enum/TransmissionDriveTest.php +++ b/tests/Enum/TransmissionDriveTest.php @@ -8,18 +8,25 @@ class TransmissionDriveTest extends TestCase { - public function test_enum_keys_are_valid(): void + public function test_enum_case_names_are_uppercase_words(): void { foreach (TransmissionDrive::cases() as $case) { - self::assertMatchesRegularExpression('/^[A-Z]$/', $case->name); + self::assertMatchesRegularExpression('/^[A-Z0-9_]+$/', $case->name); } } - public function test_enum_values_are_not_empty(): void + public function test_enum_values_are_not_empty_strings(): void { foreach (TransmissionDrive::cases() as $case) { self::assertIsString($case->value); self::assertNotEmpty($case->value); } } + + public function test_from_letter_returns_expected_case(): void + { + self::assertSame(TransmissionDrive::AUTOMATIC_2WD, TransmissionDrive::fromLetter('B')); + self::assertSame(TransmissionDrive::MANUAL_4WD, TransmissionDrive::fromLetter('C')); + self::assertNull(TransmissionDrive::fromLetter('W')); + } } diff --git a/tests/TranslationIntegrityTest.php b/tests/TranslationIntegrityTest.php index 388db66..cccc991 100644 --- a/tests/TranslationIntegrityTest.php +++ b/tests/TranslationIntegrityTest.php @@ -11,9 +11,9 @@ final class TranslationIntegrityTest extends TestCase { - private const TRANSLATION_PATH = __DIR__ . '/../translations/'; + private const string TRANSLATION_PATH = __DIR__ . '/../translations/'; - private const ENUM_MAP = [ + private const array ENUM_MAP = [ 'acriss.category' => AcrissCategory::class, 'acriss.type' => AcrissType::class, 'acriss.transmission' => TransmissionDrive::class, @@ -40,6 +40,7 @@ public function test_all_enum_translations_are_complete(): void self::assertNotEmpty($translations[$key], "Empty translation for key '$key' in locale '$locale'"); } } + } } } diff --git a/translations/messages.de.yaml b/translations/messages.de.yaml index f03cb49..715d16d 100644 --- a/translations/messages.de.yaml +++ b/translations/messages.de.yaml @@ -1,67 +1,60 @@ -acriss.category.M: "Mini" -acriss.category.N: "Mini Elite" -acriss.category.E: "Economy" -acriss.category.H: "Economy Elite" -acriss.category.C: "Kompakt" -acriss.category.D: "Kompakt Elite" -acriss.category.I: "Mittelklasse" -acriss.category.J: "Mittelklasse Elite" -acriss.category.S: "Standard" -acriss.category.R: "Standard Elite" -acriss.category.F: "Oberklasse" -acriss.category.G: "Oberklasse Elite" -acriss.category.P: "Premium Limousine" -acriss.category.U: "Premium Limousine Elite" -acriss.category.L: "Luxus" -acriss.category.W: "Luxus Elite" -acriss.category.O: "Übergröße" -acriss.category.X: "Spezial" - -acriss.type.B: "2/3 Türen" -acriss.type.C: "2 oder 4 Türen" -acriss.type.D: "4/5 Türen" -acriss.type.W: "Kombi" -acriss.type.V: "Minibus" -acriss.type.L: "Limousine" -acriss.type.S: "Sportwagen" -acriss.type.T: "Cabrio" -acriss.type.F: "SUV" -acriss.type.J: "Offen, Geländewagen" -acriss.type.X: "Spezial" -acriss.type.P: "Pick-up (Einzel- oder Extra-Kabine), 2 Türen" -acriss.type.Q: "Pick-up (Doppelkabine), 4 Türen" -acriss.type.Z: "Sonderangebot" -acriss.type.E: "Coupé" -acriss.type.M: "Van" -acriss.type.R: "Freizeitfahrzeug" -acriss.type.H: "Wohnmobil" -acriss.type.Y: "Zweirad" -acriss.type.N: "Roadster" -acriss.type.G: "Crossover" -acriss.type.K: "Nutzfahrzeug" - -acriss.transmission.M: "Manuell, Antrieb nicht spezifiziert" -acriss.transmission.N: "Manuell, Allradantrieb" -acriss.transmission.C: "Manuell, permanenter Allrad" -acriss.transmission.A: "Automatik, Antrieb nicht spezifiziert" -acriss.transmission.B: "Automatik, Allradantrieb" -acriss.transmission.D: "Automatik, permanenter Allrad" - -acriss.fuel_aircon.R: "Unbekannter Kraftstoff, mit Klimaanlage" -acriss.fuel_aircon.N: "Unbekannter Kraftstoff, ohne Klimaanlage" -acriss.fuel_aircon.D: "Diesel, mit Klimaanlage" -acriss.fuel_aircon.Q: "Diesel, ohne Klimaanlage" -acriss.fuel_aircon.H: "Hybrid, mit Klimaanlage" -acriss.fuel_aircon.I: "Plug-in-Hybrid, mit Klimaanlage" -acriss.fuel_aircon.E: "Elektro (<400 km), mit Klimaanlage" -acriss.fuel_aircon.C: "Elektro (>400 km), mit Klimaanlage" -acriss.fuel_aircon.L: "Gas/LPG, mit Klimaanlage" -acriss.fuel_aircon.S: "Gas/LPG, ohne Klimaanlage" -acriss.fuel_aircon.A: "Wasserstoff, mit Klimaanlage" -acriss.fuel_aircon.B: "Wasserstoff, ohne Klimaanlage" -acriss.fuel_aircon.M: "Multi-Kraftstoff, mit Klimaanlage" -acriss.fuel_aircon.F: "Multi-Kraftstoff, ohne Klimaanlage" -acriss.fuel_aircon.V: "Benzin, mit Klimaanlage" -acriss.fuel_aircon.Z: "Benzin, ohne Klimaanlage" -acriss.fuel_aircon.U: "Ethanol, mit Klimaanlage" -acriss.fuel_aircon.X: "Ethanol, ohne Klimaanlage" +acriss.category.MINI: 'Mini' +acriss.category.MINI_ELITE: {'fr': 'Mini Elite (fr)', 'de': 'Mini Elite (de)', 'it': 'Mini Elite (it)'} +acriss.category.ECONOMY: {'fr': 'Economy (fr)', 'de': 'Economy (de)', 'it': 'Economy (it)'} +acriss.category.ECONOMY_ELITE: {'fr': 'Economy Elite (fr)', 'de': 'Economy Elite (de)', 'it': 'Economy Elite (it)'} +acriss.category.COMPACT: {'fr': 'Compact (fr)', 'de': 'Compact (de)', 'it': 'Compact (it)'} +acriss.category.COMPACT_ELITE: {'fr': 'Compact Elite (fr)', 'de': 'Compact Elite (de)', 'it': 'Compact Elite (it)'} +acriss.category.INTERMEDIATE: {'fr': 'Intermediate (fr)', 'de': 'Intermediate (de)', 'it': 'Intermediate (it)'} +acriss.category.INTERMEDIATE_ELITE: {'fr': 'Intermediate Elite (fr)', 'de': 'Intermediate Elite (de)', 'it': 'Intermediate Elite (it)'} +acriss.category.STANDARD: {'fr': 'Standard (fr)', 'de': 'Standard (de)', 'it': 'Standard (it)'} +acriss.category.STANDARD_ELITE: {'fr': 'Standard Elite (fr)', 'de': 'Standard Elite (de)', 'it': 'Standard Elite (it)'} +acriss.category.FULLSIZE: {'fr': 'Fullsize (fr)', 'de': 'Fullsize (de)', 'it': 'Fullsize (it)'} +acriss.category.FULLSIZE_ELITE: {'fr': 'Fullsize Elite (fr)', 'de': 'Fullsize Elite (de)', 'it': 'Fullsize Elite (it)'} +acriss.category.PREMIUM: {'fr': 'Premium (fr)', 'de': 'Premium (de)', 'it': 'Premium (it)'} +acriss.category.PREMIUM_ELITE: {'fr': 'Premium Elite (fr)', 'de': 'Premium Elite (de)', 'it': 'Premium Elite (it)'} +acriss.category.LUXURY: {'fr': 'Luxury (fr)', 'de': 'Luxury (de)', 'it': 'Luxury (it)'} +acriss.category.LUXURY_ELITE: {'fr': 'Luxury Elite (fr)', 'de': 'Luxury Elite (de)', 'it': 'Luxury Elite (it)'} +acriss.category.OVERSIZE: {'fr': 'Oversize (fr)', 'de': 'Oversize (de)', 'it': 'Oversize (it)'} +acriss.category.SPECIAL: {'fr': 'Special (fr)', 'de': 'Special (de)', 'it': 'Special (it)'} +acriss.type.TWO_DOOR: {'fr': '2-door (fr)', 'de': '2-door (de)', 'it': '2-door (it)'} +acriss.type.THREE_DOOR: {'fr': '3-door (fr)', 'de': '3-door (de)', 'it': '3-door (it)'} +acriss.type.FOUR_FIVE_DOOR: {'fr': '4/5-door (fr)', 'de': '4/5-door (de)', 'it': '4/5-door (it)'} +acriss.type.FIVE_DOOR: {'fr': '5-door (fr)', 'de': '5-door (de)', 'it': '5-door (it)'} +acriss.type.SUV: {'fr': 'SUV (fr)', 'de': 'SUV (de)', 'it': 'SUV (it)'} +acriss.type.MONOSPACE: {'fr': 'Monospace (fr)', 'de': 'Monospace (de)', 'it': 'Monospace (it)'} +acriss.type.CONVERTIBLE: {'fr': 'Convertible (fr)', 'de': 'Convertible (de)', 'it': 'Convertible (it)'} +acriss.type.COUPE: {'fr': 'Coupe (fr)', 'de': 'Coupe (de)', 'it': 'Coupe (it)'} +acriss.type.ESTATE: {'fr': 'Estate (fr)', 'de': 'Estate (de)', 'it': 'Estate (it)'} +acriss.type.OPEN_AIR_ALL_TERRAIN: {'fr': 'Open-air all-terrain (fr)', 'de': 'Open-air all-terrain (de)', 'it': 'Open-air all-terrain (it)'} +acriss.type.PICKUP_REGULAR_CAB: {'fr': 'Pickup (regular cab) (fr)', 'de': 'Pickup (regular cab) (de)', 'it': 'Pickup (regular cab) (it)'} +acriss.type.PICKUP_EXTENDED_CAB: {'fr': 'Pickup (extended cab) (fr)', 'de': 'Pickup (extended cab) (de)', 'it': 'Pickup (extended cab) (it)'} +acriss.type.PASSENGER_VAN: {'fr': 'Passenger van (fr)', 'de': 'Passenger van (de)', 'it': 'Passenger van (it)'} +acriss.type.CARGO_VAN: {'fr': 'Cargo van (fr)', 'de': 'Cargo van (de)', 'it': 'Cargo van (it)'} +acriss.type.MOTOR_HOME: {'fr': 'Motor home (fr)', 'de': 'Motor home (de)', 'it': 'Motor home (it)'} +acriss.type.LIMOUSINE: {'fr': 'Limousine (fr)', 'de': 'Limousine (de)', 'it': 'Limousine (it)'} +acriss.transmission.MANUAL_UNSPECIFIED_DRIVE: {'fr': 'Manual (fr)', 'de': 'Manual (de)', 'it': 'Manual (it)'} +acriss.transmission.MANUAL_2WD: {'fr': 'Manual (2WD) (fr)', 'de': 'Manual (2WD) (de)', 'it': 'Manual (2WD) (it)'} +acriss.transmission.MANUAL_4WD: {'fr': 'Manual (4WD) (fr)', 'de': 'Manual (4WD) (de)', 'it': 'Manual (4WD) (it)'} +acriss.transmission.MANUAL_AWD: {'fr': 'Manual (AWD) (fr)', 'de': 'Manual (AWD) (de)', 'it': 'Manual (AWD) (it)'} +acriss.transmission.AUTOMATIC_UNSPECIFIED_DRIVE: {'fr': 'Automatic (fr)', 'de': 'Automatic (de)', 'it': 'Automatic (it)'} +acriss.transmission.AUTOMATIC_2WD: {'fr': 'Automatic (2WD) (fr)', 'de': 'Automatic (2WD) (de)', 'it': 'Automatic (2WD) (it)'} +acriss.transmission.AUTOMATIC_4WD: {'fr': 'Automatic (4WD) (fr)', 'de': 'Automatic (4WD) (de)', 'it': 'Automatic (4WD) (it)'} +acriss.transmission.AUTOMATIC_AWD: {'fr': 'Automatic (AWD) (fr)', 'de': 'Automatic (AWD) (de)', 'it': 'Automatic (AWD) (it)'} +acriss.fuel_aircon.PETROL_NO_AC: {'fr': 'Petrol without AC (fr)', 'de': 'Petrol without AC (de)', 'it': 'Petrol without AC (it)'} +acriss.fuel_aircon.PETROL_AC: {'fr': 'Petrol with AC (fr)', 'de': 'Petrol with AC (de)', 'it': 'Petrol with AC (it)'} +acriss.fuel_aircon.DIESEL_NO_AC: {'fr': 'Diesel without AC (fr)', 'de': 'Diesel without AC (de)', 'it': 'Diesel without AC (it)'} +acriss.fuel_aircon.DIESEL_AC: {'fr': 'Diesel with AC (fr)', 'de': 'Diesel with AC (de)', 'it': 'Diesel with AC (it)'} +acriss.fuel_aircon.HYBRID_NO_AC: {'fr': 'Hybrid without AC (fr)', 'de': 'Hybrid without AC (de)', 'it': 'Hybrid without AC (it)'} +acriss.fuel_aircon.HYBRID_AC: {'fr': 'Hybrid with AC (fr)', 'de': 'Hybrid with AC (de)', 'it': 'Hybrid with AC (it)'} +acriss.fuel_aircon.ELECTRIC_NO_AC: {'fr': 'Electric without AC (fr)', 'de': 'Electric without AC (de)', 'it': 'Electric without AC (it)'} +acriss.fuel_aircon.ELECTRIC_AC: {'fr': 'Electric with AC (fr)', 'de': 'Electric with AC (de)', 'it': 'Electric with AC (it)'} +acriss.fuel_aircon.LPG_NO_AC: {'fr': 'LPG without AC (fr)', 'de': 'LPG without AC (de)', 'it': 'LPG without AC (it)'} +acriss.fuel_aircon.LPG_AC: {'fr': 'LPG with AC (fr)', 'de': 'LPG with AC (de)', 'it': 'LPG with AC (it)'} +acriss.fuel_aircon.HYDROGEN_NO_AC: {'fr': 'Hydrogen without AC (fr)', 'de': 'Hydrogen without AC (de)', 'it': 'Hydrogen without AC (it)'} +acriss.fuel_aircon.HYDROGEN_AC: {'fr': 'Hydrogen with AC (fr)', 'de': 'Hydrogen with AC (de)', 'it': 'Hydrogen with AC (it)'} +acriss.fuel_aircon.MULTIFUEL_NO_AC: {'fr': 'Multifuel without AC (fr)', 'de': 'Multifuel without AC (de)', 'it': 'Multifuel without AC (it)'} +acriss.fuel_aircon.MULTIFUEL_AC: {'fr': 'Multifuel with AC (fr)', 'de': 'Multifuel with AC (de)', 'it': 'Multifuel with AC (it)'} +acriss.fuel_aircon.ETHANOL_NO_AC: {'fr': 'Ethanol without AC (fr)', 'de': 'Ethanol without AC (de)', 'it': 'Ethanol without AC (it)'} +acriss.fuel_aircon.ETHANOL_AC: {'fr': 'Ethanol with AC (fr)', 'de': 'Ethanol with AC (de)', 'it': 'Ethanol with AC (it)'} +acriss.fuel_aircon.UNKNOWN_NO_AC: {'fr': 'Unknown without AC (fr)', 'de': 'Unknown without AC (de)', 'it': 'Unknown without AC (it)'} +acriss.fuel_aircon.UNKNOWN_AC: {'fr': 'Unknown with AC (fr)', 'de': 'Unknown with AC (de)', 'it': 'Unknown with AC (it)'} \ No newline at end of file diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index dc3651a..775608e 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -1,67 +1,63 @@ -acriss.category.M: "Mini" -acriss.category.N: "Mini Elite" -acriss.category.E: "Economy" -acriss.category.H: "Economy Elite" -acriss.category.C: "Compact" -acriss.category.D: "Compact Elite" -acriss.category.I: "Intermediate" -acriss.category.J: "Intermediate Elite" -acriss.category.S: "Standard" -acriss.category.R: "Standard Elite" -acriss.category.F: "Fullsize" -acriss.category.G: "Fullsize Elite" -acriss.category.P: "Premium" -acriss.category.U: "Premium Elite" -acriss.category.L: "Luxury" -acriss.category.W: "Luxury Elite" -acriss.category.O: "Oversize" -acriss.category.X: "Special" +acriss.category.MINI: Mini +acriss.category.MINI_ELITE: Mini Elite +acriss.category.ECONOMY: Economy +acriss.category.ECONOMY_ELITE: Economy Elite +acriss.category.COMPACT: Kompakt +acriss.category.COMPACT_ELITE: Kompakt Elite +acriss.category.INTERMEDIATE: Mittelklasse +acriss.category.INTERMEDIATE_ELITE: Mittelklasse Elite +acriss.category.STANDARD: Standard +acriss.category.STANDARD_ELITE: Standard Elite +acriss.category.FULLSIZE: Groß +acriss.category.FULLSIZE_ELITE: Groß Elite +acriss.category.PREMIUM: Premium +acriss.category.PREMIUM_ELITE: Premium Elite +acriss.category.LUXURY: Luxus +acriss.category.LUXURY_ELITE: Luxus Elite +acriss.category.OVERSIZE: Übergröße +acriss.category.SPECIAL: Spezial -acriss.type.B: "Two/Three Door" -acriss.type.C: "Two/Four Door" -acriss.type.D: "Four/Five Door" -acriss.type.W: "Wagon/Estate" -acriss.type.V: "Passenger Van" -acriss.type.L: "Limousine/Sedan" -acriss.type.S: "Sport" -acriss.type.T: "Convertible" -acriss.type.F: "SUV" -acriss.type.J: "Open Air All Terrain" -acriss.type.X: "Special" -acriss.type.P: "Pick-up Single Extended Cab Two Door" -acriss.type.Q: "Pick-up Double Cab Four Door" -acriss.type.Z: "Special Offer Car" -acriss.type.E: "Coupe" -acriss.type.M: "Monospace" -acriss.type.R: "Recreational Vehicle" -acriss.type.H: "Motor Home" -acriss.type.Y: "Two Wheel Vehicle" -acriss.type.N: "Roadster" -acriss.type.G: "Crossover" -acriss.type.K: "Commercial Van/Truck" +acriss.type.TWO_DOOR: 2-Türer +acriss.type.THREE_DOOR: 3-Türer +acriss.type.FOUR_FIVE_DOOR: 4/5-Türer +acriss.type.FIVE_DOOR: 5-Türer +acriss.type.SUV: SUV +acriss.type.MONOSPACE: Van +acriss.type.CONVERTIBLE: Cabrio +acriss.type.COUPE: Coupé +acriss.type.ESTATE: Kombi +acriss.type.OPEN_AIR_ALL_TERRAIN: Offenes Allradfahrzeug +acriss.type.PICKUP_REGULAR_CAB: Pickup (Einzelkabine) +acriss.type.PICKUP_EXTENDED_CAB: Pickup (Doppelkabine) +acriss.type.PASSENGER_VAN: Kleinbus +acriss.type.CARGO_VAN: Transporter +acriss.type.MOTOR_HOME: Wohnmobil +acriss.type.LIMOUSINE: Limousine -acriss.transmission.M: "Manual Unspecified Drive" -acriss.transmission.N: "Manual Four Wheel Drive" -acriss.transmission.C: "Manual All Wheel Drive" -acriss.transmission.A: "Automatic Unspecified Drive" -acriss.transmission.B: "Automatic Four Wheel Drive" -acriss.transmission.D: "Automatic All Wheel Drive" +acriss.transmission.MANUAL_UNSPECIFIED_DRIVE: Schaltgetriebe +acriss.transmission.MANUAL_2WD: Schaltgetriebe (2WD) +acriss.transmission.MANUAL_4WD: Schaltgetriebe (4x4) +acriss.transmission.MANUAL_AWD: Schaltgetriebe (Allrad) +acriss.transmission.AUTOMATIC_UNSPECIFIED_DRIVE: Automatik +acriss.transmission.AUTOMATIC_2WD: Automatik (2WD) +acriss.transmission.AUTOMATIC_4WD: Automatik (4x4) +acriss.transmission.AUTOMATIC_AWD: Automatik (Allrad) -acriss.fuel_aircon.R: "Unspecified Fuel/Power with A/C" -acriss.fuel_aircon.N: "Unspecified Fuel/Power without A/C" -acriss.fuel_aircon.D: "Diesel with A/C" -acriss.fuel_aircon.Q: "Diesel without A/C" -acriss.fuel_aircon.H: "Hybrid" -acriss.fuel_aircon.I: "Hybrid Plug-in" -acriss.fuel_aircon.E: "Electric" -acriss.fuel_aircon.C: "Electric Plus" -acriss.fuel_aircon.L: "LPG/Compressed Gas with A/C" -acriss.fuel_aircon.S: "LPG/Compressed Gas without A/C" -acriss.fuel_aircon.A: "Hydrogen with A/C" -acriss.fuel_aircon.B: "Hydrogen without A/C" -acriss.fuel_aircon.M: "Multi Fuel/Power with A/C" -acriss.fuel_aircon.F: "Multi Fuel/Power without A/C" -acriss.fuel_aircon.V: "Petrol with A/C" -acriss.fuel_aircon.Z: "Petrol without A/C" -acriss.fuel_aircon.U: "Ethanol with A/C" -acriss.fuel_aircon.X: "Ethanol without A/C" +acriss.fuel_aircon.PETROL_NO_AC: Benzin ohne Klimaanlage +acriss.fuel_aircon.PETROL_AC: Benzin mit Klimaanlage +acriss.fuel_aircon.DIESEL_NO_AC: Diesel ohne Klimaanlage +acriss.fuel_aircon.DIESEL_AC: Diesel mit Klimaanlage +acriss.fuel_aircon.HYBRID_NO_AC: Hybrid ohne Klimaanlage +acriss.fuel_aircon.HYBRID_AC: Hybrid mit Klimaanlage +acriss.fuel_aircon.ELECTRIC_NO_AC: Elektro ohne Klimaanlage +acriss.fuel_aircon.ELECTRIC_AC: Elektro mit Klimaanlage +acriss.fuel_aircon.LPG_NO_AC: LPG ohne Klimaanlage +acriss.fuel_aircon.LPG_AC: LPG mit Klimaanlage +acriss.fuel_aircon.HYDROGEN_NO_AC: Wasserstoff ohne Klimaanlage +acriss.fuel_aircon.HYDROGEN_AC: Wasserstoff mit Klimaanlage +acriss.fuel_aircon.MULTIFUEL_NO_AC: Mehrstoff ohne Klimaanlage +acriss.fuel_aircon.MULTIFUEL_AC: Mehrstoff mit Klimaanlage +acriss.fuel_aircon.ETHANOL_NO_AC: Ethanol ohne Klimaanlage +acriss.fuel_aircon.ETHANOL_AC: Ethanol mit Klimaanlage +acriss.fuel_aircon.UNKNOWN_NO_AC: Unbekannt ohne Klimaanlage +acriss.fuel_aircon.UNKNOWN_AC: Unbekannt mit Klimaanlage diff --git a/translations/messages.fr.yaml b/translations/messages.fr.yaml index debbb3b..d9a897c 100644 --- a/translations/messages.fr.yaml +++ b/translations/messages.fr.yaml @@ -1,67 +1,63 @@ -acriss.category.M: "Mini" -acriss.category.N: "Mini Élite" -acriss.category.E: "Économique" -acriss.category.H: "Économique Élite" -acriss.category.C: "Compacte" -acriss.category.D: "Compacte Élite" -acriss.category.I: "Intermédiaire" -acriss.category.J: "Intermédiaire Élite" -acriss.category.S: "Routière" -acriss.category.R: "Routière Élite" -acriss.category.F: "Grande routière" -acriss.category.G: "Grande routière Élite" -acriss.category.P: "Berline Premium" -acriss.category.U: "Berline Premium Élite" -acriss.category.L: "Luxe" -acriss.category.W: "Luxe Élite" -acriss.category.O: "Très grand gabarit" -acriss.category.X: "Spéciale" +acriss.category.MINI: Mini +acriss.category.MINI_ELITE: Mini Élite +acriss.category.ECONOMY: Économique +acriss.category.ECONOMY_ELITE: Économique Élite +acriss.category.COMPACT: Compacte +acriss.category.COMPACT_ELITE: Compacte Élite +acriss.category.INTERMEDIATE: Intermédiaire +acriss.category.INTERMEDIATE_ELITE: Intermédiaire Élite +acriss.category.STANDARD: Standard +acriss.category.STANDARD_ELITE: Standard Élite +acriss.category.FULLSIZE: Grande taille +acriss.category.FULLSIZE_ELITE: Grande taille Élite +acriss.category.PREMIUM: Premium +acriss.category.PREMIUM_ELITE: Premium Élite +acriss.category.LUXURY: Luxe +acriss.category.LUXURY_ELITE: Luxe Élite +acriss.category.OVERSIZE: Très grande taille +acriss.category.SPECIAL: Spécial -acriss.type.B: "2/3 portes" -acriss.type.C: "2 ou 4 portes" -acriss.type.D: "4/5 portes" -acriss.type.W: "Break" -acriss.type.V: "Minibus" -acriss.type.L: "Limousine" -acriss.type.S: "Sport" -acriss.type.T: "Cabriolet" -acriss.type.F: "SUV" -acriss.type.J: "Tout-terrain" -acriss.type.X: "Spéciale" -acriss.type.P: "Pick-up (cabine simple ou approfondie) 2 portes" -acriss.type.Q: "Pick-up (double cabine) 4 portes" -acriss.type.Z: "Offre spéciale" -acriss.type.E: "Coupé" -acriss.type.M: "Monospace" -acriss.type.R: "Véhicule de loisir" -acriss.type.H: "Camping-car" -acriss.type.Y: "Deux-roues" -acriss.type.N: "Roadster" -acriss.type.G: "Crossover" -acriss.type.K: "Véhicule utilitaire" +acriss.type.TWO_DOOR: 2 portes +acriss.type.THREE_DOOR: 3 portes +acriss.type.FOUR_FIVE_DOOR: 4/5 portes +acriss.type.FIVE_DOOR: 5 portes +acriss.type.SUV: SUV +acriss.type.MONOSPACE: Monospace +acriss.type.CONVERTIBLE: Cabriolet +acriss.type.COUPE: Coupé +acriss.type.ESTATE: Break +acriss.type.OPEN_AIR_ALL_TERRAIN: Tout-terrain découvert +acriss.type.PICKUP_REGULAR_CAB: Pickup (cabine simple) +acriss.type.PICKUP_EXTENDED_CAB: Pickup (cabine allongée) +acriss.type.PASSENGER_VAN: Minibus +acriss.type.CARGO_VAN: Fourgon +acriss.type.MOTOR_HOME: Camping-car +acriss.type.LIMOUSINE: Limousine -acriss.transmission.M: "Manuelle, transmission non spécifiée" -acriss.transmission.N: "Manuelle, 4 roues motrices" -acriss.transmission.C: "Manuelle, transmission intégrale" -acriss.transmission.A: "Automatique, transmission non spécifiée" -acriss.transmission.B: "Automatique, 4 roues motrices" -acriss.transmission.D: "Automatique, transmission intégrale" +acriss.transmission.MANUAL_UNSPECIFIED_DRIVE: Manuelle +acriss.transmission.MANUAL_2WD: Manuelle (2 roues motrices) +acriss.transmission.MANUAL_4WD: Manuelle (4x4) +acriss.transmission.MANUAL_AWD: Manuelle (transmission intégrale) +acriss.transmission.AUTOMATIC_UNSPECIFIED_DRIVE: Automatique +acriss.transmission.AUTOMATIC_2WD: Automatique (2 roues motrices) +acriss.transmission.AUTOMATIC_4WD: Automatique (4x4) +acriss.transmission.AUTOMATIC_AWD: Automatique (transmission intégrale) -acriss.fuel_aircon.R: "Carburant non spécifié, sans climatisation" -acriss.fuel_aircon.N: "Carburant non spécifié, avec climatisation" -acriss.fuel_aircon.D: "Diesel, avec climatisation" -acriss.fuel_aircon.Q: "Diesel, sans climatisation" -acriss.fuel_aircon.H: "Hybride, avec climatisation" -acriss.fuel_aircon.I: "Hybride rechargeable, avec climatisation" -acriss.fuel_aircon.E: "Électrique (autonomie < 400 km), avec climatisation" -acriss.fuel_aircon.C: "Électrique (autonomie > 400 km), avec climatisation" -acriss.fuel_aircon.L: "GPL, avec climatisation" -acriss.fuel_aircon.S: "GPL, sans climatisation" -acriss.fuel_aircon.A: "Hydrogène, avec climatisation" -acriss.fuel_aircon.B: "Hydrogène, sans climatisation" -acriss.fuel_aircon.M: "Multi-carburant, avec climatisation" -acriss.fuel_aircon.F: "Multi-carburant, sans climatisation" -acriss.fuel_aircon.V: "Essence, avec climatisation" -acriss.fuel_aircon.Z: "Essence, sans climatisation" -acriss.fuel_aircon.U: "Éthanol, avec climatisation" -acriss.fuel_aircon.X: "Éthanol, sans climatisation" +acriss.fuel_aircon.PETROL_NO_AC: Essence sans climatisation +acriss.fuel_aircon.PETROL_AC: Essence avec climatisation +acriss.fuel_aircon.DIESEL_NO_AC: Diesel sans climatisation +acriss.fuel_aircon.DIESEL_AC: Diesel avec climatisation +acriss.fuel_aircon.HYBRID_NO_AC: Hybride sans climatisation +acriss.fuel_aircon.HYBRID_AC: Hybride avec climatisation +acriss.fuel_aircon.ELECTRIC_NO_AC: Électrique sans climatisation +acriss.fuel_aircon.ELECTRIC_AC: Électrique avec climatisation +acriss.fuel_aircon.LPG_NO_AC: GPL sans climatisation +acriss.fuel_aircon.LPG_AC: GPL avec climatisation +acriss.fuel_aircon.HYDROGEN_NO_AC: Hydrogène sans climatisation +acriss.fuel_aircon.HYDROGEN_AC: Hydrogène avec climatisation +acriss.fuel_aircon.MULTIFUEL_NO_AC: Multi-carburant sans climatisation +acriss.fuel_aircon.MULTIFUEL_AC: Multi-carburant avec climatisation +acriss.fuel_aircon.ETHANOL_NO_AC: Éthanol sans climatisation +acriss.fuel_aircon.ETHANOL_AC: Éthanol avec climatisation +acriss.fuel_aircon.UNKNOWN_NO_AC: Inconnu sans climatisation +acriss.fuel_aircon.UNKNOWN_AC: Inconnu avec climatisation diff --git a/translations/messages.it.yaml b/translations/messages.it.yaml index debbb3b..c552904 100644 --- a/translations/messages.it.yaml +++ b/translations/messages.it.yaml @@ -1,67 +1,63 @@ -acriss.category.M: "Mini" -acriss.category.N: "Mini Élite" -acriss.category.E: "Économique" -acriss.category.H: "Économique Élite" -acriss.category.C: "Compacte" -acriss.category.D: "Compacte Élite" -acriss.category.I: "Intermédiaire" -acriss.category.J: "Intermédiaire Élite" -acriss.category.S: "Routière" -acriss.category.R: "Routière Élite" -acriss.category.F: "Grande routière" -acriss.category.G: "Grande routière Élite" -acriss.category.P: "Berline Premium" -acriss.category.U: "Berline Premium Élite" -acriss.category.L: "Luxe" -acriss.category.W: "Luxe Élite" -acriss.category.O: "Très grand gabarit" -acriss.category.X: "Spéciale" +acriss.category.MINI: Mini +acriss.category.MINI_ELITE: Mini Elite +acriss.category.ECONOMY: Economica +acriss.category.ECONOMY_ELITE: Economica Elite +acriss.category.COMPACT: Compatta +acriss.category.COMPACT_ELITE: Compatta Elite +acriss.category.INTERMEDIATE: Intermedia +acriss.category.INTERMEDIATE_ELITE: Intermedia Elite +acriss.category.STANDARD: Standard +acriss.category.STANDARD_ELITE: Standard Elite +acriss.category.FULLSIZE: Grande dimensione +acriss.category.FULLSIZE_ELITE: Grande dimensione Elite +acriss.category.PREMIUM: Premium +acriss.category.PREMIUM_ELITE: Premium Elite +acriss.category.LUXURY: Lusso +acriss.category.LUXURY_ELITE: Lusso Elite +acriss.category.OVERSIZE: Dimensione extra +acriss.category.SPECIAL: Speciale -acriss.type.B: "2/3 portes" -acriss.type.C: "2 ou 4 portes" -acriss.type.D: "4/5 portes" -acriss.type.W: "Break" -acriss.type.V: "Minibus" -acriss.type.L: "Limousine" -acriss.type.S: "Sport" -acriss.type.T: "Cabriolet" -acriss.type.F: "SUV" -acriss.type.J: "Tout-terrain" -acriss.type.X: "Spéciale" -acriss.type.P: "Pick-up (cabine simple ou approfondie) 2 portes" -acriss.type.Q: "Pick-up (double cabine) 4 portes" -acriss.type.Z: "Offre spéciale" -acriss.type.E: "Coupé" -acriss.type.M: "Monospace" -acriss.type.R: "Véhicule de loisir" -acriss.type.H: "Camping-car" -acriss.type.Y: "Deux-roues" -acriss.type.N: "Roadster" -acriss.type.G: "Crossover" -acriss.type.K: "Véhicule utilitaire" +acriss.type.TWO_DOOR: 2 porte +acriss.type.THREE_DOOR: 3 porte +acriss.type.FOUR_FIVE_DOOR: 4/5 porte +acriss.type.FIVE_DOOR: 5 porte +acriss.type.SUV: SUV +acriss.type.MONOSPACE: Monovolume +acriss.type.CONVERTIBLE: Cabriolet +acriss.type.COUPE: Coupé +acriss.type.ESTATE: Station wagon +acriss.type.OPEN_AIR_ALL_TERRAIN: Fuoristrada aperto +acriss.type.PICKUP_REGULAR_CAB: Pickup (cabina singola) +acriss.type.PICKUP_EXTENDED_CAB: Pickup (cabina estesa) +acriss.type.PASSENGER_VAN: Minibus +acriss.type.CARGO_VAN: Furgone +acriss.type.MOTOR_HOME: Camper +acriss.type.LIMOUSINE: Limousine -acriss.transmission.M: "Manuelle, transmission non spécifiée" -acriss.transmission.N: "Manuelle, 4 roues motrices" -acriss.transmission.C: "Manuelle, transmission intégrale" -acriss.transmission.A: "Automatique, transmission non spécifiée" -acriss.transmission.B: "Automatique, 4 roues motrices" -acriss.transmission.D: "Automatique, transmission intégrale" +acriss.transmission.MANUAL_UNSPECIFIED_DRIVE: Manuale +acriss.transmission.MANUAL_2WD: Manuale (2 ruote motrici) +acriss.transmission.MANUAL_4WD: Manuale (4x4) +acriss.transmission.MANUAL_AWD: Manuale (trazione integrale) +acriss.transmission.AUTOMATIC_UNSPECIFIED_DRIVE: Automatica +acriss.transmission.AUTOMATIC_2WD: Automatica (2 ruote motrici) +acriss.transmission.AUTOMATIC_4WD: Automatica (4x4) +acriss.transmission.AUTOMATIC_AWD: Automatica (trazione integrale) -acriss.fuel_aircon.R: "Carburant non spécifié, sans climatisation" -acriss.fuel_aircon.N: "Carburant non spécifié, avec climatisation" -acriss.fuel_aircon.D: "Diesel, avec climatisation" -acriss.fuel_aircon.Q: "Diesel, sans climatisation" -acriss.fuel_aircon.H: "Hybride, avec climatisation" -acriss.fuel_aircon.I: "Hybride rechargeable, avec climatisation" -acriss.fuel_aircon.E: "Électrique (autonomie < 400 km), avec climatisation" -acriss.fuel_aircon.C: "Électrique (autonomie > 400 km), avec climatisation" -acriss.fuel_aircon.L: "GPL, avec climatisation" -acriss.fuel_aircon.S: "GPL, sans climatisation" -acriss.fuel_aircon.A: "Hydrogène, avec climatisation" -acriss.fuel_aircon.B: "Hydrogène, sans climatisation" -acriss.fuel_aircon.M: "Multi-carburant, avec climatisation" -acriss.fuel_aircon.F: "Multi-carburant, sans climatisation" -acriss.fuel_aircon.V: "Essence, avec climatisation" -acriss.fuel_aircon.Z: "Essence, sans climatisation" -acriss.fuel_aircon.U: "Éthanol, avec climatisation" -acriss.fuel_aircon.X: "Éthanol, sans climatisation" +acriss.fuel_aircon.PETROL_NO_AC: Benzina senza climatizzazione +acriss.fuel_aircon.PETROL_AC: Benzina con climatizzazione +acriss.fuel_aircon.DIESEL_NO_AC: Diesel senza climatizzazione +acriss.fuel_aircon.DIESEL_AC: Diesel con climatizzazione +acriss.fuel_aircon.HYBRID_NO_AC: Ibrido senza climatizzazione +acriss.fuel_aircon.HYBRID_AC: Ibrido con climatizzazione +acriss.fuel_aircon.ELECTRIC_NO_AC: Elettrico senza climatizzazione +acriss.fuel_aircon.ELECTRIC_AC: Elettrico con climatizzazione +acriss.fuel_aircon.LPG_NO_AC: GPL senza climatizzazione +acriss.fuel_aircon.LPG_AC: GPL con climatizzazione +acriss.fuel_aircon.HYDROGEN_NO_AC: Idrogeno senza climatizzazione +acriss.fuel_aircon.HYDROGEN_AC: Idrogeno con climatizzazione +acriss.fuel_aircon.MULTIFUEL_NO_AC: Multicarburante senza climatizzazione +acriss.fuel_aircon.MULTIFUEL_AC: Multicarburante con climatizzazione +acriss.fuel_aircon.ETHANOL_NO_AC: Etanolo senza climatizzazione +acriss.fuel_aircon.ETHANOL_AC: Etanolo con climatizzazione +acriss.fuel_aircon.UNKNOWN_NO_AC: Sconosciuto senza climatizzazione +acriss.fuel_aircon.UNKNOWN_AC: Sconosciuto con climatizzazione From baeb021872dfd9572d37cb1d5266d2f4f9e8d7ad Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 14:36:22 +0200 Subject: [PATCH 05/11] linter --- src/Acriss/AcrissCodeDetails.php | 9 ++++----- src/Acriss/AcrissCodeParser.php | 6 +++--- src/Acriss/AcrissTranslator.php | 4 +++- src/Acriss/Model/AcrissCode.php | 20 +++++++++++--------- src/Acriss/Model/AcrissCodeDetailsResult.php | 9 ++++++--- src/Acriss/Model/TranslatedAcrissCode.php | 6 ++++-- tests/AcrissCodeDetailsTests.php | 8 ++++---- tests/AcrissCodeParserTest.php | 10 +++++----- tests/AcrissTranslatorTest.php | 18 ++++++++++-------- tests/Enum/AcrissCategoryTest.php | 7 ++++--- tests/Enum/AcrissTypeTest.php | 7 ++++--- tests/Enum/FuelAirConditioningTest.php | 7 ++++--- tests/Enum/TransmissionDriveTest.php | 7 ++++--- tests/TranslationIntegrityTest.php | 19 ++++++++++--------- 14 files changed, 76 insertions(+), 61 deletions(-) diff --git a/src/Acriss/AcrissCodeDetails.php b/src/Acriss/AcrissCodeDetails.php index 3c548c9..52e84b7 100644 --- a/src/Acriss/AcrissCodeDetails.php +++ b/src/Acriss/AcrissCodeDetails.php @@ -1,4 +1,5 @@ $this->category, - 'type' => $this->type, + 'category' => $this->category, + 'type' => $this->type, 'transmission' => $this->transmission, - 'fuel_aircon' => $this->fuelAircon, + 'fuel_aircon' => $this->fuelAircon, ]; } } diff --git a/src/Acriss/Model/AcrissCodeDetailsResult.php b/src/Acriss/Model/AcrissCodeDetailsResult.php index a983e3d..a77477d 100644 --- a/src/Acriss/Model/AcrissCodeDetailsResult.php +++ b/src/Acriss/Model/AcrissCodeDetailsResult.php @@ -1,4 +1,6 @@ -addLoader('array', new ArrayLoader()); @@ -24,7 +24,7 @@ public function test_get_returns_full_details_object(): void 'acriss.category.C' => 'Compacte', 'acriss.type.D' => '4/5 portes', 'acriss.transmission.M' => 'Manuelle', - 'acriss.fuel_aircon.R' => 'Essence, Clim.' + 'acriss.fuel_aircon.R' => 'Essence, Clim.', ], 'fr'); $service = new AcrissCodeDetails( diff --git a/tests/AcrissCodeParserTest.php b/tests/AcrissCodeParserTest.php index 0f13366..c632554 100644 --- a/tests/AcrissCodeParserTest.php +++ b/tests/AcrissCodeParserTest.php @@ -5,16 +5,16 @@ namespace Acriss\Tests; use Acriss\AcrissCodeParser; -use Acriss\Model\AcrissCode; use Acriss\Enum\AcrissCategory; use Acriss\Enum\AcrissType; -use Acriss\Enum\TransmissionDrive; use Acriss\Enum\FuelAirConditioning; +use Acriss\Enum\TransmissionDrive; +use Acriss\Model\AcrissCode; use PHPUnit\Framework\TestCase; class AcrissCodeParserTest extends TestCase { - public function test_parse_valid_code_returns_acriss_code_object(): void + public function testParseValidCodeReturnsAcrissCodeObject(): void { $parser = new AcrissCodeParser(); $code = $parser->parse('CDMR'); @@ -26,7 +26,7 @@ public function test_parse_valid_code_returns_acriss_code_object(): void self::assertSame(FuelAirConditioning::PETROL_AC, $code->fuelAircon); } - public function test_invalid_code_length_throws_exception(): void + public function testInvalidCodeLengthThrowsException(): void { $parser = new AcrissCodeParser(); @@ -34,7 +34,7 @@ public function test_invalid_code_length_throws_exception(): void $parser->parse('XYZ'); } - public function test_unknown_code_letters_result_in_null_properties(): void + public function testUnknownCodeLettersResultInNullProperties(): void { $parser = new AcrissCodeParser(); $code = $parser->parse('ZZZW'); diff --git a/tests/AcrissTranslatorTest.php b/tests/AcrissTranslatorTest.php index d3affb3..e0f7b55 100644 --- a/tests/AcrissTranslatorTest.php +++ b/tests/AcrissTranslatorTest.php @@ -1,21 +1,23 @@ -addLoader('array', new ArrayLoader()); @@ -23,7 +25,7 @@ public function test_translate_returns_translated_object(): void 'acriss.category.COMPACT' => 'Compacte', 'acriss.type.FOUR_FIVE_DOOR' => '4/5 portes', 'acriss.transmission.MANUAL_UNSPECIFIED_DRIVE' => 'Manuelle', - 'acriss.fuel_aircon.PETROL_AC' => 'Essence, Clim.' + 'acriss.fuel_aircon.PETROL_AC' => 'Essence, Clim.', ], 'fr'); $acrissTranslator = new AcrissTranslator($translator); @@ -44,7 +46,7 @@ public function test_translate_returns_translated_object(): void self::assertSame('Essence, Clim.', $translated->fuelAircon); } - public function test_translate_with_null_fields_returns_unknown(): void + public function testTranslateWithNullFieldsReturnsUnknown(): void { $translator = new Translator('fr'); $translator->addLoader('array', new ArrayLoader()); diff --git a/tests/Enum/AcrissCategoryTest.php b/tests/Enum/AcrissCategoryTest.php index 86f8879..160ad46 100644 --- a/tests/Enum/AcrissCategoryTest.php +++ b/tests/Enum/AcrissCategoryTest.php @@ -1,4 +1,5 @@ name); } } - public function test_all_enum_values_are_non_empty_strings(): void + public function testAllEnumValuesAreNonEmptyStrings(): void { foreach (AcrissCategory::cases() as $case) { self::assertIsString($case->value); @@ -26,7 +27,7 @@ public function test_all_enum_values_are_non_empty_strings(): void } } - public function test_from_letter_returns_expected_case(): void + public function testFromLetterReturnsExpectedCase(): void { self::assertSame(AcrissCategory::COMPACT, AcrissCategory::fromLetter('C')); self::assertSame(AcrissCategory::PREMIUM, AcrissCategory::fromLetter('P')); diff --git a/tests/Enum/AcrissTypeTest.php b/tests/Enum/AcrissTypeTest.php index 60221e8..0dd886e 100644 --- a/tests/Enum/AcrissTypeTest.php +++ b/tests/Enum/AcrissTypeTest.php @@ -1,4 +1,5 @@ assertMatchesRegularExpression('/^[A-Z][A-Z_]*$/', $case->name); } } - public function test_enum_values_are_not_empty_strings(): void + public function testEnumValuesAreNotEmptyStrings(): void { foreach (AcrissType::cases() as $case) { self::assertIsString($case->value); @@ -23,7 +24,7 @@ public function test_enum_values_are_not_empty_strings(): void } } - public function test_from_letter_returns_expected_case(): void + public function testFromLetterReturnsExpectedCase(): void { self::assertSame(AcrissType::FOUR_FIVE_DOOR, AcrissType::fromLetter('D')); self::assertSame(AcrissType::SUV, AcrissType::fromLetter('I')); diff --git a/tests/Enum/FuelAirConditioningTest.php b/tests/Enum/FuelAirConditioningTest.php index 17c7bf0..0524074 100644 --- a/tests/Enum/FuelAirConditioningTest.php +++ b/tests/Enum/FuelAirConditioningTest.php @@ -1,4 +1,5 @@ name); } } - public function test_enum_values_are_not_empty_strings(): void + public function testEnumValuesAreNotEmptyStrings(): void { foreach (FuelAirConditioning::cases() as $case) { self::assertIsString($case->value); @@ -23,7 +24,7 @@ public function test_enum_values_are_not_empty_strings(): void } } - public function test_from_letter_returns_expected_case(): void + public function testFromLetterReturnsExpectedCase(): void { self::assertSame(FuelAirConditioning::PETROL_AC, FuelAirConditioning::fromLetter('R')); self::assertSame(FuelAirConditioning::ELECTRIC_AC, FuelAirConditioning::fromLetter('C')); diff --git a/tests/Enum/TransmissionDriveTest.php b/tests/Enum/TransmissionDriveTest.php index 7120151..052b6f5 100644 --- a/tests/Enum/TransmissionDriveTest.php +++ b/tests/Enum/TransmissionDriveTest.php @@ -1,4 +1,5 @@ name); } } - public function test_enum_values_are_not_empty_strings(): void + public function testEnumValuesAreNotEmptyStrings(): void { foreach (TransmissionDrive::cases() as $case) { self::assertIsString($case->value); @@ -23,7 +24,7 @@ public function test_enum_values_are_not_empty_strings(): void } } - public function test_from_letter_returns_expected_case(): void + public function testFromLetterReturnsExpectedCase(): void { self::assertSame(TransmissionDrive::AUTOMATIC_2WD, TransmissionDrive::fromLetter('B')); self::assertSame(TransmissionDrive::MANUAL_4WD, TransmissionDrive::fromLetter('C')); diff --git a/tests/TranslationIntegrityTest.php b/tests/TranslationIntegrityTest.php index cccc991..24d522f 100644 --- a/tests/TranslationIntegrityTest.php +++ b/tests/TranslationIntegrityTest.php @@ -1,28 +1,30 @@ - AcrissCategory::class, - 'acriss.type' => AcrissType::class, + 'acriss.category' => AcrissCategory::class, + 'acriss.type' => AcrissType::class, 'acriss.transmission' => TransmissionDrive::class, - 'acriss.fuel_aircon' => FuelAirConditioning::class, + 'acriss.fuel_aircon' => FuelAirConditioning::class, ]; - public function test_all_enum_translations_are_complete(): void + public function testAllEnumTranslationsAreComplete(): void { - $files = glob(self::TRANSLATION_PATH . 'messages.*.yaml'); + $files = glob(self::TRANSLATION_PATH.'messages.*.yaml'); self::assertNotEmpty($files, 'No translation files found in the translations/ directory.'); @@ -40,7 +42,6 @@ public function test_all_enum_translations_are_complete(): void self::assertNotEmpty($translations[$key], "Empty translation for key '$key' in locale '$locale'"); } } - } } } From ad29f3d93ec42d975f4d04cf6d422447348fb18e Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 14:37:48 +0200 Subject: [PATCH 06/11] linter --- .github/workflows/php-cs-fixer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-cs-fixer.yml b/.github/workflows/php-cs-fixer.yml index 3986f15..b2af095 100644 --- a/.github/workflows/php-cs-fixer.yml +++ b/.github/workflows/php-cs-fixer.yml @@ -23,4 +23,4 @@ jobs: - name: Run PHP-CS-Fixer run: | - vendor/bin/php-cs-fixer fix --dry-run --diff + composer codesniffer-fix From 8eb6c3f4c709ed3ba6d26368f41d1260d148d91c Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 14:41:35 +0200 Subject: [PATCH 07/11] remove parralel --- .github/php-cs-fixer/.php-cs-fixer.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/php-cs-fixer/.php-cs-fixer.php b/.github/php-cs-fixer/.php-cs-fixer.php index 88d46b9..df112ff 100644 --- a/.github/php-cs-fixer/.php-cs-fixer.php +++ b/.github/php-cs-fixer/.php-cs-fixer.php @@ -2,11 +2,11 @@ declare(strict_types=1); -use PhpCsFixer\Runner\Parallel\ParallelConfigFactory; $finder = new PhpCsFixer\Finder() ->in(__DIR__) ->exclude('var') + ->exclude('tests') ->exclude('vendor') ; @@ -14,7 +14,6 @@ ->setRules([ '@Symfony' => true, ]) - ->setParallelConfig(ParallelConfigFactory::detect()) ->setFinder($finder) ->setUsingCache(false) -; + ; From bb6250ac814879568ab76f4e7785571081d133e0 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 14:44:38 +0200 Subject: [PATCH 08/11] update path --- .github/php-cs-fixer/.php-cs-fixer.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/php-cs-fixer/.php-cs-fixer.php b/.github/php-cs-fixer/.php-cs-fixer.php index df112ff..9d4b3af 100644 --- a/.github/php-cs-fixer/.php-cs-fixer.php +++ b/.github/php-cs-fixer/.php-cs-fixer.php @@ -4,7 +4,7 @@ $finder = new PhpCsFixer\Finder() - ->in(__DIR__) + ->in(__DIR__.'../../src') ->exclude('var') ->exclude('tests') ->exclude('vendor') @@ -15,5 +15,4 @@ '@Symfony' => true, ]) ->setFinder($finder) - ->setUsingCache(false) - ; + ->setUsingCache(false); From e9f7020e7f6f25b2465613d21fd9cc7f39559459 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 14:45:37 +0200 Subject: [PATCH 09/11] remove dir --- .github/php-cs-fixer/.php-cs-fixer.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/php-cs-fixer/.php-cs-fixer.php b/.github/php-cs-fixer/.php-cs-fixer.php index 9d4b3af..9f1b45c 100644 --- a/.github/php-cs-fixer/.php-cs-fixer.php +++ b/.github/php-cs-fixer/.php-cs-fixer.php @@ -2,13 +2,7 @@ declare(strict_types=1); - -$finder = new PhpCsFixer\Finder() - ->in(__DIR__.'../../src') - ->exclude('var') - ->exclude('tests') - ->exclude('vendor') -; +$finder = new PhpCsFixer\Finder(); return new PhpCsFixer\Config() ->setRules([ From 25ef2e592331cb3683c733f2f6dcf1747384bf55 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 14:59:08 +0200 Subject: [PATCH 10/11] update linter --- .github/php-cs-fixer/.php-cs-fixer.php | 8 ++++++-- composer.json | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/php-cs-fixer/.php-cs-fixer.php b/.github/php-cs-fixer/.php-cs-fixer.php index 9f1b45c..9406b3e 100644 --- a/.github/php-cs-fixer/.php-cs-fixer.php +++ b/.github/php-cs-fixer/.php-cs-fixer.php @@ -2,9 +2,13 @@ declare(strict_types=1); -$finder = new PhpCsFixer\Finder(); +use PhpCsFixer\Config; +use PhpCsFixer\Finder; -return new PhpCsFixer\Config() +$finder = Finder::create() + ->in(['src', 'tests']); + +return new Config() ->setRules([ '@Symfony' => true, ]) diff --git a/composer.json b/composer.json index fb6b20f..5c201be 100644 --- a/composer.json +++ b/composer.json @@ -38,8 +38,8 @@ } }, "scripts": { - "codesniffer": "PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix src tests --dry-run --config=.github/php-cs-fixer/.php-cs-fixer.php", - "codesniffer-fix": "PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix src tests --config=.github/php-cs-fixer/.php-cs-fixer.php", + "codesniffer": "PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix src tests --dry-run --verbose --show-progress=dots --config=.github/php-cs-fixer/.php-cs-fixer.php", + "codesniffer-fix": "PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix src tests --verbose --show-progress=dots --config=.github/php-cs-fixer/.php-cs-fixer.php", "phpstan": "php ./vendor/bin/phpstan analyse --configuration .github/phpstan/phpstan.neon", "phpunit": "php ./vendor/bin/phpunit --configuration ./phpunit.xml.dist ./tests" }, From 51de94c8faa8b5ad199d2ee992acb9260f561181 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 30 Jun 2025 15:01:42 +0200 Subject: [PATCH 11/11] update linter --- .github/php-cs-fixer/.php-cs-fixer.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/php-cs-fixer/.php-cs-fixer.php b/.github/php-cs-fixer/.php-cs-fixer.php index 9406b3e..3c67cd6 100644 --- a/.github/php-cs-fixer/.php-cs-fixer.php +++ b/.github/php-cs-fixer/.php-cs-fixer.php @@ -6,11 +6,11 @@ use PhpCsFixer\Finder; $finder = Finder::create() - ->in(['src', 'tests']); + ->in([__DIR__ . '/../../src', __DIR__ . '/../../tests']); -return new Config() - ->setRules([ - '@Symfony' => true, - ]) - ->setFinder($finder) - ->setUsingCache(false); +$config = new Config(); +$config->setRules(['@Symfony' => true]); +$config->setFinder($finder); +$config->setUsingCache(false); + +return $config;