From be2587e804c24611e4c5e83c1705fd45f856369b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=B6ller?= Date: Mon, 17 Jun 2024 12:04:32 +0200 Subject: [PATCH] Enhancement: Add support for PHP 7.4 --- .github/workflows/integrate.yaml | 15 +- .github/workflows/renew.yaml | 2 +- .phive/phars.xml | 2 +- .php-cs-fixer.php | 2 +- CHANGELOG.md | 2 + composer-require-checker.json | 8 +- composer.json | 6 +- composer.lock | 678 ++++++++++-------- infection.json | 4 +- rector.php | 2 +- src/Constructs.php | 19 +- src/Exception/ParseError.php | 2 +- test/DataProvider/Php74.php | 107 +++ .../WithMethodsNamedAfterKeywords/source.php | 18 + .../source.php | 22 + .../Php74/WithinMultipleNamespaces/source.php | 19 + .../Classy/Php74/WithinNamespace/source.php | 9 + .../source.php | 9 + .../source.php | 15 + .../source.php | 15 + .../WithinNamespaceWithBraces/source.php | 10 + .../source.php | 9 + .../Classy/Php74/WithoutNamespace/source.php | 7 + .../source.php | 7 + .../source.php | 13 + .../source.php | 13 + test/Unit/ConstructsTest.php | 30 + test/Util/Scenario.php | 4 +- 28 files changed, 741 insertions(+), 308 deletions(-) create mode 100644 test/DataProvider/Php74.php create mode 100644 test/Fixture/Classy/Php74/WithMethodsNamedAfterKeywords/source.php create mode 100644 test/Fixture/Classy/Php74/WithMethodsNamedAfterKeywordsAndReturnType/source.php create mode 100644 test/Fixture/Classy/Php74/WithinMultipleNamespaces/source.php create mode 100644 test/Fixture/Classy/Php74/WithinNamespace/source.php create mode 100644 test/Fixture/Classy/Php74/WithinNamespaceAndMultiLineComments/source.php create mode 100644 test/Fixture/Classy/Php74/WithinNamespaceAndShellStyleComments/source.php create mode 100644 test/Fixture/Classy/Php74/WithinNamespaceAndSingleLineComments/source.php create mode 100644 test/Fixture/Classy/Php74/WithinNamespaceWithBraces/source.php create mode 100644 test/Fixture/Classy/Php74/WithinNamespaceWithSingleSegment/source.php create mode 100644 test/Fixture/Classy/Php74/WithoutNamespace/source.php create mode 100644 test/Fixture/Classy/Php74/WithoutNamespaceAndMultiLineComments/source.php create mode 100644 test/Fixture/Classy/Php74/WithoutNamespaceAndShellStyleComments/source.php create mode 100644 test/Fixture/Classy/Php74/WithoutNamespaceAndSingleLineComments/source.php diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index efe26384..96519fd7 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -19,7 +19,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -80,7 +80,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -149,7 +149,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -205,7 +205,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -257,7 +257,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -316,7 +316,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -366,7 +366,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" @@ -417,6 +417,7 @@ jobs: fail-fast: false matrix: php-version: + - "7.4" - "8.0" - "8.1" - "8.2" diff --git a/.github/workflows/renew.yaml b/.github/workflows/renew.yaml index 054bada8..e1626524 100644 --- a/.github/workflows/renew.yaml +++ b/.github/workflows/renew.yaml @@ -17,7 +17,7 @@ jobs: strategy: matrix: php-version: - - "8.0" + - "7.4" dependencies: - "locked" diff --git a/.phive/phars.xml b/.phive/phars.xml index f71d3ada..aefe788e 100644 --- a/.phive/phars.xml +++ b/.phive/phars.xml @@ -1,4 +1,4 @@ - + diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 96bfc36c..1df0b7af 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -26,7 +26,7 @@ $license->save(); -$ruleSet = PhpCsFixer\Config\RuleSet\Php80::create()->withHeader($license->header()); +$ruleSet = PhpCsFixer\Config\RuleSet\Php74::create()->withHeader($license->header()); $config = PhpCsFixer\Config\Factory::fromRuleSet($ruleSet); diff --git a/CHANGELOG.md b/CHANGELOG.md index 2129ea89..21a9d3a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ For a full diff see [`1.6.0...main`][1.6.0...main]. ### Added - Added support for PHP 8.0 ([#926]), by [@localheinz] +- Added support for PHP 7.4 ([#929]), by [@localheinz] ## [`1.6.0`][1.6.0] @@ -185,6 +186,7 @@ For a full diff see [`0.4.0...0.5.0`][0.4.0...0.5.0]. [#702]: https://github.com/ergebnis/classy/pull/702 [#795]: https://github.com/ergebnis/classy/pull/795 [#926]: https://github.com/ergebnis/classy/pull/926 +[#929]: https://github.com/ergebnis/classy/pull/929 [@ergebnis]: https://github.com/ergebnis [@localheinz]: https://github.com/localheinz diff --git a/composer-require-checker.json b/composer-require-checker.json index a738a89a..8596ebb8 100644 --- a/composer-require-checker.json +++ b/composer-require-checker.json @@ -1,5 +1,11 @@ { "symbol-whitelist": [ - "T_ENUM" + "array", + "int", + "self", + "string", + "T_ENUM", + "T_NAME_QUALIFIED", + "true" ] } diff --git a/composer.json b/composer.json index e2907843..d9857e00 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "source": "https://github.com/ergebnis/classy" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "ext-tokenizer": "*" }, "require-dev": { @@ -33,7 +33,7 @@ "ergebnis/php-cs-fixer-config": "^6.31.0", "ergebnis/phpunit-slow-test-detector": "^2.15.0", "fakerphp/faker": "^1.23.1", - "infection/infection": "~0.26.16", + "infection/infection": "~0.26.6", "phpunit/phpunit": "^9.6.19", "psalm/plugin-phpunit": "~0.19.0", "rector/rector": "^1.1.0", @@ -62,7 +62,7 @@ "abandoned": "report" }, "platform": { - "php": "8.0.30" + "php": "7.4.33" }, "preferred-install": "dist", "sort-packages": true diff --git a/composer.lock b/composer.lock index b98148a8..c01b301c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bbe3195abddc5b7b400901add7e133ea", + "content-hash": "5de42436143393349399122a85f23795", "packages": [], "packages-dev": [ { @@ -231,97 +231,6 @@ ], "time": "2022-12-23T10:58:28+00:00" }, - { - "name": "colinodell/json5", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/colinodell/json5.git", - "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/colinodell/json5/zipball/15b063f8cb5e6deb15f0cd39123264ec0d19c710", - "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^7.1.3|^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" - }, - "require-dev": { - "mikehaertl/php-shellcommand": "^1.2.5", - "phpstan/phpstan": "^1.4", - "scrutinizer/ocular": "^1.6", - "squizlabs/php_codesniffer": "^2.3 || ^3.0", - "symfony/finder": "^4.4|^5.4|^6.0", - "symfony/phpunit-bridge": "^5.4|^6.0" - }, - "bin": [ - "bin/json5" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/global.php" - ], - "psr-4": { - "ColinODell\\Json5\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Developer" - } - ], - "description": "UTF-8 compatible JSON5 parser for PHP", - "homepage": "https://github.com/colinodell/json5", - "keywords": [ - "JSON5", - "json", - "json5_decode", - "json_decode" - ], - "support": { - "issues": "https://github.com/colinodell/json5/issues", - "source": "https://github.com/colinodell/json5/tree/v2.3.0" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - } - ], - "time": "2022-12-27T16:44:40+00:00" - }, { "name": "composer/package-versions-deprecated", "version": "1.11.99.5", @@ -1990,45 +1899,45 @@ }, { "name": "infection/infection", - "version": "0.26.16", + "version": "0.26.6", "source": { "type": "git", "url": "https://github.com/infection/infection.git", - "reference": "d646aafe530ba21b8479694cd151570c93c72312" + "reference": "de9b6b92f00ff1cb39decddf95797a4ebec3a1ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/infection/zipball/d646aafe530ba21b8479694cd151570c93c72312", - "reference": "d646aafe530ba21b8479694cd151570c93c72312", + "url": "https://api.github.com/repos/infection/infection/zipball/de9b6b92f00ff1cb39decddf95797a4ebec3a1ee", + "reference": "de9b6b92f00ff1cb39decddf95797a4ebec3a1ee", "shasum": "" }, "require": { - "colinodell/json5": "^2.2", "composer-runtime-api": "^2.0", "composer/xdebug-handler": "^2.0 || ^3.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", - "ext-mbstring": "*", "infection/abstract-testframework-adapter": "^0.5.0", "infection/extension-installer": "^0.1.0", "infection/include-interceptor": "^0.2.5", "justinrainbow/json-schema": "^5.2.10", "nikic/php-parser": "^4.13.2", "ondram/ci-detector": "^4.1.0", - "php": "^8.0", + "php": "^7.4.7 || ^8.0", "sanmai/later": "^0.1.1", "sanmai/pipeline": "^5.1 || ^6", "sebastian/diff": "^3.0.2 || ^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/process": "^5.4 || ^6.0", - "thecodingmachine/safe": "^2.1.2", - "webmozart/assert": "^1.3" + "seld/jsonlint": "^1.7", + "symfony/console": "^3.4.29 || ^4.1.19 || ^5.0 || ^6.0", + "symfony/filesystem": "^3.4.29 || ^4.1.19 || ^5.0 || ^6.0", + "symfony/finder": "^3.4.29 || ^4.1.19 || ^5.0 || ^6.0", + "symfony/process": "^3.4.29 || ^4.1.19 || ^5.0 || ^6.0", + "thecodingmachine/safe": "^1.1.3", + "webmozart/assert": "^1.3", + "webmozart/path-util": "^2.3" }, "conflict": { - "dg/bypass-finals": "<1.4.1", + "dg/bypass-finals": "*", "phpunit/php-code-coverage": ">9 <9.1.4" }, "require-dev": { @@ -2037,14 +1946,14 @@ "helmich/phpunit-json-assert": "^3.0", "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1.1.0", - "phpstan/phpstan": "^1.3.0", + "phpstan/phpstan": "^1.2.0", "phpstan/phpstan-phpunit": "^1.0.0", "phpstan/phpstan-strict-rules": "^1.1.0", "phpstan/phpstan-webmozart-assert": "^1.0.2", - "phpunit/phpunit": "^9.5.5", - "symfony/phpunit-bridge": "^5.4 || ^6.0", - "symfony/yaml": "^5.4 || ^6.0", - "thecodingmachine/phpstan-safe-rule": "^1.2.0" + "phpunit/phpunit": "^9.3.11", + "symfony/phpunit-bridge": "^4.4.18 || ^5.1.10", + "symfony/yaml": "^5.0", + "thecodingmachine/phpstan-safe-rule": "^1.1.0" }, "bin": [ "bin/infection" @@ -2100,7 +2009,7 @@ ], "support": { "issues": "https://github.com/infection/infection/issues", - "source": "https://github.com/infection/infection/tree/0.26.16" + "source": "https://github.com/infection/infection/tree/0.26.6" }, "funding": [ { @@ -2112,7 +2021,7 @@ "type": "open_collective" } ], - "time": "2022-10-22T10:07:33+00:00" + "time": "2022-03-07T11:40:30+00:00" }, { "name": "justinrainbow/json-schema", @@ -3417,27 +3326,22 @@ }, { "name": "psr/container", - "version": "2.0.2", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -3464,9 +3368,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -3520,30 +3424,30 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3564,9 +3468,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { "name": "react/cache", @@ -5249,35 +5153,95 @@ ], "time": "2020-09-28T06:39:44+00:00" }, + { + "name": "seld/jsonlint", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9bb7db07b5d66d90f6ebf542f09fc67d800e5259", + "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "support": { + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.10.2" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2024-02-07T12:57:50+00:00" + }, { "name": "spatie/array-to-xml", - "version": "3.3.0", + "version": "2.17.1", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876" + "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876", - "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", + "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", "shasum": "" }, "require": { "ext-dom": "*", - "php": "^8.0" + "php": "^7.4|^8.0" }, "require-dev": { "mockery/mockery": "^1.2", "pestphp/pest": "^1.21", + "phpunit/phpunit": "^9.0", "spatie/pest-plugin-snapshots": "^1.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { "Spatie\\ArrayToXml\\": "src" @@ -5303,7 +5267,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.3.0" + "source": "https://github.com/spatie/array-to-xml/tree/2.17.1" }, "funding": [ { @@ -5315,46 +5279,50 @@ "type": "github" } ], - "time": "2024-05-01T10:20:27+00:00" + "time": "2022-12-26T08:22:07+00:00" }, { "name": "symfony/console", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" + "reference": "aa73115c0c24220b523625bfcfa655d7d73662dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "url": "https://api.github.com/repos/symfony/console/zipball/aa73115c0c24220b523625bfcfa655d7d73662dd", + "reference": "aa73115c0c24220b523625bfcfa655d7d73662dd", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.1|^6.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -5389,12 +5357,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.19" + "source": "https://github.com/symfony/console/tree/v5.4.40" }, "funding": [ { @@ -5410,29 +5378,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.2", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "reference": "80d075412b557d41002320b96a096ca65aa2c98d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d", + "reference": "80d075412b557d41002320b96a096ca65aa2c98d", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5461,7 +5429,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3" }, "funding": [ { @@ -5477,42 +5445,44 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-24T14:02:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" + "reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a54e2a8a114065f31020d6a89ede83e34c3b27a4", + "reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -5544,7 +5514,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.40" }, "funding": [ { @@ -5560,24 +5530,24 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.2", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + "reference": "540f4c73e87fd0c71ca44a6aa305d024ac68cb73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/540f4c73e87fd0c71ca44a6aa305d024ac68cb73", + "reference": "540f4c73e87fd0c71ca44a6aa305d024ac68cb73", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, "suggest": { @@ -5586,7 +5556,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5623,7 +5593,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.3" }, "funding": [ { @@ -5639,26 +5609,30 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2024-01-23T13:51:25+00:00" }, { "name": "symfony/filesystem", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" + "reference": "26dd9912df6940810ea00f8f53ad48d6a3424995" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/26dd9912df6940810ea00f8f53ad48d6a3424995", + "reference": "26dd9912df6940810ea00f8f53ad48d6a3424995", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/process": "^5.4|^6.4" }, "type": "library", "autoload": { @@ -5686,7 +5660,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.19" + "source": "https://github.com/symfony/filesystem/tree/v5.4.40" }, "funding": [ { @@ -5702,24 +5676,26 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/finder", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + "reference": "f51cff4687547641c7d8180d74932ab40b2205ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "url": "https://api.github.com/repos/symfony/finder/zipball/f51cff4687547641c7d8180d74932ab40b2205ce", + "reference": "f51cff4687547641c7d8180d74932ab40b2205ce", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -5747,7 +5723,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.19" + "source": "https://github.com/symfony/finder/tree/v5.4.40" }, "funding": [ { @@ -5763,25 +5739,27 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3" + "reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/bd1afbde6613a8d6b956115e0e14b196191fd0c4", + "reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -5814,7 +5792,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.0.19" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.40" }, "funding": [ { @@ -5830,7 +5808,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6150,6 +6128,82 @@ ], "time": "2024-01-29T20:11:03+00:00" }, + { + "name": "symfony/polyfill-php73", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.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-01-29T20:11:03+00:00" + }, { "name": "symfony/polyfill-php80", "version": "v1.29.0", @@ -6308,20 +6362,21 @@ }, { "name": "symfony/process", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", + "url": "https://api.github.com/repos/symfony/process/zipball/deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -6349,7 +6404,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.0.19" + "source": "https://github.com/symfony/process/tree/v5.4.40" }, "funding": [ { @@ -6365,25 +6420,26 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.0.2", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/container": "^2.0" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6394,7 +6450,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6431,7 +6487,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.3" }, "funding": [ { @@ -6447,24 +6503,24 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:58+00:00" + "time": "2023-04-21T15:04:16+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e9daf3b7c805c747638b2cc48f1649e594f9625", + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=7.2.5", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", @@ -6493,7 +6549,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.40" }, "funding": [ { @@ -6509,37 +6565,38 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/string", - "version": "v6.0.19", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" + "reference": "142877285aa974a6f7685e292ab5ba9aae86b143" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", + "url": "https://api.github.com/repos/symfony/string/zipball/142877285aa974a6f7685e292ab5ba9aae86b143", + "reference": "142877285aa974a6f7685e292ab5ba9aae86b143", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": ">=3.0" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -6578,7 +6635,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.19" + "source": "https://github.com/symfony/string/tree/v5.4.40" }, "funding": [ { @@ -6594,50 +6651,43 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "thecodingmachine/safe", - "version": "v2.5.0", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/thecodingmachine/safe.git", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" + "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc", + "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc", "shasum": "" }, "require": { - "php": "^8.0" + "php": ">=7.2" }, "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^0.12", "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^1.0" + "thecodingmachine/phpstan-strict-rules": "^0.12" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "0.1-dev" } }, "autoload": { "files": [ "deprecated/apc.php", - "deprecated/array.php", - "deprecated/datetime.php", "deprecated/libevent.php", - "deprecated/misc.php", - "deprecated/password.php", "deprecated/mssql.php", "deprecated/stats.php", - "deprecated/strings.php", "lib/special_cases.php", - "deprecated/mysqli.php", "generated/apache.php", "generated/apcu.php", "generated/array.php", @@ -6658,7 +6708,6 @@ "generated/fpm.php", "generated/ftp.php", "generated/funchand.php", - "generated/gettext.php", "generated/gmp.php", "generated/gnupg.php", "generated/hash.php", @@ -6668,6 +6717,7 @@ "generated/image.php", "generated/imap.php", "generated/info.php", + "generated/ingres-ii.php", "generated/inotify.php", "generated/json.php", "generated/ldap.php", @@ -6676,14 +6726,20 @@ "generated/mailparse.php", "generated/mbstring.php", "generated/misc.php", + "generated/msql.php", "generated/mysql.php", + "generated/mysqli.php", + "generated/mysqlndMs.php", + "generated/mysqlndQc.php", "generated/network.php", "generated/oci8.php", "generated/opcache.php", "generated/openssl.php", "generated/outcontrol.php", + "generated/password.php", "generated/pcntl.php", "generated/pcre.php", + "generated/pdf.php", "generated/pgsql.php", "generated/posix.php", "generated/ps.php", @@ -6694,6 +6750,7 @@ "generated/sem.php", "generated/session.php", "generated/shmop.php", + "generated/simplexml.php", "generated/sockets.php", "generated/sodium.php", "generated/solr.php", @@ -6716,13 +6773,13 @@ "generated/zip.php", "generated/zlib.php" ], - "classmap": [ - "lib/DateTime.php", - "lib/DateTimeImmutable.php", - "lib/Exceptions/", - "deprecated/Exceptions/", - "generated/Exceptions/" - ] + "psr-4": { + "Safe\\": [ + "lib/", + "deprecated/", + "generated/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6731,9 +6788,9 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" + "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3" }, - "time": "2023-04-05T11:54:14+00:00" + "time": "2020-10-28T17:51:34+00:00" }, { "name": "theseer/tokenizer", @@ -6952,6 +7009,57 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "abandoned": "symfony/filesystem", + "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], @@ -6960,12 +7068,12 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "ext-tokenizer": "*" }, "platform-dev": [], "platform-overrides": { - "php": "8.0.30" + "php": "7.4.33" }, "plugin-api-version": "2.6.0" } diff --git a/infection.json b/infection.json index 0dc11350..0e9863c6 100644 --- a/infection.json +++ b/infection.json @@ -3,8 +3,8 @@ "logs": { "text": ".build/infection/infection-log.txt" }, - "minCoveredMsi": 87, - "minMsi": 85, + "minCoveredMsi": 86, + "minMsi": 83, "phpUnit": { "configDir": "test\/Unit" }, diff --git a/rector.php b/rector.php index 4ce221cd..5c368d77 100644 --- a/rector.php +++ b/rector.php @@ -26,7 +26,7 @@ __DIR__ . '/test/Util/', ]); - $rectorConfig->phpVersion(ValueObject\PhpVersion::PHP_80); + $rectorConfig->phpVersion(ValueObject\PhpVersion::PHP_74); $rectorConfig->sets([ PHPUnit\Set\PHPUnitSetList::PHPUNIT_90, diff --git a/src/Constructs.php b/src/Constructs.php index 77b393e6..421ab35b 100644 --- a/src/Constructs.php +++ b/src/Constructs.php @@ -40,9 +40,22 @@ public static function fromSource(string $source): array $namespaceSegmentOrNamespaceTokens = [ \T_STRING, - \T_NAME_QUALIFIED, ]; + /** + * @see https://wiki.php.net/rfc/namespaced_names_as_token + */ + if ( + \PHP_VERSION_ID >= 80000 + && \defined('T_NAME_QUALIFIED') + ) { + /** @var list $namespaceSegmentOrNamespaceTokens */ + $namespaceSegmentOrNamespaceTokens = [ + \T_STRING, + \T_NAME_QUALIFIED, + ]; + } + $classyTokens = [ \T_CLASS, \T_INTERFACE, @@ -211,7 +224,7 @@ public static function fromDirectory(string $directory): array private static function significantAfter( int $index, array $sequence, - int $count, + int $count ): int { for ($current = $index + 1; $current < $count; ++$current) { $token = $sequence[$current]; @@ -233,7 +246,7 @@ private static function significantAfter( */ private static function significantBefore( int $index, - array $sequence, + array $sequence ): int { for ($current = $index - 1; -1 < $current; --$current) { $token = $sequence[$current]; diff --git a/src/Exception/ParseError.php b/src/Exception/ParseError.php index 20e94fbb..93e3ef39 100644 --- a/src/Exception/ParseError.php +++ b/src/Exception/ParseError.php @@ -26,7 +26,7 @@ public static function fromParseError(\ParseError $exception): self public static function fromFileNameAndParseError( string $fileName, - \ParseError $exception, + \ParseError $exception ): self { return new self( \sprintf( diff --git a/test/DataProvider/Php74.php b/test/DataProvider/Php74.php new file mode 100644 index 00000000..8a3b9950 --- /dev/null +++ b/test/DataProvider/Php74.php @@ -0,0 +1,107 @@ + + */ + public static function classyConstructs(): \Generator + { + $scenarios = [ + Test\Util\Scenario::create( + 'php74-within-namespace', + __DIR__ . '/../Fixture/Classy/Php74/WithinNamespace/source.php', + Construct::fromName(Test\Fixture\Classy\Php74\WithinNamespace\Bar::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinNamespace\Baz::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinNamespace\Foo::class), + ), + Test\Util\Scenario::create( + 'php74-within-namespace-with-braces', + __DIR__ . '/../Fixture/Classy/Php74/WithinNamespaceWithBraces/source.php', + Construct::fromName(Test\Fixture\Classy\Php74\WithinNamespaceWithBraces\Bar::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinNamespaceWithBraces\Baz::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinNamespaceWithBraces\Foo::class), + ), + Test\Util\Scenario::create( + 'php74-within-multiple-namespaces-with-braces', + __DIR__ . '/../Fixture/Classy/Php74/WithinMultipleNamespaces/source.php', + Construct::fromName(Test\Fixture\Classy\Php74\WithinMultipleNamespaces\Bar\Bar::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinMultipleNamespaces\Bar\Baz::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinMultipleNamespaces\Bar\Foo::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinMultipleNamespaces\Foo\Bar::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinMultipleNamespaces\Foo\Baz::class), + Construct::fromName(Test\Fixture\Classy\Php74\WithinMultipleNamespaces\Foo\Foo::class), + ), + Test\Util\Scenario::create( + 'php74-within-namespace-with-single-segment', + __DIR__ . '/../Fixture/Classy/Php74/WithinNamespaceWithSingleSegment/source.php', + Construct::fromName('Ergebnis\\Bar'), + Construct::fromName('Ergebnis\\Baz'), + Construct::fromName('Ergebnis\\Foo'), + ), + Test\Util\Scenario::create( + 'php74-with-methods-named-after-keywords', + __DIR__ . '/../Fixture/Classy/Php74/WithMethodsNamedAfterKeywords/source.php', + Construct::fromName(Test\Fixture\Classy\Php74\WithMethodsNamedAfterKeywords\Foo::class), + ), + /** + * @see https://github.com/zendframework/zend-file/pull/41 + */ + Test\Util\Scenario::create( + 'php74-with-methods-named-after-keywords-and-return-type', + __DIR__ . '/../Fixture/Classy/Php74/WithMethodsNamedAfterKeywordsAndReturnType/source.php', + Construct::fromName(Test\Fixture\Classy\Php74\WithMethodsNamedAfterKeywordsAndReturnType\Foo::class), + ), + Test\Util\Scenario::create( + 'php74-without-namespace', + __DIR__ . '/../Fixture/Classy/Php74/WithoutNamespace/source.php', + Construct::fromName('Bar'), + Construct::fromName('Baz'), + Construct::fromName('Foo'), + ), + Test\Util\Scenario::create( + 'php74-without-namespace-and-multi-line-comments', + __DIR__ . '/../Fixture/Classy/Php74/WithoutNamespaceAndMultiLineComments/source.php', + Construct::fromName('Bar'), + Construct::fromName('Baz'), + Construct::fromName('Foo'), + ), + Test\Util\Scenario::create( + 'php74-without-namespace-and-shell-line-comments', + __DIR__ . '/../Fixture/Classy/Php74/WithoutNamespaceAndShellStyleComments/source.php', + Construct::fromName('Bar'), + Construct::fromName('Baz'), + Construct::fromName('Foo'), + ), + Test\Util\Scenario::create( + 'php74-without-namespace-and-single-line-comments', + __DIR__ . '/../Fixture/Classy/Php74/WithoutNamespaceAndSingleLineComments/source.php', + Construct::fromName('Bar'), + Construct::fromName('Baz'), + Construct::fromName('Foo'), + ), + ]; + + foreach ($scenarios as $scenario) { + yield $scenario->description() => [ + $scenario, + ]; + } + } +} diff --git a/test/Fixture/Classy/Php74/WithMethodsNamedAfterKeywords/source.php b/test/Fixture/Classy/Php74/WithMethodsNamedAfterKeywords/source.php new file mode 100644 index 00000000..87254de9 --- /dev/null +++ b/test/Fixture/Classy/Php74/WithMethodsNamedAfterKeywords/source.php @@ -0,0 +1,18 @@ +source()); + + $expected = \array_map(static function (Construct $construct): Construct { + return Construct::fromName($construct->name()); + }, $scenario->constructsSortedByName()); + + self::assertIsList($constructs); + self::assertEquals($expected, $constructs); + } + /** * @dataProvider \Ergebnis\Classy\Test\DataProvider\Php80::classyConstructs() * @@ -161,6 +178,19 @@ public function testFromDirectoryReturnsEmptyArrayWhenNoClassyConstructsHaveBeen self::assertSame([], $constructs); } + /** + * @dataProvider \Ergebnis\Classy\Test\DataProvider\Php74::classyConstructs() + * + * @requires PHP 7.4 + */ + public function testFromDirectoryReturnsListOfClassyConstructsOnPhp74(Test\Util\Scenario $scenario): void + { + $constructs = Constructs::fromDirectory($scenario->directory()); + + self::assertIsList($constructs); + self::assertEquals($scenario->constructsSortedByName(), $constructs); + } + /** * @dataProvider \Ergebnis\Classy\Test\DataProvider\Php80::classyConstructs() * diff --git a/test/Util/Scenario.php b/test/Util/Scenario.php index 3a109430..96ed063a 100644 --- a/test/Util/Scenario.php +++ b/test/Util/Scenario.php @@ -30,7 +30,7 @@ private function __construct( string $description, string $fileName, string $source, - Classy\Construct ...$constructs, + Classy\Construct ...$constructs ) { $this->description = $description; $this->fileName = $fileName; @@ -44,7 +44,7 @@ private function __construct( public static function create( string $description, string $fileName, - Classy\Construct ...$constructs, + Classy\Construct ...$constructs ): self { if (!\is_file($fileName)) { throw new \InvalidArgumentException(\sprintf(