diff --git a/composer.json b/composer.json index 7a892cf63..61392d50d 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "require": { "php": ">=7.4", - "rector/rector": "1.2.2", + "rector/rector": "1.2.6", "friendsofphp/php-cs-fixer": "3.38.2", "redaxo/php-cs-fixer-config": "^1.0" }, diff --git a/composer.lock b/composer.lock index 7fe472a22..f4d34825d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,34 +4,42 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fe3e37d1dbd3c8603d2c8625706638f0", + "content-hash": "d6eade6a8c1b1c61534d732ba5edfcb4", "packages": [ { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -59,7 +67,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.3.1" }, "funding": [ { @@ -75,28 +83,28 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-08-27T18:44:43+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "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.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -140,7 +148,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -156,7 +164,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", @@ -319,16 +327,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.8", + "version": "1.12.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec" + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", - "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", "shasum": "" }, "require": { @@ -373,7 +381,7 @@ "type": "github" } ], - "time": "2024-07-24T07:01:22+00:00" + "time": "2024-09-26T12:45:22+00:00" }, { "name": "psr/container", @@ -525,21 +533,21 @@ }, { "name": "rector/rector", - "version": "1.2.2", + "version": "1.2.6", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "044e6364017882d1e346da8690eeabc154da5495" + "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495", - "reference": "044e6364017882d1e346da8690eeabc154da5495", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/6ca85da28159dbd3bb36211c5104b7bc91278e99", + "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.12.5" }, "conflict": { "rector/rector-doctrine": "*", @@ -572,7 +580,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.2" + "source": "https://github.com/rectorphp/rector/tree/1.2.6" }, "funding": [ { @@ -580,7 +588,7 @@ "type": "github" } ], - "time": "2024-07-25T07:44:34+00:00" + "time": "2024-10-03T08:56:44+00:00" }, { "name": "redaxo/php-cs-fixer-config", @@ -691,16 +699,16 @@ }, { "name": "symfony/console", - "version": "v5.4.39", + "version": "v5.4.44", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f3e591c48688a0cfa1a3296205926c05e84b22b1" + "reference": "5b5a0aa66e3296e303e22490f90f521551835a83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f3e591c48688a0cfa1a3296205926c05e84b22b1", - "reference": "f3e591c48688a0cfa1a3296205926c05e84b22b1", + "url": "https://api.github.com/repos/symfony/console/zipball/5b5a0aa66e3296e303e22490f90f521551835a83", + "reference": "5b5a0aa66e3296e303e22490f90f521551835a83", "shasum": "" }, "require": { @@ -770,7 +778,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.39" + "source": "https://github.com/symfony/console/tree/v5.4.44" }, "funding": [ { @@ -786,7 +794,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-09-20T07:56:40+00:00" }, { "name": "symfony/deprecation-contracts", @@ -857,16 +865,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v5.4.39", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d40fae9fd85c762b6ba378152fdd1157a85d7e4f" + "reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d40fae9fd85c762b6ba378152fdd1157a85d7e4f", - "reference": "d40fae9fd85c762b6ba378152fdd1157a85d7e4f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a54e2a8a114065f31020d6a89ede83e34c3b27a4", + "reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4", "shasum": "" }, "require": { @@ -922,7 +930,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.39" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.40" }, "funding": [ { @@ -938,7 +946,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1021,23 +1029,25 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.39", + "version": "v5.4.44", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e6edd875d5d39b03de51f3c3951148cfa79a4d12" + "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e6edd875d5d39b03de51f3c3951148cfa79a4d12", - "reference": "e6edd875d5d39b03de51f3c3951148cfa79a4d12", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/76c3818964e9d32be3862c9318ae3ba9aa280ddc", + "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { "symfony/process": "^5.4|^6.4" }, "type": "library", @@ -1066,7 +1076,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.39" + "source": "https://github.com/symfony/filesystem/tree/v5.4.44" }, "funding": [ { @@ -1082,20 +1092,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-09-16T14:52:48+00:00" }, { "name": "symfony/finder", - "version": "v5.4.39", + "version": "v5.4.43", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "f6a96e4fcd468a25fede16ee665f50ced856bd0a" + "reference": "ae25a9145a900764158d439653d5630191155ca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/f6a96e4fcd468a25fede16ee665f50ced856bd0a", - "reference": "f6a96e4fcd468a25fede16ee665f50ced856bd0a", + "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0", + "reference": "ae25a9145a900764158d439653d5630191155ca0", "shasum": "" }, "require": { @@ -1129,7 +1139,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.39" + "source": "https://github.com/symfony/finder/tree/v5.4.43" }, "funding": [ { @@ -1145,20 +1155,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-08-13T14:03:51+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.39", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "1303bb73d6c3882f07c618129295503085dfddb9" + "reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/1303bb73d6c3882f07c618129295503085dfddb9", - "reference": "1303bb73d6c3882f07c618129295503085dfddb9", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/bd1afbde6613a8d6b956115e0e14b196191fd0c4", + "reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4", "shasum": "" }, "require": { @@ -1198,7 +1208,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.39" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.40" }, "funding": [ { @@ -1214,24 +1224,24 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1277,7 +1287,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1293,24 +1303,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -1355,7 +1365,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -1371,24 +1381,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -1436,7 +1446,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -1452,24 +1462,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1516,7 +1526,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -1532,24 +1542,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -1592,7 +1602,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -1608,24 +1618,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -1672,7 +1682,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -1688,24 +1698,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -1748,7 +1758,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -1764,20 +1774,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v5.4.39", + "version": "v5.4.44", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "85a554acd7c28522241faf2e97b9541247a0d3d5" + "reference": "1b9fa82b5c62cd49da8c9e3952dd8531ada65096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/85a554acd7c28522241faf2e97b9541247a0d3d5", - "reference": "85a554acd7c28522241faf2e97b9541247a0d3d5", + "url": "https://api.github.com/repos/symfony/process/zipball/1b9fa82b5c62cd49da8c9e3952dd8531ada65096", + "reference": "1b9fa82b5c62cd49da8c9e3952dd8531ada65096", "shasum": "" }, "require": { @@ -1810,7 +1820,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.39" + "source": "https://github.com/symfony/process/tree/v5.4.44" }, "funding": [ { @@ -1826,7 +1836,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-09-17T12:46:43+00:00" }, { "name": "symfony/service-contracts", @@ -1913,16 +1923,16 @@ }, { "name": "symfony/stopwatch", - "version": "v5.4.39", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "fb97497490bcec8a3c32c809cacfdd4c15dc8390" + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb97497490bcec8a3c32c809cacfdd4c15dc8390", - "reference": "fb97497490bcec8a3c32c809cacfdd4c15dc8390", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e9daf3b7c805c747638b2cc48f1649e594f9625", + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625", "shasum": "" }, "require": { @@ -1955,7 +1965,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.39" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.40" }, "funding": [ { @@ -1971,20 +1981,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/string", - "version": "v5.4.39", + "version": "v5.4.44", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "495e71bae5862308051b9e63cc3e34078eed83ef" + "reference": "832caa16b6d9aac6bf11747315225f5aba384c24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/495e71bae5862308051b9e63cc3e34078eed83ef", - "reference": "495e71bae5862308051b9e63cc3e34078eed83ef", + "url": "https://api.github.com/repos/symfony/string/zipball/832caa16b6d9aac6bf11747315225f5aba384c24", + "reference": "832caa16b6d9aac6bf11747315225f5aba384c24", "shasum": "" }, "require": { @@ -2041,7 +2051,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.39" + "source": "https://github.com/symfony/string/tree/v5.4.44" }, "funding": [ { @@ -2057,7 +2067,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-09-20T07:56:40+00:00" } ], "packages-dev": [], diff --git a/lib/RexFactor.php b/lib/RexFactor.php index 37c554312..fbecc02cb 100644 --- a/lib/RexFactor.php +++ b/lib/RexFactor.php @@ -45,14 +45,10 @@ final class RexFactor 'PHPUNIT_70' => 'PHPUnit 7', 'PHPUNIT_80' => 'PHPUnit 8', 'PHPUNIT_90' => 'PHPUnit 9', - 'PHPUNIT_91' => 'PHPUnit 9.1', 'PHPUNIT_100' => 'PHPUnit 10', ], self::TESTS_QUALITY => [ 'PHPUNIT_CODE_QUALITY' => 'Unify test-code quality', - 'PHPUNIT_EXCEPTION' => 'Refactor exception expectations', - 'REMOVE_MOCKS' => 'Reduce mock usage', - 'PHPUNIT_SPECIFIC_METHOD' => 'Use specific assert*() methods', 'ANNOTATIONS_TO_ATTRIBUTES' => 'Annotations to Attributes', ], self::MISC_MIGRATIONS => [ diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index c795f005f..47877ddf5 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -15,6 +15,12 @@ 'Composer\\Pcre\\MatchResult' => $vendorDir . '/composer/pcre/src/MatchResult.php', 'Composer\\Pcre\\MatchStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchStrictGroupsResult.php', 'Composer\\Pcre\\MatchWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchWithOffsetsResult.php', + 'Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => $vendorDir . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php', + 'Composer\\Pcre\\PHPStan\\PregMatchFlags' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchFlags.php', + 'Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php', + 'Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php', + 'Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php', + 'Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => $vendorDir . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php', 'Composer\\Pcre\\PcreException' => $vendorDir . '/composer/pcre/src/PcreException.php', 'Composer\\Pcre\\Preg' => $vendorDir . '/composer/pcre/src/Preg.php', 'Composer\\Pcre\\Regex' => $vendorDir . '/composer/pcre/src/Regex.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 150085553..880392e1b 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -173,6 +173,12 @@ class ComposerStaticInit432d9322d3d4193d52e9a1d1ec2ff418 'Composer\\Pcre\\MatchResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchResult.php', 'Composer\\Pcre\\MatchStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchStrictGroupsResult.php', 'Composer\\Pcre\\MatchWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchWithOffsetsResult.php', + 'Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php', + 'Composer\\Pcre\\PHPStan\\PregMatchFlags' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchFlags.php', + 'Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php', + 'Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php', + 'Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php', + 'Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php', 'Composer\\Pcre\\PcreException' => __DIR__ . '/..' . '/composer/pcre/src/PcreException.php', 'Composer\\Pcre\\Preg' => __DIR__ . '/..' . '/composer/pcre/src/Preg.php', 'Composer\\Pcre\\Regex' => __DIR__ . '/..' . '/composer/pcre/src/Regex.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 0d8857162..49a83f482 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -2,32 +2,40 @@ "packages": [ { "name": "composer/pcre", - "version": "3.1.3", - "version_normalized": "3.1.3.0", + "version": "3.3.1", + "version_normalized": "3.3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, - "time": "2024-03-19T10:26:25+00:00", + "time": "2024-08-27T18:44:43+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "installation-source": "dist", @@ -56,7 +64,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.3.1" }, "funding": [ { @@ -76,27 +84,27 @@ }, { "name": "composer/semver", - "version": "3.4.0", - "version_normalized": "3.4.0.0", + "version": "3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "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.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, - "time": "2023-08-31T09:50:34+00:00", + "time": "2024-09-19T14:15:21+00:00", "type": "library", "extra": { "branch-alias": { @@ -140,7 +148,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -325,17 +333,17 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.67", - "version_normalized": "1.10.67.0", + "version": "1.12.5", + "version_normalized": "1.12.5.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493" + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493", - "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", "shasum": "" }, "require": { @@ -344,7 +352,7 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "time": "2024-04-16T07:22:02+00:00", + "time": "2024-09-26T12:45:22+00:00", "bin": [ "phpstan", "phpstan.phar" @@ -543,22 +551,22 @@ }, { "name": "rector/rector", - "version": "1.0.5", - "version_normalized": "1.0.5.0", + "version": "1.2.6", + "version_normalized": "1.2.6.0", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34" + "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/73eb63e4f9011dba6b7c66c3262543014e352f34", - "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/6ca85da28159dbd3bb36211c5104b7bc91278e99", + "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.10.57" + "phpstan/phpstan": "^1.12.5" }, "conflict": { "rector/rector-doctrine": "*", @@ -569,7 +577,7 @@ "suggest": { "ext-dom": "To manipulate phpunit.xml via the custom-rule command" }, - "time": "2024-05-10T05:31:15+00:00", + "time": "2024-10-03T08:56:44+00:00", "bin": [ "bin/rector" ], @@ -593,7 +601,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.0.5" + "source": "https://github.com/rectorphp/rector/tree/1.2.6" }, "funding": [ { @@ -718,17 +726,17 @@ }, { "name": "symfony/console", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.44", + "version_normalized": "5.4.44.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f3e591c48688a0cfa1a3296205926c05e84b22b1" + "reference": "5b5a0aa66e3296e303e22490f90f521551835a83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f3e591c48688a0cfa1a3296205926c05e84b22b1", - "reference": "f3e591c48688a0cfa1a3296205926c05e84b22b1", + "url": "https://api.github.com/repos/symfony/console/zipball/5b5a0aa66e3296e303e22490f90f521551835a83", + "reference": "5b5a0aa66e3296e303e22490f90f521551835a83", "shasum": "" }, "require": { @@ -766,7 +774,7 @@ "symfony/lock": "", "symfony/process": "" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-09-20T07:56:40+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -800,7 +808,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.39" + "source": "https://github.com/symfony/console/tree/v5.4.44" }, "funding": [ { @@ -890,17 +898,17 @@ }, { "name": "symfony/event-dispatcher", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.40", + "version_normalized": "5.4.40.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d40fae9fd85c762b6ba378152fdd1157a85d7e4f" + "reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d40fae9fd85c762b6ba378152fdd1157a85d7e4f", - "reference": "d40fae9fd85c762b6ba378152fdd1157a85d7e4f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a54e2a8a114065f31020d6a89ede83e34c3b27a4", + "reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4", "shasum": "" }, "require": { @@ -930,7 +938,7 @@ "symfony/dependency-injection": "", "symfony/http-kernel": "" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-05-31T14:33:22+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -958,7 +966,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.39" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.40" }, "funding": [ { @@ -1060,27 +1068,29 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.44", + "version_normalized": "5.4.44.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e6edd875d5d39b03de51f3c3951148cfa79a4d12" + "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e6edd875d5d39b03de51f3c3951148cfa79a4d12", - "reference": "e6edd875d5d39b03de51f3c3951148cfa79a4d12", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/76c3818964e9d32be3862c9318ae3ba9aa280ddc", + "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { "symfony/process": "^5.4|^6.4" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-09-16T14:52:48+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1108,7 +1118,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.39" + "source": "https://github.com/symfony/filesystem/tree/v5.4.44" }, "funding": [ { @@ -1128,17 +1138,17 @@ }, { "name": "symfony/finder", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.43", + "version_normalized": "5.4.43.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "f6a96e4fcd468a25fede16ee665f50ced856bd0a" + "reference": "ae25a9145a900764158d439653d5630191155ca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/f6a96e4fcd468a25fede16ee665f50ced856bd0a", - "reference": "f6a96e4fcd468a25fede16ee665f50ced856bd0a", + "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0", + "reference": "ae25a9145a900764158d439653d5630191155ca0", "shasum": "" }, "require": { @@ -1146,7 +1156,7 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php80": "^1.16" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-08-13T14:03:51+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1174,7 +1184,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.39" + "source": "https://github.com/symfony/finder/tree/v5.4.43" }, "funding": [ { @@ -1194,17 +1204,17 @@ }, { "name": "symfony/options-resolver", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.40", + "version_normalized": "5.4.40.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "1303bb73d6c3882f07c618129295503085dfddb9" + "reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/1303bb73d6c3882f07c618129295503085dfddb9", - "reference": "1303bb73d6c3882f07c618129295503085dfddb9", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/bd1afbde6613a8d6b956115e0e14b196191fd0c4", + "reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4", "shasum": "" }, "require": { @@ -1213,7 +1223,7 @@ "symfony/polyfill-php73": "~1.0", "symfony/polyfill-php80": "^1.16" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-05-31T14:33:22+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1246,7 +1256,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.39" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.40" }, "funding": [ { @@ -1266,21 +1276,21 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1288,7 +1298,7 @@ "suggest": { "ext-ctype": "For best performance" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1328,7 +1338,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1348,26 +1358,26 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1409,7 +1419,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -1429,26 +1439,26 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1493,7 +1503,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -1513,21 +1523,21 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1535,7 +1545,7 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1576,7 +1586,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -1596,23 +1606,23 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1655,7 +1665,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -1675,23 +1685,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1738,7 +1748,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -1758,23 +1768,23 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -1817,7 +1827,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -1837,24 +1847,24 @@ }, { "name": "symfony/process", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.44", + "version_normalized": "5.4.44.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "85a554acd7c28522241faf2e97b9541247a0d3d5" + "reference": "1b9fa82b5c62cd49da8c9e3952dd8531ada65096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/85a554acd7c28522241faf2e97b9541247a0d3d5", - "reference": "85a554acd7c28522241faf2e97b9541247a0d3d5", + "url": "https://api.github.com/repos/symfony/process/zipball/1b9fa82b5c62cd49da8c9e3952dd8531ada65096", + "reference": "1b9fa82b5c62cd49da8c9e3952dd8531ada65096", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-php80": "^1.16" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-09-17T12:46:43+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1882,7 +1892,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.39" + "source": "https://github.com/symfony/process/tree/v5.4.44" }, "funding": [ { @@ -1988,24 +1998,24 @@ }, { "name": "symfony/stopwatch", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.40", + "version_normalized": "5.4.40.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "fb97497490bcec8a3c32c809cacfdd4c15dc8390" + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb97497490bcec8a3c32c809cacfdd4c15dc8390", - "reference": "fb97497490bcec8a3c32c809cacfdd4c15dc8390", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e9daf3b7c805c747638b2cc48f1649e594f9625", + "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/service-contracts": "^1|^2|^3" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-05-31T14:33:22+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2033,7 +2043,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.39" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.40" }, "funding": [ { @@ -2053,17 +2063,17 @@ }, { "name": "symfony/string", - "version": "v5.4.39", - "version_normalized": "5.4.39.0", + "version": "v5.4.44", + "version_normalized": "5.4.44.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "495e71bae5862308051b9e63cc3e34078eed83ef" + "reference": "832caa16b6d9aac6bf11747315225f5aba384c24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/495e71bae5862308051b9e63cc3e34078eed83ef", - "reference": "495e71bae5862308051b9e63cc3e34078eed83ef", + "url": "https://api.github.com/repos/symfony/string/zipball/832caa16b6d9aac6bf11747315225f5aba384c24", + "reference": "832caa16b6d9aac6bf11747315225f5aba384c24", "shasum": "" }, "require": { @@ -2083,7 +2093,7 @@ "symfony/translation-contracts": "^1.1|^2", "symfony/var-exporter": "^4.4|^5.0|^6.0" }, - "time": "2024-04-18T08:26:06+00:00", + "time": "2024-09-20T07:56:40+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2122,7 +2132,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.39" + "source": "https://github.com/symfony/string/tree/v5.4.44" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 6b1891888..cf72add7f 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => '__root__', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '6e4343516f2667323b3b38369ea21e52d3a47f8e', + 'reference' => '824f3fc5cbbfbc7f920ecb43af9a8663b61e16ef', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,25 +13,25 @@ '__root__' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '6e4343516f2667323b3b38369ea21e52d3a47f8e', + 'reference' => '824f3fc5cbbfbc7f920ecb43af9a8663b61e16ef', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false, ), 'composer/pcre' => array( - 'pretty_version' => '3.1.3', - 'version' => '3.1.3.0', - 'reference' => '5b16e25a5355f1f3afdfc2f954a0a80aec4826a8', + 'pretty_version' => '3.3.1', + 'version' => '3.3.1.0', + 'reference' => '63aaeac21d7e775ff9bc9d45021e1745c97521c4', 'type' => 'library', 'install_path' => __DIR__ . '/./pcre', 'aliases' => array(), 'dev_requirement' => false, ), 'composer/semver' => array( - 'pretty_version' => '3.4.0', - 'version' => '3.4.0.0', - 'reference' => '35e8d0af4486141bc745f23a29cc2091eb624a32', + 'pretty_version' => '3.4.3', + 'version' => '3.4.3.0', + 'reference' => '4313d26ada5e0c4edfbd1dc481a92ff7bff91f12', 'type' => 'library', 'install_path' => __DIR__ . '/./semver', 'aliases' => array(), @@ -56,9 +56,9 @@ 'dev_requirement' => false, ), 'phpstan/phpstan' => array( - 'pretty_version' => '1.10.67', - 'version' => '1.10.67.0', - 'reference' => '16ddbe776f10da6a95ebd25de7c1dbed397dc493', + 'pretty_version' => '1.12.5', + 'version' => '1.12.5.0', + 'reference' => '7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpstan', 'aliases' => array(), @@ -104,9 +104,9 @@ ), ), 'rector/rector' => array( - 'pretty_version' => '1.0.5', - 'version' => '1.0.5.0', - 'reference' => '73eb63e4f9011dba6b7c66c3262543014e352f34', + 'pretty_version' => '1.2.6', + 'version' => '1.2.6.0', + 'reference' => '6ca85da28159dbd3bb36211c5104b7bc91278e99', 'type' => 'library', 'install_path' => __DIR__ . '/../rector/rector', 'aliases' => array(), @@ -131,9 +131,9 @@ 'dev_requirement' => false, ), 'symfony/console' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => 'f3e591c48688a0cfa1a3296205926c05e84b22b1', + 'pretty_version' => 'v5.4.44', + 'version' => '5.4.44.0', + 'reference' => '5b5a0aa66e3296e303e22490f90f521551835a83', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), @@ -149,9 +149,9 @@ 'dev_requirement' => false, ), 'symfony/event-dispatcher' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => 'd40fae9fd85c762b6ba378152fdd1157a85d7e4f', + 'pretty_version' => 'v5.4.40', + 'version' => '5.4.40.0', + 'reference' => 'a54e2a8a114065f31020d6a89ede83e34c3b27a4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/event-dispatcher', 'aliases' => array(), @@ -173,99 +173,99 @@ ), ), 'symfony/filesystem' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => 'e6edd875d5d39b03de51f3c3951148cfa79a4d12', + 'pretty_version' => 'v5.4.44', + 'version' => '5.4.44.0', + 'reference' => '76c3818964e9d32be3862c9318ae3ba9aa280ddc', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/finder' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => 'f6a96e4fcd468a25fede16ee665f50ced856bd0a', + 'pretty_version' => 'v5.4.43', + 'version' => '5.4.43.0', + 'reference' => 'ae25a9145a900764158d439653d5630191155ca0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/options-resolver' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => '1303bb73d6c3882f07c618129295503085dfddb9', + 'pretty_version' => 'v5.4.40', + 'version' => '5.4.40.0', + 'reference' => 'bd1afbde6613a8d6b956115e0e14b196191fd0c4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/options-resolver', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => 'ef4d7e442ca910c4764bce785146269b30cb5fc4', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-intl-grapheme' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => '32a9da87d7b3245e09ac426c83d334ae9f06f80f', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => 'b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => 'bc45c394692b948b4d383a08d7753968bed9a83d', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '3833d7255cc303546435cb650316bff708a1c75c', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => '9773676c8a1bb1f8d4340a62efe641cf76eda7ec', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php73' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => '21bd091060673a1177ae842c0ef8fe30893114d2', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '0f68c03565dcaaf25a890667542e8bd75fe7e5bb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php73', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => '87b68208d5c1188808dd7839ee1e6c8ec3b02f1b', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.29.0', - 'version' => '1.29.0.0', - 'reference' => 'c565ad1e63f30e7477fc40738343c62b40bc672d', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php81', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/process' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => '85a554acd7c28522241faf2e97b9541247a0d3d5', + 'pretty_version' => 'v5.4.44', + 'version' => '5.4.44.0', + 'reference' => '1b9fa82b5c62cd49da8c9e3952dd8531ada65096', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), @@ -281,18 +281,18 @@ 'dev_requirement' => false, ), 'symfony/stopwatch' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => 'fb97497490bcec8a3c32c809cacfdd4c15dc8390', + 'pretty_version' => 'v5.4.40', + 'version' => '5.4.40.0', + 'reference' => '0e9daf3b7c805c747638b2cc48f1649e594f9625', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/stopwatch', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/string' => array( - 'pretty_version' => 'v5.4.39', - 'version' => '5.4.39.0', - 'reference' => '495e71bae5862308051b9e63cc3e34078eed83ef', + 'pretty_version' => 'v5.4.44', + 'version' => '5.4.44.0', + 'reference' => '832caa16b6d9aac6bf11747315225f5aba384c24', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), diff --git a/vendor/composer/pcre/README.md b/vendor/composer/pcre/README.md index 973b17d8d..490651499 100644 --- a/vendor/composer/pcre/README.md +++ b/vendor/composer/pcre/README.md @@ -12,7 +12,8 @@ to understand the implications. It thus makes it easier to work with static analysis tools like PHPStan or Psalm as it simplifies and reduces the possible return values from all the `preg_*` functions which -are quite packed with edge cases. +are quite packed with edge cases. As of v2.2.0 / v3.2.0 the library also comes with a +[PHPStan extension](#phpstan-extension) for parsing regular expressions and giving you even better output types. This library is a thin wrapper around `preg_*` functions with [some limitations](#restrictions--limitations). If you are looking for a richer API to handle regular expressions have a look at @@ -175,6 +176,13 @@ preg_match('/(a)(b)*(c)(d)*/', 'ac', $matches, $flags); | group 2 (any unmatched group preceding one that matched) is set to `''`. You cannot tell if it matched an empty string or did not match at all | group 2 is `null` when unmatched and a string if it matched, easy to check for | | group 4 (any optional group without a matching one following) is missing altogether. So you have to check with `isset()`, but really you want `isset($m[4]) && $m[4] !== ''` for safety unless you are very careful to check that a non-optional group follows it | group 4 is always set, and null in this case as there was no match, easy to check for with `$m[4] !== null` | +PHPStan Extension +----------------- + +To use the PHPStan extension if you do not use `phpstan/extension-installer` you can include `vendor/composer/pcre/extension.neon` in your PHPStan config. + +The extension provides much better type information for $matches as well as regex validation where possible. + License ------- diff --git a/vendor/composer/pcre/composer.json b/vendor/composer/pcre/composer.json index 40477ff4e..30a2c953d 100644 --- a/vendor/composer/pcre/composer.json +++ b/vendor/composer/pcre/composer.json @@ -20,10 +20,13 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5", - "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^8 || ^9", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "autoload": { "psr-4": { "Composer\\Pcre\\": "src" @@ -37,10 +40,15 @@ "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "scripts": { - "test": "vendor/bin/simple-phpunit", - "phpstan": "phpstan analyse" + "test": "@php vendor/bin/phpunit", + "phpstan": "@php phpstan analyse" } } diff --git a/vendor/composer/pcre/extension.neon b/vendor/composer/pcre/extension.neon new file mode 100644 index 000000000..b9cea113f --- /dev/null +++ b/vendor/composer/pcre/extension.neon @@ -0,0 +1,22 @@ +# composer/pcre PHPStan extensions +# +# These can be reused by third party packages by including 'vendor/composer/pcre/extension.neon' +# in your phpstan config + +services: + - + class: Composer\Pcre\PHPStan\PregMatchParameterOutTypeExtension + tags: + - phpstan.staticMethodParameterOutTypeExtension + - + class: Composer\Pcre\PHPStan\PregMatchTypeSpecifyingExtension + tags: + - phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension + - + class: Composer\Pcre\PHPStan\PregReplaceCallbackClosureTypeExtension + tags: + - phpstan.staticMethodParameterClosureTypeExtension + +rules: + - Composer\Pcre\PHPStan\UnsafeStrictGroupsCallRule + - Composer\Pcre\PHPStan\InvalidRegexPatternRule diff --git a/vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php b/vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php new file mode 100644 index 000000000..8a05fb24a --- /dev/null +++ b/vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php @@ -0,0 +1,142 @@ + + */ +class InvalidRegexPatternRule implements Rule +{ + public function getNodeType(): string + { + return StaticCall::class; + } + + public function processNode(Node $node, Scope $scope): array + { + $patterns = $this->extractPatterns($node, $scope); + + $errors = []; + foreach ($patterns as $pattern) { + $errorMessage = $this->validatePattern($pattern); + if ($errorMessage === null) { + continue; + } + + $errors[] = RuleErrorBuilder::message(sprintf('Regex pattern is invalid: %s', $errorMessage))->identifier('regexp.pattern')->build(); + } + + return $errors; + } + + /** + * @return string[] + */ + private function extractPatterns(StaticCall $node, Scope $scope): array + { + if (!$node->class instanceof FullyQualified) { + return []; + } + $isRegex = $node->class->toString() === Regex::class; + $isPreg = $node->class->toString() === Preg::class; + if (!$isRegex && !$isPreg) { + return []; + } + if (!$node->name instanceof Node\Identifier || !Preg::isMatch('{^(match|isMatch|grep|replace|split)}', $node->name->name)) { + return []; + } + + $functionName = $node->name->name; + if (!isset($node->getArgs()[0])) { + return []; + } + + $patternNode = $node->getArgs()[0]->value; + $patternType = $scope->getType($patternNode); + + $patternStrings = []; + + foreach ($patternType->getConstantStrings() as $constantStringType) { + if ($functionName === 'replaceCallbackArray') { + continue; + } + + $patternStrings[] = $constantStringType->getValue(); + } + + foreach ($patternType->getConstantArrays() as $constantArrayType) { + if ( + in_array($functionName, [ + 'replace', + 'replaceCallback', + ], true) + ) { + foreach ($constantArrayType->getValueTypes() as $arrayKeyType) { + foreach ($arrayKeyType->getConstantStrings() as $constantString) { + $patternStrings[] = $constantString->getValue(); + } + } + } + + if ($functionName !== 'replaceCallbackArray') { + continue; + } + + foreach ($constantArrayType->getKeyTypes() as $arrayKeyType) { + foreach ($arrayKeyType->getConstantStrings() as $constantString) { + $patternStrings[] = $constantString->getValue(); + } + } + } + + return $patternStrings; + } + + private function validatePattern(string $pattern): ?string + { + try { + $msg = null; + $prev = set_error_handler(function (int $severity, string $message, string $file) use (&$msg): bool { + $msg = preg_replace("#^preg_match(_all)?\\(.*?\\): #", '', $message); + + return true; + }); + + if ($pattern === '') { + return 'Empty string is not a valid regular expression'; + } + + Preg::match($pattern, ''); + if ($msg !== null) { + return $msg; + } + } catch (PcreException $e) { + if ($e->getCode() === PREG_INTERNAL_ERROR && $msg !== null) { + return $msg; + } + + return preg_replace('{.*? failed executing ".*": }', '', $e->getMessage()); + } finally { + restore_error_handler(); + } + + return null; + } + +} diff --git a/vendor/composer/pcre/src/PHPStan/PregMatchFlags.php b/vendor/composer/pcre/src/PHPStan/PregMatchFlags.php new file mode 100644 index 000000000..aa30ab347 --- /dev/null +++ b/vendor/composer/pcre/src/PHPStan/PregMatchFlags.php @@ -0,0 +1,70 @@ +getType($flagsArg->value); + + $constantScalars = $flagsType->getConstantScalarValues(); + if ($constantScalars === []) { + return null; + } + + $internalFlagsTypes = []; + foreach ($flagsType->getConstantScalarValues() as $constantScalarValue) { + if (!is_int($constantScalarValue)) { + return null; + } + + $internalFlagsTypes[] = new ConstantIntegerType($constantScalarValue | PREG_UNMATCHED_AS_NULL); + } + return TypeCombinator::union(...$internalFlagsTypes); + } + + static public function removeNullFromMatches(Type $matchesType): Type + { + return TypeTraverser::map($matchesType, static function (Type $type, callable $traverse): Type { + if ($type instanceof UnionType || $type instanceof IntersectionType) { + return $traverse($type); + } + + if ($type instanceof ConstantArrayType) { + return new ConstantArrayType( + $type->getKeyTypes(), + array_map(static function (Type $valueType) use ($traverse): Type { + return $traverse($valueType); + }, $type->getValueTypes()), + $type->getNextAutoIndexes(), + [], + $type->isList() + ); + } + + if ($type instanceof ArrayType) { + return new ArrayType($type->getKeyType(), $traverse($type->getItemType())); + } + + return TypeCombinator::removeNull($type); + }); + } + +} diff --git a/vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php b/vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php new file mode 100644 index 000000000..e0d60208e --- /dev/null +++ b/vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php @@ -0,0 +1,65 @@ +regexShapeMatcher = $regexShapeMatcher; + } + + public function isStaticMethodSupported(MethodReflection $methodReflection, ParameterReflection $parameter): bool + { + return + $methodReflection->getDeclaringClass()->getName() === Preg::class + && in_array($methodReflection->getName(), [ + 'match', 'isMatch', 'matchStrictGroups', 'isMatchStrictGroups', + 'matchAll', 'isMatchAll', 'matchAllStrictGroups', 'isMatchAllStrictGroups' + ], true) + && $parameter->getName() === 'matches'; + } + + public function getParameterOutTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, ParameterReflection $parameter, Scope $scope): ?Type + { + $args = $methodCall->getArgs(); + $patternArg = $args[0] ?? null; + $matchesArg = $args[2] ?? null; + $flagsArg = $args[3] ?? null; + + if ( + $patternArg === null || $matchesArg === null + ) { + return null; + } + + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + if ($flagsType === null) { + return null; + } + + if (stripos($methodReflection->getName(), 'matchAll') !== false) { + return $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, TrinaryLogic::createMaybe(), $scope); + } + + return $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createMaybe(), $scope); + } + +} diff --git a/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php b/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php new file mode 100644 index 000000000..cf22f6020 --- /dev/null +++ b/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php @@ -0,0 +1,105 @@ +regexShapeMatcher = $regexShapeMatcher; + } + + public function setTypeSpecifier(TypeSpecifier $typeSpecifier): void + { + $this->typeSpecifier = $typeSpecifier; + } + + public function getClass(): string + { + return Preg::class; + } + + public function isStaticMethodSupported(MethodReflection $methodReflection, StaticCall $node, TypeSpecifierContext $context): bool + { + return in_array($methodReflection->getName(), [ + 'match', 'isMatch', 'matchStrictGroups', 'isMatchStrictGroups', + 'matchAll', 'isMatchAll', 'matchAllStrictGroups', 'isMatchAllStrictGroups' + ], true) + && !$context->null(); + } + + public function specifyTypes(MethodReflection $methodReflection, StaticCall $node, Scope $scope, TypeSpecifierContext $context): SpecifiedTypes + { + $args = $node->getArgs(); + $patternArg = $args[0] ?? null; + $matchesArg = $args[2] ?? null; + $flagsArg = $args[3] ?? null; + + if ( + $patternArg === null || $matchesArg === null + ) { + return new SpecifiedTypes(); + } + + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + if ($flagsType === null) { + return new SpecifiedTypes(); + } + + if (stripos($methodReflection->getName(), 'matchAll') !== false) { + $matchedType = $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, TrinaryLogic::createFromBoolean($context->true()), $scope); + } else { + $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createFromBoolean($context->true()), $scope); + } + + if ($matchedType === null) { + return new SpecifiedTypes(); + } + + if ( + in_array($methodReflection->getName(), ['matchStrictGroups', 'isMatchStrictGroups', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], true) + ) { + $matchedType = PregMatchFlags::removeNullFromMatches($matchedType); + } + + $overwrite = false; + if ($context->false()) { + $overwrite = true; + $context = $context->negate(); + } + + return $this->typeSpecifier->create( + $matchesArg->value, + $matchedType, + $context, + $overwrite, + $scope, + $node + ); + } +} diff --git a/vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php b/vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php new file mode 100644 index 000000000..7b9536725 --- /dev/null +++ b/vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php @@ -0,0 +1,91 @@ +regexShapeMatcher = $regexShapeMatcher; + } + + public function isStaticMethodSupported(MethodReflection $methodReflection, ParameterReflection $parameter): bool + { + return in_array($methodReflection->getDeclaringClass()->getName(), [Preg::class, Regex::class], true) + && in_array($methodReflection->getName(), ['replaceCallback', 'replaceCallbackStrictGroups'], true) + && $parameter->getName() === 'replacement'; + } + + public function getTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, ParameterReflection $parameter, Scope $scope): ?Type + { + $args = $methodCall->getArgs(); + $patternArg = $args[0] ?? null; + $flagsArg = $args[5] ?? null; + + if ( + $patternArg === null + ) { + return null; + } + + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + + $matchesType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope); + if ($matchesType === null) { + return null; + } + + if ($methodReflection->getName() === 'replaceCallbackStrictGroups' && count($matchesType->getConstantArrays()) === 1) { + $matchesType = $matchesType->getConstantArrays()[0]; + $matchesType = new ConstantArrayType( + $matchesType->getKeyTypes(), + array_map(static function (Type $valueType): Type { + if (count($valueType->getConstantArrays()) === 1) { + $valueTypeArray = $valueType->getConstantArrays()[0]; + return new ConstantArrayType( + $valueTypeArray->getKeyTypes(), + array_map(static function (Type $valueType): Type { + return TypeCombinator::removeNull($valueType); + }, $valueTypeArray->getValueTypes()), + $valueTypeArray->getNextAutoIndexes(), + [], + $valueTypeArray->isList() + ); + } + return TypeCombinator::removeNull($valueType); + }, $matchesType->getValueTypes()), + $matchesType->getNextAutoIndexes(), + [], + $matchesType->isList() + ); + } + + return new ClosureType( + [ + new NativeParameterReflection($parameter->getName(), $parameter->isOptional(), $matchesType, $parameter->passedByReference(), $parameter->isVariadic(), $parameter->getDefaultValue()), + ], + new StringType() + ); + } +} diff --git a/vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php b/vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php new file mode 100644 index 000000000..5bced5070 --- /dev/null +++ b/vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php @@ -0,0 +1,112 @@ + + */ +final class UnsafeStrictGroupsCallRule implements Rule +{ + /** + * @var RegexArrayShapeMatcher + */ + private $regexShapeMatcher; + + public function __construct(RegexArrayShapeMatcher $regexShapeMatcher) + { + $this->regexShapeMatcher = $regexShapeMatcher; + } + + public function getNodeType(): string + { + return StaticCall::class; + } + + public function processNode(Node $node, Scope $scope): array + { + if (!$node->class instanceof FullyQualified) { + return []; + } + $isRegex = $node->class->toString() === Regex::class; + $isPreg = $node->class->toString() === Preg::class; + if (!$isRegex && !$isPreg) { + return []; + } + if (!$node->name instanceof Node\Identifier || !in_array($node->name->name, ['matchStrictGroups', 'isMatchStrictGroups', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], true)) { + return []; + } + + $args = $node->getArgs(); + if (!isset($args[0])) { + return []; + } + + $patternArg = $args[0] ?? null; + if ($isPreg) { + if (!isset($args[2])) { // no matches set, skip as the matches won't be used anyway + return []; + } + $flagsArg = $args[3] ?? null; + } else { + $flagsArg = $args[2] ?? null; + } + + if ($patternArg === null) { + return []; + } + + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + if ($flagsType === null) { + return []; + } + + $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope); + if ($matchedType === null) { + return [ + RuleErrorBuilder::message(sprintf('The %s call is potentially unsafe as $matches\' type could not be inferred.', $node->name->name)) + ->identifier('composerPcre.maybeUnsafeStrictGroups') + ->build(), + ]; + } + + if (count($matchedType->getConstantArrays()) === 1) { + $matchedType = $matchedType->getConstantArrays()[0]; + $nullableGroups = []; + foreach ($matchedType->getValueTypes() as $index => $type) { + if (TypeCombinator::containsNull($type)) { + $nullableGroups[] = $matchedType->getKeyTypes()[$index]->getValue(); + } + } + + if (\count($nullableGroups) > 0) { + return [ + RuleErrorBuilder::message(sprintf( + 'The %s call is unsafe as match group%s "%s" %s optional and may be null.', + $node->name->name, + \count($nullableGroups) > 1 ? 's' : '', + implode('", "', $nullableGroups), + \count($nullableGroups) > 1 ? 'are' : 'is' + ))->identifier('composerPcre.unsafeStrictGroups')->build(), + ]; + } + } + + return []; + } +} diff --git a/vendor/composer/pcre/src/Preg.php b/vendor/composer/pcre/src/Preg.php index 2f54a9936..400abbfec 100644 --- a/vendor/composer/pcre/src/Preg.php +++ b/vendor/composer/pcre/src/Preg.php @@ -203,7 +203,7 @@ public static function replaceCallback($pattern, callable $replacement, $subject * * @param-out int<0, max> $count */ - public static function replaceCallbackStrictGroups(string $pattern, callable $replacement, $subject, int $limit = -1, int &$count = null, int $flags = 0): string + public static function replaceCallbackStrictGroups(string $pattern, callable $replacement, $subject, int $limit = -1, ?int &$count = null, int $flags = 0): string { return self::replaceCallback($pattern, function (array $matches) use ($pattern, $replacement) { return $replacement(self::enforceNonNullMatches($pattern, $matches, 'replaceCallback')); diff --git a/vendor/composer/pcre/src/Regex.php b/vendor/composer/pcre/src/Regex.php index 21564a471..038cf0696 100644 --- a/vendor/composer/pcre/src/Regex.php +++ b/vendor/composer/pcre/src/Regex.php @@ -43,6 +43,7 @@ public static function match(string $pattern, string $subject, int $flags = 0, i */ public static function matchStrictGroups(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchStrictGroupsResult { + // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups $count = Preg::matchStrictGroups($pattern, $subject, $matches, $flags, $offset); return new MatchStrictGroupsResult($count, $matches); @@ -87,6 +88,7 @@ public static function matchAllStrictGroups(string $pattern, string $subject, in self::checkOffsetCapture($flags, 'matchAllWithOffsets'); self::checkSetOrder($flags); + // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups $count = Preg::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset); return new MatchAllStrictGroupsResult($count, $matches); diff --git a/vendor/composer/semver/CHANGELOG.md b/vendor/composer/semver/CHANGELOG.md index 3b1116124..bad46cd1c 100644 --- a/vendor/composer/semver/CHANGELOG.md +++ b/vendor/composer/semver/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +### [3.4.3] 2024-09-19 + + * Fixed some type annotations + +### [3.4.2] 2024-07-12 + + * Fixed PHP 5.3 syntax error + +### [3.4.1] 2024-07-12 + + * Fixed normalizeStability's return type to enforce valid stabilities + ### [3.4.0] 2023-08-31 * Support larger major version numbers (#149) @@ -179,6 +191,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint` * Changed: code style using php-cs-fixer. +[3.4.3]: https://github.com/composer/semver/compare/3.4.2...3.4.3 +[3.4.2]: https://github.com/composer/semver/compare/3.4.1...3.4.2 +[3.4.1]: https://github.com/composer/semver/compare/3.4.0...3.4.1 [3.4.0]: https://github.com/composer/semver/compare/3.3.2...3.4.0 [3.3.2]: https://github.com/composer/semver/compare/3.3.1...3.3.2 [3.3.1]: https://github.com/composer/semver/compare/3.3.0...3.3.1 diff --git a/vendor/composer/semver/composer.json b/vendor/composer/semver/composer.json index f3a6f4cc6..1fad9e548 100644 --- a/vendor/composer/semver/composer.json +++ b/vendor/composer/semver/composer.json @@ -34,8 +34,8 @@ "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.2 || ^5", - "phpstan/phpstan": "^1.4" + "symfony/phpunit-bridge": "^3 || ^7", + "phpstan/phpstan": "^1.11" }, "autoload": { "psr-4": { diff --git a/vendor/composer/semver/phpstan-baseline.neon b/vendor/composer/semver/phpstan-baseline.neon deleted file mode 100644 index 933cf2031..000000000 --- a/vendor/composer/semver/phpstan-baseline.neon +++ /dev/null @@ -1,11 +0,0 @@ -parameters: - ignoreErrors: - - - message: "#^Parameter \\#1 \\$operator of class Composer\\\\Semver\\\\Constraint\\\\Constraint constructor expects '\\!\\='\\|'\\<'\\|'\\<\\='\\|'\\<\\>'\\|'\\='\\|'\\=\\='\\|'\\>'\\|'\\>\\=', non\\-falsy\\-string given\\.$#" - count: 1 - path: src/VersionParser.php - - - - message: "#^Strict comparison using \\=\\=\\= between null and non\\-empty\\-string will always evaluate to false\\.$#" - count: 2 - path: src/VersionParser.php diff --git a/vendor/composer/semver/src/CompilingMatcher.php b/vendor/composer/semver/src/CompilingMatcher.php index 45bce70a6..aea1d3b95 100644 --- a/vendor/composer/semver/src/CompilingMatcher.php +++ b/vendor/composer/semver/src/CompilingMatcher.php @@ -64,7 +64,7 @@ public static function clear() * @phpstan-param Constraint::OP_* $operator * @param string $version * - * @return mixed + * @return bool */ public static function match(ConstraintInterface $constraint, $operator, $version) { diff --git a/vendor/composer/semver/src/VersionParser.php b/vendor/composer/semver/src/VersionParser.php index 9318629a7..305a0faec 100644 --- a/vendor/composer/semver/src/VersionParser.php +++ b/vendor/composer/semver/src/VersionParser.php @@ -82,11 +82,16 @@ public static function parseStability($version) * @param string $stability * * @return string + * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev' */ public static function normalizeStability($stability) { $stability = strtolower((string) $stability); + if (!in_array($stability, array('stable', 'rc', 'beta', 'alpha', 'dev'), true)) { + throw new \InvalidArgumentException('Invalid stability string "'.$stability.'", expected one of stable, RC, beta, alpha or dev'); + } + return $stability === 'rc' ? 'RC' : $stability; } diff --git a/vendor/phpstan/phpstan/README.md b/vendor/phpstan/phpstan/README.md index 790f234c6..e3bb94063 100644 --- a/vendor/phpstan/phpstan/README.md +++ b/vendor/phpstan/phpstan/README.md @@ -24,50 +24,56 @@ can be checked before you run the actual line. ## Sponsors -TheCodingMachine +TheCodingMachine     -Private Packagist +Private Packagist
-Musement +CDN77     -Blackfire.io +Blackfire.io
-iO +iO     -TicketSwap +Fame Helsinki
-ShipMonk +ShipMonk     -Togetter +Togetter
-RightCapital +RightCapital     -ContentKing +ContentKing
-ZOL +ZOL     -Psyonix +EdgeNext
-Shopware +Shopware     -Craft CMS +Craft CMS
-Worksome +Worksome     -campoint AG +campoint AG
-Crisp.nl +Crisp.nl     -Inviqa +Inviqa
-CDN77 +GetResponse +    +Shoptet +
+Route4Me: Route Optimizer and Route Planner Software +    +TicketSwap [**You can now sponsor my open-source work on PHPStan through GitHub Sponsors.**](https://github.com/sponsors/ondrejmirtes) Does GitHub already have your 💳? Do you use PHPStan to find 🐛 before they reach production? [Send a couple of 💸 a month my way too.](https://github.com/sponsors/ondrejmirtes) Thank you! -One-time donations [through PayPal](https://paypal.me/phpstan) are also accepted. To request an invoice, [contact me](mailto:ondrej@mirtes.cz) through e-mail. +One-time donations [through Revolut.me](https://revolut.me/ondrejmirtes) are also accepted. To request an invoice, [contact me](mailto:ondrej@mirtes.cz) through e-mail. ## Documentation diff --git a/vendor/phpstan/phpstan/bootstrap.php b/vendor/phpstan/phpstan/bootstrap.php index 76a7c58f4..2d950b095 100644 --- a/vendor/phpstan/phpstan/bootstrap.php +++ b/vendor/phpstan/phpstan/bootstrap.php @@ -28,9 +28,7 @@ final public static function loadClass(string $class): void { self::$composerAutoloader = require 'phar://' . __DIR__ . '/phpstan.phar/vendor/autoload.php'; require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/jetbrains/phpstorm-stubs/PhpStormStubsMap.php'; require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/react/async/src/functions_include.php'; - require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/react/promise-timer/src/functions_include.php'; require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/react/promise/src/functions_include.php'; - require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/ringcentral/psr7/src/functions_include.php'; } self::$composerAutoloader->loadClass($class); diff --git a/vendor/phpstan/phpstan/phpstan.phar b/vendor/phpstan/phpstan/phpstan.phar index 207b04ace..95932296f 100755 Binary files a/vendor/phpstan/phpstan/phpstan.phar and b/vendor/phpstan/phpstan/phpstan.phar differ diff --git a/vendor/phpstan/phpstan/phpstan.phar.asc b/vendor/phpstan/phpstan/phpstan.phar.asc index 2e50bc434..8abddd1f4 100644 --- a/vendor/phpstan/phpstan/phpstan.phar.asc +++ b/vendor/phpstan/phpstan/phpstan.phar.asc @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmYeJvgACgkQUcZzBf/C -5cCOqQ/8D0idBljs/5h0aJmBcLdThaoESPRpGUzIVfU860mPAViajDSj9goyGdlD -OclH2iBakSQv3QoImnWszHfLW7i3Xxmy+/FomyQrrrOZ4tJnEgC/v94AXpFX33lu -5Ew4sXDrFV2TpT7kgi354aq8m8LXZFSWio4tiOrxqBdGCUVWbap+5dbU7HuxrM4k -R3suUGSgde9VNnFZaK6qC0Tudtjkrhb/NKuH/rMRxwMtPbdT61r7p37PoP51JJ25 -vjtnGklbzG+Y7NdOkv6c+8RwfSra5oQx2MUxrWRKEVluUKDD7ZhSW3wIZgV7GJih -REyqHFBiW3V19csTWGyVdKmPXxCbRGhAiawb/qFGoOgxQBXKbF3zZ/5WDQUdwPYX -6XoFRzJ2Ey4TjiXHXvMlQhIQxSsUEWoeZcLqas5y9wLN6xBVR3PLA/qgpkMK165K -SGKRUW78FKtNjpYWalbrjBe8HWlQ9Ho9G1hOACjYUxeBTaO8UwfJ7JKjhEOXuzcH -1/mJ0hKg94lyV0ONp6xqtV3E/sIJOW/h7X9HcftA/J0CSZOWVwAIJJ3tvAoe+4Z3 -pzCs6JWJR8lec+9p+oFaiSSNsPa1xwSDeaWZ2Wf8RTc0gUr0umQz9gyiQr6i6AMR -7qpCMCss4hTN/4ZAkvunKNEvgcWX9PUy5m4snNCN/D+y44hVRZo= -=FwC0 +iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmb1V0gACgkQUcZzBf/C +5cBoFg/8CSNvVpvksAjqyOOLjVfCZ8JvJv+CGjsRQD7BWPi61T/Ef+A74U1M2Qf+ +F6j9SKbfnQ+g7jHewzRtziCmElNUip74iKee7268L9nSb0gDikwMgbBIoK7V3KX2 +9wa9P/3OdEyhKjRJtkB3E4mRXJ6MnWlDMi7xDEmh9lJPWSTELs4OAaLIL2tGA6JP +fRSPRmOpqcU5lbHho6wOc+KFjdvfAMqy5k1TsVY7ulibFAolsPuwatAn3Yhods/P +hKgupNBtGsFW79QIuapatuhxzU6SF1Xdd3WUG4q0C5gQRoNXysNBYkF3zLNaYx24 +XAMiEykfexGEkJrVoXUf9xdFXdGGtFNqkKViWjqtatgJhF4OjaIXXFK0utj8tDzp +Y5FgcTXAwn8X4K8OIoNoxaZrJThKne7kawvCGvmaRDAsv0zAykijkwDT5kV9yohD +R51fFWl/EN5/l35OJdl7W80zPRApgkY198mvNK+Q3XQSxbJcTPii9nH8Z3Xrt4Ko +Q5gd+v1dFEDy2ukmqPLayzszUF7t/NHeo7q4cOlY+A9EQfVhJtc9GuloMe10E5b2 +CT0vDuZw17zpltqUg/wfmYz0Coxx04fVbkQ+3t5yn6LNFXP0xJb4GlcRP0BmdtcI +vdS2nIG0aDbwwMOUFx5yylTWER0ikLozFfrJKYFJf/oYS9o0mn0= +=6tJf -----END PGP SIGNATURE----- diff --git a/vendor/rector/rector/README.md b/vendor/rector/rector/README.md index 982915f86..36dc7effb 100644 --- a/vendor/rector/rector/README.md +++ b/vendor/rector/rector/README.md @@ -72,7 +72,7 @@ vendor/bin/rector process src ## Documentation * Find [full documentation here](https://getrector.com/documentation/). -* [Explore Rector Rules](/docs/rector_rules_overview.md) +* [Explore Rector Rules](https://getrector.com/find-rule)
diff --git a/vendor/rector/rector/bin/add-phpstan-self-replace.php b/vendor/rector/rector/bin/add-phpstan-self-replace.php deleted file mode 100644 index 94f922876..000000000 --- a/vendor/rector/rector/bin/add-phpstan-self-replace.php +++ /dev/null @@ -1,15 +0,0 @@ -newLineOnFluentCall(\false); + // allow real paths in output formatters + $rectorConfig->reportingRealPath(\false); }; diff --git a/vendor/rector/rector/config/set/code-quality.php b/vendor/rector/rector/config/set/code-quality.php index 17f81a173..c4d71f509 100644 --- a/vendor/rector/rector/config/set/code-quality.php +++ b/vendor/rector/rector/config/set/code-quality.php @@ -1,112 +1,15 @@ ruleWithConfiguration(RenameFunctionRector::class, [ - 'split' => 'explode', - 'join' => 'implode', - 'sizeof' => 'count', - # https://www.php.net/manual/en/aliases.php - 'chop' => 'rtrim', - 'doubleval' => 'floatval', - 'gzputs' => 'gzwrites', - 'fputs' => 'fwrite', - 'ini_alter' => 'ini_set', - 'is_double' => 'is_float', - 'is_integer' => 'is_int', - 'is_long' => 'is_int', - 'is_real' => 'is_float', - 'is_writeable' => 'is_writable', - 'key_exists' => 'array_key_exists', - 'pos' => 'current', - 'strchr' => 'strstr', - # mb - 'mbstrcut' => 'mb_strcut', - 'mbstrlen' => 'mb_strlen', - 'mbstrpos' => 'mb_strpos', - 'mbstrrpos' => 'mb_strrpos', - 'mbsubstr' => 'mb_substr', - ]); - $rectorConfig->rules([CombinedAssignRector::class, SimplifyEmptyArrayCheckRector::class, ReplaceMultipleBooleanNotRector::class, ForeachToInArrayRector::class, SimplifyForeachToCoalescingRector::class, SimplifyFuncGetArgsCountRector::class, SimplifyInArrayValuesRector::class, SimplifyStrposLowerRector::class, GetClassToInstanceOfRector::class, SimplifyArraySearchRector::class, SimplifyConditionsRector::class, SimplifyIfNotNullReturnRector::class, SimplifyIfReturnBoolRector::class, SimplifyUselessVariableRector::class, UnnecessaryTernaryExpressionRector::class, RemoveExtraParametersRector::class, SimplifyDeMorganBinaryRector::class, SimplifyTautologyTernaryRector::class, SingleInArrayToCompareRector::class, SimplifyIfElseToTernaryRector::class, JoinStringConcatRector::class, ConsecutiveNullCompareReturnsToNullCoalesceQueueRector::class, ExplicitBoolCompareRector::class, CombineIfRector::class, UseIdenticalOverEqualWithSameTypeRector::class, SimplifyBoolIdenticalTrueRector::class, SimplifyRegexPatternRector::class, BooleanNotIdenticalToNotIdenticalRector::class, CallableThisArrayToAnonymousFunctionRector::class, AndAssignsToSeparateLinesRector::class, CompactToVariablesRector::class, CompleteDynamicPropertiesRector::class, IsAWithStringWithThirdArgumentRector::class, StrlenZeroToIdenticalEmptyStringRector::class, ThrowWithPreviousExceptionRector::class, RemoveSoleValueSprintfRector::class, ShortenElseIfRector::class, ExplicitReturnNullRector::class, ArrayMergeOfNonArraysToSimpleArrayRector::class, ArrayKeyExistsTernaryThenValueToCoalescingRector::class, AbsolutizeRequireAndIncludePathRector::class, ChangeArrayPushToArrayAssignRector::class, ForRepeatedCountToOwnVariableRector::class, ForeachItemsAssignToEmptyArrayToAssignRector::class, InlineIfToExplicitIfRector::class, UnusedForeachValueToArrayKeysRector::class, CommonNotEqualRector::class, SetTypeToCastRector::class, LogicalToBooleanRector::class, VarToPublicPropertyRector::class, IssetOnPropertyObjectToPropertyExistsRector::class, NewStaticToNewSelfRector::class, UnwrapSprintfOneArgumentRector::class, SwitchNegatedTernaryRector::class, SingularSwitchToIfRector::class, SimplifyIfNullableReturnRector::class, FuncGetArgsToVariadicParamRector::class, CallUserFuncToMethodCallRector::class, CallUserFuncWithArrowFunctionToInlineRector::class, CountArrayToEmptyArrayComparisonRector::class, FlipTypeControlToUseExclusiveTypeRector::class, InlineArrayReturnAssignRector::class, InlineIsAInstanceOfRector::class, TernaryFalseExpressionToIfRector::class, InlineConstructorDefaultToPropertyRector::class, TernaryEmptyArrayArrayDimFetchToCoalesceRector::class, OptionalParametersAfterRequiredRector::class, SimplifyEmptyCheckOnEmptyArrayRector::class, SwitchTrueToIfRector::class, CleanupUnneededNullsafeOperatorRector::class, DisallowedEmptyRuleFixerRector::class, ConvertStaticPrivateConstantToSelfRector::class, LocallyCalledStaticMethodToNonStaticRector::class, NumberCompareToMaxFuncCallRector::class, CompleteMissingIfElseBracketRector::class, RemoveUselessIsObjectCheckRector::class, StaticToSelfStaticMethodCallOnFinalClassRector::class]); + foreach (CodeQualityLevel::RULES_WITH_CONFIGURATION as $rectorClass => $configuration) { + $rectorConfig->ruleWithConfiguration($rectorClass, $configuration); + } + // the rule order matters, as its used in withCodeQualityLevel() method + // place the safest rules first, follow by more complex ones + $rectorConfig->rules(CodeQualityLevel::RULES); }; diff --git a/vendor/rector/rector/config/set/coding-style.php b/vendor/rector/rector/config/set/coding-style.php index 8a6fc0c96..1713a005e 100644 --- a/vendor/rector/rector/config/set/coding-style.php +++ b/vendor/rector/rector/config/set/coding-style.php @@ -1,9 +1,8 @@ ruleWithConfiguration(FuncCallToConstFetchRector::class, ['php_sapi_name' => 'PHP_SAPI', 'pi' => 'M_PI']); - $rectorConfig->rules([SeparateMultiUseImportsRector::class, PostIncDecToPreIncDecRector::class, NewlineAfterStatementRector::class, RemoveFinalFromConstRector::class, NullableCompareToNullRector::class, ConsistentImplodeRector::class, TernaryConditionVariableAssignmentRector::class, SymplifyQuoteEscapeRector::class, StringClassNameToClassConstantRector::class, CatchExceptionNameMatchingTypeRector::class, UseIncrementAssignRector::class, SplitDoubleAssignRector::class, EncapsedStringsToSprintfRector::class, WrapEncapsedVariableInCurlyBracesRector::class, NewlineBeforeNewAssignSetRector::class, MakeInheritedMethodVisibilitySameAsParentRector::class, CallUserFuncArrayToVariadicRector::class, VersionCompareFuncCallToConstantRector::class, StaticArrowFunctionRector::class, StaticClosureRector::class, CountArrayToEmptyArrayComparisonRector::class, CallUserFuncToMethodCallRector::class, FuncGetArgsToVariadicParamRector::class, StrictArraySearchRector::class, UseClassKeywordForClassNameResolutionRector::class, SplitGroupedPropertiesRector::class, SplitGroupedClassConstantsRector::class, ExplicitPublicClassMethodRector::class, RemoveUselessAliasInUseStatementRector::class]); + $rectorConfig->rules([SeparateMultiUseImportsRector::class, NewlineAfterStatementRector::class, RemoveFinalFromConstRector::class, NullableCompareToNullRector::class, ConsistentImplodeRector::class, TernaryConditionVariableAssignmentRector::class, SymplifyQuoteEscapeRector::class, StringClassNameToClassConstantRector::class, CatchExceptionNameMatchingTypeRector::class, SplitDoubleAssignRector::class, EncapsedStringsToSprintfRector::class, WrapEncapsedVariableInCurlyBracesRector::class, NewlineBeforeNewAssignSetRector::class, MakeInheritedMethodVisibilitySameAsParentRector::class, CallUserFuncArrayToVariadicRector::class, VersionCompareFuncCallToConstantRector::class, CountArrayToEmptyArrayComparisonRector::class, CallUserFuncToMethodCallRector::class, FuncGetArgsToVariadicParamRector::class, StrictArraySearchRector::class, UseClassKeywordForClassNameResolutionRector::class, SplitGroupedPropertiesRector::class, SplitGroupedClassConstantsRector::class, ExplicitPublicClassMethodRector::class, RemoveUselessAliasInUseStatementRector::class]); }; diff --git a/vendor/rector/rector/config/set/datetime-to-carbon.php b/vendor/rector/rector/config/set/datetime-to-carbon.php new file mode 100644 index 000000000..c0ad7b1d9 --- /dev/null +++ b/vendor/rector/rector/config/set/datetime-to-carbon.php @@ -0,0 +1,13 @@ +rules([DateFuncCallToCarbonRector::class, DateTimeInstanceToCarbonRector::class, DateTimeMethodCallToCarbonRector::class, TimeFuncCallToCarbonRector::class]); +}; diff --git a/vendor/rector/rector/config/set/dead-code.php b/vendor/rector/rector/config/set/dead-code.php index aed5d83e3..6bfcf025b 100644 --- a/vendor/rector/rector/config/set/dead-code.php +++ b/vendor/rector/rector/config/set/dead-code.php @@ -1,7 +1,7 @@ rules([ChangeNestedForeachIfsToEarlyContinueRector::class, ChangeAndIfToEarlyReturnRector::class, ChangeIfElseValueAssignToEarlyReturnRector::class, ChangeNestedIfsToEarlyReturnRector::class, RemoveAlwaysElseRector::class, ChangeOrIfContinueToMultiContinueRector::class, PreparedValueToEarlyReturnRector::class, ReturnBinaryOrToEarlyReturnRector::class, ReturnEarlyIfVariableRector::class]); + $rectorConfig->rules([ChangeNestedForeachIfsToEarlyContinueRector::class, ChangeIfElseValueAssignToEarlyReturnRector::class, ChangeNestedIfsToEarlyReturnRector::class, RemoveAlwaysElseRector::class, ChangeOrIfContinueToMultiContinueRector::class, PreparedValueToEarlyReturnRector::class, ReturnBinaryOrToEarlyReturnRector::class, ReturnEarlyIfVariableRector::class]); }; diff --git a/vendor/rector/rector/config/set/gmagick-to-imagick.php b/vendor/rector/rector/config/set/gmagick-to-imagick.php index cc31281d1..d89320901 100644 --- a/vendor/rector/rector/config/set/gmagick-to-imagick.php +++ b/vendor/rector/rector/config/set/gmagick-to-imagick.php @@ -1,7 +1,7 @@ rules([EmptyOnNullableObjectToInstanceOfRector::class, GetClassToInstanceOfRector::class, InlineIsAInstanceOfRector::class, FlipTypeControlToUseExclusiveTypeRector::class, RemoveDeadInstanceOfRector::class, FlipNegatedTernaryInstanceofRector::class, BinaryOpNullableToInstanceofRector::class, WhileNullableToInstanceofRector::class]); + $rectorConfig->rules([EmptyOnNullableObjectToInstanceOfRector::class, InlineIsAInstanceOfRector::class, FlipTypeControlToUseExclusiveTypeRector::class, RemoveDeadInstanceOfRector::class, FlipNegatedTernaryInstanceofRector::class, BinaryOpNullableToInstanceofRector::class, WhileNullableToInstanceofRector::class]); }; diff --git a/vendor/rector/rector/config/set/level/up-to-php53.php b/vendor/rector/rector/config/set/level/up-to-php53.php index 8536eb181..1f21f89f3 100644 --- a/vendor/rector/rector/config/set/level/up-to-php53.php +++ b/vendor/rector/rector/config/set/level/up-to-php53.php @@ -1,7 +1,7 @@ withRules([ArrayKeyFirstLastRector::class, IsCountableRector::class, GetDebugTypeRector::class, StrStartsWithRector::class, StrEndsWithRector::class, StrContainsRector::class]); diff --git a/vendor/rector/rector/config/set/php52.php b/vendor/rector/rector/config/set/php52.php index 66bba32dc..659faf718 100644 --- a/vendor/rector/rector/config/set/php52.php +++ b/vendor/rector/rector/config/set/php52.php @@ -1,7 +1,7 @@ rule(VarToPublicPropertyRector::class); - $rectorConfig->rule(ContinueToBreakInSwitchRector::class); + $rectorConfig->rules([VarToPublicPropertyRector::class, ContinueToBreakInSwitchRector::class]); $rectorConfig->ruleWithConfiguration(RemoveFuncCallArgRector::class, [ // see https://www.php.net/manual/en/function.ldap-first-attribute.php new RemoveFuncCallArg('ldap_first_attribute', 2), diff --git a/vendor/rector/rector/config/set/php53.php b/vendor/rector/rector/config/set/php53.php index 9c147a16d..948240e9d 100644 --- a/vendor/rector/rector/config/set/php53.php +++ b/vendor/rector/rector/config/set/php53.php @@ -1,14 +1,12 @@ rule(TernaryToElvisRector::class); - $rectorConfig->rule(DirNameFileConstantToDirConstantRector::class); - $rectorConfig->rule(ReplaceHttpServerVarsByServerRector::class); + $rectorConfig->rules([TernaryToElvisRector::class, DirNameFileConstantToDirConstantRector::class, ReplaceHttpServerVarsByServerRector::class]); }; diff --git a/vendor/rector/rector/config/set/php54.php b/vendor/rector/rector/config/set/php54.php index 77b3f1da5..34472c675 100644 --- a/vendor/rector/rector/config/set/php54.php +++ b/vendor/rector/rector/config/set/php54.php @@ -1,7 +1,7 @@ rule(LongArrayToShortArrayRector::class); + $rectorConfig->rules([LongArrayToShortArrayRector::class, RemoveReferenceFromCallRector::class, RemoveZeroBreakContinueRector::class]); $rectorConfig->ruleWithConfiguration(RenameFunctionRector::class, ['mysqli_param_count' => 'mysqli_stmt_param_count']); - $rectorConfig->rule(RemoveReferenceFromCallRector::class); - $rectorConfig->rule(RemoveZeroBreakContinueRector::class); }; diff --git a/vendor/rector/rector/config/set/php55.php b/vendor/rector/rector/config/set/php55.php index c6fc766a1..b41495709 100644 --- a/vendor/rector/rector/config/set/php55.php +++ b/vendor/rector/rector/config/set/php55.php @@ -1,7 +1,7 @@ rule(StringClassNameToClassConstantRector::class); - $rectorConfig->rule(ClassConstantToSelfClassRector::class); - $rectorConfig->rule(PregReplaceEModifierRector::class); - $rectorConfig->rule(GetCalledClassToSelfClassRector::class); - $rectorConfig->rule(GetCalledClassToStaticClassRector::class); - $rectorConfig->rule(StaticToSelfOnFinalClassRector::class); + $rectorConfig->rules([StringClassNameToClassConstantRector::class, ClassConstantToSelfClassRector::class, PregReplaceEModifierRector::class, GetCalledClassToSelfClassRector::class, GetCalledClassToStaticClassRector::class, StaticToSelfOnFinalClassRector::class]); }; diff --git a/vendor/rector/rector/config/set/php56.php b/vendor/rector/rector/config/set/php56.php index 6c5168fd1..98fc69fdc 100644 --- a/vendor/rector/rector/config/set/php56.php +++ b/vendor/rector/rector/config/set/php56.php @@ -1,7 +1,7 @@ rules([IsIterableRector::class, MultiExceptionCatchRector::class, AssignArrayToStringRector::class, RemoveExtraParametersRector::class, BinaryOpBetweenNumberAndStringRector::class, ListToArrayDestructRector::class, PublicConstantVisibilityRector::class]); + $rectorConfig->rules([IsIterableRector::class, MultiExceptionCatchRector::class, AssignArrayToStringRector::class, RemoveExtraParametersRector::class, BinaryOpBetweenNumberAndStringRector::class, ListToArrayDestructRector::class]); }; diff --git a/vendor/rector/rector/config/set/php72.php b/vendor/rector/rector/config/set/php72.php index 6c1f72632..5245bed5c 100644 --- a/vendor/rector/rector/config/set/php72.php +++ b/vendor/rector/rector/config/set/php72.php @@ -1,7 +1,7 @@ 'is_float', - #apache_request_headers_function - # https://wiki.php.net/rfc/deprecations_php_7_4 - 'apache_request_headers' => 'getallheaders', ]); - $rectorConfig->rules([ArrayKeyExistsOnPropertyRector::class, FilterVarToAddSlashesRector::class, ExportToReflectionFunctionRector::class, MbStrrposEncodingArgumentPositionRector::class, RealToFloatTypeCastRector::class, NullCoalescingOperatorRector::class, ClosureToArrowFunctionRector::class, RestoreDefaultNullToNullableTypePropertyRector::class, CurlyToSquareBracketArrayStringRector::class, MoneyFormatToNumberFormatRector::class, ParenthesizeNestedTernaryRector::class]); + $rectorConfig->rules([ArrayKeyExistsOnPropertyRector::class, FilterVarToAddSlashesRector::class, ExportToReflectionFunctionRector::class, MbStrrposEncodingArgumentPositionRector::class, RealToFloatTypeCastRector::class, NullCoalescingOperatorRector::class, ClosureToArrowFunctionRector::class, RestoreDefaultNullToNullableTypePropertyRector::class, CurlyToSquareBracketArrayStringRector::class, MoneyFormatToNumberFormatRector::class, ParenthesizeNestedTernaryRector::class, RestoreIncludePathToIniRestoreRector::class, HebrevcToNl2brHebrevRector::class]); }; diff --git a/vendor/rector/rector/config/set/php80.php b/vendor/rector/rector/config/set/php80.php index 2faeb23e1..0a0c7ce58 100644 --- a/vendor/rector/rector/config/set/php80.php +++ b/vendor/rector/rector/config/set/php80.php @@ -1,7 +1,7 @@ rules([DeclareStrictTypesRector::class, PostIncDecToPreIncDecRector::class, FinalizeTestCaseClassRector::class]); +}; diff --git a/vendor/rector/rector/config/set/strict-booleans.php b/vendor/rector/rector/config/set/strict-booleans.php index 0af8167e3..08e8fe0a1 100644 --- a/vendor/rector/rector/config/set/strict-booleans.php +++ b/vendor/rector/rector/config/set/strict-booleans.php @@ -1,7 +1,7 @@ valueResolver = $valueResolver; } /** + * @template TCall as (MethodCall|StaticCall|ClassMethod|FuncCall|New_) + * * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\FuncCall|\PhpParser\Node\Expr\New_ $node + * @return TCall|null */ - public function processReplaces($node, ReplaceArgumentDefaultValueInterface $replaceArgumentDefaultValue) : ?Node + public function processReplaces($node, ReplaceArgumentDefaultValueInterface $replaceArgumentDefaultValue) { if ($node instanceof ClassMethod) { if (!isset($node->params[$replaceArgumentDefaultValue->getPosition()])) { @@ -78,10 +80,16 @@ private function processParams(ClassMethod $classMethod, ReplaceArgumentDefaultV return $classMethod; } /** + * @template TCall as (MethodCall|StaticCall|FuncCall|New_) + * * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\FuncCall|\PhpParser\Node\Expr\New_ $expr + * @return TCall|null */ private function processArgs($expr, ReplaceArgumentDefaultValueInterface $replaceArgumentDefaultValue) : ?Expr { + if ($expr->isFirstClassCallable()) { + return null; + } $position = $replaceArgumentDefaultValue->getPosition(); $particularArg = $expr->getArgs()[$position] ?? null; if (!$particularArg instanceof Arg) { diff --git a/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php b/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php index 8df194340..ec2b05530 100644 --- a/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php +++ b/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ArgumentAdderRector.php @@ -29,7 +29,7 @@ use Rector\StaticTypeMapper\StaticTypeMapper; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Arguments\Rector\ClassMethod\ArgumentAdderRector\ArgumentAdderRectorTest */ @@ -199,7 +199,7 @@ private function fillGapBetweenWithDefaultValue($node, int $position) : void if (!$param->default instanceof Expr) { throw new ShouldNotHappenException('Previous position does not have default value'); } - $node->args[$index] = new Arg($this->nodeFactory->createReprintedExpr($param->default)); + $node->args[$index] = new Arg($this->nodeFactory->createReprintedNode($param->default)); } } /** diff --git a/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php b/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php index 656e55386..71c902298 100644 --- a/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php +++ b/vendor/rector/rector/rules/Arguments/Rector/ClassMethod/ReplaceArgumentDefaultValueRector.php @@ -15,7 +15,7 @@ use Rector\ValueObject\MethodName; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @api used in rector-symfony * @see \Rector\Tests\Arguments\Rector\ClassMethod\ReplaceArgumentDefaultValueRector\ReplaceArgumentDefaultValueRectorTest diff --git a/vendor/rector/rector/rules/Arguments/Rector/FuncCall/FunctionArgumentDefaultValueReplacerRector.php b/vendor/rector/rector/rules/Arguments/Rector/FuncCall/FunctionArgumentDefaultValueReplacerRector.php index c2b90bafe..7af89e968 100644 --- a/vendor/rector/rector/rules/Arguments/Rector/FuncCall/FunctionArgumentDefaultValueReplacerRector.php +++ b/vendor/rector/rector/rules/Arguments/Rector/FuncCall/FunctionArgumentDefaultValueReplacerRector.php @@ -11,11 +11,8 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://php.watch/versions/8.1/version_compare-operator-restrictions - * @changelog https://github.com/rectorphp/rector/issues/6271 - * * @see \Rector\Tests\Arguments\Rector\FuncCall\FunctionArgumentDefaultValueReplacerRector\FunctionArgumentDefaultValueReplacerRectorTest */ final class FunctionArgumentDefaultValueReplacerRector extends AbstractRector implements ConfigurableRectorInterface diff --git a/vendor/rector/rector/rules/Arguments/Rector/MethodCall/RemoveMethodCallParamRector.php b/vendor/rector/rector/rules/Arguments/Rector/MethodCall/RemoveMethodCallParamRector.php index 7542018cd..b31599100 100644 --- a/vendor/rector/rector/rules/Arguments/Rector/MethodCall/RemoveMethodCallParamRector.php +++ b/vendor/rector/rector/rules/Arguments/Rector/MethodCall/RemoveMethodCallParamRector.php @@ -11,7 +11,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Arguments\Rector\MethodCall\RemoveMethodCallParamRector\RemoveMethodCallParamRectorTest */ diff --git a/vendor/rector/rector/rules/Carbon/NodeFactory/CarbonCallFactory.php b/vendor/rector/rector/rules/Carbon/NodeFactory/CarbonCallFactory.php new file mode 100644 index 000000000..9d74b2a33 --- /dev/null +++ b/vendor/rector/rector/rules/Carbon/NodeFactory/CarbonCallFactory.php @@ -0,0 +1,142 @@ +\\+|-)(\\s+)?(?\\d+)(\\s+)?(?seconds|second|sec|minutes|minute|min|hours|hour|days|day|weeks|week|months|month|years|year)#'; + /** + * @var string + * @see https://regex101.com/r/IhxHTO/1 + */ + private const STATIC_DATE_REGEX = '#now|yesterday|today|tomorrow#'; + /** + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall + */ + public function createFromDateTimeString(FullyQualified $carbonFullyQualified, String_ $string) + { + $carbonCall = $this->createStaticCall($carbonFullyQualified, $string); + $string->value = Strings::replace($string->value, self::STATIC_DATE_REGEX); + // Handle add/sub multiple times + while ($match = Strings::match($string->value, self::PLUS_MINUS_COUNT_REGEX)) { + $methodCall = $this->createModifyMethodCall($carbonCall, new LNumber((int) $match['count']), $match['unit'], $match['operator']); + if ($methodCall instanceof MethodCall) { + $carbonCall = $methodCall; + $string->value = Strings::replace($string->value, self::PLUS_MINUS_COUNT_REGEX, '', 1); + } + } + // If we still have something in the string, we go back to the first method and replace this with a parse + if (($rest = Strings::trim($string->value)) !== '') { + $currentCall = $carbonCall; + $callStack = []; + while ($currentCall instanceof MethodCall) { + $callStack[] = $currentCall; + $currentCall = $currentCall->var; + } + if (!$currentCall instanceof StaticCall) { + return $carbonCall; + } + // If we fallback to a parse we want to include tomorrow/today/yesterday etc + if ($currentCall->name instanceof Identifier && $currentCall->name->name != 'now') { + $rest .= ' ' . $currentCall->name->name; + } + $currentCall->name = new Identifier('parse'); + $currentCall->args = [new Arg(new String_($rest))]; + // Rebuild original call from callstack + $carbonCall = $this->rebuildCallStack($currentCall, $callStack); + } + return $carbonCall; + } + private function createStaticCall(FullyQualified $carbonFullyQualified, String_ $string) : StaticCall + { + $startDate = Strings::match($string->value, self::STATIC_DATE_REGEX)[0] ?? 'now'; + return new StaticCall($carbonFullyQualified, new Identifier($startDate)); + } + /** + * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $carbonCall + */ + private function createModifyMethodCall($carbonCall, LNumber $countLNumber, string $unit, string $operator) : ?MethodCall + { + switch ($unit) { + case 'sec': + case 'second': + case 'seconds': + $unit = 'seconds'; + break; + case 'min': + case 'minute': + case 'minutes': + $unit = 'minutes'; + break; + case 'hour': + case 'hours': + $unit = 'hours'; + break; + case 'day': + case 'days': + $unit = 'days'; + break; + case 'week': + case 'weeks': + $unit = 'weeks'; + break; + case 'month': + case 'months': + $unit = 'months'; + break; + case 'year': + case 'years': + $unit = 'years'; + break; + default: + $unit = null; + break; + } + switch ($operator) { + case '+': + $operator = 'add'; + break; + case '-': + $operator = 'sub'; + break; + default: + $operator = null; + break; + } + if ($unit === null || $operator === null) { + return null; + } + $methodName = $operator . \ucfirst($unit); + return new MethodCall($carbonCall, new Identifier($methodName), [new Arg($countLNumber)]); + } + /** + * @param MethodCall[] $callStack + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall + */ + private function rebuildCallStack(StaticCall $staticCall, array $callStack) + { + if ($callStack === []) { + return $staticCall; + } + $currentCall = $staticCall; + $callStack = \array_reverse($callStack); + foreach ($callStack as $call) { + $call->var = $currentCall; + $currentCall = $call; + } + return $currentCall; + } +} diff --git a/vendor/rector/rector/rules/Carbon/Rector/FuncCall/DateFuncCallToCarbonRector.php b/vendor/rector/rector/rules/Carbon/Rector/FuncCall/DateFuncCallToCarbonRector.php new file mode 100644 index 000000000..73eb979cb --- /dev/null +++ b/vendor/rector/rector/rules/Carbon/Rector/FuncCall/DateFuncCallToCarbonRector.php @@ -0,0 +1,72 @@ +format(*)', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + public function run() + { + $date = date('Y-m-d'); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + public function run() + { + $date = \Carbon\Carbon::now()->format('Y-m-d'); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [FuncCall::class]; + } + /** + * @param FuncCall $node + */ + public function refactor(Node $node) : ?Node + { + if (!$this->isName($node->name, 'date')) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + if (\count($node->getArgs()) !== 1) { + return null; + } + $firstArg = $node->getArgs()[0]; + if (!$firstArg->value instanceof String_) { + return null; + } + // create now and format() + $nowStaticCall = new StaticCall(new FullyQualified('Carbon\\Carbon'), 'now'); + return new MethodCall($nowStaticCall, 'format', [new Arg($firstArg->value)]); + } +} diff --git a/vendor/rector/rector/rules/Carbon/Rector/FuncCall/TimeFuncCallToCarbonRector.php b/vendor/rector/rector/rules/Carbon/Rector/FuncCall/TimeFuncCallToCarbonRector.php new file mode 100644 index 000000000..894588727 --- /dev/null +++ b/vendor/rector/rector/rules/Carbon/Rector/FuncCall/TimeFuncCallToCarbonRector.php @@ -0,0 +1,69 @@ +timestamp', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + public function run() + { + $time = time(); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + public function run() + { + $time = \Carbon\Carbon::now()->timestamp; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [FuncCall::class]; + } + /** + * @param FuncCall $node + */ + public function refactor(Node $node) : ?Node + { + if (!$this->isName($node->name, 'time')) { + return null; + } + $firstClassCallable = $node->isFirstClassCallable(); + if (!$firstClassCallable && \count($node->getArgs()) !== 0) { + return null; + } + // create now and format() + $nowStaticCall = new StaticCall(new FullyQualified('Carbon\\Carbon'), 'now'); + $propertyFetch = new PropertyFetch($nowStaticCall, 'timestamp'); + if ($firstClassCallable) { + return new ArrowFunction(['static' => \true, 'expr' => $propertyFetch]); + } + return $propertyFetch; + } +} diff --git a/vendor/rector/rector/rules/Carbon/Rector/MethodCall/DateTimeMethodCallToCarbonRector.php b/vendor/rector/rector/rules/Carbon/Rector/MethodCall/DateTimeMethodCallToCarbonRector.php new file mode 100644 index 000000000..863031a72 --- /dev/null +++ b/vendor/rector/rector/rules/Carbon/Rector/MethodCall/DateTimeMethodCallToCarbonRector.php @@ -0,0 +1,94 @@ +carbonCallFactory = $carbonCallFactory; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Convert new DateTime() with a method call to Carbon::*()', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + public function run() + { + $date = (new \DateTime('today +20 day'))->format('Y-m-d'); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + public function run() + { + $date = \Carbon\Carbon::today()->addDays(20)->format('Y-m-d') + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class]; + } + /** + * @param MethodCall $node + */ + public function refactor(Node $node) : ?Node + { + if (!$node->var instanceof New_) { + return null; + } + $new = $node->var; + if (!$new->class instanceof Name) { + return null; + } + if (!$this->isName($new->class, 'DateTime') && !$this->isName($new->class, 'DateTimeImmutable')) { + return null; + } + if ($new->isFirstClassCallable()) { + return null; + } + if (\count($new->getArgs()) !== 1) { + // @todo handle in separate static call + return null; + } + $firstArg = $new->getArgs()[0]; + if (!$firstArg->value instanceof String_) { + return null; + } + if ($this->isName($new->class, 'DateTime')) { + $carbonFullyQualified = new FullyQualified('Carbon\\Carbon'); + } else { + $carbonFullyQualified = new FullyQualified('Carbon\\CarbonImmutable'); + } + $carbonCall = $this->carbonCallFactory->createFromDateTimeString($carbonFullyQualified, $firstArg->value); + $node->var = $carbonCall; + return $node; + } +} diff --git a/vendor/rector/rector/rules/Carbon/Rector/New_/DateTimeInstanceToCarbonRector.php b/vendor/rector/rector/rules/Carbon/Rector/New_/DateTimeInstanceToCarbonRector.php new file mode 100644 index 000000000..91374248c --- /dev/null +++ b/vendor/rector/rector/rules/Carbon/Rector/New_/DateTimeInstanceToCarbonRector.php @@ -0,0 +1,82 @@ +carbonCallFactory = $carbonCallFactory; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Convert new DateTime() to Carbon::*()', [new CodeSample(<<<'CODE_SAMPLE' +$date = new \DateTime('today'); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +$date = \Carbon\Carbon::today(); +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [New_::class]; + } + /** + * @param New_ $node + */ + public function refactor(Node $node) : ?Node + { + if ($node->isFirstClassCallable()) { + return null; + } + if ($this->isName($node->class, 'DateTime')) { + return $this->refactorWithClass($node, 'Carbon\\Carbon'); + } + if ($this->isName($node->class, 'DateTimeImmutable')) { + return $this->refactorWithClass($node, 'Carbon\\CarbonImmutable'); + } + return null; + } + /** + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null + */ + private function refactorWithClass(New_ $new, string $className) + { + // no arg? ::now() + $carbonFullyQualified = new FullyQualified($className); + if ($new->args === []) { + return new StaticCall($carbonFullyQualified, new Identifier('now')); + } + if (\count($new->getArgs()) === 1) { + $firstArg = $new->getArgs()[0]; + if ($firstArg->value instanceof String_) { + return $this->carbonCallFactory->createFromDateTimeString($carbonFullyQualified, $firstArg->value); + } + } + return null; + } +} diff --git a/vendor/rector/rector/rules/CodeQuality/NodeAnalyzer/ClassLikeAnalyzer.php b/vendor/rector/rector/rules/CodeQuality/NodeAnalyzer/ClassLikeAnalyzer.php index db7ae7580..268f644dc 100644 --- a/vendor/rector/rector/rules/CodeQuality/NodeAnalyzer/ClassLikeAnalyzer.php +++ b/vendor/rector/rector/rules/CodeQuality/NodeAnalyzer/ClassLikeAnalyzer.php @@ -4,18 +4,8 @@ namespace Rector\CodeQuality\NodeAnalyzer; use PhpParser\Node\Stmt\Class_; -use Rector\NodeNameResolver\NodeNameResolver; final class ClassLikeAnalyzer { - /** - * @readonly - * @var \Rector\NodeNameResolver\NodeNameResolver - */ - private $nodeNameResolver; - public function __construct(NodeNameResolver $nodeNameResolver) - { - $this->nodeNameResolver = $nodeNameResolver; - } /** * @return string[] */ @@ -23,7 +13,9 @@ public function resolvePropertyNames(Class_ $class) : array { $propertyNames = []; foreach ($class->getProperties() as $property) { - $propertyNames[] = $this->nodeNameResolver->getName($property); + foreach ($property->props as $prop) { + $propertyNames[] = $prop->name->toString(); + } } return $propertyNames; } diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Array_/CallableThisArrayToAnonymousFunctionRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Array_/CallableThisArrayToAnonymousFunctionRector.php deleted file mode 100644 index eb2fd342f..000000000 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Array_/CallableThisArrayToAnonymousFunctionRector.php +++ /dev/null @@ -1,120 +0,0 @@ -anonymousFunctionFactory = $anonymousFunctionFactory; - $this->reflectionResolver = $reflectionResolver; - $this->arrayCallableMethodMatcher = $arrayCallableMethodMatcher; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Convert [$this, "method"] to proper anonymous function', [new CodeSample(<<<'CODE_SAMPLE' -class SomeClass -{ - public function run() - { - $values = [1, 5, 3]; - usort($values, [$this, 'compareSize']); - - return $values; - } - - private function compareSize($first, $second) - { - return $first <=> $second; - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -class SomeClass -{ - public function run() - { - $values = [1, 5, 3]; - usort($values, function ($first, $second) { - return $this->compareSize($first, $second); - }); - - return $values; - } - - private function compareSize($first, $second) - { - return $first <=> $second; - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Array_::class]; - } - /** - * @param Array_ $node - */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node - { - if ($this->shouldSkipTwigExtension($scope)) { - return null; - } - $arrayCallable = $this->arrayCallableMethodMatcher->match($node, $scope); - if (!$arrayCallable instanceof ArrayCallable) { - return null; - } - $phpMethodReflection = $this->reflectionResolver->resolveMethodReflection($arrayCallable->getClass(), $arrayCallable->getMethod(), $scope); - if (!$phpMethodReflection instanceof PhpMethodReflection) { - return null; - } - return $this->anonymousFunctionFactory->createFromPhpMethodReflection($phpMethodReflection, $arrayCallable->getCallerExpr()); - } - private function shouldSkipTwigExtension(Scope $scope) : bool - { - if (!$scope->isInClass()) { - return \false; - } - $classReflection = $scope->getClassReflection(); - return $classReflection->isSubclassOf('Twig\\Extension\\ExtensionInterface'); - } -} diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/BooleanAnd/SimplifyEmptyArrayCheckRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/BooleanAnd/SimplifyEmptyArrayCheckRector.php index be60803d8..21c232f32 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/BooleanAnd/SimplifyEmptyArrayCheckRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/BooleanAnd/SimplifyEmptyArrayCheckRector.php @@ -15,8 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/EZ2P4 - * @changelog https://3v4l.org/egtb5 * @see \Rector\Tests\CodeQuality\Rector\BooleanAnd\SimplifyEmptyArrayCheckRector\SimplifyEmptyArrayCheckRectorTest */ final class SimplifyEmptyArrayCheckRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/BooleanNot/SimplifyDeMorganBinaryRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/BooleanNot/SimplifyDeMorganBinaryRector.php index 0f3186d2f..831449d03 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/BooleanNot/SimplifyDeMorganBinaryRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/BooleanNot/SimplifyDeMorganBinaryRector.php @@ -12,7 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/questions/20043664/de-morgans-law * @see \Rector\Tests\CodeQuality\Rector\BooleanNot\SimplifyDeMorganBinaryRector\SimplifyDeMorganBinaryRectorTest */ final class SimplifyDeMorganBinaryRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php index f19e1a80b..3c9c586ce 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php @@ -23,7 +23,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/thecodingmachine/phpstan-strict-rules/blob/e3d746a61d38993ca2bc2e2fcda7012150de120c/src/Rules/Exceptions/ThrowMustBundlePreviousExceptionRule.php#L83 * @see \Rector\Tests\CodeQuality\Rector\Catch_\ThrowWithPreviousExceptionRector\ThrowWithPreviousExceptionRectorTest */ final class ThrowWithPreviousExceptionRector extends AbstractRector @@ -125,17 +124,20 @@ private function refactorThrow(Throw_ $throw, Variable $catchedThrowableVariable $getMessageMethodCall = new MethodCall($catchedThrowableVariable, 'getMessage'); $new->args[0] = new Arg($getMessageMethodCall); } + /** @var Arg $messageArgument */ + $messageArgument = $new->getArgs()[0]; + $shouldUseNamedArguments = $messageArgument->name !== null; if (!isset($new->getArgs()[1])) { // get previous code - $new->args[1] = new Arg(new MethodCall($catchedThrowableVariable, 'getCode')); + $new->args[1] = new Arg(new MethodCall($catchedThrowableVariable, 'getCode'), \false, \false, [], $shouldUseNamedArguments ? new Identifier('code') : null); } /** @var Arg $arg1 */ $arg1 = $new->args[1]; if ($arg1->name instanceof Identifier && $arg1->name->toString() === 'previous') { - $new->args[1] = new Arg(new MethodCall($catchedThrowableVariable, 'getCode')); + $new->args[1] = new Arg(new MethodCall($catchedThrowableVariable, 'getCode'), \false, \false, [], $shouldUseNamedArguments ? new Identifier('code') : null); $new->args[$exceptionArgumentPosition] = $arg1; } else { - $new->args[$exceptionArgumentPosition] = new Arg($catchedThrowableVariable); + $new->args[$exceptionArgumentPosition] = new Arg($catchedThrowableVariable, \false, \false, [], $shouldUseNamedArguments ? new Identifier('previous') : null); } // null the node, to fix broken format preserving printers, see https://github.com/rectorphp/rector/issues/5576 $new->setAttribute(AttributeKey::ORIGINAL_NODE, null); @@ -158,7 +160,7 @@ private function resolveExceptionArgumentPosition(Name $exceptionName) : ?int return self::DEFAULT_EXCEPTION_ARGUMENT_POSITION; } $extendedMethodReflection = $classReflection->getConstructor(); - $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::selectSingle($extendedMethodReflection->getVariants()); + $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::combineAcceptors($extendedMethodReflection->getVariants()); foreach ($parametersAcceptorWithPhpDocs->getParameters() as $position => $parameterReflectionWithPhpDoc) { $parameterType = $parameterReflectionWithPhpDoc->getType(); if (!$parameterType instanceof TypeWithClassName) { diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/ClassConstFetch/ConvertStaticPrivateConstantToSelfRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/ClassConstFetch/ConvertStaticPrivateConstantToSelfRector.php index 117296ad5..984158265 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/ClassConstFetch/ConvertStaticPrivateConstantToSelfRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/ClassConstFetch/ConvertStaticPrivateConstantToSelfRector.php @@ -66,7 +66,10 @@ public function refactor(Node $node) : ?Class_ if (!$node instanceof ClassConstFetch) { return null; } - if ($this->shouldBeSkipped($class, $node)) { + if (!$this->isUsingStatic($node)) { + return null; + } + if (!$class->isFinal() && !$this->isPrivateConstant($node, $class)) { return null; } $hasChanged = \true; @@ -96,13 +99,6 @@ private function isPrivateConstant(ClassConstFetch $classConstFetch, Class_ $cla } return \false; } - private function shouldBeSkipped(Class_ $class, ClassConstFetch $classConstFetch) : bool - { - if (!$this->isUsingStatic($classConstFetch)) { - return \true; - } - return !$this->isPrivateConstant($classConstFetch, $class); - } private function getConstantName(ClassConstFetch $classConstFetch) : ?string { $constantNameIdentifier = $classConstFetch->name; diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/LocallyCalledStaticMethodToNonStaticRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/LocallyCalledStaticMethodToNonStaticRector.php index 98cec8fd3..00a1045ce 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/LocallyCalledStaticMethodToNonStaticRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/LocallyCalledStaticMethodToNonStaticRector.php @@ -4,6 +4,8 @@ namespace Rector\CodeQuality\Rector\ClassMethod; use PhpParser\Node; +use PhpParser\Node\Expr\ArrowFunction; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\Variable; @@ -117,11 +119,38 @@ private function refactorClassMethod(Class_ $class, ClassMethod $classMethod) : } // replace all the calls $classMethodName = $this->getName($classMethod); - $this->traverseNodesWithCallable($class, function (Node $node) use($classMethodName) : ?MethodCall { + $className = $this->getName($class) ?? ''; + $shouldSkip = \false; + $this->traverseNodesWithCallable($class->getMethods(), function (Node $node) use(&$shouldSkip, $classMethodName, $className) : ?int { + if (($node instanceof Closure || $node instanceof ArrowFunction) && $node->static) { + $this->traverseNodesWithCallable($node->getStmts(), function (Node $subNode) use(&$shouldSkip, $classMethodName, $className) : ?int { + if (!$subNode instanceof StaticCall) { + return null; + } + if (!$this->isNames($subNode->class, ['self', 'static', $className])) { + return null; + } + if (!$this->isName($subNode->name, $classMethodName)) { + return null; + } + $shouldSkip = \true; + return NodeTraverser::STOP_TRAVERSAL; + }); + if ($shouldSkip) { + return NodeTraverser::STOP_TRAVERSAL; + } + return null; + } + return null; + }); + if ($shouldSkip) { + return null; + } + $this->traverseNodesWithCallable($class->getMethods(), function (Node $node) use($classMethodName, $className) : ?MethodCall { if (!$node instanceof StaticCall) { return null; } - if (!$this->isNames($node->class, ['self', 'static'])) { + if (!$this->isNames($node->class, ['self', 'static', $className])) { return null; } if (!$this->isName($node->name, $classMethodName)) { @@ -139,6 +168,7 @@ private function refactorClassMethod(Class_ $class, ClassMethod $classMethod) : */ private function isClassMethodCalledInAnotherStaticClassMethod(Class_ $class, ClassMethod $classMethod) : bool { + $currentClassNamespacedName = (string) $this->getName($class); $currentClassMethodName = $this->getName($classMethod); $isInsideStaticClassMethod = \false; // check if called stati call somewhere in class, but only in static methods @@ -147,11 +177,11 @@ private function isClassMethodCalledInAnotherStaticClassMethod(Class_ $class, Cl if (!$checkedClassMethod->isStatic()) { continue; } - $this->traverseNodesWithCallable($checkedClassMethod, function (Node $node) use($currentClassMethodName, &$isInsideStaticClassMethod) : ?int { + $this->traverseNodesWithCallable($checkedClassMethod, function (Node $node) use($currentClassNamespacedName, $currentClassMethodName, &$isInsideStaticClassMethod) : ?int { if (!$node instanceof StaticCall) { return null; } - if (!$this->isNames($node->class, ['self', 'static'])) { + if (!$this->isNames($node->class, ['self', 'static', $currentClassNamespacedName])) { return null; } if (!$this->isName($node->name, $currentClassMethodName)) { diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php index 1d0739513..5230ed5ef 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php @@ -23,8 +23,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://php.watch/versions/8.0#deprecate-required-param-after-optional - * * @see \Rector\Tests\CodeQuality\Rector\ClassMethod\OptionalParametersAfterRequiredRector\OptionalParametersAfterRequiredRectorTest */ final class OptionalParametersAfterRequiredRector extends AbstractScopeAwareRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector.php index f4a5abbb8..a08968657 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector.php @@ -21,10 +21,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/GL6II - * @changelog https://3v4l.org/eTrhZ - * @changelog https://3v4l.org/C554W - * * @see \Rector\Tests\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector\CompleteDynamicPropertiesRectorTest */ final class CompleteDynamicPropertiesRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Class_/StaticToSelfStaticMethodCallOnFinalClassRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Class_/StaticToSelfStaticMethodCallOnFinalClassRector.php index 63be2ed32..737937341 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Class_/StaticToSelfStaticMethodCallOnFinalClassRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Class_/StaticToSelfStaticMethodCallOnFinalClassRector.php @@ -14,7 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/JK1g2#v5.0.0 * @see \Rector\Tests\CodeQuality\Rector\Class_\StaticToSelfStaticMethodCallOnFinalClassRector\StaticToSelfStaticMethodCallOnFinalClassRectorTest */ final class StaticToSelfStaticMethodCallOnFinalClassRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Concat/JoinStringConcatRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Concat/JoinStringConcatRector.php index a4c8a236a..f415e0bc5 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Concat/JoinStringConcatRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Concat/JoinStringConcatRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodeQuality\Rector\Concat; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\BinaryOp\Concat; use PhpParser\Node\Scalar\String_; @@ -72,7 +72,7 @@ private function joinConcatIfStrings(String_ $leftString, String_ $rightString) { $leftValue = $leftString->value; $rightValue = $rightString->value; - if ($leftValue === "\n" || $rightValue === "\n") { + if (\strpos($leftValue, "\n") !== \false || \strpos($rightValue, "\n") !== \false) { return null; } $joinedStringValue = $leftValue . $rightValue; diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php index 9bcf789d0..21bfebb46 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php @@ -28,7 +28,7 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\CodeQuality\Rector\Empty_\SimplifyEmptyCheckOnEmptyArrayRectorTest\SimplifyEmptyCheckOnEmptyArrayRectorTest + * @see \Rector\Tests\CodeQuality\Rector\Empty_\SimplifyEmptyCheckOnEmptyArrayRector\SimplifyEmptyCheckOnEmptyArrayRectorTest */ final class SimplifyEmptyCheckOnEmptyArrayRector extends AbstractScopeAwareRector { @@ -125,7 +125,7 @@ private function isAllowedExpr(Expr $expr, Scope $scope) : bool if (!$expr->name instanceof Identifier) { return \false; } - $classReflection = $this->reflectionResolver->resolveClassReflection($expr); + $classReflection = $this->reflectionResolver->resolveClassReflectionSourceObject($expr); if (!$classReflection instanceof ClassReflection) { return \false; } diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Expression/InlineIfToExplicitIfRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Expression/InlineIfToExplicitIfRector.php index 79be13895..ce0f33ddc 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Expression/InlineIfToExplicitIfRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Expression/InlineIfToExplicitIfRector.php @@ -16,8 +16,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/dmHCC - * * @see \Rector\Tests\CodeQuality\Rector\Expression\InlineIfToExplicitIfRector\InlineIfToExplicitIfRectorTest */ final class InlineIfToExplicitIfRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php index 8fce3074e..f5e838c34 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Expression/TernaryFalseExpressionToIfRector.php @@ -6,10 +6,11 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Ternary; +use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\If_; use PHPStan\Analyser\Scope; -use Rector\DeadCode\SideEffect\SideEffectNodeDetector; +use Rector\NodeAnalyzer\ExprAnalyzer; use Rector\Rector\AbstractScopeAwareRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -20,12 +21,12 @@ final class TernaryFalseExpressionToIfRector extends AbstractScopeAwareRector { /** * @readonly - * @var \Rector\DeadCode\SideEffect\SideEffectNodeDetector + * @var \Rector\NodeAnalyzer\ExprAnalyzer */ - private $sideEffectNodeDetector; - public function __construct(SideEffectNodeDetector $sideEffectNodeDetector) + private $exprAnalyzer; + public function __construct(ExprAnalyzer $exprAnalyzer) { - $this->sideEffectNodeDetector = $sideEffectNodeDetector; + $this->exprAnalyzer = $exprAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -70,7 +71,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if (!$ternary->if instanceof Expr) { return null; } - if ($this->sideEffectNodeDetector->detect($ternary->else, $scope) || $this->sideEffectNodeDetector->detectCallExpr($ternary->else, $scope)) { + if (!$ternary->else instanceof Variable && $this->exprAnalyzer->isDynamicExpr($ternary->else)) { return null; } return new If_($ternary->cond, ['stmts' => [new Expression($ternary->if)]]); diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php index a48121bfb..edc6cf952 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php @@ -132,7 +132,7 @@ private function shouldSkip(Foreach_ $foreach, array $emptyArrayVariables) : boo if (!$assignVariableExpr instanceof Expr) { return \true; } - $foreachedExprType = $this->getType($foreach->expr); + $foreachedExprType = $this->nodeTypeResolver->getNativeType($foreach->expr); // only arrays, not traversable/iterable if (!$foreachedExprType->isArray()->yes()) { return \true; diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php index 05d2213c7..4cf9b2b8c 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php @@ -13,7 +13,7 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use PHPStan\Type\ObjectType; +use PhpParser\NodeFinder; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\BinaryOpManipulator; use Rector\Php71\ValueObject\TwoNodeMatch; @@ -36,10 +36,16 @@ final class ForeachToInArrayRector extends AbstractRector * @var \Rector\PhpParser\Node\Value\ValueResolver */ private $valueResolver; - public function __construct(BinaryOpManipulator $binaryOpManipulator, ValueResolver $valueResolver) + /** + * @readonly + * @var \PhpParser\NodeFinder + */ + private $nodeFinder; + public function __construct(BinaryOpManipulator $binaryOpManipulator, ValueResolver $valueResolver, NodeFinder $nodeFinder) { $this->binaryOpManipulator = $binaryOpManipulator; $this->valueResolver = $valueResolver; + $this->nodeFinder = $nodeFinder; } public function getRuleDefinition() : RuleDefinition { @@ -96,6 +102,12 @@ public function refactor(Node $node) : ?Node if (!$twoNodeMatch instanceof TwoNodeMatch) { return null; } + $variableNodes = $this->nodeFinder->findInstanceOf($twoNodeMatch->getSecondExpr(), Variable::class); + foreach ($variableNodes as $variableNode) { + if ($this->nodeComparator->areNodesEqual($variableNode, $foreach->valueVar)) { + return null; + } + } $comparedExpr = $twoNodeMatch->getSecondExpr(); if (!$this->isIfBodyABoolReturnNode($firstNodeInsideForeach)) { return null; @@ -138,8 +150,7 @@ private function shouldSkipForeach(Foreach_ $foreach) : bool if (!$foreach->stmts[0] instanceof If_) { return \true; } - $foreachValueStaticType = $this->getType($foreach->expr); - return $foreachValueStaticType instanceof ObjectType; + return !$this->nodeTypeResolver->getNativeType($foreach->expr)->isArray()->yes(); } private function shouldSkipIf(If_ $if) : bool { diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php index 09a41657e..55d62e452 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php @@ -22,8 +22,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/bfsdY - * * @see \Rector\Tests\CodeQuality\Rector\Foreach_\SimplifyForeachToCoalescingRector\SimplifyForeachToCoalescingRectorTest */ final class SimplifyForeachToCoalescingRector extends AbstractRector implements MinPhpVersionInterface @@ -133,6 +131,10 @@ private function matchForeachReturnOrAssign(Foreach_ $foreach) if ($if->else instanceof Else_ || $if->elseifs !== []) { return null; } + $foreachExprType = $this->nodeTypeResolver->getNativeType($foreach->expr); + if (!$foreachExprType->isArray()->yes()) { + return null; + } $innerStmt = $if->stmts[0]; if ($innerStmt instanceof Return_) { return $innerStmt; diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php index 7842a1eb7..b09ee4db5 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php @@ -9,8 +9,9 @@ use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Foreach_; -use PHPStan\Type\ObjectType; +use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; +use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -30,10 +31,16 @@ final class UnusedForeachValueToArrayKeysRector extends AbstractRector * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - public function __construct(ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer, BetterNodeFinder $betterNodeFinder) + /** + * @readonly + * @var \Rector\NodeManipulator\StmtsManipulator + */ + private $stmtsManipulator; + public function __construct(ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer, BetterNodeFinder $betterNodeFinder, StmtsManipulator $stmtsManipulator) { $this->exprUsedInNodeAnalyzer = $exprUsedInNodeAnalyzer; $this->betterNodeFinder = $betterNodeFinder; + $this->stmtsManipulator = $stmtsManipulator; } public function getRuleDefinition() : RuleDefinition { @@ -68,37 +75,57 @@ public function run() */ public function getNodeTypes() : array { - return [Foreach_::class]; + return [StmtsAwareInterface::class]; } /** - * @param Foreach_ $node + * @param StmtsAwareInterface $node */ public function refactor(Node $node) : ?Node { - if (!$node->keyVar instanceof Expr) { + $stmts = $node->stmts; + if ($stmts === null) { return null; } - // special case of nested array items - if ($node->valueVar instanceof Array_) { - $valueArray = $this->refactorArrayForeachValue($node->valueVar, $node); - if ($valueArray instanceof Array_) { - $node->valueVar = $valueArray; + $hasChanged = \false; + foreach ($stmts as $key => $stmt) { + if (!$stmt instanceof Foreach_) { + continue; } - // not sure what does this mean :) - if ($node->valueVar->items !== []) { - return null; + if (!$stmt->keyVar instanceof Expr) { + continue; } - } elseif ($node->valueVar instanceof Variable) { - if ($this->isVariableUsedInForeach($node->valueVar, $node)) { - return null; + if (!$this->nodeTypeResolver->getNativeType($stmt->expr)->isArray()->yes()) { + continue; } - } else { - return null; + // special case of nested array items + if ($stmt->valueVar instanceof Array_) { + $valueArray = $this->refactorArrayForeachValue($stmt->valueVar, $stmt); + if ($valueArray instanceof Array_) { + $stmt->valueVar = $valueArray; + } + // not sure what does this mean :) + if ($stmt->valueVar->items !== []) { + continue; + } + $hasChanged = \true; + $this->removeForeachValueAndUseArrayKeys($stmt, $stmt->keyVar); + continue; + } + if (!$stmt->valueVar instanceof Variable) { + continue; + } + if ($this->isVariableUsedInForeach($stmt->valueVar, $stmt)) { + continue; + } + if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmts, $key + 1, (string) $this->getName($stmt->valueVar))) { + continue; + } + $hasChanged = \true; + $this->removeForeachValueAndUseArrayKeys($stmt, $stmt->keyVar); } - if (!$this->isArrayType($node->expr)) { + if (!$hasChanged) { return null; } - $this->removeForeachValueAndUseArrayKeys($node, $node->keyVar); return $node; } /** @@ -158,12 +185,4 @@ private function removeForeachValueAndUseArrayKeys(Foreach_ $foreach, Expr $keyV $foreach->keyVar = null; $foreach->expr = $this->nodeFactory->createFuncCall('array_keys', [$foreach->expr]); } - private function isArrayType(Expr $expr) : bool - { - $exprType = $this->getType($expr); - if ($exprType instanceof ObjectType) { - return \false; - } - return $exprType->isArray()->yes(); - } } diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ArrayMergeOfNonArraysToSimpleArrayRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ArrayMergeOfNonArraysToSimpleArrayRector.php index d34120d57..683b86a56 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ArrayMergeOfNonArraysToSimpleArrayRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ArrayMergeOfNonArraysToSimpleArrayRector.php @@ -12,10 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/aLf96 - * @changelog https://3v4l.org/2r26K - * @changelog https://3v4l.org/anks3 - * * @see \Rector\Tests\CodeQuality\Rector\FuncCall\ArrayMergeOfNonArraysToSimpleArrayRector\ArrayMergeOfNonArraysToSimpleArrayRectorTest */ final class ArrayMergeOfNonArraysToSimpleArrayRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/BoolvalToTypeCastRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/BoolvalToTypeCastRector.php deleted file mode 100644 index a469d340e..000000000 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/BoolvalToTypeCastRector.php +++ /dev/null @@ -1,62 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [FuncCall::class]; - } - /** - * @param FuncCall $node - */ - public function refactor(Node $node) : ?Node - { - if ($node->isFirstClassCallable()) { - return null; - } - if (!$this->isName($node, 'boolval')) { - return null; - } - if (!isset($node->getArgs()[0])) { - return null; - } - return new Bool_($node->getArgs()[0]->value); - } -} diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php index f78b8273c..188b19308 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/fuuEF - * * @see \Rector\Tests\CodeQuality\Rector\FuncCall\CallUserFuncWithArrowFunctionToInlineRector\CallUserFuncWithArrowFunctionToInlineRectorTest */ final class CallUserFuncWithArrowFunctionToInlineRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ChangeArrayPushToArrayAssignRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ChangeArrayPushToArrayAssignRector.php index 52d60407d..c2a58258b 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ChangeArrayPushToArrayAssignRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/ChangeArrayPushToArrayAssignRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/questions/559844/whats-better-to-use-in-php-array-value-or-array-pusharray-value - * * @see \Rector\Tests\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector\ChangeArrayPushToArrayAssignRectorTest */ final class ChangeArrayPushToArrayAssignRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CompactToVariablesRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CompactToVariablesRector.php index 58b7ac42d..4aae925a6 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CompactToVariablesRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/CompactToVariablesRector.php @@ -17,9 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/a/16319909/1348344 - * @changelog https://3v4l.org/8GJEs - * * @see \Rector\Tests\CodeQuality\Rector\FuncCall\CompactToVariablesRector\CompactToVariablesRectorTest */ final class CompactToVariablesRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/FloatvalToTypeCastRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/FloatvalToTypeCastRector.php deleted file mode 100644 index 2b96506f7..000000000 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/FloatvalToTypeCastRector.php +++ /dev/null @@ -1,73 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [FuncCall::class]; - } - /** - * @param FuncCall $node - */ - public function refactor(Node $node) : ?Node - { - $methodName = $this->getName($node); - if ($methodName === null) { - return null; - } - if (!\in_array($methodName, self::VAL_FUNCTION_NAMES, \true)) { - return null; - } - if ($node->isFirstClassCallable()) { - return null; - } - $firstArg = $node->getArgs()[0]; - $double = new Double($firstArg->value); - $double->setAttribute(AttributeKey::KIND, Double::KIND_FLOAT); - return $double; - } -} diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/IntvalToTypeCastRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/IntvalToTypeCastRector.php deleted file mode 100644 index 4cfce61df..000000000 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/IntvalToTypeCastRector.php +++ /dev/null @@ -1,82 +0,0 @@ -valueResolver = $valueResolver; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Change intval() to faster and readable (int) $value', [new CodeSample(<<<'CODE_SAMPLE' -class SomeClass -{ - public function run($value) - { - return intval($value); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -class SomeClass -{ - public function run($value) - { - return (int) $value; - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [FuncCall::class]; - } - /** - * @param FuncCall $node - */ - public function refactor(Node $node) : ?Node - { - if (!$this->isName($node, 'intval')) { - return null; - } - if (isset($node->args[1]) && $node->args[1] instanceof Arg) { - $secondArgumentValue = $this->valueResolver->getValue($node->args[1]->value); - // default value - if ($secondArgumentValue !== 10) { - return null; - } - } - if ($node->isFirstClassCallable()) { - return null; - } - if (!isset($node->getArgs()[0])) { - return null; - } - return new Int_($node->getArgs()[0]->value); - } -} diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php index d55f94e35..a5b5512d6 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php @@ -23,8 +23,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/questions/5577003/using-settype-in-php-instead-of-typecasting-using-brackets-what-is-the-differen/5577068#5577068 - * * @see \Rector\Tests\CodeQuality\Rector\FuncCall\SetTypeToCastRector\SetTypeToCastRectorTest */ final class SetTypeToCastRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyRegexPatternRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyRegexPatternRector.php index 8f26b81e6..a91f3ce45 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyRegexPatternRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyRegexPatternRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodeQuality\Rector\FuncCall; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Scalar\String_; use Rector\NodeNameResolver\Regex\RegexPatternDetector; @@ -11,8 +11,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/function.preg-match.php#105924 - * * @see \Rector\Tests\CodeQuality\Rector\FuncCall\SimplifyRegexPatternRector\SimplifyRegexPatternRectorTest */ final class SimplifyRegexPatternRector extends AbstractRector @@ -76,6 +74,9 @@ public function refactor(Node $node) : ?Node if (\strpos($originalValue, '[^' . $complexPattern) !== \false) { continue; } + if ($complexPattern === $node->value) { + continue; + } $node->value = $simplifiedValue; return $node; } diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyStrposLowerRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyStrposLowerRector.php index 0885fc73d..a9be33eb0 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyStrposLowerRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/SimplifyStrposLowerRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodeQuality\Rector\FuncCall; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/StrvalToTypeCastRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/StrvalToTypeCastRector.php deleted file mode 100644 index 047683005..000000000 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/StrvalToTypeCastRector.php +++ /dev/null @@ -1,62 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [FuncCall::class]; - } - /** - * @param FuncCall $node - */ - public function refactor(Node $node) : ?Node - { - if (!$this->isName($node, 'strval')) { - return null; - } - if ($node->isFirstClassCallable()) { - return null; - } - if (!isset($node->getArgs()[0])) { - return null; - } - return new String_($node->getArgs()[0]->value); - } -} diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/UnwrapSprintfOneArgumentRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/UnwrapSprintfOneArgumentRector.php index fe3f84c92..e278a1399 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/UnwrapSprintfOneArgumentRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FuncCall/UnwrapSprintfOneArgumentRector.php @@ -9,7 +9,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/FriendsOfPHP/PHP-CS-Fixer/pull/5280 * @see \Rector\Tests\CodeQuality\Rector\FuncCall\UnwrapSprintfOneArgumentRector\UnwrapSprintfOneArgumentRectorTest */ final class UnwrapSprintfOneArgumentRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php index 4f87c08af..e755d08e0 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php @@ -14,17 +14,18 @@ use PHPStan\Type\MixedType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; +use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\NodeAnalyzer\CallAnalyzer; use Rector\NodeAnalyzer\VariableAnalyzer; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Node\AssignAndBinaryMap; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; +use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\CodeQuality\Rector\FunctionLike\SimplifyUselessVariableRector\SimplifyUselessVariableRectorTest */ -final class SimplifyUselessVariableRector extends AbstractRector +final class SimplifyUselessVariableRector extends AbstractRector implements ConfigurableRectorInterface { /** * @readonly @@ -46,6 +47,15 @@ final class SimplifyUselessVariableRector extends AbstractRector * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory */ private $phpDocInfoFactory; + /** + * @api + * @var string + */ + public const ONLY_DIRECT_ASSIGN = 'only_direct_assign'; + /** + * @var bool + */ + private $onlyDirectAssign = \false; public function __construct(AssignAndBinaryMap $assignAndBinaryMap, VariableAnalyzer $variableAnalyzer, CallAnalyzer $callAnalyzer, PhpDocInfoFactory $phpDocInfoFactory) { $this->assignAndBinaryMap = $assignAndBinaryMap; @@ -53,20 +63,44 @@ public function __construct(AssignAndBinaryMap $assignAndBinaryMap, VariableAnal $this->callAnalyzer = $callAnalyzer; $this->phpDocInfoFactory = $phpDocInfoFactory; } + public function configure(array $configuration) : void + { + $this->onlyDirectAssign = $configuration[self::ONLY_DIRECT_ASSIGN] ?? \false; + } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Removes useless variable assigns', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Removes useless variable assigns', [new ConfiguredCodeSample( + <<<'CODE_SAMPLE' function () { $a = true; return $a; }; CODE_SAMPLE -, <<<'CODE_SAMPLE' +, + <<<'CODE_SAMPLE' function () { return true; }; CODE_SAMPLE -)]); +, + // default + [self::ONLY_DIRECT_ASSIGN => \true] + ), new ConfiguredCodeSample(<<<'CODE_SAMPLE' +function () { + $a = 'Hello, '; + $a .= 'World!'; + + return $a; +}; +CODE_SAMPLE +, <<<'CODE_SAMPLE' +function () { + $a = 'Hello, '; + + return $a . 'World!'; +}; +CODE_SAMPLE +, [self::ONLY_DIRECT_ASSIGN => \false])]); } /** * @return array> @@ -141,6 +175,9 @@ private function shouldSkipStmt(Return_ $return, Stmt $previousStmt) : bool if (!$previousNode instanceof AssignOp && !$previousNode instanceof Assign) { return \true; } + if ($this->onlyDirectAssign && $previousNode instanceof AssignOp) { + return \true; + } $variable = $return->expr; // is the same variable if (!$this->nodeComparator->areNodesEqual($previousNode->var, $variable)) { diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Identical/BooleanNotIdenticalToNotIdenticalRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Identical/BooleanNotIdenticalToNotIdenticalRector.php index 47a09b256..ad5188f94 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Identical/BooleanNotIdenticalToNotIdenticalRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Identical/BooleanNotIdenticalToNotIdenticalRector.php @@ -11,7 +11,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/GoEPq * @see \Rector\Tests\CodeQuality\Rector\Identical\BooleanNotIdenticalToNotIdenticalRector\BooleanNotIdenticalToNotIdenticalRectorTest */ final class BooleanNotIdenticalToNotIdenticalRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Identical/GetClassToInstanceOfRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Identical/GetClassToInstanceOfRector.php deleted file mode 100644 index 4350dea73..000000000 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Identical/GetClassToInstanceOfRector.php +++ /dev/null @@ -1,116 +0,0 @@ -binaryOpManipulator = $binaryOpManipulator; - $this->valueResolver = $valueResolver; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Changes comparison with get_class to instanceof', [new CodeSample('if (EventsListener::class === get_class($event->job)) { }', 'if ($event->job instanceof EventsListener) { }')]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Identical::class, NotIdentical::class]; - } - /** - * @param Identical|NotIdentical $node - */ - public function refactor(Node $node) : ?Node - { - $twoNodeMatch = $this->binaryOpManipulator->matchFirstAndSecondConditionNode($node, function (Node $node) : bool { - return $this->isClassReference($node); - }, function (Node $node) : bool { - return $this->isGetClassFuncCallNode($node); - }); - if (!$twoNodeMatch instanceof TwoNodeMatch) { - return null; - } - /** @var ClassConstFetch|String_ $firstExpr */ - $firstExpr = $twoNodeMatch->getFirstExpr(); - /** @var FuncCall $secondExpr */ - $secondExpr = $twoNodeMatch->getSecondExpr(); - if ($secondExpr->isFirstClassCallable()) { - return null; - } - if (!isset($secondExpr->getArgs()[0])) { - return null; - } - $firstArg = $secondExpr->getArgs()[0]; - $varNode = $firstArg->value; - if ($firstExpr instanceof String_) { - $className = $this->valueResolver->getValue($firstExpr); - } else { - $className = $this->getName($firstExpr->class); - } - if ($className === null) { - return null; - } - if ($className === ObjectReference::PARENT) { - return null; - } - $class = \in_array($className, self::NO_NAMESPACED_CLASSNAMES, \true) ? new Name($className) : new FullyQualified($className); - $instanceof = new Instanceof_($varNode, $class); - if ($node instanceof NotIdentical) { - return new BooleanNot($instanceof); - } - return $instanceof; - } - private function isClassReference(Node $node) : bool - { - if (!$node instanceof ClassConstFetch) { - // might be - return $node instanceof String_; - } - return $this->isName($node->name, 'class'); - } - private function isGetClassFuncCallNode(Node $node) : bool - { - if (!$node instanceof FuncCall) { - return \false; - } - return $this->isName($node, 'get_class'); - } -} diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/If_/ExplicitBoolCompareRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/If_/ExplicitBoolCompareRector.php index 635d3dc12..24000bcba 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/If_/ExplicitBoolCompareRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/If_/ExplicitBoolCompareRector.php @@ -31,9 +31,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.reddit.com/r/PHP/comments/aqk01p/is_there_a_situation_in_which_if_countarray_0/ - * @changelog https://3v4l.org/UCd1b - * * @see \Rector\Tests\CodeQuality\Rector\If_\ExplicitBoolCompareRector\ExplicitBoolCompareRectorTest */ final class ExplicitBoolCompareRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php index 55c736777..094796f66 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodeQuality\Rector\Include_; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\BinaryOp\Concat; use PhpParser\Node\Expr\Include_; @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/symplify/CodingStandard#includerequire-should-be-followed-by-absolute-path - * * @see \Rector\Tests\CodeQuality\Rector\Include_\AbsolutizeRequireAndIncludePathRector\AbsolutizeRequireAndIncludePathRectorTest */ final class AbsolutizeRequireAndIncludePathRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php index 5dd55fe99..f69c7bc3e 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Isset_/IssetOnPropertyObjectToPropertyExistsRector.php @@ -28,8 +28,6 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\CodeQuality\Rector\Isset_\IssetOnPropertyObjectToPropertyExistsRector\IssetOnPropertyObjectToPropertyExistsRectorTest - * - * @changelog https://3v4l.org/TI8XL Change isset on property object to property_exists() with not null check */ final class IssetOnPropertyObjectToPropertyExistsRector extends AbstractRector { diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/AndAssignsToSeparateLinesRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/AndAssignsToSeparateLinesRector.php index 0fa3cff94..33753fea3 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/AndAssignsToSeparateLinesRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/AndAssignsToSeparateLinesRector.php @@ -11,7 +11,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/ji8bX * @see \Rector\Tests\CodeQuality\Rector\LogicalAnd\AndAssignsToSeparateLinesRector\AndAssignsToSeparateLinesRectorTest */ final class AndAssignsToSeparateLinesRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/LogicalToBooleanRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/LogicalToBooleanRector.php index c03420752..826e2a8ff 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/LogicalToBooleanRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/LogicalAnd/LogicalToBooleanRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/a/5998330/1348344 - * * @see \Rector\Tests\CodeQuality\Rector\LogicalAnd\LogicalToBooleanRector\LogicalToBooleanRectorTest */ final class LogicalToBooleanRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/New_/NewStaticToNewSelfRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/New_/NewStaticToNewSelfRector.php index 01be4f153..311ef36bc 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/New_/NewStaticToNewSelfRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/New_/NewStaticToNewSelfRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/phpstan/phpstan-src/blob/699c420f8193da66927e54494a0afa0c323c6458/src/Rules/Classes/NewStaticRule.php - * * @see \Rector\Tests\CodeQuality\Rector\New_\NewStaticToNewSelfRector\NewStaticToNewSelfRectorTest */ final class NewStaticToNewSelfRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/NotEqual/CommonNotEqualRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/NotEqual/CommonNotEqualRector.php index fc85bb0ee..dd788954a 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/NotEqual/CommonNotEqualRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/NotEqual/CommonNotEqualRector.php @@ -10,7 +10,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/a/4294663/1348344 * @see \Rector\Tests\CodeQuality\Rector\NotEqual\CommonNotEqualRector\CommonNotEqualRectorTest */ final class CommonNotEqualRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/NullsafeMethodCall/CleanupUnneededNullsafeOperatorRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/NullsafeMethodCall/CleanupUnneededNullsafeOperatorRector.php index 55ffa3070..85e8a9ec7 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/NullsafeMethodCall/CleanupUnneededNullsafeOperatorRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/NullsafeMethodCall/CleanupUnneededNullsafeOperatorRector.php @@ -9,8 +9,8 @@ use PhpParser\Node\Expr\NullsafeMethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Identifier; +use PHPStan\Type\ObjectType; use Rector\Rector\AbstractRector; -use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\TypeDeclaration\TypeAnalyzer\ReturnStrictTypeAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -84,12 +84,8 @@ public function refactor(Node $node) : ?Node if (!$node->var instanceof FuncCall && !$node->var instanceof MethodCall && !$node->var instanceof StaticCall) { return null; } - $returnNode = $this->returnStrictTypeAnalyzer->resolveMethodCallReturnNode($node->var); - if (!$returnNode instanceof Node) { - return null; - } - $type = $this->getType($returnNode); - if (!$type instanceof FullyQualifiedObjectType) { + $returnType = $this->returnStrictTypeAnalyzer->resolveMethodCallReturnType($node->var); + if (!$returnType instanceof ObjectType) { return null; } return new MethodCall($node->var, $node->name, $node->args); diff --git a/vendor/rector/rector/rules/CodeQuality/Rector/Ternary/ArrayKeyExistsTernaryThenValueToCoalescingRector.php b/vendor/rector/rector/rules/CodeQuality/Rector/Ternary/ArrayKeyExistsTernaryThenValueToCoalescingRector.php index 32c2bb07e..8c6a4140c 100644 --- a/vendor/rector/rector/rules/CodeQuality/Rector/Ternary/ArrayKeyExistsTernaryThenValueToCoalescingRector.php +++ b/vendor/rector/rector/rules/CodeQuality/Rector/Ternary/ArrayKeyExistsTernaryThenValueToCoalescingRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/f7itn - * * @see \Rector\Tests\CodeQuality\Rector\Ternary\ArrayKeyExistsTernaryThenValueToCoalescingRector\ArrayKeyExistsTernaryThenValueToCoalescingRectorTest */ final class ArrayKeyExistsTernaryThenValueToCoalescingRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodingStyle/Application/UseImportsAdder.php b/vendor/rector/rector/rules/CodingStyle/Application/UseImportsAdder.php index 442978b52..8d0142c10 100644 --- a/vendor/rector/rector/rules/CodingStyle/Application/UseImportsAdder.php +++ b/vendor/rector/rector/rules/CodingStyle/Application/UseImportsAdder.php @@ -3,10 +3,11 @@ declare (strict_types=1); namespace Rector\CodingStyle\Application; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Name; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Declare_; +use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Nop; use PhpParser\Node\Stmt\Use_; @@ -56,23 +57,28 @@ public function addImportsToStmts(FileWithoutNamespace $fileWithoutNamespace, ar } // place after declare strict_types foreach ($stmts as $key => $stmt) { - if ($stmt instanceof Declare_) { - if (isset($stmts[$key + 1]) && $stmts[$key + 1] instanceof Use_) { - $nodesToAdd = $newUses; - } else { - // add extra space, if there are no new use imports to be added - $nodesToAdd = \array_merge([new Nop()], $newUses); - } - $this->mirrorUseComments($stmts, $newUses, $key + 1); - \array_splice($stmts, $key + 1, 0, $nodesToAdd); - $fileWithoutNamespace->stmts = $stmts; - $fileWithoutNamespace->stmts = \array_values($fileWithoutNamespace->stmts); - return [$fileWithoutNamespace]; + // maybe just added a space + if ($stmt instanceof Nop) { + continue; + } + // when we found a non-declare, directly stop + if (!$stmt instanceof Declare_) { + break; + } + $nodesToAdd = \array_merge([new Nop()], $newUses); + $this->mirrorUseComments($stmts, $newUses, $key + 1); + // remove space before next use tweak + if (isset($stmts[$key + 1]) && ($stmts[$key + 1] instanceof Use_ || $stmts[$key + 1] instanceof GroupUse)) { + $stmts[$key + 1]->setAttribute(AttributeKey::ORIGINAL_NODE, null); } + \array_splice($stmts, $key + 1, 0, $nodesToAdd); + $fileWithoutNamespace->stmts = $stmts; + $fileWithoutNamespace->stmts = \array_values($fileWithoutNamespace->stmts); + return [$fileWithoutNamespace]; } $this->mirrorUseComments($stmts, $newUses); // make use stmts first - $fileWithoutNamespace->stmts = \array_merge($newUses, $stmts); + $fileWithoutNamespace->stmts = \array_merge($newUses, $this->resolveInsertNop($fileWithoutNamespace), $stmts); $fileWithoutNamespace->stmts = \array_values($fileWithoutNamespace->stmts); return [$fileWithoutNamespace]; } @@ -97,9 +103,21 @@ public function addImportsToNamespace(Namespace_ $namespace, array $useImportTyp return; } $this->mirrorUseComments($namespace->stmts, $newUses); - $namespace->stmts = \array_merge($newUses, $namespace->stmts); + $namespace->stmts = \array_merge($newUses, $this->resolveInsertNop($namespace), $namespace->stmts); $namespace->stmts = \array_values($namespace->stmts); } + /** + * @return Nop[] + * @param \Rector\PhpParser\Node\CustomNode\FileWithoutNamespace|\PhpParser\Node\Stmt\Namespace_ $namespace + */ + private function resolveInsertNop($namespace) : array + { + $currentStmt = $namespace->stmts[0] ?? null; + if (!$currentStmt instanceof Stmt || $currentStmt instanceof Use_ || $currentStmt instanceof GroupUse) { + return []; + } + return [new Nop()]; + } /** * @param Stmt[] $stmts * @param Use_[] $newUses @@ -113,7 +131,7 @@ private function mirrorUseComments(array $stmts, array $newUses, int $indexStmt $comments = (array) $stmts[$indexStmt]->getAttribute(AttributeKey::COMMENTS); if ($comments !== []) { $newUses[0]->setAttribute(AttributeKey::COMMENTS, $stmts[$indexStmt]->getAttribute(AttributeKey::COMMENTS)); - $stmts[$indexStmt]->setAttribute(AttributeKey::COMMENTS, null); + $stmts[$indexStmt]->setAttribute(AttributeKey::COMMENTS, []); } } } diff --git a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/AliasUsesResolver.php b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/AliasUsesResolver.php index c40a51bbe..8eeb7e53c 100644 --- a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/AliasUsesResolver.php +++ b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/AliasUsesResolver.php @@ -9,6 +9,7 @@ use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; +use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; final class AliasUsesResolver { /** @@ -26,10 +27,10 @@ public function __construct(\Rector\CodingStyle\ClassNameImport\UseImportsTraver */ public function resolveFromNode(Node $node, array $stmts) : array { - if (!$node instanceof Namespace_) { - /** @var Namespace_[] $namespaces */ + if (!$node instanceof Namespace_ && !$node instanceof FileWithoutNamespace) { + /** @var Namespace_[]|FileWithoutNamespace[] $namespaces */ $namespaces = \array_filter($stmts, static function (Stmt $stmt) : bool { - return $stmt instanceof Namespace_; + return $stmt instanceof Namespace_ || $stmt instanceof FileWithoutNamespace; }); if (\count($namespaces) !== 1) { return []; diff --git a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/FullyQualifiedNameClassNameImportSkipVoter.php b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/FullyQualifiedNameClassNameImportSkipVoter.php index 7cf523212..08a5b80c4 100644 --- a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/FullyQualifiedNameClassNameImportSkipVoter.php +++ b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/FullyQualifiedNameClassNameImportSkipVoter.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use Rector\CodingStyle\ClassNameImport\ShortNameResolver; use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface; diff --git a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/UsesClassNameImportSkipVoter.php b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/UsesClassNameImportSkipVoter.php index b2f068aeb..58d0a0443 100644 --- a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/UsesClassNameImportSkipVoter.php +++ b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/UsesClassNameImportSkipVoter.php @@ -5,7 +5,6 @@ use PhpParser\Node; use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface; -use Rector\Configuration\RenamedClassesDataCollector; use Rector\PostRector\Collector\UseNodesToAddCollector; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\Application\File; @@ -23,24 +22,14 @@ final class UsesClassNameImportSkipVoter implements ClassNameImportSkipVoterInte * @var \Rector\PostRector\Collector\UseNodesToAddCollector */ private $useNodesToAddCollector; - /** - * @readonly - * @var \Rector\Configuration\RenamedClassesDataCollector - */ - private $renamedClassesDataCollector; - public function __construct(UseNodesToAddCollector $useNodesToAddCollector, RenamedClassesDataCollector $renamedClassesDataCollector) + public function __construct(UseNodesToAddCollector $useNodesToAddCollector) { $this->useNodesToAddCollector = $useNodesToAddCollector; - $this->renamedClassesDataCollector = $renamedClassesDataCollector; } public function shouldSkip(File $file, FullyQualifiedObjectType $fullyQualifiedObjectType, Node $node) : bool { - $useImportTypes = $this->useNodesToAddCollector->getUseImportTypesByNode($file, $node); + $useImportTypes = $this->useNodesToAddCollector->getUseImportTypesByNode($file); foreach ($useImportTypes as $useImportType) { - // if the class is renamed, the use import is no longer blocker - if ($this->renamedClassesDataCollector->hasOldClass($useImportType->getClassName())) { - continue; - } if (!$useImportType->equals($fullyQualifiedObjectType) && $useImportType->areShortNamesEqual($fullyQualifiedObjectType)) { return \true; } diff --git a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipper.php b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipper.php index f9e797464..57075fb38 100644 --- a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipper.php +++ b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/ClassNameImportSkipper.php @@ -5,12 +5,16 @@ use PhpParser\Node; use PhpParser\Node\Identifier; +use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface; +use Rector\Configuration\Option; +use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Naming\Naming\UseImportsResolver; +use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\Application\File; final class ClassNameImportSkipper @@ -43,12 +47,19 @@ public function shouldSkipNameForFullyQualifiedObjectType(File $file, Node $node return \false; } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ public function shouldSkipName(FullyQualified $fullyQualified, array $uses) : bool { - if (\substr_count($fullyQualified->toCodeString(), '\\') <= 1) { - return \false; + if (\substr_count($fullyQualified->toCodeString(), '\\') === 1) { + return $this->shouldSkipShortName($fullyQualified); + } + // verify long name, as short name verify may conflict + // see test PR: https://github.com/rectorphp/rector-src/pull/6208 + // ref https://3v4l.org/21H5j vs https://3v4l.org/GIHSB + $originalName = $fullyQualified->getAttribute(AttributeKey::ORIGINAL_NAME); + if ($originalName instanceof Name && $originalName->getLast() === $originalName->toString()) { + return \true; } $stringName = $fullyQualified->toString(); $lastUseName = $fullyQualified->getLast(); @@ -69,6 +80,28 @@ public function shouldSkipName(FullyQualified $fullyQualified, array $uses) : bo } return \false; } + private function shouldSkipShortName(FullyQualified $fullyQualified) : bool + { + // is scalar name? + if (\in_array($fullyQualified->toLowerString(), ['true', 'false', 'bool'], \true)) { + return \true; + } + if ($fullyQualified->isSpecialClassName()) { + return \true; + } + if ($this->isFunctionOrConstantImport($fullyQualified)) { + return \true; + } + // Importing root namespace classes (like \DateTime) is optional + return !SimpleParameterProvider::provideBoolParameter(Option::IMPORT_SHORT_CLASSES); + } + private function isFunctionOrConstantImport(FullyQualified $fullyQualified) : bool + { + if ($fullyQualified->getAttribute(AttributeKey::IS_CONSTFETCH_NAME) === \true) { + return \true; + } + return $fullyQualified->getAttribute(AttributeKey::IS_FUNCCALL_NAME) === \true; + } private function isConflictedShortNameInUse(UseUse $useUse, string $useName, string $lastUseName, string $stringName) : bool { if (!$useUse->alias instanceof Identifier && $useName !== $stringName && $lastUseName === $stringName) { diff --git a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php index fe44489ea..0872c49a1 100644 --- a/vendor/rector/rector/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php +++ b/vendor/rector/rector/rules/CodingStyle/ClassNameImport/UseImportsTraverser.php @@ -3,31 +3,22 @@ declare (strict_types=1); namespace Rector\CodingStyle\ClassNameImport; -use PhpParser\Node; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; -use PhpParser\NodeTraverser; use Rector\NodeNameResolver\NodeNameResolver; -use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; final class UseImportsTraverser { - /** - * @readonly - * @var \Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser - */ - private $simpleCallableNodeTraverser; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; - public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeNameResolver $nodeNameResolver) + public function __construct(NodeNameResolver $nodeNameResolver) { - $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->nodeNameResolver = $nodeNameResolver; } /** @@ -36,24 +27,25 @@ public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTrave */ public function traverserStmts(array $stmts, callable $callable) : void { - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($stmts, function (Node $node) use($callable) : ?int { - if ($node instanceof Namespace_ || $node instanceof FileWithoutNamespace) { - // traverse into namespaces - return null; + foreach ($stmts as $stmt) { + if ($stmt instanceof Namespace_ || $stmt instanceof FileWithoutNamespace) { + $this->traverserStmts($stmt->stmts, $callable); + continue; } - if ($node instanceof Use_) { - foreach ($node->uses as $useUse) { + if ($stmt instanceof Use_) { + foreach ($stmt->uses as $useUse) { $name = $this->nodeNameResolver->getName($useUse); if ($name === null) { continue; } - $callable($node->type, $useUse, $name); + $callable($stmt->type, $useUse, $name); } - } elseif ($node instanceof GroupUse) { - $this->processGroupUse($node, $callable); + continue; } - return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - }); + if ($stmt instanceof GroupUse) { + $this->processGroupUse($stmt, $callable); + } + } } /** * @param callable(Use_::TYPE_* $useType, UseUse $useUse, string $name): void $callable diff --git a/vendor/rector/rector/rules/CodingStyle/Naming/ClassNaming.php b/vendor/rector/rector/rules/CodingStyle/Naming/ClassNaming.php index 37d2ca195..30e1cff5e 100644 --- a/vendor/rector/rector/rules/CodingStyle/Naming/ClassNaming.php +++ b/vendor/rector/rector/rules/CodingStyle/Naming/ClassNaming.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodingStyle\Naming; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Stmt\ClassLike; diff --git a/vendor/rector/rector/rules/CodingStyle/Node/NameImporter.php b/vendor/rector/rector/rules/CodingStyle/Node/NameImporter.php index b963787ad..fa278619b 100644 --- a/vendor/rector/rector/rules/CodingStyle/Node/NameImporter.php +++ b/vendor/rector/rector/rules/CodingStyle/Node/NameImporter.php @@ -3,14 +3,16 @@ declare (strict_types=1); namespace Rector\CodingStyle\Node; +use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; +use PhpParser\Node\Stmt\GroupUse; +use PhpParser\Node\Stmt\Use_; use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipper; -use Rector\Configuration\Option; -use Rector\Configuration\Parameter\SimpleParameterProvider; +use Rector\Naming\Naming\AliasNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PostRector\Collector\UseNodesToAddCollector; -use Rector\StaticTypeMapper\StaticTypeMapper; +use Rector\StaticTypeMapper\PhpParser\FullyQualifiedNodeMapper; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\Application\File; final class NameImporter @@ -22,55 +24,76 @@ final class NameImporter private $classNameImportSkipper; /** * @readonly - * @var \Rector\StaticTypeMapper\StaticTypeMapper + * @var \Rector\StaticTypeMapper\PhpParser\FullyQualifiedNodeMapper */ - private $staticTypeMapper; + private $fullyQualifiedNodeMapper; /** * @readonly * @var \Rector\PostRector\Collector\UseNodesToAddCollector */ private $useNodesToAddCollector; - public function __construct(ClassNameImportSkipper $classNameImportSkipper, StaticTypeMapper $staticTypeMapper, UseNodesToAddCollector $useNodesToAddCollector) + /** + * @readonly + * @var \Rector\Naming\Naming\AliasNameResolver + */ + private $aliasNameResolver; + public function __construct(ClassNameImportSkipper $classNameImportSkipper, FullyQualifiedNodeMapper $fullyQualifiedNodeMapper, UseNodesToAddCollector $useNodesToAddCollector, AliasNameResolver $aliasNameResolver) { $this->classNameImportSkipper = $classNameImportSkipper; - $this->staticTypeMapper = $staticTypeMapper; + $this->fullyQualifiedNodeMapper = $fullyQualifiedNodeMapper; $this->useNodesToAddCollector = $useNodesToAddCollector; + $this->aliasNameResolver = $aliasNameResolver; } - public function importName(FullyQualified $fullyQualified, File $file) : ?Name + /** + * @param array $currentUses + */ + public function importName(FullyQualified $fullyQualified, File $file, array $currentUses) : ?Name { - if ($this->shouldSkipName($fullyQualified)) { + if ($this->classNameImportSkipper->shouldSkipName($fullyQualified, $currentUses)) { return null; } - $staticType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($fullyQualified); + $staticType = $this->fullyQualifiedNodeMapper->mapToPHPStan($fullyQualified); if (!$staticType instanceof FullyQualifiedObjectType) { return null; } - return $this->importNameAndCollectNewUseStatement($file, $fullyQualified, $staticType); + return $this->importNameAndCollectNewUseStatement($file, $fullyQualified, $staticType, $currentUses); } - private function shouldSkipName(FullyQualified $fullyQualified) : bool + /** + * @param array $currentUses + */ + private function resolveNameInUse(FullyQualified $fullyQualified, array $currentUses) : ?Name { - $virtualNode = (bool) $fullyQualified->getAttribute(AttributeKey::VIRTUAL_NODE); - if ($virtualNode) { - return \true; + $aliasName = $this->aliasNameResolver->resolveByName($fullyQualified, $currentUses); + if (\is_string($aliasName)) { + return new Name($aliasName); } - // is scalar name? - if (\in_array($fullyQualified->toLowerString(), ['true', 'false', 'bool'], \true)) { - return \true; - } - if ($this->isFunctionOrConstantImportWithSingleName($fullyQualified)) { - return \true; + if (\substr_count($fullyQualified->toCodeString(), '\\') === 1) { + return null; } - // Importing root namespace classes (like \DateTime) is optional - if (!SimpleParameterProvider::provideBoolParameter(Option::IMPORT_SHORT_CLASSES)) { - $stringName = $fullyQualified->toString(); - if (\substr_count($stringName, '\\') === 0) { - return \true; + $lastName = $fullyQualified->getLast(); + foreach ($currentUses as $currentUse) { + foreach ($currentUse->uses as $useUse) { + if ($useUse->name->getLast() !== $lastName) { + continue; + } + if ($useUse->alias instanceof Identifier && $useUse->alias->toString() !== $lastName) { + return new Name($lastName); + } } } - return \false; + return null; } - private function importNameAndCollectNewUseStatement(File $file, FullyQualified $fullyQualified, FullyQualifiedObjectType $fullyQualifiedObjectType) : ?Name + /** + * @param array $currentUses + */ + private function importNameAndCollectNewUseStatement(File $file, FullyQualified $fullyQualified, FullyQualifiedObjectType $fullyQualifiedObjectType, array $currentUses) : ?Name { + // make use of existing use import + $nameInUse = $this->resolveNameInUse($fullyQualified, $currentUses); + if ($nameInUse instanceof Name) { + $nameInUse->setAttribute(AttributeKey::NAMESPACED_NAME, $fullyQualified->toString()); + return $nameInUse; + } // the same end is already imported → skip if ($this->classNameImportSkipper->shouldSkipNameForFullyQualifiedObjectType($file, $fullyQualified, $fullyQualifiedObjectType)) { return null; @@ -84,16 +107,6 @@ private function importNameAndCollectNewUseStatement(File $file, FullyQualified $this->addUseImport($file, $fullyQualified, $fullyQualifiedObjectType); return $fullyQualifiedObjectType->getShortNameNode(); } - private function isFunctionOrConstantImportWithSingleName(FullyQualified $fullyQualified) : bool - { - if ($fullyQualified->getAttribute(AttributeKey::IS_CONSTFETCH_NAME) === \true) { - return \count($fullyQualified->getParts()) === 1; - } - if ($fullyQualified->getAttribute(AttributeKey::IS_FUNCCALL_NAME) === \true) { - return \count($fullyQualified->getParts()) === 1; - } - return \false; - } private function addUseImport(File $file, FullyQualified $fullyQualified, FullyQualifiedObjectType $fullyQualifiedObjectType) : void { if ($this->useNodesToAddCollector->hasImport($file, $fullyQualified, $fullyQualifiedObjectType)) { diff --git a/vendor/rector/rector/rules/CodingStyle/NodeAnalyzer/UseImportNameMatcher.php b/vendor/rector/rector/rules/CodingStyle/NodeAnalyzer/UseImportNameMatcher.php index f1b78c768..58c887936 100644 --- a/vendor/rector/rector/rules/CodingStyle/NodeAnalyzer/UseImportNameMatcher.php +++ b/vendor/rector/rector/rules/CodingStyle/NodeAnalyzer/UseImportNameMatcher.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodingStyle\NodeAnalyzer; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\GroupUse; @@ -48,7 +48,7 @@ public function matchNameWithStmts(string $tag, array $stmts) : ?string return $this->matchNameWithUses($tag, $uses); } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ public function matchNameWithUses(string $tag, array $uses) : ?string { diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Assign/SplitDoubleAssignRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Assign/SplitDoubleAssignRector.php index b78173372..72bece791 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/Assign/SplitDoubleAssignRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/Assign/SplitDoubleAssignRector.php @@ -60,8 +60,8 @@ public function refactor(Node $node) : ?array if (!$firstAssign->expr instanceof Assign) { return null; } - $lastAssignValue = $this->resolveLastAssignExpr($firstAssign); - $collectExpressions = $this->collectExpressions($firstAssign, $lastAssignValue); + $expr = $this->resolveLastAssignExpr($firstAssign); + $collectExpressions = $this->collectExpressions($firstAssign, $expr); if ($collectExpressions === []) { return null; } diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Catch_/CatchExceptionNameMatchingTypeRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Catch_/CatchExceptionNameMatchingTypeRector.php index 458c68d79..a81e7022f 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/Catch_/CatchExceptionNameMatchingTypeRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/Catch_/CatchExceptionNameMatchingTypeRector.php @@ -3,11 +3,12 @@ declare (strict_types=1); namespace Rector\CodingStyle\Rector\Catch_; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; +use PhpParser\Node\Name; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Catch_; use PhpParser\Node\Stmt\ClassMethod; @@ -17,9 +18,7 @@ use PhpParser\NodeTraverser; use PHPStan\Analyser\Scope; use PHPStan\Type\ObjectType; -use Rector\Naming\Naming\AliasNameResolver; use Rector\Naming\Naming\PropertyNaming; -use Rector\Naming\Naming\UseImportsResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\Rector\AbstractRector; @@ -35,53 +34,29 @@ final class CatchExceptionNameMatchingTypeRector extends AbstractRector * @var \Rector\Naming\Naming\PropertyNaming */ private $propertyNaming; - /** - * @readonly - * @var \Rector\Naming\Naming\AliasNameResolver - */ - private $aliasNameResolver; - /** - * @readonly - * @var \Rector\Naming\Naming\UseImportsResolver - */ - private $useImportsResolver; /** * @var string * @see https://regex101.com/r/xmfMAX/1 */ private const STARTS_WITH_ABBREVIATION_REGEX = '#^([A-Za-z]+?)([A-Z]{1}[a-z]{1})([A-Za-z]*)#'; - public function __construct(PropertyNaming $propertyNaming, AliasNameResolver $aliasNameResolver, UseImportsResolver $useImportsResolver) + public function __construct(PropertyNaming $propertyNaming) { $this->propertyNaming = $propertyNaming; - $this->aliasNameResolver = $aliasNameResolver; - $this->useImportsResolver = $useImportsResolver; } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Type and name of catch exception should match', [new CodeSample(<<<'CODE_SAMPLE' -class SomeClass -{ - public function run() - { - try { - // ... - } catch (SomeException $typoException) { - $typoException->getMessage(); - } - } +try { + // ... +} catch (SomeException $typoException) { + $typoException->getMessage(); } CODE_SAMPLE , <<<'CODE_SAMPLE' -class SomeClass -{ - public function run() - { - try { - // ... - } catch (SomeException $someException) { - $someException->getMessage(); - } - } +try { + // ... +} catch (SomeException $someException) { + $someException->getMessage(); } CODE_SAMPLE )]); @@ -102,7 +77,6 @@ public function refactor(Node $node) : ?Node return null; } $hasChanged = \false; - $uses = null; foreach ($node->stmts as $key => $stmt) { if ($this->shouldSkip($stmt)) { continue; @@ -118,15 +92,7 @@ public function refactor(Node $node) : ?Node $catchVar = $catch->var; /** @var string $oldVariableName */ $oldVariableName = (string) $this->getName($catchVar); - if ($uses === null) { - $uses = $this->useImportsResolver->resolve(); - } - $type = $catch->types[0]; - $typeShortName = $this->nodeNameResolver->getShortName($type); - $aliasName = $this->aliasNameResolver->resolveByName($type, $uses); - if (\is_string($aliasName)) { - $typeShortName = $aliasName; - } + $typeShortName = $this->resolveVariableName($catch->types[0]); $newVariableName = $this->resolveNewVariableName($typeShortName); $objectType = new ObjectType($newVariableName); $newVariableName = $this->propertyNaming->fqnToVariableName($objectType); @@ -220,4 +186,13 @@ private function replaceNextUsageVariable(string $oldVariableName, string $newVa $key += 2; $this->replaceNextUsageVariable($oldVariableName, $newVariableName, $key, $stmts, $nextNode); } + private function resolveVariableName(Name $name) : string + { + $originalName = $name->getAttribute(AttributeKey::ORIGINAL_NAME); + // this allows to respect the name alias, if used + if ($originalName instanceof Name) { + return $originalName->toString(); + } + return $name->toString(); + } } diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php index 14b4b8789..748c8161d 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://php.watch/versions/8.1/final-class-const - * * @see \Rector\Tests\CodingStyle\Rector\ClassConst\RemoveFinalFromConstRector\RemoveFinalFromConstRectorTest */ final class RemoveFinalFromConstRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php index 4cc485970..720552e33 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php @@ -20,8 +20,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/d4tBd - * * @see \Rector\Tests\CodingStyle\Rector\ClassMethod\FuncGetArgsToVariadicParamRector\FuncGetArgsToVariadicParamRectorTest */ final class FuncGetArgsToVariadicParamRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/MakeInheritedMethodVisibilitySameAsParentRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/MakeInheritedMethodVisibilitySameAsParentRector.php index 9894fb534..28b8c779c 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/MakeInheritedMethodVisibilitySameAsParentRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/ClassMethod/MakeInheritedMethodVisibilitySameAsParentRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/RFYmn - * * @see \Rector\Tests\CodingStyle\Rector\ClassMethod\MakeInheritedMethodVisibilitySameAsParentRector\MakeInheritedMethodVisibilitySameAsParentRectorTest */ final class MakeInheritedMethodVisibilitySameAsParentRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Encapsed/EncapsedStringsToSprintfRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Encapsed/EncapsedStringsToSprintfRector.php index b8f8178a3..374869ac5 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/Encapsed/EncapsedStringsToSprintfRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/Encapsed/EncapsedStringsToSprintfRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodingStyle\Rector\Encapsed; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Arg; use PhpParser\Node\Expr; @@ -16,19 +16,29 @@ use PhpParser\Node\Scalar\EncapsedStringPart; use PhpParser\Node\Scalar\String_; use PHPStan\Type\Type; +use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; +use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\CodingStyle\Rector\Encapsed\EncapsedStringsToSprintfRector\EncapsedStringsToSprintfRectorTest */ -final class EncapsedStringsToSprintfRector extends AbstractRector +final class EncapsedStringsToSprintfRector extends AbstractRector implements ConfigurableRectorInterface { + /** + * @api + * @var string + */ + public const ALWAYS = 'always'; /** * @var array>> */ private const FORMAT_SPECIFIERS = ['%s' => ['PHPStan\\Type\\StringType'], '%d' => ['PHPStan\\Type\\Constant\\ConstantIntegerType', 'PHPStan\\Type\\IntegerRangeType', 'PHPStan\\Type\\IntegerType']]; + /** + * @var bool + */ + private $always = \false; /** * @var string */ @@ -37,9 +47,13 @@ final class EncapsedStringsToSprintfRector extends AbstractRector * @var Expr[] */ private $argumentVariables = []; + public function configure(array $configuration) : void + { + $this->always = $configuration[self::ALWAYS] ?? \false; + } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Convert enscaped {$string} to more readable sprintf or concat, if no mask is used', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Convert enscaped {$string} to more readable sprintf or concat, if no mask is used', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' echo "Unsupported format {$format} - use another"; echo "Try {$allowed}"; @@ -49,7 +63,17 @@ public function getRuleDefinition() : RuleDefinition echo 'Try ' . $allowed; CODE_SAMPLE -)]); +, [self::ALWAYS => \false]), new ConfiguredCodeSample(<<<'CODE_SAMPLE' +echo "Unsupported format {$format} - use another"; + +echo "Try {$allowed}"; +CODE_SAMPLE +, <<<'CODE_SAMPLE' +echo sprintf('Unsupported format %s - use another', $format); + +echo sprintf('Try %s', $allowed); +CODE_SAMPLE +, [self::ALWAYS => \true])]); } /** * @return array> @@ -124,15 +148,18 @@ private function createSprintfFuncCallOrConcat(string $mask, array $argumentVari } return $this->nodeFactory->createConcat($argumentVariables); } - $singleValueConcat = $this->createSingleValueEdgeConcat($argumentVariables, $mask); - if ($singleValueConcat instanceof Concat) { - return $singleValueConcat; + if (!$this->always) { + $singleValueConcat = $this->createSingleValueEdgeConcat($argumentVariables, $mask); + if ($singleValueConcat instanceof Concat) { + return $singleValueConcat; + } } // checks for windows or linux line ending. \n is contained in both. if (\strpos($mask, "\n") !== \false) { return null; } - $arguments = [new Arg(new String_($mask))]; + $string = $this->createString($mask); + $arguments = [new Arg($string)]; foreach ($argumentVariables as $argumentVariable) { $arguments[] = new Arg($argumentVariable); } @@ -160,4 +187,9 @@ private function createSingleValueEdgeConcat(array $argumentVariables, string $m } return null; } + private function createString(string $value) : String_ + { + $kind = \strpos($value, "'") !== \false ? String_::KIND_DOUBLE_QUOTED : String_::KIND_SINGLE_QUOTED; + return new String_($value, ['kind' => $kind]); + } } diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Foreach_/MultiDimensionalArrayToArrayDestructRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Foreach_/MultiDimensionalArrayToArrayDestructRector.php new file mode 100644 index 000000000..ba4b2ac4b --- /dev/null +++ b/vendor/rector/rector/rules/CodingStyle/Rector/Foreach_/MultiDimensionalArrayToArrayDestructRector.php @@ -0,0 +1,170 @@ +nodeFinder = $nodeFinder; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change multidimensional array access in foreach to array destruct', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + /** + * @param array $users + */ + public function run(array $users) + { + foreach ($users as $user) { + echo $user['id']; + echo sprintf('Name: %s', $user['name']); + } + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + /** + * @param array $users + */ + public function run(array $users) + { + foreach ($users as ['id' => $id, 'name' => $name]) { + echo $id; + echo sprintf('Name: %s', $name); + } + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Foreach_::class]; + } + /** + * @param Foreach_ $node + */ + public function refactor(Node $node) : ?Node + { + $usedDestructedValues = $this->replaceValueArrayAccessorsInForeachTree($node); + if ($usedDestructedValues !== []) { + $node->valueVar = new Array_($this->getArrayItems($usedDestructedValues)); + return $node; + } + return null; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::ARRAY_DESTRUCT; + } + /** + * Go through the foreach tree and replace array accessors on "foreach variable" + * with variables which will be created for array destructor. + * + * @return array List of destructor variables we need to create in format array key name => variable name + */ + private function replaceValueArrayAccessorsInForeachTree(Foreach_ $foreach) : array + { + $usedVariableNames = $this->getUsedVariableNamesInForeachTree($foreach); + $createdDestructedVariables = []; + $this->traverseNodesWithCallable($foreach->stmts, function (Node $traverseNode) use($foreach, $usedVariableNames, &$createdDestructedVariables) { + if (!$traverseNode instanceof ArrayDimFetch) { + return null; + } + if ($this->nodeComparator->areNodesEqual($traverseNode->var, $foreach->valueVar) === \false) { + return null; + } + $dim = $traverseNode->dim; + if (!$dim instanceof String_) { + $createdDestructedVariables = []; + return NodeTraverser::STOP_TRAVERSAL; + } + $destructedVariable = $this->getDestructedVariableName($usedVariableNames, $dim); + $createdDestructedVariables[$dim->value] = $destructedVariable; + return new Variable($destructedVariable); + }); + return $createdDestructedVariables; + } + /** + * Get all variable names which are used in the foreach tree. We need this so that we don't create array destructor + * with variable name which is already used somewhere bellow + * + * @return list + */ + private function getUsedVariableNamesInForeachTree(Foreach_ $foreach) : array + { + /** @var list $variableNodes */ + $variableNodes = $this->nodeFinder->findInstanceOf($foreach, Variable::class); + return \array_unique(\array_map(function (Variable $variable) : string { + return (string) $this->getName($variable); + }, $variableNodes)); + } + /** + * Get variable name that will be used for destructor syntax. If variable name is already occupied + * it will find the first name available by adding numbers after the variable name + * + * @param list $usedVariableNames + */ + private function getDestructedVariableName(array $usedVariableNames, String_ $string) : string + { + $desiredVariableName = (string) $string->value; + if (\in_array($desiredVariableName, $usedVariableNames, \true) === \false) { + return $desiredVariableName; + } + $i = 1; + $variableName = \sprintf('%s%s', $desiredVariableName, $i); + while (\in_array($variableName, $usedVariableNames, \true)) { + ++$i; + $variableName = \sprintf('%s%s', $desiredVariableName, $i); + } + return $variableName; + } + /** + * Convert key-value pairs to ArrayItem instances + * + * @param array $usedDestructedValues + * + * @return list + */ + private function getArrayItems(array $usedDestructedValues) : array + { + $items = []; + foreach ($usedDestructedValues as $key => $value) { + $items[] = new ArrayItem(new Variable($value), new String_($key)); + } + return $items; + } +} diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ArraySpreadInsteadOfArrayMergeRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ArraySpreadInsteadOfArrayMergeRector.php index 50111e832..e96bb29e4 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ArraySpreadInsteadOfArrayMergeRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ArraySpreadInsteadOfArrayMergeRector.php @@ -20,8 +20,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/spread_operator_for_array - * * @see \Rector\Tests\CodingStyle\Rector\FuncCall\ArraySpreadInsteadOfArrayMergeRector\Php74ArraySpreadInsteadOfArrayMergeRectorTest * @see \Rector\Tests\CodingStyle\Rector\FuncCall\ArraySpreadInsteadOfArrayMergeRector\Php81ArraySpreadInsteadOfArrayMergeRectorTest */ diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncArrayToVariadicRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncArrayToVariadicRector.php index 25664c51b..eee075a25 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncArrayToVariadicRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncArrayToVariadicRector.php @@ -18,9 +18,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/manual/en/function.call-user-func-array.php#117655 - * @changelog https://3v4l.org/CBWt9 - * * @see \Rector\Tests\CodingStyle\Rector\FuncCall\CallUserFuncArrayToVariadicRector\CallUserFuncArrayToVariadicRectorTest */ final class CallUserFuncArrayToVariadicRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncToMethodCallRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncToMethodCallRector.php index 1facd7984..41f8aafa9 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncToMethodCallRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/CallUserFuncToMethodCallRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/a/1596250/1348344 - * * @see \Rector\Tests\CodingStyle\Rector\FuncCall\CallUserFuncToMethodCallRector\CallUserFuncToMethodCallRectorTest */ final class CallUserFuncToMethodCallRector extends AbstractRector diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ConsistentImplodeRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ConsistentImplodeRector.php index 1f7c6d8dd..0292388c4 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ConsistentImplodeRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/ConsistentImplodeRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/function.implode.php#refsect1-function.implode-description - * @changelog https://3v4l.org/iYTgh * @see \Rector\Tests\CodingStyle\Rector\FuncCall\ConsistentImplodeRector\ConsistentImplodeRectorTest */ final class ConsistentImplodeRector extends AbstractRector @@ -63,7 +61,7 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->isName($node, 'implode')) { + if (!$this->isNames($node, ['implode', 'join'])) { return null; } if ($node->isFirstClassCallable()) { diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php new file mode 100644 index 000000000..524ec2650 --- /dev/null +++ b/vendor/rector/rector/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php @@ -0,0 +1,96 @@ +> + */ + public function getNodeTypes() : array + { + return [FuncCall::class]; + } + public function refactorWithScope(Node $node, Scope $scope) : ?FuncCall + { + if (!$node instanceof FuncCall) { + return null; + } + if (!$node->name instanceof Name) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + $functionName = (string) $this->getName($node); + try { + $reflectionFunction = new ReflectionFunction($functionName); + } catch (ReflectionException $exception) { + return null; + } + $callableArgs = []; + foreach ($reflectionFunction->getParameters() as $reflectionParameter) { + if ($reflectionParameter->getType() instanceof ReflectionNamedType && $reflectionParameter->getType()->getName() === 'callable') { + $callableArgs[] = $reflectionParameter->getPosition(); + } + } + $hasChanged = \false; + foreach ($node->getArgs() as $key => $arg) { + if (!\in_array($key, $callableArgs, \true)) { + continue; + } + if (!$arg->value instanceof String_) { + continue; + } + $node->args[$key] = new Arg(new FuncCall(new Name($arg->value->value), [new VariadicPlaceholder()]), \false, \false, [], $arg->name); + $hasChanged = \true; + } + return $hasChanged ? $node : null; + } + public function provideMinPhpVersion() : int + { + return PhpVersion::PHP_81; + } +} diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Plus/UseIncrementAssignRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Plus/UseIncrementAssignRector.php deleted file mode 100644 index 7f1fef572..000000000 --- a/vendor/rector/rector/rules/CodingStyle/Rector/Plus/UseIncrementAssignRector.php +++ /dev/null @@ -1,65 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [Plus::class, Minus::class]; - } - /** - * @param Plus|Minus $node - */ - public function refactor(Node $node) : ?Node - { - if (!$node->expr instanceof LNumber) { - return null; - } - if ($node->expr->value !== 1) { - return null; - } - if ($node instanceof Plus) { - return new PreInc($node->var); - } - return new PreDec($node->var); - } -} diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Stmt/RemoveUselessAliasInUseStatementRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Stmt/RemoveUselessAliasInUseStatementRector.php index 9b6f07dfe..f1d93e4e4 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/Stmt/RemoveUselessAliasInUseStatementRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/Stmt/RemoveUselessAliasInUseStatementRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodingStyle\Rector\Stmt; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\Namespace_; diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/String_/UseClassKeywordForClassNameResolutionRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/String_/UseClassKeywordForClassNameResolutionRector.php index e2ecef775..990ebb79a 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/String_/UseClassKeywordForClassNameResolutionRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/String_/UseClassKeywordForClassNameResolutionRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\CodingStyle\Rector\String_; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Name\FullyQualified; @@ -76,7 +76,7 @@ public function refactor(Node $node) : ?Node */ private function getParts(String_ $string, array $classNames) : array { - $quotedClassNames = \array_map('preg_quote', $classNames); + $quotedClassNames = \array_map(\Closure::fromCallable('preg_quote'), $classNames); // @see https://regex101.com/r/8nGS0F/1 $parts = Strings::split($string->value, '#(' . \implode('|', $quotedClassNames) . ')#'); return \array_filter($parts, static function (string $className) : bool { diff --git a/vendor/rector/rector/rules/CodingStyle/Rector/Use_/SeparateMultiUseImportsRector.php b/vendor/rector/rector/rules/CodingStyle/Rector/Use_/SeparateMultiUseImportsRector.php index 1469e114d..5b630d61b 100644 --- a/vendor/rector/rector/rules/CodingStyle/Rector/Use_/SeparateMultiUseImportsRector.php +++ b/vendor/rector/rector/rules/CodingStyle/Rector/Use_/SeparateMultiUseImportsRector.php @@ -4,9 +4,11 @@ namespace Rector\CodingStyle\Rector\Use_; use PhpParser\Node; +use PhpParser\Node\Name; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\TraitUse; +use PhpParser\Node\Stmt\TraitUseAdaptation\Alias; use PhpParser\Node\Stmt\Use_; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\Rector\AbstractRector; @@ -101,7 +103,13 @@ private function refactorTraitUse(TraitUse $traitUse) : ?array } $traitUses = []; foreach ($traitUse->traits as $singleTraitUse) { - $traitUses[] = new TraitUse([$singleTraitUse]); + $adaptation = []; + foreach ($traitUse->adaptations as $traitAdaptation) { + if ($traitAdaptation instanceof Alias && $traitAdaptation->trait && $traitAdaptation->trait instanceof Name && $traitAdaptation->trait->toString() === $singleTraitUse->toString()) { + $adaptation[] = $traitAdaptation; + } + } + $traitUses[] = new TraitUse([$singleTraitUse], $adaptation); } return $traitUses; } diff --git a/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php b/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php index dc4758b48..866a81de2 100644 --- a/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php +++ b/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/CallCollectionAnalyzer.php @@ -6,8 +6,10 @@ use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\NullsafeMethodCall; use PhpParser\Node\Expr\StaticCall; +use PhpParser\Node\Expr\Variable; use PhpParser\Node\Identifier; use PhpParser\Node\Name; +use PHPStan\Type\MixedType; use PHPStan\Type\TypeWithClassName; use Rector\Enum\ObjectReference; use Rector\NodeNameResolver\NodeNameResolver; @@ -38,6 +40,27 @@ public function isExists(array $calls, string $classMethodName, string $classNam $callerRoot = $call instanceof StaticCall ? $call->class : $call->var; $callerType = $this->nodeTypeResolver->getType($callerRoot); if (!$callerType instanceof TypeWithClassName) { + // handle fluent by $this->bar()->baz()->qux() + // that methods don't have return type + if ($callerType instanceof MixedType && !$callerType->isExplicitMixed()) { + $cloneCallerRoot = clone $callerRoot; + $isFluent = \false; + // init + $methodCallNames = []; + // first append + $methodCallNames[] = (string) $this->nodeNameResolver->getName($call->name); + while ($cloneCallerRoot instanceof MethodCall) { + $methodCallNames[] = (string) $this->nodeNameResolver->getName($cloneCallerRoot->name); + if ($cloneCallerRoot->var instanceof Variable && $cloneCallerRoot->var->name === 'this') { + $isFluent = \true; + break; + } + $cloneCallerRoot = $cloneCallerRoot->var; + } + if ($isFluent && \in_array($classMethodName, $methodCallNames, \true)) { + return \true; + } + } continue; } if ($this->isSelfStatic($call) && $this->shouldSkip($call, $classMethodName)) { diff --git a/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/ExprUsedInNodeAnalyzer.php b/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/ExprUsedInNodeAnalyzer.php index d35e0deb9..484aa23b0 100644 --- a/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/ExprUsedInNodeAnalyzer.php +++ b/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/ExprUsedInNodeAnalyzer.php @@ -4,11 +4,11 @@ namespace Rector\DeadCode\NodeAnalyzer; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\Include_; use PhpParser\Node\Expr\Variable; use Rector\NodeAnalyzer\CompactFuncCallAnalyzer; -use Rector\PhpParser\Printer\BetterStandardPrinter; final class ExprUsedInNodeAnalyzer { /** @@ -21,16 +21,10 @@ final class ExprUsedInNodeAnalyzer * @var \Rector\NodeAnalyzer\CompactFuncCallAnalyzer */ private $compactFuncCallAnalyzer; - /** - * @readonly - * @var \Rector\PhpParser\Printer\BetterStandardPrinter - */ - private $betterStandardPrinter; - public function __construct(\Rector\DeadCode\NodeAnalyzer\UsedVariableNameAnalyzer $usedVariableNameAnalyzer, CompactFuncCallAnalyzer $compactFuncCallAnalyzer, BetterStandardPrinter $betterStandardPrinter) + public function __construct(\Rector\DeadCode\NodeAnalyzer\UsedVariableNameAnalyzer $usedVariableNameAnalyzer, CompactFuncCallAnalyzer $compactFuncCallAnalyzer) { $this->usedVariableNameAnalyzer = $usedVariableNameAnalyzer; $this->compactFuncCallAnalyzer = $compactFuncCallAnalyzer; - $this->betterStandardPrinter = $betterStandardPrinter; } public function isUsed(Node $node, Variable $variable) : bool { @@ -38,11 +32,8 @@ public function isUsed(Node $node, Variable $variable) : bool return \true; } // variable as variable variable need mark as used - if ($node instanceof Variable) { - $print = $this->betterStandardPrinter->print($node); - if (\strncmp($print, '${$', \strlen('${$')) === 0) { - return \true; - } + if ($node instanceof Variable && $node->name instanceof Expr) { + return \true; } if ($node instanceof FuncCall) { return $this->compactFuncCallAnalyzer->isInCompact($node, $variable); diff --git a/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/IsClassMethodUsedAnalyzer.php b/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/IsClassMethodUsedAnalyzer.php index 425ae30f3..2291ebd03 100644 --- a/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/IsClassMethodUsedAnalyzer.php +++ b/vendor/rector/rector/rules/DeadCode/NodeAnalyzer/IsClassMethodUsedAnalyzer.php @@ -121,7 +121,7 @@ private function isClassMethodCalledInLocalMethodCall(Class_ $class, string $cla private function isClassMethodCalledInLocalNullsafeMethodCall(Class_ $class, string $classMethodName) : bool { $className = (string) $this->nodeNameResolver->getName($class); - /** @var Node\Expr\NullsafeMethodCall[] $methodCalls */ + /** @var NullsafeMethodCall[] $methodCalls */ $methodCalls = $this->betterNodeFinder->findInstanceOf($class, NullsafeMethodCall::class); return $this->callCollectionAnalyzer->isExists($methodCalls, $classMethodName, $className); } diff --git a/vendor/rector/rector/rules/DeadCode/NodeManipulator/ClassMethodParamRemover.php b/vendor/rector/rector/rules/DeadCode/NodeManipulator/ClassMethodParamRemover.php new file mode 100644 index 000000000..a95cbf91a --- /dev/null +++ b/vendor/rector/rector/rules/DeadCode/NodeManipulator/ClassMethodParamRemover.php @@ -0,0 +1,44 @@ +paramAnalyzer = $paramAnalyzer; + $this->complexNodeRemover = $complexNodeRemover; + } + public function processRemoveParams(ClassMethod $classMethod) : ?ClassMethod + { + $paramKeysToBeRemoved = []; + foreach ($classMethod->params as $key => $param) { + if ($this->paramAnalyzer->isParamUsedInClassMethod($classMethod, $param)) { + continue; + } + $paramKeysToBeRemoved[] = $key; + } + if ($paramKeysToBeRemoved === []) { + return null; + } + $removedParamKeys = $this->complexNodeRemover->processRemoveParamWithKeys($classMethod, $paramKeysToBeRemoved); + if ($removedParamKeys !== []) { + return $classMethod; + } + return null; + } +} diff --git a/vendor/rector/rector/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php b/vendor/rector/rector/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php index bf0ebc5a0..905617a85 100644 --- a/vendor/rector/rector/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php +++ b/vendor/rector/rector/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php @@ -6,6 +6,7 @@ use PhpParser\Node\Stmt\Property; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; use PHPStan\Type\IntersectionType; +use PHPStan\Type\ObjectType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; use Rector\NodeTypeResolver\TypeComparator\TypeComparator; @@ -41,6 +42,10 @@ public function isDead(VarTagValueNode $varTagValueNode, Property $property) : b if ($propertyType instanceof UnionType && !$docType instanceof UnionType) { return !$docType instanceof IntersectionType; } + if ($propertyType instanceof ObjectType && $docType instanceof ObjectType) { + // more specific type is already in the property + return $docType->isSuperTypeOf($propertyType)->yes(); + } if ($this->typeComparator->arePhpParserAndPhpStanPhpDocTypesEqual($property->type, $varTagValueNode->type, $property)) { return \true; } diff --git a/vendor/rector/rector/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php b/vendor/rector/rector/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php index a2c11f61a..ded731da3 100644 --- a/vendor/rector/rector/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php +++ b/vendor/rector/rector/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php @@ -7,6 +7,7 @@ use PHPStan\PhpDocParser\Ast\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; +use PHPStan\Type\Type; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\DeadCode\PhpDoc\DeadParamTagValueNodeAnalyzer; @@ -28,11 +29,11 @@ public function __construct(DeadParamTagValueNodeAnalyzer $deadParamTagValueNode $this->deadParamTagValueNodeAnalyzer = $deadParamTagValueNodeAnalyzer; $this->docBlockUpdater = $docBlockUpdater; } - public function removeParamTagsIfUseless(PhpDocInfo $phpDocInfo, FunctionLike $functionLike) : bool + public function removeParamTagsIfUseless(PhpDocInfo $phpDocInfo, FunctionLike $functionLike, ?Type $type = null) : bool { $hasChanged = \false; $phpDocNodeTraverser = new PhpDocNodeTraverser(); - $phpDocNodeTraverser->traverseWithCallable($phpDocInfo->getPhpDocNode(), '', function (Node $docNode) use($functionLike, &$hasChanged) : ?int { + $phpDocNodeTraverser->traverseWithCallable($phpDocInfo->getPhpDocNode(), '', function (Node $docNode) use($functionLike, &$hasChanged, $type, $phpDocInfo) : ?int { if (!$docNode instanceof PhpDocTagNode) { return null; } @@ -43,6 +44,12 @@ public function removeParamTagsIfUseless(PhpDocInfo $phpDocInfo, FunctionLike $f if ($docNode->name !== '@param') { return null; } + if ($type instanceof Type) { + $paramType = $phpDocInfo->getParamType($docNode->value->parameterName); + if (!$type->equals($paramType)) { + return null; + } + } if (!$this->deadParamTagValueNodeAnalyzer->isDead($docNode->value, $functionLike)) { return null; } diff --git a/vendor/rector/rector/rules/DeadCode/Rector/Array_/RemoveDuplicatedArrayKeyRector.php b/vendor/rector/rector/rules/DeadCode/Rector/Array_/RemoveDuplicatedArrayKeyRector.php index 0cd8c9e92..a1989fc8a 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/Array_/RemoveDuplicatedArrayKeyRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/Array_/RemoveDuplicatedArrayKeyRector.php @@ -14,7 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/SG0Wu * @see \Rector\Tests\DeadCode\Rector\Array_\RemoveDuplicatedArrayKeyRector\RemoveDuplicatedArrayKeyRectorTest */ final class RemoveDuplicatedArrayKeyRector extends AbstractRector diff --git a/vendor/rector/rector/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php b/vendor/rector/rector/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php index 61ea27c1b..ce3f4389b 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php @@ -18,7 +18,7 @@ use PHPStan\Analyser\Scope; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\NodeAnalyzer\VariableAnalyzer; -use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\NodeManipulator\StmtsManipulator; use Rector\Php\ReservedKeywordAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractScopeAwareRector; @@ -49,12 +49,18 @@ final class RemoveUnusedVariableAssignRector extends AbstractScopeAwareRector * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - public function __construct(ReservedKeywordAnalyzer $reservedKeywordAnalyzer, SideEffectNodeDetector $sideEffectNodeDetector, VariableAnalyzer $variableAnalyzer, BetterNodeFinder $betterNodeFinder) + /** + * @readonly + * @var \Rector\NodeManipulator\StmtsManipulator + */ + private $stmtsManipulator; + public function __construct(ReservedKeywordAnalyzer $reservedKeywordAnalyzer, SideEffectNodeDetector $sideEffectNodeDetector, VariableAnalyzer $variableAnalyzer, BetterNodeFinder $betterNodeFinder, StmtsManipulator $stmtsManipulator) { $this->reservedKeywordAnalyzer = $reservedKeywordAnalyzer; $this->sideEffectNodeDetector = $sideEffectNodeDetector; $this->variableAnalyzer = $variableAnalyzer; $this->betterNodeFinder = $betterNodeFinder; + $this->stmtsManipulator = $stmtsManipulator; } public function getRuleDefinition() : RuleDefinition { @@ -101,7 +107,7 @@ public function refactorWithScope(Node $node, Scope $scope) $assignedVariableNamesByStmtPosition = $this->resolvedAssignedVariablesByStmtPosition($stmts); $hasChanged = \false; foreach ($assignedVariableNamesByStmtPosition as $stmtPosition => $variableName) { - if ($this->isVariableUsedInFollowingStmts($node, $stmtPosition, $variableName)) { + if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmts, $stmtPosition + 1, $variableName)) { continue; } /** @var Expression $currentStmt */ @@ -137,30 +143,6 @@ private function hasCallLikeInAssignExpr(Expr $expr, Scope $scope) : bool return $this->sideEffectNodeDetector->detectCallExpr($subNode, $scope); }); } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike - */ - private function isVariableUsedInFollowingStmts($functionLike, int $assignStmtPosition, string $variableName) : bool - { - if ($functionLike->stmts === null) { - return \false; - } - foreach ($functionLike->stmts as $key => $stmt) { - // do not look yet - if ($key <= $assignStmtPosition) { - continue; - } - $stmtScope = $stmt->getAttribute(AttributeKey::SCOPE); - if (!$stmtScope instanceof Scope) { - continue; - } - $foundVariable = $this->betterNodeFinder->findVariableOfName($stmt, $variableName); - if ($foundVariable instanceof Variable) { - return \true; - } - } - return \false; - } /** * @param Stmt[] $stmts */ diff --git a/vendor/rector/rector/rules/DeadCode/Rector/ClassLike/RemoveAnnotationRector.php b/vendor/rector/rector/rules/DeadCode/Rector/ClassLike/RemoveAnnotationRector.php index 65ded3d9f..568759f07 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/ClassLike/RemoveAnnotationRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/ClassLike/RemoveAnnotationRector.php @@ -17,7 +17,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\DeadCode\Rector\ClassLike\RemoveAnnotationRector\RemoveAnnotationRectorTest */ diff --git a/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php b/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php index e76b67130..a0939c5da 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php @@ -7,10 +7,10 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Reflection\ClassReflection; +use Rector\DeadCode\NodeManipulator\ClassMethodParamRemover; use Rector\NodeAnalyzer\ParamAnalyzer; use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; -use Rector\Removing\NodeManipulator\ComplexNodeRemover; use Rector\ValueObject\MethodName; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -26,19 +26,19 @@ final class RemoveUnusedConstructorParamRector extends AbstractRector private $paramAnalyzer; /** * @readonly - * @var \Rector\Removing\NodeManipulator\ComplexNodeRemover + * @var \Rector\Reflection\ReflectionResolver */ - private $complexNodeRemover; + private $reflectionResolver; /** * @readonly - * @var \Rector\Reflection\ReflectionResolver + * @var \Rector\DeadCode\NodeManipulator\ClassMethodParamRemover */ - private $reflectionResolver; - public function __construct(ParamAnalyzer $paramAnalyzer, ComplexNodeRemover $complexNodeRemover, ReflectionResolver $reflectionResolver) + private $classMethodParamRemover; + public function __construct(ParamAnalyzer $paramAnalyzer, ReflectionResolver $reflectionResolver, ClassMethodParamRemover $classMethodParamRemover) { $this->paramAnalyzer = $paramAnalyzer; - $this->complexNodeRemover = $complexNodeRemover; $this->reflectionResolver = $reflectionResolver; + $this->classMethodParamRemover = $classMethodParamRemover; } public function getRuleDefinition() : RuleDefinition { @@ -101,28 +101,10 @@ public function refactor(Node $node) : ?Node return null; } } - $changedConstructorClassMethod = $this->processRemoveParams($constructorClassMethod); + $changedConstructorClassMethod = $this->classMethodParamRemover->processRemoveParams($constructorClassMethod); if (!$changedConstructorClassMethod instanceof ClassMethod) { return null; } return $node; } - private function processRemoveParams(ClassMethod $classMethod) : ?ClassMethod - { - $paramKeysToBeRemoved = []; - foreach ($classMethod->params as $key => $param) { - if ($this->paramAnalyzer->isParamUsedInClassMethod($classMethod, $param)) { - continue; - } - $paramKeysToBeRemoved[] = $key; - } - if ($paramKeysToBeRemoved === []) { - return null; - } - $removedParamKeys = $this->complexNodeRemover->processRemoveParamWithKeys($classMethod, $paramKeysToBeRemoved); - if ($removedParamKeys !== []) { - return $classMethod; - } - return null; - } } diff --git a/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php b/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php index 6d2a9f301..ac56943d0 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php @@ -9,7 +9,12 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\TraitUse; use PHPStan\Analyser\Scope; +use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\Reflection\ClassReflection; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; +use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover; +use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\DeadCode\NodeAnalyzer\PropertyWriteonlyAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\NodeFinder\PropertyFetchFinder; @@ -52,13 +57,31 @@ final class RemoveUnusedPromotedPropertyRector extends AbstractScopeAwareRector * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - public function __construct(PropertyFetchFinder $propertyFetchFinder, VisibilityManipulator $visibilityManipulator, PropertyWriteonlyAnalyzer $propertyWriteonlyAnalyzer, BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver) + /** + * @readonly + * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory + */ + private $phpDocInfoFactory; + /** + * @readonly + * @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover + */ + private $phpDocTagRemover; + /** + * @readonly + * @var \Rector\Comments\NodeDocBlock\DocBlockUpdater + */ + private $docBlockUpdater; + public function __construct(PropertyFetchFinder $propertyFetchFinder, VisibilityManipulator $visibilityManipulator, PropertyWriteonlyAnalyzer $propertyWriteonlyAnalyzer, BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, PhpDocInfoFactory $phpDocInfoFactory, PhpDocTagRemover $phpDocTagRemover, DocBlockUpdater $docBlockUpdater) { $this->propertyFetchFinder = $propertyFetchFinder; $this->visibilityManipulator = $visibilityManipulator; $this->propertyWriteonlyAnalyzer = $propertyWriteonlyAnalyzer; $this->betterNodeFinder = $betterNodeFinder; $this->reflectionResolver = $reflectionResolver; + $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->phpDocTagRemover = $phpDocTagRemover; + $this->docBlockUpdater = $docBlockUpdater; } public function getRuleDefinition() : RuleDefinition { @@ -116,6 +139,7 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node return null; } $hasChanged = \false; + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($constructClassMethod); foreach ($constructClassMethod->params as $key => $param) { // only private local scope; removing public property might be dangerous if (!$this->visibilityManipulator->hasVisibility($param, Visibility::PRIVATE)) { @@ -129,15 +153,23 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if (!$this->propertyWriteonlyAnalyzer->arePropertyFetchesExclusivelyBeingAssignedTo($propertyFetches)) { continue; } + // always changed on below code + $hasChanged = \true; // is variable used? only remove property, keep param $variable = $this->betterNodeFinder->findVariableOfName((array) $constructClassMethod->stmts, $paramName); if ($variable instanceof Variable) { $param->flags = 0; continue; } + if ($phpDocInfo instanceof PhpDocInfo) { + $paramTagValueNode = $phpDocInfo->getParamTagValueByName($paramName); + if ($paramTagValueNode instanceof ParamTagValueNode) { + $this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $paramTagValueNode); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($constructClassMethod); + } + } // remove param unset($constructClassMethod->params[$key]); - $hasChanged = \true; } if ($hasChanged) { return $node; diff --git a/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPublicMethodParameterRector.php b/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPublicMethodParameterRector.php new file mode 100644 index 000000000..733d00ed0 --- /dev/null +++ b/vendor/rector/rector/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPublicMethodParameterRector.php @@ -0,0 +1,121 @@ +variadicFunctionLikeDetector = $variadicFunctionLikeDetector; + $this->classMethodParamRemover = $classMethodParamRemover; + $this->magicClassMethodAnalyzer = $magicClassMethodAnalyzer; + $this->phpAttributeAnalyzer = $phpAttributeAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Remove unused parameter in public method on final class without extends and interface', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + public function run($a, $b) + { + echo $a; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + public function run($a) + { + echo $a; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + // may have child, or override parent that needs to follow the signature + if (!$node->isFinal() || $node->extends instanceof FullyQualified || $node->implements !== []) { + return null; + } + $hasChanged = \false; + foreach ($node->getMethods() as $classMethod) { + if ($this->shouldSkipClassMethod($classMethod, $node)) { + continue; + } + $changedMethod = $this->classMethodParamRemover->processRemoveParams($classMethod); + if (!$changedMethod instanceof ClassMethod) { + continue; + } + $hasChanged = \true; + } + if ($hasChanged) { + return $node; + } + return null; + } + private function shouldSkipClassMethod(ClassMethod $classMethod, Class_ $class) : bool + { + // private method is handled by different rule + if (!$classMethod->isPublic()) { + return \true; + } + if ($classMethod->params === []) { + return \true; + } + // parameter is required for contract coupling + if ($this->isName($classMethod->name, '__invoke') && $this->phpAttributeAnalyzer->hasPhpAttribute($class, 'Symfony\\Component\\Messenger\\Attribute\\AsMessageHandler')) { + return \true; + } + if ($this->magicClassMethodAnalyzer->isUnsafeOverridden($classMethod)) { + return \true; + } + return $this->variadicFunctionLikeDetector->isVariadic($classMethod); + } +} diff --git a/vendor/rector/rector/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php b/vendor/rector/rector/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php index da31b6a45..fbdb0b8dc 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php @@ -136,10 +136,11 @@ private function processIf(If_ $if, int $key, StmtsAwareInterface $stmtsAware) : */ private function processForForeach($for, int $key, StmtsAwareInterface $stmtsAware) : void { + $stmts = (array) $stmtsAware->stmts; if ($for instanceof For_) { $variables = $this->betterNodeFinder->findInstanceOf(\array_merge($for->init, $for->cond, $for->loop), Variable::class); foreach ($variables as $variable) { - if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmtsAware, $key + 1, (string) $this->getName($variable))) { + if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmts, $key + 1, (string) $this->getName($variable))) { return; } } @@ -150,7 +151,7 @@ private function processForForeach($for, int $key, StmtsAwareInterface $stmtsAwa $exprs = \array_filter([$for->expr, $for->valueVar, $for->valueVar]); $variables = $this->betterNodeFinder->findInstanceOf($exprs, Variable::class); foreach ($variables as $variable) { - if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmtsAware, $key + 1, (string) $this->getName($variable))) { + if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmts, $key + 1, (string) $this->getName($variable))) { return; } } diff --git a/vendor/rector/rector/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php b/vendor/rector/rector/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php index a38dddff5..deb5fd321 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php @@ -7,6 +7,10 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Foreach_; use PhpParser\NodeFinder; +use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; +use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\StmtsManipulator; use Rector\Rector\AbstractRector; @@ -27,10 +31,22 @@ final class RemoveUnusedForeachKeyRector extends AbstractRector * @var \Rector\NodeManipulator\StmtsManipulator */ private $stmtsManipulator; - public function __construct(NodeFinder $nodeFinder, StmtsManipulator $stmtsManipulator) + /** + * @readonly + * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory + */ + private $phpDocInfoFactory; + /** + * @readonly + * @var \Rector\Comments\NodeDocBlock\DocBlockUpdater + */ + private $docBlockUpdater; + public function __construct(NodeFinder $nodeFinder, StmtsManipulator $stmtsManipulator, PhpDocInfoFactory $phpDocInfoFactory, DocBlockUpdater $docBlockUpdater) { $this->nodeFinder = $nodeFinder; $this->stmtsManipulator = $stmtsManipulator; + $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->docBlockUpdater = $docBlockUpdater; } public function getRuleDefinition() : RuleDefinition { @@ -78,11 +94,24 @@ public function refactor(Node $node) : ?Node if ($isNodeUsed) { continue; } - if ($this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, (string) $this->getName($keyVar))) { + $keyVarName = (string) $this->getName($keyVar); + if ($this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, $keyVarName)) { continue; } $stmt->keyVar = null; $hasChanged = \true; + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($stmt); + if (!$phpDocInfo instanceof PhpDocInfo) { + continue; + } + $varTagValues = $phpDocInfo->getPhpDocNode()->getVarTagValues(); + foreach ($varTagValues as $varTagValue) { + $variableName = $varTagValue->variableName; + if ($varTagValue->variableName === '$' . $keyVarName) { + $phpDocInfo->removeByType(VarTagValueNode::class, $variableName); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($stmt); + } + } } if ($hasChanged) { return $node; diff --git a/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php b/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php index 7bc87eb4f..2138bea87 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php @@ -8,14 +8,18 @@ use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; +use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\PropertyFetch; +use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\NodeTraverser; +use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantBooleanType; +use PHPStan\Type\IntersectionType; use Rector\DeadCode\NodeAnalyzer\SafeLeftTypeBooleanAndOrAnalyzer; use Rector\NodeAnalyzer\ExprAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; @@ -109,7 +113,7 @@ public function refactor(Node $node) if ($this->shouldSkipExpr($node->cond)) { return null; } - if ($this->shouldSkipFromParam($node->cond)) { + if ($this->shouldSkipFromVariable($node->cond)) { return null; } $hasAssign = (bool) $this->betterNodeFinder->findFirstInstanceOf($node->cond, Assign::class); @@ -121,7 +125,7 @@ public function refactor(Node $node) } return $node->stmts; } - private function shouldSkipFromParam(Expr $expr) : bool + private function shouldSkipFromVariable(Expr $expr) : bool { /** @var Variable[] $variables */ $variables = $this->betterNodeFinder->findInstancesOf($expr, [Variable::class]); @@ -129,12 +133,20 @@ private function shouldSkipFromParam(Expr $expr) : bool if ($this->exprAnalyzer->isNonTypedFromParam($variable)) { return \true; } + $type = $this->getType($variable); + if ($type instanceof IntersectionType) { + foreach ($type->getTypes() as $subType) { + if ($subType instanceof ArrayType) { + return \true; + } + } + } } return \false; } private function shouldSkipExpr(Expr $expr) : bool { - return (bool) $this->betterNodeFinder->findInstancesOf($expr, [PropertyFetch::class, StaticPropertyFetch::class, ArrayDimFetch::class]); + return (bool) $this->betterNodeFinder->findInstancesOf($expr, [PropertyFetch::class, StaticPropertyFetch::class, ArrayDimFetch::class, MethodCall::class, StaticCall::class]); } private function refactorIfWithBooleanAnd(If_ $if) : ?If_ { diff --git a/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php b/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php index 79bfa6090..e74127643 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php @@ -19,6 +19,7 @@ use PhpParser\NodeTraverser; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\MixedType; +use PHPStan\Type\ObjectType; use Rector\NodeManipulator\IfManipulator; use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; @@ -140,12 +141,12 @@ private function isInstanceofTheSameType(Instanceof_ $instanceof) : ?bool if ($classReflection instanceof ClassReflection && $classReflection->isTrait()) { return null; } - $classType = $this->nodeTypeResolver->getType($instanceof->class); $exprType = $this->nodeTypeResolver->getNativeType($instanceof->expr); - if ($classType->equals($exprType)) { - return \true; + if (!$exprType instanceof ObjectType) { + return null; } - return $classType->isSuperTypeOf($exprType)->yes(); + $className = $instanceof->class->toString(); + return $exprType->isInstanceOf($className)->yes(); } private function refactorIfWithBooleanAnd(If_ $if) : ?\PhpParser\Node\Stmt\If_ { diff --git a/vendor/rector/rector/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php b/vendor/rector/rector/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php index 71fde31b2..c2d986fc4 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector.php @@ -15,8 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/manual/en/function.version-compare.php - * * @see \Rector\Tests\DeadCode\Rector\If_\UnwrapFutureCompatibleIfPhpVersionRector\UnwrapFutureCompatibleIfPhpVersionRectorTest */ final class UnwrapFutureCompatibleIfPhpVersionRector extends AbstractRector diff --git a/vendor/rector/rector/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php b/vendor/rector/rector/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php index 06e7b8a5d..8f93d62a4 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php @@ -34,8 +34,6 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\Node\RemoveNonExistingVarAnnotationRector\RemoveNonExistingVarAnnotationRectorTest - * - * @changelog https://github.com/phpstan/phpstan/commit/d17e459fd9b45129c5deafe12bca56f30ea5ee99#diff-9f3541876405623b0d18631259763dc1 */ final class RemoveNonExistingVarAnnotationRector extends AbstractRector { @@ -149,6 +147,9 @@ public function refactor(Node $node) : ?Node // skip edge case with double comment, as impossible to resolve by PHPStan doc parser continue; } + if ($this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, $variableName)) { + continue; + } $phpDocInfo->removeByType(VarTagValueNode::class); $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($stmt); $hasChanged = \true; diff --git a/vendor/rector/rector/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php b/vendor/rector/rector/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php index fe11fba18..67cb0ff71 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php @@ -22,8 +22,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/I0BGs - * * @see \Rector\Tests\DeadCode\Rector\Plus\RemoveDeadZeroAndOneOperationRector\RemoveDeadZeroAndOneOperationRectorTest */ final class RemoveDeadZeroAndOneOperationRector extends AbstractRector diff --git a/vendor/rector/rector/rules/DeadCode/Rector/Property/RemoveUselessReadOnlyTagRector.php b/vendor/rector/rector/rules/DeadCode/Rector/Property/RemoveUselessReadOnlyTagRector.php index 005664bff..cf0b6ff17 100644 --- a/vendor/rector/rector/rules/DeadCode/Rector/Property/RemoveUselessReadOnlyTagRector.php +++ b/vendor/rector/rector/rules/DeadCode/Rector/Property/RemoveUselessReadOnlyTagRector.php @@ -13,12 +13,14 @@ use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\Privatization\NodeManipulator\VisibilityManipulator; use Rector\Rector\AbstractRector; +use Rector\ValueObject\PhpVersionFeature; +use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\DeadCode\Rector\Property\RemoveUselessReadOnlyTagRector\RemoveUselessReadOnlyTagRectorTest */ -final class RemoveUselessReadOnlyTagRector extends AbstractRector +final class RemoveUselessReadOnlyTagRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -104,4 +106,8 @@ public function refactor(Node $node) : ?Node $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); return $node; } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::READONLY_PROPERTY; + } } diff --git a/vendor/rector/rector/rules/DeadCode/SideEffect/PureFunctionDetector.php b/vendor/rector/rector/rules/DeadCode/SideEffect/PureFunctionDetector.php index 7ddedb837..4d655ad2b 100644 --- a/vendor/rector/rector/rules/DeadCode/SideEffect/PureFunctionDetector.php +++ b/vendor/rector/rector/rules/DeadCode/SideEffect/PureFunctionDetector.php @@ -21,223 +21,6 @@ final class PureFunctionDetector * @var \PHPStan\Reflection\ReflectionProvider */ private $reflectionProvider; - /** - * @see https://github.com/vimeo/psalm/blob/d470903722cfcbc1cd04744c5491d3e6d13ec3d9/src/Psalm/Internal/Codebase/Functions.php#L288 - * @var string[] - */ - private const IMPURE_FUNCTIONS = [ - 'chdir', - 'chgrp', - 'chmod', - 'chown', - 'chroot', - 'closedir', - 'copy', - 'file_put_contents', - 'fopen', - 'fread', - 'fwrite', - 'fclose', - 'touch', - 'fpassthru', - 'fputs', - 'fscanf', - 'fseek', - 'ftruncate', - 'fprintf', - 'symlink', - 'mkdir', - 'unlink', - 'rename', - 'rmdir', - 'popen', - 'pclose', - 'fputcsv', - 'umask', - 'finfo_close', - 'readline_add_history', - 'stream_set_timeout', - 'fflush', - // stream/socket io - 'stream_context_set_option', - 'socket_write', - 'stream_set_blocking', - 'socket_close', - 'socket_set_option', - 'stream_set_write_buffer', - // meta calls - 'call_user_func', - 'call_user_func_array', - 'define', - 'create_function', - // http - 'header', - 'header_remove', - 'http_response_code', - 'setcookie', - 'file_get_contents', - // output buffer - 'ob_start', - 'ob_end_clean', - 'ob_get_clean', - 'readfile', - 'printf', - 'var_dump', - 'phpinfo', - 'ob_implicit_flush', - 'vprintf', - // mcrypt - 'mcrypt_generic_init', - 'mcrypt_generic_deinit', - 'mcrypt_module_close', - // internal optimisation - 'opcache_compile_file', - 'clearstatcache', - // process-related - 'pcntl_signal', - 'posix_kill', - 'cli_set_process_title', - 'pcntl_async_signals', - 'proc_close', - 'proc_nice', - 'proc_open', - 'proc_terminate', - // curl - 'curl_setopt', - 'curl_close', - 'curl_multi_add_handle', - 'curl_multi_remove_handle', - 'curl_multi_select', - 'curl_multi_close', - 'curl_setopt_array', - // apc, apcu - 'apc_store', - 'apc_delete', - 'apc_clear_cache', - 'apc_add', - 'apc_inc', - 'apc_dec', - 'apc_cas', - 'apcu_store', - 'apcu_delete', - 'apcu_clear_cache', - 'apcu_add', - 'apcu_inc', - 'apcu_dec', - 'apcu_cas', - // gz - 'gzwrite', - 'gzrewind', - 'gzseek', - 'gzclose', - // newrelic - 'newrelic_start_transaction', - 'newrelic_name_transaction', - 'newrelic_add_custom_parameter', - 'newrelic_add_custom_tracer', - 'newrelic_background_job', - 'newrelic_end_transaction', - 'newrelic_set_appname', - // execution - 'shell_exec', - 'exec', - 'system', - 'passthru', - 'pcntl_exec', - // well-known functions - 'libxml_use_internal_errors', - 'libxml_disable_entity_loader', - 'curl_exec', - 'mt_srand', - 'openssl_pkcs7_sign', - 'openssl_sign', - 'mt_rand', - 'rand', - 'random_int', - 'random_bytes', - 'wincache_ucache_delete', - 'wincache_ucache_set', - 'wincache_ucache_inc', - 'class_alias', - // php environment - 'ini_set', - 'sleep', - 'usleep', - 'register_shutdown_function', - 'error_reporting', - 'register_tick_function', - 'unregister_tick_function', - 'set_error_handler', - 'user_error', - 'trigger_error', - 'restore_error_handler', - 'date_default_timezone_set', - 'assert_options', - 'setlocale', - 'set_exception_handler', - 'set_time_limit', - 'putenv', - 'spl_autoload_register', - 'microtime', - 'array_rand', - // logging - 'openlog', - 'syslog', - 'error_log', - 'define_syslog_variables', - // session - 'session_id', - 'session_name', - 'session_set_cookie_params', - 'session_set_save_handler', - 'session_regenerate_id', - 'mb_internal_encoding', - 'session_start', - // ldap - 'ldap_set_option', - // iterators - 'rewind', - 'iterator_apply', - // mysqli - 'mysqli_select_db', - 'mysqli_dump_debug_info', - 'mysqli_kill', - 'mysqli_multi_query', - 'mysqli_next_result', - 'mysqli_options', - 'mysqli_ping', - 'mysqli_query', - 'mysqli_report', - 'mysqli_rollback', - 'mysqli_savepoint', - 'mysqli_set_charset', - 'mysqli_ssl_set', - // postgres - 'pg_exec', - 'pg_execute', - 'pg_connect', - 'pg_query_params', - // ftp - 'ftp_close', - // bcmath - 'bcscale', - 'bcdiv', - // json - 'json_encode', - 'json_decode', - 'json_last_error', - // array - 'array_pop', - 'array_push', - 'array_shift', - 'array_splice', - 'next', - 'prev', - 'sort', - 'ksort', - // stream - 'stream_filter_append', - ]; public function __construct(NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider) { $this->nodeNameResolver = $nodeNameResolver; @@ -258,6 +41,7 @@ public function detect(FuncCall $funcCall, Scope $scope) : bool if (!$functionReflection instanceof NativeFunctionReflection) { return \false; } - return !\in_array($funcCallName, self::IMPURE_FUNCTIONS, \true); + // yes() and maybe() may have side effect + return $functionReflection->hasSideEffects()->no(); } } diff --git a/vendor/rector/rector/rules/DeadCode/SideEffect/SideEffectNodeDetector.php b/vendor/rector/rector/rules/DeadCode/SideEffect/SideEffectNodeDetector.php index 69338fa6e..92cbcb4d7 100644 --- a/vendor/rector/rector/rules/DeadCode/SideEffect/SideEffectNodeDetector.php +++ b/vendor/rector/rector/rules/DeadCode/SideEffect/SideEffectNodeDetector.php @@ -3,74 +3,51 @@ declare (strict_types=1); namespace Rector\DeadCode\SideEffect; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\Assign; -use PhpParser\Node\Expr\BinaryOp\Concat; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\NullsafeMethodCall; -use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; -use PhpParser\Node\Scalar\Encapsed; use PHPStan\Analyser\Scope; -use PHPStan\Type\ConstantType; use PHPStan\Type\ObjectType; -use Rector\NodeTypeResolver\NodeTypeResolver; +use Rector\PhpParser\Node\BetterNodeFinder; final class SideEffectNodeDetector { - /** - * @readonly - * @var \Rector\NodeTypeResolver\NodeTypeResolver - */ - private $nodeTypeResolver; /** * @readonly * @var \Rector\DeadCode\SideEffect\PureFunctionDetector */ private $pureFunctionDetector; /** - * @var array> + * @readonly + * @var \Rector\PhpParser\Node\BetterNodeFinder */ - private const SIDE_EFFECT_NODE_TYPES = [Encapsed::class, New_::class, Concat::class, PropertyFetch::class]; + private $betterNodeFinder; /** * @var array> */ private const CALL_EXPR_SIDE_EFFECT_NODE_TYPES = [MethodCall::class, New_::class, NullsafeMethodCall::class, StaticCall::class]; - public function __construct(NodeTypeResolver $nodeTypeResolver, \Rector\DeadCode\SideEffect\PureFunctionDetector $pureFunctionDetector) + public function __construct(\Rector\DeadCode\SideEffect\PureFunctionDetector $pureFunctionDetector, BetterNodeFinder $betterNodeFinder) { - $this->nodeTypeResolver = $nodeTypeResolver; $this->pureFunctionDetector = $pureFunctionDetector; + $this->betterNodeFinder = $betterNodeFinder; } public function detect(Expr $expr, Scope $scope) : bool { if ($expr instanceof Assign) { return \true; } - foreach (self::SIDE_EFFECT_NODE_TYPES as $sideEffectNodeType) { - if ($expr instanceof $sideEffectNodeType) { - return \false; - } - } - $exprStaticType = $this->nodeTypeResolver->getType($expr); - if ($exprStaticType instanceof ConstantType) { - return \false; - } - if ($expr instanceof FuncCall) { - return !$this->pureFunctionDetector->detect($expr, $scope); - } - if ($expr instanceof Variable || $expr instanceof ArrayDimFetch) { - $variable = $this->resolveVariable($expr); - // variables don't have side effects - return !$variable instanceof Variable; - } - return \true; + return (bool) $this->betterNodeFinder->findFirst($expr, function (Node $subNode) use($scope) : bool { + return $this->detectCallExpr($subNode, $scope); + }); } public function detectCallExpr(Node $node, Scope $scope) : bool { @@ -90,6 +67,11 @@ public function detectCallExpr(Node $node, Scope $scope) : bool if ($node instanceof FuncCall) { return !$this->pureFunctionDetector->detect($node, $scope); } + if ($node instanceof Variable || $node instanceof ArrayDimFetch) { + $variable = $this->resolveVariable($node); + // variables don't have side effects + return !$variable instanceof Variable; + } return \false; } private function isPhpParser(New_ $new) : bool diff --git a/vendor/rector/rector/rules/EarlyReturn/NodeAnalyzer/IfAndAnalyzer.php b/vendor/rector/rector/rules/EarlyReturn/NodeAnalyzer/IfAndAnalyzer.php deleted file mode 100644 index 5be20fb06..000000000 --- a/vendor/rector/rector/rules/EarlyReturn/NodeAnalyzer/IfAndAnalyzer.php +++ /dev/null @@ -1,49 +0,0 @@ -betterNodeFinder = $betterNodeFinder; - $this->nodeComparator = $nodeComparator; - } - public function isIfAndWithInstanceof(BooleanAnd $booleanAnd) : bool - { - if (!$booleanAnd->left instanceof Instanceof_) { - return \false; - } - // only one instanceof check - return !$booleanAnd->right instanceof Instanceof_; - } - public function isIfStmtExprUsedInNextReturn(If_ $if, Return_ $return) : bool - { - if (!$return->expr instanceof Expr) { - return \false; - } - $ifExprs = $this->betterNodeFinder->findInstanceOf($if->stmts, Expr::class); - return (bool) $this->betterNodeFinder->findFirst($return->expr, function (Node $node) use($ifExprs) : bool { - return $this->nodeComparator->isNodeEqual($node, $ifExprs); - }); - } -} diff --git a/vendor/rector/rector/rules/EarlyReturn/NodeAnalyzer/SimpleScalarAnalyzer.php b/vendor/rector/rector/rules/EarlyReturn/NodeAnalyzer/SimpleScalarAnalyzer.php deleted file mode 100644 index 77ade0c9f..000000000 --- a/vendor/rector/rector/rules/EarlyReturn/NodeAnalyzer/SimpleScalarAnalyzer.php +++ /dev/null @@ -1,20 +0,0 @@ -items === []) { - return \true; - } - // empty string - return $expr instanceof String_ && $expr->value === ''; - } -} diff --git a/vendor/rector/rector/rules/EarlyReturn/NodeFactory/InvertedIfFactory.php b/vendor/rector/rector/rules/EarlyReturn/NodeFactory/InvertedIfFactory.php deleted file mode 100644 index e9a6704d7..000000000 --- a/vendor/rector/rector/rules/EarlyReturn/NodeFactory/InvertedIfFactory.php +++ /dev/null @@ -1,53 +0,0 @@ -conditionInverter = $conditionInverter; - $this->contextAnalyzer = $contextAnalyzer; - } - /** - * @param Expr[] $conditions - * @return If_[] - */ - public function createFromConditions(If_ $if, array $conditions, Return_ $return, ?Stmt $ifNextReturnStmt) : array - { - $ifs = []; - $stmt = $this->contextAnalyzer->isInLoop($if) && !$ifNextReturnStmt instanceof Return_ ? [new Continue_()] : [$return]; - if ($ifNextReturnStmt instanceof Return_) { - $stmt[0]->setAttribute(AttributeKey::COMMENTS, $ifNextReturnStmt->getAttribute(AttributeKey::COMMENTS)); - } - if ($ifNextReturnStmt instanceof Return_ && $ifNextReturnStmt->expr instanceof Expr) { - $return->expr = $ifNextReturnStmt->expr; - } - foreach ($conditions as $condition) { - $invertedCondition = $this->conditionInverter->createInvertedCondition($condition); - $if = new If_($invertedCondition); - $if->stmts = $stmt; - $ifs[] = $if; - } - return $ifs; - } -} diff --git a/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeAndIfToEarlyReturnRector.php b/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeAndIfToEarlyReturnRector.php deleted file mode 100644 index f577791f8..000000000 --- a/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeAndIfToEarlyReturnRector.php +++ /dev/null @@ -1,243 +0,0 @@ -ifManipulator = $ifManipulator; - $this->invertedIfFactory = $invertedIfFactory; - $this->contextAnalyzer = $contextAnalyzer; - $this->binaryOpConditionsCollector = $binaryOpConditionsCollector; - $this->simpleScalarAnalyzer = $simpleScalarAnalyzer; - $this->ifAndAnalyzer = $ifAndAnalyzer; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Changes if && to early return', [new CodeSample(<<<'CODE_SAMPLE' -class SomeClass -{ - public function canDrive(Car $car) - { - if ($car->hasWheels && $car->hasFuel) { - return true; - } - - return false; - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -class SomeClass -{ - public function canDrive(Car $car) - { - if (! $car->hasWheels) { - return false; - } - - if (! $car->hasFuel) { - return false; - } - - return true; - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [ClassMethod::class, Function_::class, Foreach_::class, Closure::class, FileWithoutNamespace::class, Namespace_::class]; - } - /** - * @param Stmt\ClassMethod|Stmt\Function_|Stmt\Foreach_|Expr\Closure|FileWithoutNamespace|Stmt\Namespace_ $node - */ - public function refactor(Node $node) : ?Node - { - $stmts = (array) $node->stmts; - if ($stmts === []) { - return null; - } - $newStmts = []; - foreach ($stmts as $key => $stmt) { - if (!$stmt instanceof If_) { - // keep natural original order - $newStmts[] = $stmt; - continue; - } - $nextStmt = $stmts[$key + 1] ?? null; - if ($this->isComplexReturn($nextStmt)) { - return null; - } - if ($this->shouldSkip($stmt, $nextStmt)) { - $newStmts[] = $stmt; - continue; - } - if ($nextStmt instanceof Return_) { - if ($this->ifAndAnalyzer->isIfStmtExprUsedInNextReturn($stmt, $nextStmt)) { - continue; - } - if ($nextStmt->expr instanceof BooleanAnd) { - continue; - } - } - /** @var BooleanAnd $expr */ - $expr = $stmt->cond; - $booleanAndConditions = $this->binaryOpConditionsCollector->findConditions($expr, BooleanAnd::class); - $afterStmts = []; - if (!$nextStmt instanceof Return_) { - $afterStmts[] = $stmt->stmts[0]; - $node->stmts = \array_merge($newStmts, $this->processReplaceIfs($stmt, $booleanAndConditions, new Return_(), $afterStmts, $nextStmt)); - return $node; - } - // remove next node - unset($newStmts[$key + 1]); - $afterStmts[] = $stmt->stmts[0]; - $ifNextReturnClone = $stmt->stmts[0] instanceof Return_ ? clone $stmt->stmts[0] : new Return_(); - if ($this->isInLoopWithoutContinueOrBreak($stmt)) { - $afterStmts[] = new Return_(); - } - $changedStmts = $this->processReplaceIfs($stmt, $booleanAndConditions, $ifNextReturnClone, $afterStmts, $nextStmt); - // update stmts - $node->stmts = \array_merge($newStmts, $changedStmts); - return $node; - } - return null; - } - private function isInLoopWithoutContinueOrBreak(If_ $if) : bool - { - if (!$this->contextAnalyzer->isInLoop($if)) { - return \false; - } - if ($if->stmts[0] instanceof Continue_) { - return \false; - } - return !$if->stmts[0] instanceof Break_; - } - /** - * @param Expr[] $conditions - * @param Stmt[] $afters - * @return Stmt[] - */ - private function processReplaceIfs(If_ $if, array $conditions, Return_ $ifNextReturn, array $afters, ?Stmt $nextStmt) : array - { - $ifs = $this->invertedIfFactory->createFromConditions($if, $conditions, $ifNextReturn, $nextStmt); - $this->mirrorComments($ifs[0], $if); - $result = \array_merge($ifs, $afters); - if ($if->stmts[0] instanceof Return_) { - return $result; - } - if (!$ifNextReturn->expr instanceof Expr) { - return $result; - } - if ($this->contextAnalyzer->isInLoop($if)) { - return $result; - } - return \array_merge($result, [$ifNextReturn]); - } - private function shouldSkip(If_ $if, ?Stmt $nexStmt) : bool - { - if (!$this->ifManipulator->isIfWithOnlyOneStmt($if)) { - return \true; - } - if (!$if->cond instanceof BooleanAnd) { - return \true; - } - if (!$this->ifManipulator->isIfWithoutElseAndElseIfs($if)) { - return \true; - } - // is simple return? skip it - $onlyStmt = $if->stmts[0]; - if ($onlyStmt instanceof Return_ && $onlyStmt->expr instanceof Expr && $this->simpleScalarAnalyzer->isSimpleScalar($onlyStmt->expr)) { - return \true; - } - if ($this->ifAndAnalyzer->isIfAndWithInstanceof($if->cond)) { - return \true; - } - return !$this->isLastIfOrBeforeLastReturn($nexStmt); - } - private function isLastIfOrBeforeLastReturn(?Stmt $nextStmt) : bool - { - if (!$nextStmt instanceof Stmt) { - return \true; - } - return $nextStmt instanceof Return_; - } - private function isComplexReturn(?Stmt $stmt) : bool - { - if (!$stmt instanceof Return_) { - return \false; - } - if (!$stmt->expr instanceof Expr) { - return \false; - } - if ($stmt->expr instanceof ConstFetch) { - return \false; - } - return !$stmt->expr instanceof Scalar; - } -} diff --git a/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php b/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php index f29a833af..bc8071992 100644 --- a/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php +++ b/vendor/rector/rector/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php @@ -17,8 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://engineering.helpscout.com/reducing-complexity-with-guard-clauses-in-php-and-javascript-74600fd865c7 - * * @see \Rector\Tests\EarlyReturn\Rector\If_\ChangeIfElseValueAssignToEarlyReturnRector\ChangeIfElseValueAssignToEarlyReturnRectorTest */ final class ChangeIfElseValueAssignToEarlyReturnRector extends AbstractRector diff --git a/vendor/rector/rector/rules/Naming/Contract/RenameParamValueObjectInterface.php b/vendor/rector/rector/rules/Naming/Contract/RenameParamValueObjectInterface.php deleted file mode 100644 index 778363985..000000000 --- a/vendor/rector/rector/rules/Naming/Contract/RenameParamValueObjectInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -nodeNameResolver->getName($property); // skip if already has suffix if (\substr_compare($propertyName, $expectedName->getName(), -\strlen($expectedName->getName())) === 0 || \substr_compare($propertyName, \ucfirst($expectedName->getName()), -\strlen(\ucfirst($expectedName->getName()))) === 0) { return null; @@ -84,23 +83,15 @@ public function resolve(Property $property, ClassLike $classLike) : ?string } private function resolveExpectedName(Property $property) : ?ExpectedName { - $phpDocInfo = $this->phpDocInfoFactory->createFromNode($property); - $isPhpDocInfo = $phpDocInfo instanceof PhpDocInfo; // property type first if ($property->type instanceof Node) { $propertyType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($property->type); - // not has docblock, use property type - if (!$isPhpDocInfo) { - return $this->propertyNaming->getExpectedNameFromType($propertyType); - } - // @var type is ObjectType, use property type - $varType = $phpDocInfo->getVarType(); - if ($varType instanceof ObjectType) { - return $this->propertyNaming->getExpectedNameFromType($propertyType); - } + return $this->propertyNaming->getExpectedNameFromType($propertyType); } // fallback to docblock - if ($isPhpDocInfo) { + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($property); + $hasVarTag = $phpDocInfo instanceof PhpDocInfo && $phpDocInfo->getVarTagValueNode() instanceof VarTagValueNode; + if ($hasVarTag) { return $this->propertyNaming->getExpectedNameFromType($phpDocInfo->getVarType()); } return null; diff --git a/vendor/rector/rector/rules/Naming/Naming/AliasNameResolver.php b/vendor/rector/rector/rules/Naming/Naming/AliasNameResolver.php index c817c7130..6c7dd82d5 100644 --- a/vendor/rector/rector/rules/Naming/Naming/AliasNameResolver.php +++ b/vendor/rector/rector/rules/Naming/Naming/AliasNameResolver.php @@ -4,7 +4,7 @@ namespace Rector\Naming\Naming; use PhpParser\Node\Identifier; -use PhpParser\Node\Name; +use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Use_; final class AliasNameResolver @@ -19,19 +19,19 @@ public function __construct(\Rector\Naming\Naming\UseImportsResolver $useImports $this->useImportsResolver = $useImportsResolver; } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ - public function resolveByName(Name $name, array $uses) : ?string + public function resolveByName(FullyQualified $fullyQualified, array $uses) : ?string { - $nameString = $name->toString(); + $nameString = $fullyQualified->toString(); foreach ($uses as $use) { $prefix = $this->useImportsResolver->resolvePrefix($use); foreach ($use->uses as $useUse) { if (!$useUse->alias instanceof Identifier) { continue; } - $name = $prefix . $useUse->name->toString(); - if ($name !== $nameString) { + $fullyQualified = $prefix . $useUse->name->toString(); + if ($fullyQualified !== $nameString) { continue; } return (string) $useUse->getAlias(); diff --git a/vendor/rector/rector/rules/Naming/Naming/PropertyNaming.php b/vendor/rector/rector/rules/Naming/Naming/PropertyNaming.php index 8d1ffc7de..4f0942336 100644 --- a/vendor/rector/rector/rules/Naming/Naming/PropertyNaming.php +++ b/vendor/rector/rector/rules/Naming/Naming/PropertyNaming.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Naming\Naming; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PHPStan\Type\Generic\GenericObjectType; use PHPStan\Type\ObjectType; use PHPStan\Type\StaticType; diff --git a/vendor/rector/rector/rules/Naming/Naming/UseImportsResolver.php b/vendor/rector/rector/rules/Naming/Naming/UseImportsResolver.php index 938183fea..ed9301192 100644 --- a/vendor/rector/rector/rules/Naming/Naming/UseImportsResolver.php +++ b/vendor/rector/rector/rules/Naming/Naming/UseImportsResolver.php @@ -8,14 +8,14 @@ use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Use_; +use Rector\Application\Provider\CurrentFileProvider; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; -use Rector\Provider\CurrentFileProvider; use Rector\ValueObject\Application\File; final class UseImportsResolver { /** * @readonly - * @var \Rector\Provider\CurrentFileProvider + * @var \Rector\Application\Provider\CurrentFileProvider */ private $currentFileProvider; public function __construct(CurrentFileProvider $currentFileProvider) @@ -23,7 +23,7 @@ public function __construct(CurrentFileProvider $currentFileProvider) $this->currentFileProvider = $currentFileProvider; } /** - * @return Use_[]|GroupUse[] + * @return array */ public function resolve() : array { @@ -70,21 +70,14 @@ private function resolveNamespace() if ($newStmts === []) { return null; } + /** @var Namespace_[]|FileWithoutNamespace[] $namespaces */ $namespaces = \array_filter($newStmts, static function (Stmt $stmt) : bool { - return $stmt instanceof Namespace_; + return $stmt instanceof Namespace_ || $stmt instanceof FileWithoutNamespace; }); // multiple namespaces is not supported - if (\count($namespaces) > 1) { + if (\count($namespaces) !== 1) { return null; } - $currentNamespace = \current($namespaces); - if ($currentNamespace instanceof Namespace_) { - return $currentNamespace; - } - $currentStmt = \current($newStmts); - if (!$currentStmt instanceof FileWithoutNamespace) { - return null; - } - return $currentStmt; + return \current($namespaces); } } diff --git a/vendor/rector/rector/rules/Naming/Rector/Assign/RenameVariableToMatchMethodCallReturnTypeRector.php b/vendor/rector/rector/rules/Naming/Rector/Assign/RenameVariableToMatchMethodCallReturnTypeRector.php index e7620d7ac..9352dd679 100644 --- a/vendor/rector/rector/rules/Naming/Rector/Assign/RenameVariableToMatchMethodCallReturnTypeRector.php +++ b/vendor/rector/rector/rules/Naming/Rector/Assign/RenameVariableToMatchMethodCallReturnTypeRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Naming\Rector\Assign; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Closure; @@ -136,6 +136,7 @@ public function refactor(Node $node) : ?Node if ($node->stmts === null) { return null; } + $hasChanged = \false; foreach ($node->stmts as $stmt) { if (!$stmt instanceof Expression) { continue; @@ -146,7 +147,7 @@ public function refactor(Node $node) : ?Node $assign = $stmt->expr; $variableAndCallAssign = $this->variableAndCallAssignMatcher->match($assign, $node); if (!$variableAndCallAssign instanceof VariableAndCallAssign) { - return null; + continue; } $call = $variableAndCallAssign->getCall(); $expectedName = $this->expectedNameResolver->resolveForCall($call); @@ -160,6 +161,9 @@ public function refactor(Node $node) : ?Node continue; } $this->renameVariable($variableAndCallAssign, $expectedName, $stmt); + $hasChanged = \true; + } + if ($hasChanged) { return $node; } return null; diff --git a/vendor/rector/rector/rules/Naming/RectorNamingInflector.php b/vendor/rector/rector/rules/Naming/RectorNamingInflector.php index 2c4ac588c..01eca2fb1 100644 --- a/vendor/rector/rector/rules/Naming/RectorNamingInflector.php +++ b/vendor/rector/rector/rules/Naming/RectorNamingInflector.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\Naming; -use RectorPrefix202405\Doctrine\Inflector\Inflector; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Doctrine\Inflector\Inflector; +use RectorPrefix202410\Nette\Utils\Strings; final class RectorNamingInflector { /** diff --git a/vendor/rector/rector/rules/Naming/ValueObject/ParamRename.php b/vendor/rector/rector/rules/Naming/ValueObject/ParamRename.php index 084c7ab4d..1392dcb1a 100644 --- a/vendor/rector/rector/rules/Naming/ValueObject/ParamRename.php +++ b/vendor/rector/rector/rules/Naming/ValueObject/ParamRename.php @@ -5,9 +5,7 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\FunctionLike; -use PhpParser\Node\Param; -use Rector\Naming\Contract\RenameParamValueObjectInterface; -final class ParamRename implements RenameParamValueObjectInterface +final class ParamRename { /** * @readonly @@ -19,11 +17,6 @@ final class ParamRename implements RenameParamValueObjectInterface * @var string */ private $expectedName; - /** - * @readonly - * @var \PhpParser\Node\Param - */ - private $param; /** * @readonly * @var \PhpParser\Node\Expr\Variable @@ -34,11 +27,10 @@ final class ParamRename implements RenameParamValueObjectInterface * @var \PhpParser\Node\FunctionLike */ private $functionLike; - public function __construct(string $currentName, string $expectedName, Param $param, Variable $variable, FunctionLike $functionLike) + public function __construct(string $currentName, string $expectedName, Variable $variable, FunctionLike $functionLike) { $this->currentName = $currentName; $this->expectedName = $expectedName; - $this->param = $param; $this->variable = $variable; $this->functionLike = $functionLike; } @@ -54,10 +46,6 @@ public function getFunctionLike() : FunctionLike { return $this->functionLike; } - public function getParam() : Param - { - return $this->param; - } public function getVariable() : Variable { return $this->variable; diff --git a/vendor/rector/rector/rules/Naming/ValueObject/PropertyRename.php b/vendor/rector/rector/rules/Naming/ValueObject/PropertyRename.php index 48a65a809..ff0cc4669 100644 --- a/vendor/rector/rector/rules/Naming/ValueObject/PropertyRename.php +++ b/vendor/rector/rector/rules/Naming/ValueObject/PropertyRename.php @@ -6,9 +6,8 @@ use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\PropertyProperty; -use Rector\Naming\Contract\RenamePropertyValueObjectInterface; use Rector\Validation\RectorAssert; -final class PropertyRename implements RenamePropertyValueObjectInterface +final class PropertyRename { /** * @readonly diff --git a/vendor/rector/rector/rules/Naming/ValueObjectFactory/ParamRenameFactory.php b/vendor/rector/rector/rules/Naming/ValueObjectFactory/ParamRenameFactory.php index 9485b7b6d..f45ebc345 100644 --- a/vendor/rector/rector/rules/Naming/ValueObjectFactory/ParamRenameFactory.php +++ b/vendor/rector/rector/rules/Naming/ValueObjectFactory/ParamRenameFactory.php @@ -28,6 +28,6 @@ public function createFromResolvedExpectedName(FunctionLike $functionLike, Param if ($currentName === null) { return null; } - return new ParamRename($currentName, $expectedName, $param, $param->var, $functionLike); + return new ParamRename($currentName, $expectedName, $param->var, $functionLike); } } diff --git a/vendor/rector/rector/rules/Naming/ValueObjectFactory/PropertyRenameFactory.php b/vendor/rector/rector/rules/Naming/ValueObjectFactory/PropertyRenameFactory.php index 9757837d9..64c19ebf6 100644 --- a/vendor/rector/rector/rules/Naming/ValueObjectFactory/PropertyRenameFactory.php +++ b/vendor/rector/rector/rules/Naming/ValueObjectFactory/PropertyRenameFactory.php @@ -7,7 +7,7 @@ use PhpParser\Node\Stmt\Property; use Rector\Naming\ValueObject\PropertyRename; use Rector\NodeNameResolver\NodeNameResolver; -use RectorPrefix202405\Webmozart\Assert\InvalidArgumentException; +use RectorPrefix202410\Webmozart\Assert\InvalidArgumentException; final class PropertyRenameFactory { /** diff --git a/vendor/rector/rector/rules/Naming/VariableRenamer.php b/vendor/rector/rector/rules/Naming/VariableRenamer.php index 2e40fc944..10b761abc 100644 --- a/vendor/rector/rector/rules/Naming/VariableRenamer.php +++ b/vendor/rector/rector/rules/Naming/VariableRenamer.php @@ -5,16 +5,17 @@ use PhpParser\Node; use PhpParser\Node\Expr\Assign; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; use PhpParser\Node\FunctionLike; use PhpParser\Node\Param; use PhpParser\Node\Stmt; use PhpParser\NodeTraverser; +use PHPStan\Analyser\MutatingScope; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Naming\PhpDoc\VarTagValueNodeRenamer; use Rector\NodeNameResolver\NodeNameResolver; +use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class VariableRenamer { @@ -53,8 +54,8 @@ public function renameVariableInFunctionLike(FunctionLike $functionLike, string } $hasRenamed = \false; $currentStmt = null; - $currentClosure = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->getStmts(), function (Node $node) use($oldName, $expectedName, $assign, &$isRenamingActive, &$hasRenamed, &$currentStmt, &$currentClosure) { + $currentFunctionLike = null; + $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->getStmts(), function (Node $node) use($oldName, $expectedName, $assign, &$isRenamingActive, &$hasRenamed, &$currentStmt, &$currentFunctionLike) { // skip param names if ($node instanceof Param) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; @@ -66,14 +67,14 @@ public function renameVariableInFunctionLike(FunctionLike $functionLike, string if ($node instanceof Stmt) { $currentStmt = $node; } - if ($node instanceof Closure) { - $currentClosure = $node; + if ($node instanceof FunctionLike) { + $currentFunctionLike = $node; } if (!$node instanceof Variable) { return null; } // TODO: Should be implemented in BreakingVariableRenameGuard::shouldSkipParam() - if ($this->isParamInParentFunction($node, $currentClosure)) { + if ($this->isParamInParentFunction($node, $currentFunctionLike)) { return null; } if (!$isRenamingActive) { @@ -87,16 +88,21 @@ public function renameVariableInFunctionLike(FunctionLike $functionLike, string }); return $hasRenamed; } - private function isParamInParentFunction(Variable $variable, ?Closure $closure) : bool + private function isParamInParentFunction(Variable $variable, ?FunctionLike $functionLike) : bool { - if (!$closure instanceof Closure) { + if (!$functionLike instanceof FunctionLike) { return \false; } $variableName = $this->nodeNameResolver->getName($variable); if ($variableName === null) { return \false; } - foreach ($closure->params as $param) { + $scope = $variable->getAttribute(AttributeKey::SCOPE); + $functionLikeScope = $functionLike->getAttribute(AttributeKey::SCOPE); + if ($scope instanceof MutatingScope && $functionLikeScope instanceof MutatingScope && $scope->equals($functionLikeScope)) { + return \false; + } + foreach ($functionLike->getParams() as $param) { if ($this->nodeNameResolver->isName($param, $variableName)) { return \true; } diff --git a/vendor/rector/rector/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php b/vendor/rector/rector/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php index 9b2f02238..77587601b 100644 --- a/vendor/rector/rector/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php +++ b/vendor/rector/rector/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php @@ -5,13 +5,23 @@ use PhpParser\Node; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Scalar\LNumber; +use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Break_; +use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Continue_; +use PhpParser\Node\Stmt\Do_; +use PhpParser\Node\Stmt\For_; +use PhpParser\Node\Stmt\Foreach_; +use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Switch_; +use PhpParser\Node\Stmt\While_; +use PhpParser\NodeTraverser; use PHPStan\Type\Constant\ConstantIntegerType; use PHPStan\Type\ConstantType; +use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; @@ -19,7 +29,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/a/12349889/1348344 * @see \Rector\Tests\Php52\Rector\Switch_\ContinueToBreakInSwitchRector\ContinueToBreakInSwitchRectorTest */ final class ContinueToBreakInSwitchRector extends AbstractRector implements MinPhpVersionInterface @@ -29,6 +38,10 @@ final class ContinueToBreakInSwitchRector extends AbstractRector implements MinP * @var \Rector\PhpParser\Node\Value\ValueResolver */ private $valueResolver; + /** + * @var bool + */ + private $hasChanged = \false; public function __construct(ValueResolver $valueResolver) { $this->valueResolver = $valueResolver; @@ -79,42 +92,50 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Switch_ { - $hasChanged = \false; + $this->hasChanged = \false; foreach ($node->cases as $case) { - foreach ($case->stmts as $key => $caseStmt) { - if (!$caseStmt instanceof Continue_) { - continue; - } - $newStmt = $this->processContinueStatement($caseStmt); - if ($newStmt instanceof Continue_) { - continue; - } - $case->stmts[$key] = $newStmt; - $hasChanged = \true; - } + $this->processContinueStatement($case); } - if (!$hasChanged) { + if (!$this->hasChanged) { return null; } return $node; } /** - * @return \PhpParser\Node\Stmt\Break_|\PhpParser\Node\Stmt\Continue_ + * @param \PhpParser\Node\Stmt|\Rector\Contract\PhpParser\Node\StmtsAwareInterface $stmt */ - private function processContinueStatement(Continue_ $continue) + private function processContinueStatement($stmt) : void { - if (!$continue->num instanceof Expr) { - return new Break_(); - } - if ($continue->num instanceof LNumber) { - $continueNumber = $this->valueResolver->getValue($continue->num); - if ($continueNumber <= 1) { + $this->traverseNodesWithCallable($stmt, function (Node $subNode) { + if ($subNode instanceof Class_ || $subNode instanceof Function_ || $subNode instanceof Closure) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + // continue is belong to loop + if ($subNode instanceof Foreach_ || $subNode instanceof While_ || $subNode instanceof Do_ || $subNode instanceof For_) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + if (!$subNode instanceof Continue_) { + return null; + } + if (!$subNode->num instanceof Expr) { + $this->hasChanged = \true; return new Break_(); } - } elseif ($continue->num instanceof Variable) { - return $this->processVariableNum($continue, $continue->num); - } - return $continue; + if ($subNode->num instanceof LNumber) { + $continueNumber = $this->valueResolver->getValue($subNode->num); + if ($continueNumber <= 1) { + $this->hasChanged = \true; + return new Break_(); + } + } elseif ($subNode->num instanceof Variable) { + $processVariableNum = $this->processVariableNum($subNode, $subNode->num); + if ($processVariableNum instanceof Break_) { + $this->hasChanged = \true; + return $processVariableNum; + } + } + return null; + }); } /** * @return \PhpParser\Node\Stmt\Continue_|\PhpParser\Node\Stmt\Break_ diff --git a/vendor/rector/rector/rules/Php53/Rector/Ternary/TernaryToElvisRector.php b/vendor/rector/rector/rules/Php53/Rector/Ternary/TernaryToElvisRector.php index 5800a1706..03a70e716 100644 --- a/vendor/rector/rector/rules/Php53/Rector/Ternary/TernaryToElvisRector.php +++ b/vendor/rector/rector/rules/Php53/Rector/Ternary/TernaryToElvisRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary https://stackoverflow.com/a/1993455/1348344 - * * @see \Rector\Tests\Php53\Rector\Ternary\TernaryToElvisRector\TernaryToElvisRectorTest */ final class TernaryToElvisRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php53/Rector/Variable/ReplaceHttpServerVarsByServerRector.php b/vendor/rector/rector/rules/Php53/Rector/Variable/ReplaceHttpServerVarsByServerRector.php index 9f4dd1bd9..f5eff1978 100644 --- a/vendor/rector/rector/rules/Php53/Rector/Variable/ReplaceHttpServerVarsByServerRector.php +++ b/vendor/rector/rector/rules/Php53/Rector/Variable/ReplaceHttpServerVarsByServerRector.php @@ -12,7 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\Php53\Rector\Variable\ReplaceHttpServerVarsByServerRector\ReplaceHttpServerVarsByServerRectorTest - * @changelog https://blog.tigertech.net/posts/php-5-3-http-server-vars/ */ final class ReplaceHttpServerVarsByServerRector extends AbstractRector implements MinPhpVersionInterface { diff --git a/vendor/rector/rector/rules/Php54/Rector/Array_/LongArrayToShortArrayRector.php b/vendor/rector/rector/rules/Php54/Rector/Array_/LongArrayToShortArrayRector.php index cf6449bd7..4290bb49a 100644 --- a/vendor/rector/rector/rules/Php54/Rector/Array_/LongArrayToShortArrayRector.php +++ b/vendor/rector/rector/rules/Php54/Rector/Array_/LongArrayToShortArrayRector.php @@ -54,6 +54,11 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { + // no kind attribute yet, it means just created + // no need to reprint, it already will be short array by default + if (!$node->hasAttribute(AttributeKey::KIND)) { + return null; + } if ($node->getAttribute(AttributeKey::KIND) === Array_::KIND_SHORT) { return null; } diff --git a/vendor/rector/rector/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php b/vendor/rector/rector/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php index faeb2d4fc..934678123 100644 --- a/vendor/rector/rector/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php +++ b/vendor/rector/rector/rules/Php54/Rector/Break_/RemoveZeroBreakContinueRector.php @@ -18,8 +18,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/manual/en/control-structures.continue.php https://www.php.net/manual/en/control-structures.break.php - * * @see \Rector\Tests\Php54\Rector\Break_\RemoveZeroBreakContinueRector\RemoveZeroBreakContinueRectorTest */ final class RemoveZeroBreakContinueRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php55/Rector/ClassConstFetch/StaticToSelfOnFinalClassRector.php b/vendor/rector/rector/rules/Php55/Rector/ClassConstFetch/StaticToSelfOnFinalClassRector.php index 9b037d4ef..640994e44 100644 --- a/vendor/rector/rector/rules/Php55/Rector/ClassConstFetch/StaticToSelfOnFinalClassRector.php +++ b/vendor/rector/rector/rules/Php55/Rector/ClassConstFetch/StaticToSelfOnFinalClassRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/class_name_scalars - * @changelog https://3v4l.org/AHr9C#v5.5.0 * @see \Rector\Tests\Php55\Rector\ClassConstFetch\StaticToSelfOnFinalClassRector\StaticToSelfOnFinalClassRectorTest */ final class StaticToSelfOnFinalClassRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php55/Rector/Class_/ClassConstantToSelfClassRector.php b/vendor/rector/rector/rules/Php55/Rector/Class_/ClassConstantToSelfClassRector.php index 1e36fd3ae..a0aa20274 100644 --- a/vendor/rector/rector/rules/Php55/Rector/Class_/ClassConstantToSelfClassRector.php +++ b/vendor/rector/rector/rules/Php55/Rector/Class_/ClassConstantToSelfClassRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_4 (not confirmed yet) - * @changelog https://3v4l.org/INd7o * @see \Rector\Tests\Php55\Rector\Class_\ClassConstantToSelfClassRector\ClassConstantToSelfClassRectorTest */ final class ClassConstantToSelfClassRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToSelfClassRector.php b/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToSelfClassRector.php index 85dd53b3a..d0293b2ea 100644 --- a/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToSelfClassRector.php +++ b/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToSelfClassRector.php @@ -15,8 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/ChangeLog-5.php#5.5.0 - * @changelog https://3v4l.org/GU9dP * @see \Rector\Tests\Php55\Rector\FuncCall\GetCalledClassToSelfClassRector\GetCalledClassToSelfClassRectorTest */ final class GetCalledClassToSelfClassRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php b/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php index 8021112c6..ed176ff2c 100644 --- a/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php +++ b/vendor/rector/rector/rules/Php55/Rector/FuncCall/GetCalledClassToStaticClassRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/ChangeLog-5.php#5.5.0 - * @changelog https://3v4l.org/dJgXd * @see \Rector\Tests\Php55\Rector\FuncCall\GetCalledClassToStaticClassRector\GetCalledClassToStaticClassRectorTest */ final class GetCalledClassToStaticClassRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php55/Rector/FuncCall/PregReplaceEModifierRector.php b/vendor/rector/rector/rules/Php55/Rector/FuncCall/PregReplaceEModifierRector.php index 0146b0b80..dabac98d9 100644 --- a/vendor/rector/rector/rules/Php55/Rector/FuncCall/PregReplaceEModifierRector.php +++ b/vendor/rector/rector/rules/Php55/Rector/FuncCall/PregReplaceEModifierRector.php @@ -17,8 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/remove_preg_replace_eval_modifier https://stackoverflow.com/q/19245205/1348344 - * * @see \Rector\Tests\Php55\Rector\FuncCall\PregReplaceEModifierRector\PregReplaceEModifierRectorTest */ final class PregReplaceEModifierRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php b/vendor/rector/rector/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php index 6aa704074..5512a7e0c 100644 --- a/vendor/rector/rector/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php +++ b/vendor/rector/rector/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php @@ -18,10 +18,8 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://wiki.php.net/rfc/class_name_scalars https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.8.md#form - * * @see \Rector\Tests\Php55\Rector\String_\StringClassNameToClassConstantRector\StringClassNameToClassConstantRectorTest */ final class StringClassNameToClassConstantRector extends AbstractRector implements MinPhpVersionInterface, ConfigurableRectorInterface @@ -79,7 +77,7 @@ public function run() } } CODE_SAMPLE -, ['ClassName', 'AnotherClassName', \Rector\Php55\Rector\String_\StringClassNameToClassConstantRector::SHOULD_KEEP_PRE_SLASH => \false])]); +, ['ClassName', 'AnotherClassName', self::SHOULD_KEEP_PRE_SLASH => \false])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Php55/RegexMatcher.php b/vendor/rector/rector/rules/Php55/RegexMatcher.php index 65243a39e..9fb99c84a 100644 --- a/vendor/rector/rector/rules/Php55/RegexMatcher.php +++ b/vendor/rector/rector/rules/Php55/RegexMatcher.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Php55; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Concat; use PhpParser\Node\Scalar\String_; @@ -81,6 +81,10 @@ private function createPatternWithoutE(string $pattern, string $delimiter, strin } private function matchConcat(Concat $concat) : ?Concat { + // cause parse error + if (!$concat->left instanceof Concat) { + return null; + } $lastItem = $concat->right; if (!$lastItem instanceof String_) { return null; diff --git a/vendor/rector/rector/rules/Php70/EregToPcreTransformer.php b/vendor/rector/rector/rules/Php70/EregToPcreTransformer.php index 1795c3e16..928ccdad8 100644 --- a/vendor/rector/rector/rules/Php70/EregToPcreTransformer.php +++ b/vendor/rector/rector/rules/Php70/EregToPcreTransformer.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Php70; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\Php70\Exception\InvalidEregException; /** * @changelog https://gist.github.com/lifthrasiir/704754/7e486f43e62fd1c9d3669330c251f8ca4a59a3f8 diff --git a/vendor/rector/rector/rules/Php70/Rector/Assign/ListSplitStringRector.php b/vendor/rector/rector/rules/Php70/Rector/Assign/ListSplitStringRector.php index a4799b240..17afa376b 100644 --- a/vendor/rector/rector/rules/Php70/Rector/Assign/ListSplitStringRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/Assign/ListSplitStringRector.php @@ -12,9 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.list - * - * @changelog https://stackoverflow.com/a/47965344/1348344 * @see \Rector\Tests\Php70\Rector\Assign\ListSplitStringRector\ListSplitStringRectorTest */ final class ListSplitStringRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/Assign/ListSwapArrayOrderRector.php b/vendor/rector/rector/rules/Php70/Rector/Assign/ListSwapArrayOrderRector.php index 973284657..137558708 100644 --- a/vendor/rector/rector/rules/Php70/Rector/Assign/ListSwapArrayOrderRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/Assign/ListSwapArrayOrderRector.php @@ -17,7 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.list * @see \Rector\Tests\Php70\Rector\Assign\ListSwapArrayOrderRector\ListSwapArrayOrderRectorTest */ final class ListSwapArrayOrderRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/Break_/BreakNotInLoopOrSwitchToReturnRector.php b/vendor/rector/rector/rules/Php70/Rector/Break_/BreakNotInLoopOrSwitchToReturnRector.php index 04c629bfb..6a4fd4d76 100644 --- a/vendor/rector/rector/rules/Php70/Rector/Break_/BreakNotInLoopOrSwitchToReturnRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/Break_/BreakNotInLoopOrSwitchToReturnRector.php @@ -18,9 +18,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/questions/3618030/php-fatal-error-cannot-break-continue https://stackoverflow.com/questions/11988281/why-does-cannot-break-continue-1-level-comes-in-php - * - * @changelog https://3v4l.org/Qtelt * @see \Rector\Tests\Php70\Rector\Break_\BreakNotInLoopOrSwitchToReturnRector\BreakNotInLoopOrSwitchToReturnRectorTest */ final class BreakNotInLoopOrSwitchToReturnRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php b/vendor/rector/rector/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php index 5041e7fdf..9df393c1f 100644 --- a/vendor/rector/rector/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/ClassMethod/Php4ConstructorRector.php @@ -25,7 +25,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/remove_php4_constructors * @see \Rector\Tests\Php70\Rector\ClassMethod\Php4ConstructorRector\Php4ConstructorRectorTest */ final class Php4ConstructorRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/FuncCall/EregToPregMatchRector.php b/vendor/rector/rector/rules/Php70/Rector/FuncCall/EregToPregMatchRector.php index d9447cbcd..eaf2effa1 100644 --- a/vendor/rector/rector/rules/Php70/Rector/FuncCall/EregToPregMatchRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/FuncCall/EregToPregMatchRector.php @@ -21,9 +21,8 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog http://php.net/reference.pcre.pattern.posix https://stackoverflow.com/a/17033826/1348344 https://docstore.mik.ua/orelly/webprog/pcook/ch13_02.htm - * * @see \Rector\Tests\Php70\Rector\FuncCall\EregToPregMatchRector\EregToPregMatchRectorTest */ final class EregToPregMatchRector extends AbstractRector implements MinPhpVersionInterface @@ -91,7 +90,8 @@ private function processStringPattern(FuncCall $funcCall, String_ $string, strin $pattern = $string->value; $pattern = $this->eregToPcreTransformer->transform($pattern, $this->isCaseInsensitiveFunction($functionName)); $firstArg = $funcCall->getArgs()[0]; - $firstArg->value = new String_($pattern); + Assert::isInstanceOf($firstArg->value, String_::class); + $firstArg->value->value = $pattern; } private function processVariablePattern(FuncCall $funcCall, Variable $variable, string $functionName) : void { diff --git a/vendor/rector/rector/rules/Php70/Rector/FuncCall/RandomFunctionRector.php b/vendor/rector/rector/rules/Php70/Rector/FuncCall/RandomFunctionRector.php index 73b3065b7..b984924f5 100644 --- a/vendor/rector/rector/rules/Php70/Rector/FuncCall/RandomFunctionRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/FuncCall/RandomFunctionRector.php @@ -8,6 +8,7 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; use PhpParser\Node\Scalar\LNumber; +use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -18,10 +19,19 @@ */ final class RandomFunctionRector extends AbstractRector implements MinPhpVersionInterface { + /** + * @readonly + * @var \Rector\PhpParser\Node\Value\ValueResolver + */ + private $valueResolver; /** * @var array */ private const OLD_TO_NEW_FUNCTION_NAMES = ['getrandmax' => 'mt_getrandmax', 'srand' => 'mt_srand', 'rand' => 'random_int']; + public function __construct(ValueResolver $valueResolver) + { + $this->valueResolver = $valueResolver; + } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Changes rand, srand, and getrandmax to newer alternatives', [new CodeSample('rand();', 'random_int();')]); @@ -38,13 +48,27 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?\PhpParser\Node\Expr\FuncCall { + if ($node->isFirstClassCallable()) { + return null; + } foreach (self::OLD_TO_NEW_FUNCTION_NAMES as $oldFunctionName => $newFunctionName) { if ($this->isName($node, $oldFunctionName)) { $node->name = new Name($newFunctionName); // special case: random_int(); → random_int(0, getrandmax()); - if ($newFunctionName === 'random_int' && $node->args === []) { - $node->args[0] = new Arg(new LNumber(0)); - $node->args[1] = new Arg($this->nodeFactory->createFuncCall('mt_getrandmax')); + if ($newFunctionName === 'random_int') { + $args = $node->getArgs(); + if ($args === []) { + $node->args[0] = new Arg(new LNumber(0)); + $node->args[1] = new Arg($this->nodeFactory->createFuncCall('mt_getrandmax')); + } elseif (\count($args) === 2) { + $minValue = $this->valueResolver->getValue($args[0]->value); + $maxValue = $this->valueResolver->getValue($args[1]->value); + if (\is_int($minValue) && \is_int($maxValue) && $minValue > $maxValue) { + $temp = $node->args[0]; + $node->args[0] = $node->args[1]; + $node->args[1] = $temp; + } + } } return $node; } diff --git a/vendor/rector/rector/rules/Php70/Rector/FuncCall/RenameMktimeWithoutArgsToTimeRector.php b/vendor/rector/rector/rules/Php70/Rector/FuncCall/RenameMktimeWithoutArgsToTimeRector.php index e1d45616f..e7a049eb5 100644 --- a/vendor/rector/rector/rules/Php70/Rector/FuncCall/RenameMktimeWithoutArgsToTimeRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/FuncCall/RenameMktimeWithoutArgsToTimeRector.php @@ -12,7 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/F5GE8 * @see \Rector\Tests\Php70\Rector\FuncCall\RenameMktimeWithoutArgsToTimeRector\RenameMktimeWithoutArgsToTimeRectorTest */ final class RenameMktimeWithoutArgsToTimeRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/FunctionLike/ExceptionHandlerTypehintRector.php b/vendor/rector/rector/rules/Php70/Rector/FunctionLike/ExceptionHandlerTypehintRector.php index 0d5bfd7ff..92ab97d62 100644 --- a/vendor/rector/rector/rules/Php70/Rector/FunctionLike/ExceptionHandlerTypehintRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/FunctionLike/ExceptionHandlerTypehintRector.php @@ -15,8 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/typed_properties_v2#proposal - * * @see \Rector\Tests\Php70\Rector\FunctionLike\ExceptionHandlerTypehintRector\ExceptionHandlerTypehintRectorTest */ final class ExceptionHandlerTypehintRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/If_/IfToSpaceshipRector.php b/vendor/rector/rector/rules/Php70/Rector/If_/IfToSpaceshipRector.php index 5e54e5845..de23455e0 100644 --- a/vendor/rector/rector/rules/Php70/Rector/If_/IfToSpaceshipRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/If_/IfToSpaceshipRector.php @@ -23,8 +23,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/combined-comparison-operator https://3v4l.org/LPbA0 - * * @see \Rector\Tests\Php70\Rector\If_\IfToSpaceshipRector\IfToSpaceshipRectorTest */ final class IfToSpaceshipRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/List_/EmptyListRector.php b/vendor/rector/rector/rules/Php70/Rector/List_/EmptyListRector.php index 9ba01382d..b906c0087 100644 --- a/vendor/rector/rector/rules/Php70/Rector/List_/EmptyListRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/List_/EmptyListRector.php @@ -13,7 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.list * @see \Rector\Tests\Php70\Rector\List_\EmptyListRector\EmptyListRectorTest */ final class EmptyListRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php b/vendor/rector/rector/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php index ed6d85cd0..491a2a36d 100644 --- a/vendor/rector/rector/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/MethodCall/ThisCallOnStaticMethodToStaticCallRector.php @@ -23,7 +23,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/rkiSC * @see \Rector\Tests\Php70\Rector\MethodCall\ThisCallOnStaticMethodToStaticCallRector\ThisCallOnStaticMethodToStaticCallRectorTest */ final class ThisCallOnStaticMethodToStaticCallRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php b/vendor/rector/rector/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php index 91f0a7a00..f296aef61 100644 --- a/vendor/rector/rector/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/StaticCall/StaticCallOnNonStaticToInstanceCallRector.php @@ -26,8 +26,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://thephp.cc/news/2017/07/dont-call-instance-methods-statically https://3v4l.org/tQ32f https://3v4l.org/jB9jn - * * @see \Rector\Tests\Php70\Rector\StaticCall\StaticCallOnNonStaticToInstanceCallRector\StaticCallOnNonStaticToInstanceCallRectorTest */ final class StaticCallOnNonStaticToInstanceCallRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php b/vendor/rector/rector/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php index 6b48d9657..158af75f9 100644 --- a/vendor/rector/rector/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php @@ -12,10 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/iGDVW - * - * @changelog https://wiki.php.net/rfc/switch.default.multiple https://stackoverflow.com/a/44000794/1348344 https://github.com/franzliedke/wp-mpdf/commit/9dc489215fbd1adcb514810653a73dea71db8e99#diff-2f1f4a51a2dd3a73ca034a48a67a2320L1373 - * * @see \Rector\Tests\Php70\Rector\Switch_\ReduceMultipleDefaultSwitchRector\ReduceMultipleDefaultSwitchRectorTest */ final class ReduceMultipleDefaultSwitchRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/Ternary/TernaryToSpaceshipRector.php b/vendor/rector/rector/rules/Php70/Rector/Ternary/TernaryToSpaceshipRector.php index dae90bb23..7fd239d9e 100644 --- a/vendor/rector/rector/rules/Php70/Rector/Ternary/TernaryToSpaceshipRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/Ternary/TernaryToSpaceshipRector.php @@ -16,7 +16,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/combined-comparison-operator * @see \Rector\Tests\Php70\Rector\Ternary\TernaryToSpaceshipRector\TernaryToSpaceshipRectorTest */ final class TernaryToSpaceshipRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php70/Rector/Variable/WrapVariableVariableNameInCurlyBracesRector.php b/vendor/rector/rector/rules/Php70/Rector/Variable/WrapVariableVariableNameInCurlyBracesRector.php index 31846ae5f..1e1cb2b10 100644 --- a/vendor/rector/rector/rules/Php70/Rector/Variable/WrapVariableVariableNameInCurlyBracesRector.php +++ b/vendor/rector/rector/rules/Php70/Rector/Variable/WrapVariableVariableNameInCurlyBracesRector.php @@ -13,7 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\Php70\Rector\Variable\WrapVariableVariableNameInCurlyBracesRector\WrapVariableVariableNameInCurlyBracesRectorTest - * @changelog https://www.php.net/manual/en/language.variables.variable.php */ final class WrapVariableVariableNameInCurlyBracesRector extends AbstractRector implements MinPhpVersionInterface { diff --git a/vendor/rector/rector/rules/Php71/Rector/Assign/AssignArrayToStringRector.php b/vendor/rector/rector/rules/Php71/Rector/Assign/AssignArrayToStringRector.php index 9255c4380..29fc4ae4e 100644 --- a/vendor/rector/rector/rules/Php71/Rector/Assign/AssignArrayToStringRector.php +++ b/vendor/rector/rector/rules/Php71/Rector/Assign/AssignArrayToStringRector.php @@ -26,8 +26,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/a/41000866/1348344 https://3v4l.org/ABDNv - * * @see \Rector\Tests\Php71\Rector\Assign\AssignArrayToStringRector\AssignArrayToStringRectorTest */ final class AssignArrayToStringRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php71/Rector/BinaryOp/BinaryOpBetweenNumberAndStringRector.php b/vendor/rector/rector/rules/Php71/Rector/BinaryOp/BinaryOpBetweenNumberAndStringRector.php index 49b81e686..7427b5998 100644 --- a/vendor/rector/rector/rules/Php71/Rector/BinaryOp/BinaryOpBetweenNumberAndStringRector.php +++ b/vendor/rector/rector/rules/Php71/Rector/BinaryOp/BinaryOpBetweenNumberAndStringRector.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr\BinaryOp\Concat; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Scalar; +use PhpParser\Node\Scalar\DNumber; use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\MagicConst\Line; use PhpParser\Node\Scalar\String_; @@ -21,8 +22,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/XPEEl - * @changelog https://3v4l.org/ObNQZ * @see \Rector\Tests\Php71\Rector\BinaryOp\BinaryOpBetweenNumberAndStringRector\BinaryOpBetweenNumberAndStringRectorTest */ final class BinaryOpBetweenNumberAndStringRector extends AbstractRector implements MinPhpVersionInterface @@ -58,7 +57,7 @@ class SomeClass public function run() { $value = 5 + 0; - $value = 5.0 + 0; + $value = 5.0 + 0.0; } } CODE_SAMPLE @@ -89,11 +88,11 @@ public function refactor(Node $node) : ?Node return null; } if ($this->isStringOrStaticNonNumericString($node->left) && $this->nodeTypeResolver->isNumberType($node->right)) { - $node->left = new LNumber(0); + $node->left = $this->nodeTypeResolver->getNativeType($node->right)->isInteger()->yes() ? new LNumber(0) : new DNumber(0); return $node; } if ($this->isStringOrStaticNonNumericString($node->right) && $this->nodeTypeResolver->isNumberType($node->left)) { - $node->right = new LNumber(0); + $node->right = $this->nodeTypeResolver->getNativeType($node->left)->isInteger()->yes() ? new LNumber(0) : new DNumber(0); return $node; } return null; diff --git a/vendor/rector/rector/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php b/vendor/rector/rector/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php index 627f8437c..45e1bbada 100644 --- a/vendor/rector/rector/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php +++ b/vendor/rector/rector/rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php @@ -5,6 +5,7 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassConst; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Privatization\NodeManipulator\VisibilityManipulator; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; @@ -12,11 +13,10 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/class_const_visibility - * * @see \Rector\Tests\Php71\Rector\ClassConst\PublicConstantVisibilityRector\PublicConstantVisibilityRectorTest + * @deprecated Since 1.2.4, as adds blindly public to all constants, even local-only ones that should be private. Use scope-based solution instead, e.g. https://tomasvotruba.com/blog/how-to-add-visbility-to-338-class-constants-in-25-seconds */ -final class PublicConstantVisibilityRector extends AbstractRector implements MinPhpVersionInterface +final class PublicConstantVisibilityRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedInterface { /** * @readonly diff --git a/vendor/rector/rector/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php b/vendor/rector/rector/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php index 6a8bec2cf..9e6fed93d 100644 --- a/vendor/rector/rector/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php +++ b/vendor/rector/rector/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php @@ -21,9 +21,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.reddit.com/r/PHP/comments/a1ie7g/is_there_a_linter_for_argumentcounterror_for_php/ - * @changelog http://php.net/manual/en/class.argumentcounterror.php - * * @see \Rector\Tests\Php71\Rector\FuncCall\RemoveExtraParametersRector\RemoveExtraParametersRectorTest */ final class RemoveExtraParametersRector extends AbstractRector implements MinPhpVersionInterface @@ -75,6 +72,9 @@ public function refactor(Node $node) : ?Node return null; } if ($functionLikeReflection instanceof PhpMethodReflection) { + if ($functionLikeReflection->isAbstract()) { + return null; + } $classReflection = $functionLikeReflection->getDeclaringClass(); if ($classReflection->isInterface()) { return null; diff --git a/vendor/rector/rector/rules/Php71/Rector/List_/ListToArrayDestructRector.php b/vendor/rector/rector/rules/Php71/Rector/List_/ListToArrayDestructRector.php index d8f57f796..5ca94cc3e 100644 --- a/vendor/rector/rector/rules/Php71/Rector/List_/ListToArrayDestructRector.php +++ b/vendor/rector/rector/rules/Php71/Rector/List_/ListToArrayDestructRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/short_list_syntax https://www.php.net/manual/en/migration71.new-features.php#migration71.new-features.symmetric-array-destructuring - * * @see \Rector\Tests\Php71\Rector\List_\ListToArrayDestructRector\ListToArrayDestructRectorTest */ final class ListToArrayDestructRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php71/Rector/TryCatch/MultiExceptionCatchRector.php b/vendor/rector/rector/rules/Php71/Rector/TryCatch/MultiExceptionCatchRector.php index 9b1eb71b8..56a0bde7f 100644 --- a/vendor/rector/rector/rules/Php71/Rector/TryCatch/MultiExceptionCatchRector.php +++ b/vendor/rector/rector/rules/Php71/Rector/TryCatch/MultiExceptionCatchRector.php @@ -12,8 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/multiple-catch - * * @see \Rector\Tests\Php71\Rector\TryCatch\MultiExceptionCatchRector\MultiExceptionCatchRectorTest */ final class MultiExceptionCatchRector extends AbstractRector implements MinPhpVersionInterface @@ -62,20 +60,22 @@ public function refactor(Node $node) : ?Node if (\count($node->catches) < 2) { return null; } - $printedCatches = []; $hasChanged = \false; foreach ($node->catches as $key => $catch) { + if (!isset($node->catches[$key + 1])) { + break; + } $currentPrintedCatch = $this->betterStandardPrinter->print($catch->stmts); + $nextPrintedCatch = $this->betterStandardPrinter->print($node->catches[$key + 1]->stmts); // already duplicated catch → remove it and join the type - if (\in_array($currentPrintedCatch, $printedCatches, \true)) { - // merge type to existing type - $existingCatchKey = \array_search($currentPrintedCatch, $printedCatches, \true); - $node->catches[$existingCatchKey]->types[] = $catch->types[0]; + if ($currentPrintedCatch === $nextPrintedCatch) { + // use current var as next var + $node->catches[$key + 1]->var = $node->catches[$key]->var; + // merge next types as current merge to next types + $node->catches[$key + 1]->types = \array_merge($node->catches[$key]->types, $node->catches[$key + 1]->types); unset($node->catches[$key]); $hasChanged = \true; - continue; } - $printedCatches[$key] = $currentPrintedCatch; } if ($hasChanged) { return $node; diff --git a/vendor/rector/rector/rules/Php72/NodeFactory/AnonymousFunctionFactory.php b/vendor/rector/rector/rules/Php72/NodeFactory/AnonymousFunctionFactory.php index 238560eda..c47312010 100644 --- a/vendor/rector/rector/rules/Php72/NodeFactory/AnonymousFunctionFactory.php +++ b/vendor/rector/rector/rules/Php72/NodeFactory/AnonymousFunctionFactory.php @@ -3,46 +3,30 @@ declare (strict_types=1); namespace Rector\Php72\NodeFactory; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\ComplexType; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrayDimFetch; -use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\ClosureUse; -use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Expr\New_; -use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Identifier; use PhpParser\Node\Name; -use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\NullableType; use PhpParser\Node\Param; use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt; -use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Return_; use PhpParser\Node\UnionType; -use PHPStan\Reflection\FunctionVariantWithPhpDocs; -use PHPStan\Reflection\ParameterReflection; -use PHPStan\Reflection\ParametersAcceptorSelector; -use PHPStan\Reflection\Php\PhpMethodReflection; -use PHPStan\Type\MixedType; -use PHPStan\Type\Type; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; -use Rector\PhpParser\AstResolver; use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\PhpParser\Node\NodeFactory; use Rector\PhpParser\Parser\InlineCodeParser; use Rector\PhpParser\Parser\SimplePhpParser; -use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\StaticTypeMapper\StaticTypeMapper; final class AnonymousFunctionFactory { /** @@ -55,16 +39,6 @@ final class AnonymousFunctionFactory * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - /** - * @readonly - * @var \Rector\PhpParser\Node\NodeFactory - */ - private $nodeFactory; - /** - * @readonly - * @var \Rector\StaticTypeMapper\StaticTypeMapper - */ - private $staticTypeMapper; /** * @readonly * @var \Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser @@ -75,11 +49,6 @@ final class AnonymousFunctionFactory * @var \Rector\PhpParser\Parser\SimplePhpParser */ private $simplePhpParser; - /** - * @readonly - * @var \Rector\PhpParser\AstResolver - */ - private $astResolver; /** * @readonly * @var \Rector\PhpParser\Parser\InlineCodeParser @@ -90,15 +59,12 @@ final class AnonymousFunctionFactory * @see https://regex101.com/r/jkLLlM/2 */ private const DIM_FETCH_REGEX = '#(\\$|\\\\|\\x0)(?\\d+)#'; - public function __construct(NodeNameResolver $nodeNameResolver, BetterNodeFinder $betterNodeFinder, NodeFactory $nodeFactory, StaticTypeMapper $staticTypeMapper, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, SimplePhpParser $simplePhpParser, AstResolver $astResolver, InlineCodeParser $inlineCodeParser) + public function __construct(NodeNameResolver $nodeNameResolver, BetterNodeFinder $betterNodeFinder, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, SimplePhpParser $simplePhpParser, InlineCodeParser $inlineCodeParser) { $this->nodeNameResolver = $nodeNameResolver; $this->betterNodeFinder = $betterNodeFinder; - $this->nodeFactory = $nodeFactory; - $this->staticTypeMapper = $staticTypeMapper; $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->simplePhpParser = $simplePhpParser; - $this->astResolver = $astResolver; $this->inlineCodeParser = $inlineCodeParser; } /** @@ -124,27 +90,6 @@ public function create(array $params, array $stmts, $returnTypeNode, bool $stati $anonymousFunctionClosure->stmts = $stmts; return $anonymousFunctionClosure; } - public function createFromPhpMethodReflection(PhpMethodReflection $phpMethodReflection, Expr $expr) : ?Closure - { - /** @var FunctionVariantWithPhpDocs $parametersAcceptorWithPhpDocs */ - $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::selectSingle($phpMethodReflection->getVariants()); - $newParams = $this->createParams($phpMethodReflection, $parametersAcceptorWithPhpDocs->getParameters()); - $innerMethodCall = $this->createInnerMethodCall($phpMethodReflection, $expr, $newParams); - if ($innerMethodCall === null) { - return null; - } - $returnTypeNode = null; - if (!$parametersAcceptorWithPhpDocs->getReturnType() instanceof MixedType) { - $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($parametersAcceptorWithPhpDocs->getReturnType(), TypeKind::RETURN); - } - $uses = []; - if ($expr instanceof Variable && !$this->nodeNameResolver->isName($expr, 'this')) { - $uses[] = new ClosureUse($expr); - } - // does method return something? - $stmts = $this->resolveStmts($parametersAcceptorWithPhpDocs, $innerMethodCall); - return new Closure(['params' => $newParams, 'returnType' => $returnTypeNode, 'uses' => $uses, 'stmts' => $stmts]); - } public function createAnonymousFunctionFromExpr(Expr $expr) : ?Closure { $stringValue = $this->inlineCodeParser->stringify($expr); @@ -221,116 +166,4 @@ private function createUseVariablesFromParams(array $nodes, array $params) : arr } return $filteredVariables; } - /** - * @param ParameterReflection[] $parameterReflections - * @return Param[] - */ - private function createParams(PhpMethodReflection $phpMethodReflection, array $parameterReflections) : array - { - $classReflection = $phpMethodReflection->getDeclaringClass(); - $className = $classReflection->getName(); - $methodName = $phpMethodReflection->getName(); - /** @var ClassMethod $classMethod */ - $classMethod = $this->astResolver->resolveClassMethod($className, $methodName); - $params = []; - foreach ($parameterReflections as $key => $parameterReflection) { - $variable = new Variable($parameterReflection->getName()); - $defaultExpr = $this->resolveParamDefaultExpr($parameterReflection, $key, $classMethod); - $type = $this->resolveParamType($parameterReflection); - $byRef = $parameterReflection->passedByReference()->yes(); - $params[] = new Param($variable, $defaultExpr, $type, $byRef); - } - return $params; - } - /** - * @return \PhpParser\Node\Name|\PhpParser\Node\ComplexType|\PhpParser\Node\Identifier|null - */ - private function resolveParamType(ParameterReflection $parameterReflection) - { - if ($parameterReflection->getType() instanceof MixedType) { - return null; - } - return $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($parameterReflection->getType(), TypeKind::PARAM); - } - private function resolveParamDefaultExpr(ParameterReflection $parameterReflection, int $key, ClassMethod $classMethod) : ?Expr - { - if (!$parameterReflection->getDefaultValue() instanceof Type) { - return null; - } - $paramDefaultExpr = $classMethod->params[$key]->default; - if (!$paramDefaultExpr instanceof Expr) { - return null; - } - return $this->nodeFactory->createReprintedExpr($paramDefaultExpr); - } - /** - * @param Param[] $params - * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null - */ - private function createInnerMethodCall(PhpMethodReflection $phpMethodReflection, Expr $expr, array $params) - { - if ($phpMethodReflection->isStatic()) { - $expr = $this->normalizeClassConstFetchForStatic($expr); - if (!$expr instanceof Node) { - return null; - } - $innerMethodCall = new StaticCall($expr, $phpMethodReflection->getName()); - } else { - $expr = $this->resolveExpr($expr); - if (!$expr instanceof Expr) { - return null; - } - $innerMethodCall = new MethodCall($expr, $phpMethodReflection->getName()); - } - $innerMethodCall->args = $this->nodeFactory->createArgsFromParams($params); - return $innerMethodCall; - } - /** - * @return null|\PhpParser\Node\Name|\PhpParser\Node\Name\FullyQualified|\PhpParser\Node\Expr - */ - private function normalizeClassConstFetchForStatic(Expr $expr) - { - if (!$expr instanceof ClassConstFetch) { - return $expr; - } - if (!$this->nodeNameResolver->isName($expr->name, 'class')) { - return $expr; - } - // dynamic name, nothing we can do - $className = $this->nodeNameResolver->getName($expr->class); - if ($className === null) { - return null; - } - $name = new Name($className); - if ($name->isSpecialClassName()) { - return $name; - } - return new FullyQualified($className); - } - /** - * @return \PhpParser\Node\Expr\New_|\PhpParser\Node\Expr|null - */ - private function resolveExpr(Expr $expr) - { - if (!$expr instanceof ClassConstFetch) { - return $expr; - } - if (!$this->nodeNameResolver->isName($expr->name, 'class')) { - return $expr; - } - // dynamic name, nothing we can do - $className = $this->nodeNameResolver->getName($expr->class); - return $className === null ? null : new New_(new FullyQualified($className)); - } - /** - * @return Stmt[] - * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall $innerMethodCall - */ - private function resolveStmts(FunctionVariantWithPhpDocs $functionVariantWithPhpDocs, $innerMethodCall) : array - { - if ($functionVariantWithPhpDocs->getReturnType()->isVoid()->yes()) { - return [new Expression($innerMethodCall)]; - } - return [new Return_($innerMethodCall)]; - } } diff --git a/vendor/rector/rector/rules/Php72/Rector/Assign/ListEachRector.php b/vendor/rector/rector/rules/Php72/Rector/Assign/ListEachRector.php index 4829372f7..782d91aee 100644 --- a/vendor/rector/rector/rules/Php72/Rector/Assign/ListEachRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/Assign/ListEachRector.php @@ -17,8 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_2#each - * * @see \Rector\Tests\Php72\Rector\Assign\ListEachRector\ListEachRectorTest */ final class ListEachRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php72/Rector/FuncCall/CreateFunctionToAnonymousFunctionRector.php b/vendor/rector/rector/rules/Php72/Rector/FuncCall/CreateFunctionToAnonymousFunctionRector.php index 8059d591a..c953d6d81 100644 --- a/vendor/rector/rector/rules/Php72/Rector/FuncCall/CreateFunctionToAnonymousFunctionRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/FuncCall/CreateFunctionToAnonymousFunctionRector.php @@ -26,8 +26,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://stackoverflow.com/q/48161526/1348344 http://php.net/manual/en/migration72.deprecated.php#migration72.deprecated.create_function-function - * * @see \Rector\Tests\Php72\Rector\FuncCall\CreateFunctionToAnonymousFunctionRector\CreateFunctionToAnonymousFunctionRectorTest */ final class CreateFunctionToAnonymousFunctionRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php b/vendor/rector/rector/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php index b1e363c19..c1cd45aa4 100644 --- a/vendor/rector/rector/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/FuncCall/GetClassOnNullRector.php @@ -19,8 +19,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://php.net/manual/en/migration72.incompatible.php#migration72.incompatible.no-null-to-get_class https://3v4l.org/sk0fp - * * @see \Rector\Tests\Php72\Rector\FuncCall\GetClassOnNullRector\GetClassOnNullRectorTest */ final class GetClassOnNullRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php b/vendor/rector/rector/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php index 2d4730231..ec4736a9c 100644 --- a/vendor/rector/rector/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php @@ -16,8 +16,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/gueff/blogimus/commit/04086a10320595470efe446c7ddd90e602aa7228 https://github.com/pxgamer/youtube-dl-php/commit/83cb32b8b36844f2e39f82a862a5ab73da77b608 - * * @see \Rector\Tests\Php72\Rector\FuncCall\ParseStrWithResultArgumentRector\ParseStrWithResultArgumentRectorTest */ final class ParseStrWithResultArgumentRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringifyDefineRector.php b/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringifyDefineRector.php index c2d4dbf49..6ab150222 100644 --- a/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringifyDefineRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringifyDefineRector.php @@ -14,7 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/YiTeP * @see \Rector\Tests\Php72\Rector\FuncCall\StringifyDefineRector\StringifyDefineRectorTest */ final class StringifyDefineRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringsAssertNakedRector.php b/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringsAssertNakedRector.php index 2c6eeea15..1c264b748 100644 --- a/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringsAssertNakedRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/FuncCall/StringsAssertNakedRector.php @@ -15,8 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/simplesamlphp/simplesamlphp/pull/708/files - * * @see \Rector\Tests\Php72\Rector\FuncCall\StringsAssertNakedRector\StringsAssertNakedRectorTest */ final class StringsAssertNakedRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php72/Rector/While_/WhileEachToForeachRector.php b/vendor/rector/rector/rules/Php72/Rector/While_/WhileEachToForeachRector.php index 749e9dbaf..efae476e3 100644 --- a/vendor/rector/rector/rules/Php72/Rector/While_/WhileEachToForeachRector.php +++ b/vendor/rector/rector/rules/Php72/Rector/While_/WhileEachToForeachRector.php @@ -16,8 +16,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_2#each - * * @see \Rector\Tests\Php72\Rector\While_\WhileEachToForeachRector\WhileEachToForeachRectorTest */ final class WhileEachToForeachRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php73/Rector/ConstFetch/SensitiveConstantNameRector.php b/vendor/rector/rector/rules/Php73/Rector/ConstFetch/SensitiveConstantNameRector.php index 3e00721c9..7c07bc440 100644 --- a/vendor/rector/rector/rules/Php73/Rector/ConstFetch/SensitiveConstantNameRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/ConstFetch/SensitiveConstantNameRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/case_insensitive_constant_deprecation - * * @see \Rector\Tests\Php73\Rector\ConstFetch\SensitiveConstantNameRector\SensitiveConstantNameRectorTest */ final class SensitiveConstantNameRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php b/vendor/rector/rector/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php index 7948b7694..1cf350d31 100644 --- a/vendor/rector/rector/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php @@ -19,8 +19,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://tomasvotruba.com/blog/2018/08/16/whats-new-in-php-73-in-30-seconds-in-diffs/#2-first-and-last-array-key - * * This needs to removed 1 floor above, because only nodes in arrays can be removed why traversing, * see https://github.com/nikic/PHP-Parser/issues/389 * diff --git a/vendor/rector/rector/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php b/vendor/rector/rector/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php index f40ac8837..9d38ef442 100644 --- a/vendor/rector/rector/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php @@ -19,8 +19,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog http://wiki.php.net/rfc/json_throw_on_error - * @changelog https://3v4l.org/5HMVE * @see \Rector\Tests\Php73\Rector\FuncCall\JsonThrowOnErrorRector\JsonThrowOnErrorRectorTest */ final class JsonThrowOnErrorRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php73/Rector/FuncCall/RegexDashEscapeRector.php b/vendor/rector/rector/rules/Php73/Rector/FuncCall/RegexDashEscapeRector.php index 985fe559a..375b4547e 100644 --- a/vendor/rector/rector/rules/Php73/Rector/FuncCall/RegexDashEscapeRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/FuncCall/RegexDashEscapeRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Php73\Rector\FuncCall; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Scalar\String_; use Rector\NodeTypeResolver\Node\AttributeKey; @@ -14,7 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://3v4l.org/dRG8U * @see \Rector\Tests\Php73\Rector\FuncCall\RegexDashEscapeRector\RegexDashEscapeRectorTest */ final class RegexDashEscapeRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php73/Rector/FuncCall/SensitiveDefineRector.php b/vendor/rector/rector/rules/Php73/Rector/FuncCall/SensitiveDefineRector.php index 151a59bf2..1ea4663e7 100644 --- a/vendor/rector/rector/rules/Php73/Rector/FuncCall/SensitiveDefineRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/FuncCall/SensitiveDefineRector.php @@ -11,8 +11,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/case_insensitive_constant_deprecation - * * @see \Rector\Tests\Php73\Rector\FuncCall\SensitiveDefineRector\SensitiveDefineRectorTest */ final class SensitiveDefineRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php73/Rector/FuncCall/SetCookieRector.php b/vendor/rector/rector/rules/Php73/Rector/FuncCall/SetCookieRector.php index b8aebf3bd..a30a7dcfc 100644 --- a/vendor/rector/rector/rules/Php73/Rector/FuncCall/SetCookieRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/FuncCall/SetCookieRector.php @@ -19,8 +19,6 @@ * Convert legacy setcookie arguments to new array options * * @see \Rector\Tests\Php73\Rector\FuncCall\SetcookieRector\SetCookieRectorTest - * - * @changelog https://www.php.net/setcookie https://wiki.php.net/rfc/same-site-cookie */ final class SetCookieRector extends AbstractRector implements MinPhpVersionInterface { diff --git a/vendor/rector/rector/rules/Php73/Rector/FuncCall/StringifyStrNeedlesRector.php b/vendor/rector/rector/rules/Php73/Rector/FuncCall/StringifyStrNeedlesRector.php index 273abb0ca..d4404b1ae 100644 --- a/vendor/rector/rector/rules/Php73/Rector/FuncCall/StringifyStrNeedlesRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/FuncCall/StringifyStrNeedlesRector.php @@ -14,7 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_3#string_search_functions_with_integer_needle * @see \Rector\Tests\Php73\Rector\FuncCall\StringifyStrNeedlesRector\StringifyStrNeedlesRectorTest */ final class StringifyStrNeedlesRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php73/Rector/String_/SensitiveHereNowDocRector.php b/vendor/rector/rector/rules/Php73/Rector/String_/SensitiveHereNowDocRector.php index b62b2a4ac..f2c371ad1 100644 --- a/vendor/rector/rector/rules/Php73/Rector/String_/SensitiveHereNowDocRector.php +++ b/vendor/rector/rector/rules/Php73/Rector/String_/SensitiveHereNowDocRector.php @@ -12,7 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes * @see \Rector\Tests\Php73\Rector\String_\SensitiveHereNowDocRector\SensitiveHereNowDocRectorTest */ final class SensitiveHereNowDocRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/ArrayDimFetch/CurlyToSquareBracketArrayStringRector.php b/vendor/rector/rector/rules/Php74/Rector/ArrayDimFetch/CurlyToSquareBracketArrayStringRector.php index 5dc0f2daf..4c1dce008 100644 --- a/vendor/rector/rector/rules/Php74/Rector/ArrayDimFetch/CurlyToSquareBracketArrayStringRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/ArrayDimFetch/CurlyToSquareBracketArrayStringRector.php @@ -13,7 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/manual/en/migration74.deprecated.php * @see \Rector\Tests\Php74\Rector\ArrayDimFetch\CurlyToSquareBracketArrayStringRector\CurlyToSquareBracketArrayStringRectorTest */ final class CurlyToSquareBracketArrayStringRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/Assign/NullCoalescingOperatorRector.php b/vendor/rector/rector/rules/Php74/Rector/Assign/NullCoalescingOperatorRector.php index 92dd1bac6..b1d8a8343 100644 --- a/vendor/rector/rector/rules/Php74/Rector/Assign/NullCoalescingOperatorRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/Assign/NullCoalescingOperatorRector.php @@ -13,7 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/null_coalesce_equal_operator * @see \Rector\Tests\Php74\Rector\Assign\NullCoalescingOperatorRector\NullCoalescingOperatorRectorTest */ final class NullCoalescingOperatorRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/Closure/ClosureToArrowFunctionRector.php b/vendor/rector/rector/rules/Php74/Rector/Closure/ClosureToArrowFunctionRector.php index 94b0fd45b..d5c4f5fa2 100644 --- a/vendor/rector/rector/rules/Php74/Rector/Closure/ClosureToArrowFunctionRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/Closure/ClosureToArrowFunctionRector.php @@ -15,8 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/arrow_functions_v2 - * * @see \Rector\Tests\Php74\Rector\Closure\ClosureToArrowFunctionRector\ClosureToArrowFunctionRectorTest */ final class ClosureToArrowFunctionRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/Double/RealToFloatTypeCastRector.php b/vendor/rector/rector/rules/Php74/Rector/Double/RealToFloatTypeCastRector.php index 6cd1ca716..a1ea3b246 100644 --- a/vendor/rector/rector/rules/Php74/Rector/Double/RealToFloatTypeCastRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/Double/RealToFloatTypeCastRector.php @@ -12,7 +12,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_4 * @see \Rector\Tests\Php74\Rector\Double\RealToFloatTypeCastRector\RealToFloatTypeCastRectorTest */ final class RealToFloatTypeCastRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/FuncCall/ArrayKeyExistsOnPropertyRector.php b/vendor/rector/rector/rules/Php74/Rector/FuncCall/ArrayKeyExistsOnPropertyRector.php index c5c25827d..a95498b3a 100644 --- a/vendor/rector/rector/rules/Php74/Rector/FuncCall/ArrayKeyExistsOnPropertyRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/FuncCall/ArrayKeyExistsOnPropertyRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_4 (not confirmed yet) - * @changelog https://3v4l.org/69mpd * @see \Rector\Tests\Php74\Rector\FuncCall\ArrayKeyExistsOnPropertyRector\ArrayKeyExistsOnPropertyRectorTest */ final class ArrayKeyExistsOnPropertyRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/FuncCall/FilterVarToAddSlashesRector.php b/vendor/rector/rector/rules/Php74/Rector/FuncCall/FilterVarToAddSlashesRector.php index 1646ba032..9c58161d0 100644 --- a/vendor/rector/rector/rules/Php74/Rector/FuncCall/FilterVarToAddSlashesRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/FuncCall/FilterVarToAddSlashesRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_4 (not confirmed yet) - * @changelog https://3v4l.org/9rLjE * @see \Rector\Tests\Php74\Rector\FuncCall\FilterVarToAddSlashesRector\FilterVarToAddSlashesRectorTest */ final class FilterVarToAddSlashesRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/FuncCall/HebrevcToNl2brHebrevRector.php b/vendor/rector/rector/rules/Php74/Rector/FuncCall/HebrevcToNl2brHebrevRector.php new file mode 100644 index 000000000..16fbf6e3a --- /dev/null +++ b/vendor/rector/rector/rules/Php74/Rector/FuncCall/HebrevcToNl2brHebrevRector.php @@ -0,0 +1,55 @@ +> + */ + public function getNodeTypes() : array + { + return [FuncCall::class]; + } + /** + * @param FuncCall $node + */ + public function refactor(Node $node) : ?FuncCall + { + if (!$this->isName($node, 'hebrevc')) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + $node->name = new Name('hebrev'); + return new FuncCall(new Name('nl2br'), [new Arg($node)]); + } +} diff --git a/vendor/rector/rector/rules/Php74/Rector/FuncCall/MbStrrposEncodingArgumentPositionRector.php b/vendor/rector/rector/rules/Php74/Rector/FuncCall/MbStrrposEncodingArgumentPositionRector.php index b6f16cb25..5017b4cc8 100644 --- a/vendor/rector/rector/rules/Php74/Rector/FuncCall/MbStrrposEncodingArgumentPositionRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/FuncCall/MbStrrposEncodingArgumentPositionRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_4 https://3v4l.org/kLdtB - * * @see \Rector\Tests\Php74\Rector\FuncCall\MbStrrposEncodingArgumentPositionRector\MbStrrposEncodingArgumentPositionRectorTest */ final class MbStrrposEncodingArgumentPositionRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php b/vendor/rector/rector/rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php index 7e93d53b2..0d0764c58 100644 --- a/vendor/rector/rector/rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php @@ -19,8 +19,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/manual/en/function.money-format.php#warning - * * @see \Rector\Tests\Php74\Rector\FuncCall\MoneyFormatToNumberFormatRector\MoneyFormatToNumberFormatRectorTest */ final class MoneyFormatToNumberFormatRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/FuncCall/RestoreIncludePathToIniRestoreRector.php b/vendor/rector/rector/rules/Php74/Rector/FuncCall/RestoreIncludePathToIniRestoreRector.php new file mode 100644 index 000000000..a7cc97eee --- /dev/null +++ b/vendor/rector/rector/rules/Php74/Rector/FuncCall/RestoreIncludePathToIniRestoreRector.php @@ -0,0 +1,58 @@ +> + */ + public function getNodeTypes() : array + { + return [FuncCall::class]; + } + /** + * @param FuncCall $node + */ + public function refactor(Node $node) : ?FuncCall + { + if (!$this->isName($node, 'restore_include_path')) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + $node->name = new Name('ini_restore'); + $node->args[0] = new Arg(new String_('include_path')); + return $node; + } +} diff --git a/vendor/rector/rector/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php b/vendor/rector/rector/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php index 084104eb3..eafa6b99c 100644 --- a/vendor/rector/rector/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php @@ -14,13 +14,9 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://wiki.php.net/rfc/numeric_literal_separator - * @changelog https://github.com/nikic/PHP-Parser/pull/615 - * * @see \Rector\Tests\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector\AddLiteralSeparatorToNumberRectorTest - * @changelog https://twitter.com/seldaek/status/1329064983120982022 * * Taking the most generic use case to the account: https://wiki.php.net/rfc/numeric_literal_separator#should_it_be_the_role_of_an_ide_to_group_digits * The final check should be done manually @@ -75,7 +71,7 @@ public function run() } } CODE_SAMPLE -, [\Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::LIMIT_VALUE => 1000000])]); +, [self::LIMIT_VALUE => 1000000])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php b/vendor/rector/rector/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php index 98685280f..b8b6e6749 100644 --- a/vendor/rector/rector/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php @@ -17,8 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecations_php_7_4 (not confirmed yet) - * @changelog https://3v4l.org/RTCUq * @see \Rector\Tests\Php74\Rector\StaticCall\ExportToReflectionFunctionRector\ExportToReflectionFunctionRectorTest */ final class ExportToReflectionFunctionRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php b/vendor/rector/rector/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php index e677ca7d4..9f06b71ba 100644 --- a/vendor/rector/rector/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php +++ b/vendor/rector/rector/rules/Php74/Rector/Ternary/ParenthesizeNestedTernaryRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://www.php.net/manual/en/migration74.deprecated.php - * @changelog https://3v4l.org/vhdlJ * @see \Rector\Tests\Php74\Rector\Ternary\ParenthesizeNestedTernaryRector\ParenthesizeNestedTernaryRectorTest */ final class ParenthesizeNestedTernaryRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php80/MatchAndRefactor/StrStartsWithMatchAndRefactor/SubstrMatchAndRefactor.php b/vendor/rector/rector/rules/Php80/MatchAndRefactor/StrStartsWithMatchAndRefactor/SubstrMatchAndRefactor.php index ef9bec8af..16ac46d2b 100644 --- a/vendor/rector/rector/rules/Php80/MatchAndRefactor/StrStartsWithMatchAndRefactor/SubstrMatchAndRefactor.php +++ b/vendor/rector/rector/rules/Php80/MatchAndRefactor/StrStartsWithMatchAndRefactor/SubstrMatchAndRefactor.php @@ -108,8 +108,8 @@ private function isHardcodedStringWithLNumberLength(StrStartsWith $strStartsWith if (!$this->valueResolver->isValue($secondArg->value, 0)) { return \false; } - $hardcodedStringNeedle = $strStartsWith->getNeedleExpr(); - if (!$hardcodedStringNeedle instanceof String_) { + $expr = $strStartsWith->getNeedleExpr(); + if (!$expr instanceof String_) { return \false; } if (\count($substrFuncCall->getArgs()) < 3) { @@ -119,6 +119,6 @@ private function isHardcodedStringWithLNumberLength(StrStartsWith $strStartsWith if (!$lNumberLength instanceof LNumber) { return \false; } - return $lNumberLength->value === \strlen($hardcodedStringNeedle->value); + return $lNumberLength->value === \strlen($expr->value); } } diff --git a/vendor/rector/rector/rules/Php80/NodeAnalyzer/PhpAttributeAnalyzer.php b/vendor/rector/rector/rules/Php80/NodeAnalyzer/PhpAttributeAnalyzer.php index ba39916e1..4daa42508 100644 --- a/vendor/rector/rector/rules/Php80/NodeAnalyzer/PhpAttributeAnalyzer.php +++ b/vendor/rector/rector/rules/Php80/NodeAnalyzer/PhpAttributeAnalyzer.php @@ -15,6 +15,7 @@ use PhpParser\Node\Stmt\Property; use PHPStan\Reflection\ReflectionProvider; use Rector\NodeNameResolver\NodeNameResolver; +use Rector\Php81\Enum\AttributeName; use Rector\PhpAttribute\Enum\DocTagNodeState; final class PhpAttributeAnalyzer { @@ -48,6 +49,9 @@ public function hasPhpAttribute($node, string $attributeClass) : bool } return \false; } + /** + * @param AttributeName::* $attributeClass + */ public function hasInheritedPhpAttribute(Class_ $class, string $attributeClass) : bool { $className = (string) $this->nodeNameResolver->getName($class); diff --git a/vendor/rector/rector/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php b/vendor/rector/rector/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php index 6c8a7b522..f7cf1be4f 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php @@ -7,6 +7,7 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\TryCatch; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; +use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractRector; @@ -15,8 +16,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/non-capturing_catches - * * @see \Rector\Tests\Php80\Rector\Catch_\RemoveUnusedVariableInCatchRector\RemoveUnusedVariableInCatchRectorTest */ final class RemoveUnusedVariableInCatchRector extends AbstractRector implements MinPhpVersionInterface @@ -31,10 +30,16 @@ final class RemoveUnusedVariableInCatchRector extends AbstractRector implements * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - public function __construct(StmtsManipulator $stmtsManipulator, BetterNodeFinder $betterNodeFinder) + /** + * @readonly + * @var \Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer + */ + private $exprUsedInNodeAnalyzer; + public function __construct(StmtsManipulator $stmtsManipulator, BetterNodeFinder $betterNodeFinder, ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer) { $this->stmtsManipulator = $stmtsManipulator; $this->betterNodeFinder = $betterNodeFinder; + $this->exprUsedInNodeAnalyzer = $exprUsedInNodeAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -89,8 +94,10 @@ public function refactor(Node $node) : ?Node } /** @var string $variableName */ $variableName = $this->getName($caughtVar); - $isVariableUsed = (bool) $this->betterNodeFinder->findVariableOfName($catch->stmts, $variableName); - if ($isVariableUsed) { + $isFoundInCatchStmts = (bool) $this->betterNodeFinder->findFirst($catch->stmts, function (Node $subNode) use($caughtVar) : bool { + return $this->exprUsedInNodeAnalyzer->isUsed($subNode, $caughtVar); + }); + if ($isFoundInCatchStmts) { continue; } if ($this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, $variableName)) { diff --git a/vendor/rector/rector/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php b/vendor/rector/rector/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php index 9b918f0fb..84e4fc931 100644 --- a/vendor/rector/rector/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/ClassConstFetch/ClassOnThisVariableObjectRector.php @@ -19,9 +19,6 @@ * ::class introduced in php 5.5 * while $this::class introduced in php 8.0 * - * @changelog https://wiki.php.net/rfc/class_name_scalars - * @changelog https://wiki.php.net/rfc/class_name_literal_on_object - * * @see \Rector\Tests\Php80\Rector\ClassConstFetch\ClassOnThisVariableObjectRector\ClassOnThisVariableObjectRectorTest */ final class ClassOnThisVariableObjectRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php b/vendor/rector/rector/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php index 20d4c7958..0eeafe72a 100644 --- a/vendor/rector/rector/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php @@ -27,7 +27,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/lsp_errors * @see \Rector\Tests\Php80\Rector\ClassMethod\AddParamBasedOnParentClassMethodRector\AddParamBasedOnParentClassMethodRectorTest */ final class AddParamBasedOnParentClassMethodRector extends AbstractRector implements MinPhpVersionInterface @@ -200,7 +199,7 @@ private function processReplaceClassMethodParams(ClassMethod $node, ClassMethod } $paramDefault = $parentClassMethodParam->default; if ($paramDefault instanceof Expr) { - $paramDefault = $this->nodeFactory->createReprintedExpr($paramDefault); + $paramDefault = $this->nodeFactory->createReprintedNode($paramDefault); } $paramName = $this->nodeNameResolver->getName($parentClassMethodParam); $paramType = $this->resolveParamType($parentClassMethodParam); @@ -220,9 +219,7 @@ private function resolveParamType(Param $param) if ($param->type === null) { return null; } - $paramType = $param->type; - $paramType->setAttribute(AttributeKey::ORIGINAL_NODE, null); - return $paramType; + return $this->nodeFactory->createReprintedNode($param->type); } /** * @return string[] diff --git a/vendor/rector/rector/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php b/vendor/rector/rector/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php index 1f4bad5be..ef8cbf8cb 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Class_/AnnotationToAttributeRector.php @@ -37,11 +37,8 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://wiki.php.net/rfc/attributes_v2 - * @changelog https://wiki.php.net/rfc/new_in_initializers - * * @see \Rector\Tests\Php80\Rector\Class_\AnnotationToAttributeRector\AnnotationToAttributeRectorTest * @see \Rector\Tests\Php80\Rector\Class_\AnnotationToAttributeRector\Php81NestedAttributesRectorTest */ diff --git a/vendor/rector/rector/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php b/vendor/rector/rector/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php index a1b554580..b404f5ef5 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php @@ -38,8 +38,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/constructor_promotion https://github.com/php/php-src/pull/5291 - * * @see \Rector\Tests\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector\ClassPropertyAssignToConstructorPromotionRectorTest */ final class ClassPropertyAssignToConstructorPromotionRector extends AbstractRector implements MinPhpVersionInterface, ConfigurableRectorInterface @@ -155,7 +153,7 @@ public function __construct( } } CODE_SAMPLE -, [\Rector\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector::INLINE_PUBLIC => \false, \Rector\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector::RENAME_PROPERTY => \true])]); +, [self::INLINE_PUBLIC => \false, self::RENAME_PROPERTY => \true])]); } public function configure(array $configuration) : void { diff --git a/vendor/rector/rector/rules/Php80/Rector/Class_/StringableForToStringRector.php b/vendor/rector/rector/rules/Php80/Rector/Class_/StringableForToStringRector.php index fc02f2092..b76df8908 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Class_/StringableForToStringRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Class_/StringableForToStringRector.php @@ -6,12 +6,15 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Cast\String_ as CastString_; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Identifier; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; +use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; +use PhpParser\NodeTraverser; use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer; use Rector\NodeAnalyzer\ClassAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; @@ -23,8 +26,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/stringable - * * @see \Rector\Tests\Php80\Rector\Class_\StringableForToStringRector\StringableForToStringRectorTest */ final class StringableForToStringRector extends AbstractRector implements MinPhpVersionInterface @@ -145,7 +146,10 @@ private function processNotStringType(ClassMethod $toStringClassMethod) : void $this->hasChanged = \true; return; } - $this->traverseNodesWithCallable((array) $toStringClassMethod->stmts, function (Node $subNode) { + $this->traverseNodesWithCallable((array) $toStringClassMethod->stmts, function (Node $subNode) : ?int { + if ($subNode instanceof Class_ || $subNode instanceof Function_ || $subNode instanceof Closure) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } if (!$subNode instanceof Return_) { return null; } diff --git a/vendor/rector/rector/rules/Php80/Rector/FuncCall/ClassOnObjectRector.php b/vendor/rector/rector/rules/Php80/Rector/FuncCall/ClassOnObjectRector.php index c8dd7c98a..b65302d45 100644 --- a/vendor/rector/rector/rules/Php80/Rector/FuncCall/ClassOnObjectRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/FuncCall/ClassOnObjectRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/class_name_literal_on_object - * * @see \Rector\Tests\Php80\Rector\FuncCall\ClassOnObjectRector\ClassOnObjectRectorTest */ final class ClassOnObjectRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php80/Rector/FunctionLike/MixedTypeRector.php b/vendor/rector/rector/rules/Php80/Rector/FunctionLike/MixedTypeRector.php index a988b1d99..76d93eb81 100644 --- a/vendor/rector/rector/rules/Php80/Rector/FunctionLike/MixedTypeRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/FunctionLike/MixedTypeRector.php @@ -100,7 +100,7 @@ public function refactor(Node $node) : ?Node $this->hasChanged = \false; $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); $this->refactorParamTypes($node, $phpDocInfo); - $hasChanged = $this->paramTagRemover->removeParamTagsIfUseless($phpDocInfo, $node); + $hasChanged = $this->paramTagRemover->removeParamTagsIfUseless($phpDocInfo, $node, new MixedType()); if ($this->hasChanged) { return $node; } diff --git a/vendor/rector/rector/rules/Php80/Rector/Identical/StrEndsWithRector.php b/vendor/rector/rector/rules/Php80/Rector/Identical/StrEndsWithRector.php index 71e80bf6c..7da261144 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Identical/StrEndsWithRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Identical/StrEndsWithRector.php @@ -27,8 +27,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions - * * @see \Rector\Tests\Php80\Rector\Identical\StrEndsWithRector\StrEndsWithRectorTest */ final class StrEndsWithRector extends AbstractRector implements MinPhpVersionInterface, RelatedPolyfillInterface diff --git a/vendor/rector/rector/rules/Php80/Rector/Identical/StrStartsWithRector.php b/vendor/rector/rector/rules/Php80/Rector/Identical/StrStartsWithRector.php index 86bc32374..4aafdb0ca 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Identical/StrStartsWithRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Identical/StrStartsWithRector.php @@ -21,11 +21,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions - * - * @changelog https://3v4l.org/RQHB5 for weak compare - * @changelog https://3v4l.org/AmLja for weak compare - * * @see \Rector\Tests\Php80\Rector\Identical\StrStartsWithRector\StrStartsWithRectorTest */ final class StrStartsWithRector extends AbstractRector implements MinPhpVersionInterface, RelatedPolyfillInterface diff --git a/vendor/rector/rector/rules/Php80/Rector/NotIdentical/StrContainsRector.php b/vendor/rector/rector/rules/Php80/Rector/NotIdentical/StrContainsRector.php index 820e69987..274a590be 100644 --- a/vendor/rector/rector/rules/Php80/Rector/NotIdentical/StrContainsRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/NotIdentical/StrContainsRector.php @@ -23,8 +23,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://externals.io/message/108562 https://github.com/php/php-src/pull/5179 - * * @see \Rector\Tests\Php80\Rector\NotIdentical\StrContainsRector\StrContainsRectorTest */ final class StrContainsRector extends AbstractRector implements MinPhpVersionInterface, RelatedPolyfillInterface diff --git a/vendor/rector/rector/rules/Php80/Rector/Property/NestedAnnotationToAttributeRector.php b/vendor/rector/rector/rules/Php80/Rector/Property/NestedAnnotationToAttributeRector.php index 7aceb7aa9..2a33e173c 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Property/NestedAnnotationToAttributeRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Property/NestedAnnotationToAttributeRector.php @@ -8,6 +8,7 @@ use PhpParser\Node\Param; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Property; +use PhpParser\Node\Stmt\Use_; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; @@ -29,11 +30,9 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Php80\Rector\Property\NestedAnnotationToAttributeRector\NestedAnnotationToAttributeRectorTest - * - * @changelog https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/reference/attributes-reference.html#joincolumn-inversejoincolumn */ final class NestedAnnotationToAttributeRector extends AbstractRector implements ConfigurableRectorInterface, MinPhpVersionInterface { @@ -107,7 +106,7 @@ class SomeEntity private $collection; } CODE_SAMPLE -, [[new NestedAnnotationToAttribute('Doctrine\\ORM\\Mapping\\JoinTable', [new AnnotationPropertyToAttributeClass('Doctrine\\ORM\\Mapping\\JoinColumn', 'joinColumns'), new AnnotationPropertyToAttributeClass('Doctrine\\ORM\\Mapping\\InverseJoinColumn', 'inverseJoinColumns')])]])]); +, [new NestedAnnotationToAttribute('Doctrine\\ORM\\Mapping\\JoinTable', [new AnnotationPropertyToAttributeClass('Doctrine\\ORM\\Mapping\\JoinColumn', 'joinColumns'), new AnnotationPropertyToAttributeClass('Doctrine\\ORM\\Mapping\\InverseJoinColumn', 'inverseJoinColumns')])])]); } /** * @return array> @@ -149,7 +148,7 @@ public function provideMinPhpVersion() : int return PhpVersion::PHP_80; } /** - * @param Node\Stmt\Use_[] $uses + * @param Use_[] $uses * @return AttributeGroup[] */ private function transformDoctrineAnnotationClassesToAttributeGroups(PhpDocInfo $phpDocInfo, array $uses) : array diff --git a/vendor/rector/rector/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php b/vendor/rector/rector/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php index afda24fb0..3869993a3 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php @@ -22,9 +22,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/match_expression_v2 - * @changelog https://3v4l.org/572T5 - * * @see \Rector\Tests\Php80\Rector\Switch_\ChangeSwitchToMatchRector\ChangeSwitchToMatchRectorTest */ final class ChangeSwitchToMatchRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php80/Rector/Ternary/GetDebugTypeRector.php b/vendor/rector/rector/rules/Php80/Rector/Ternary/GetDebugTypeRector.php index ff936df95..6b72ebc31 100644 --- a/vendor/rector/rector/rules/Php80/Rector/Ternary/GetDebugTypeRector.php +++ b/vendor/rector/rector/rules/Php80/Rector/Ternary/GetDebugTypeRector.php @@ -17,8 +17,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/get_debug_type - * * @see \Rector\Tests\Php80\Rector\Ternary\GetDebugTypeRector\GetDebugTypeRectorTest */ final class GetDebugTypeRector extends AbstractRector implements MinPhpVersionInterface, RelatedPolyfillInterface diff --git a/vendor/rector/rector/rules/Php80/ValueObject/AnnotationToAttribute.php b/vendor/rector/rector/rules/Php80/ValueObject/AnnotationToAttribute.php index 95156b5b1..08b634008 100644 --- a/vendor/rector/rector/rules/Php80/ValueObject/AnnotationToAttribute.php +++ b/vendor/rector/rector/rules/Php80/ValueObject/AnnotationToAttribute.php @@ -5,7 +5,7 @@ use Rector\Php80\Contract\ValueObject\AnnotationToAttributeInterface; use Rector\Validation\RectorAssert; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class AnnotationToAttribute implements AnnotationToAttributeInterface { /** diff --git a/vendor/rector/rector/rules/Php81/NodeFactory/EnumFactory.php b/vendor/rector/rector/rules/Php81/NodeFactory/EnumFactory.php index 7e9888e0c..884dce1b5 100644 --- a/vendor/rector/rector/rules/Php81/NodeFactory/EnumFactory.php +++ b/vendor/rector/rector/rules/Php81/NodeFactory/EnumFactory.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Php81\NodeFactory; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\BuilderFactory; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; @@ -15,7 +15,6 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Enum_; use PhpParser\Node\Stmt\EnumCase; -use PhpParser\Node\Stmt\Return_; use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; @@ -142,8 +141,7 @@ private function generateMappingFromClass(Class_ $class) : array if (!$classMethod instanceof ClassMethod) { return []; } - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($classMethod, Return_::class); + $returns = $this->betterNodeFinder->findReturnsScoped($classMethod); /** @var array $mapping */ $mapping = []; foreach ($returns as $return) { diff --git a/vendor/rector/rector/rules/Php81/Rector/Array_/FirstClassCallableRector.php b/vendor/rector/rector/rules/Php81/Rector/Array_/FirstClassCallableRector.php index 3e4de9a81..4ef676e4e 100644 --- a/vendor/rector/rector/rules/Php81/Rector/Array_/FirstClassCallableRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/Array_/FirstClassCallableRector.php @@ -20,14 +20,13 @@ use Rector\NodeCollector\NodeAnalyzer\ArrayCallableMethodMatcher; use Rector\NodeCollector\ValueObject\ArrayCallable; use Rector\Rector\AbstractScopeAwareRector; +use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\PhpVersion; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://php.watch/versions/8.1/first-class-callable-syntax - * * @see \Rector\Tests\Php81\Rector\Array_\FirstClassCallableRector\FirstClassCallableRectorTest */ final class FirstClassCallableRector extends AbstractScopeAwareRector implements MinPhpVersionInterface @@ -42,13 +41,20 @@ final class FirstClassCallableRector extends AbstractScopeAwareRector implements * @var \PHPStan\Reflection\ReflectionProvider */ private $reflectionProvider; - public function __construct(ArrayCallableMethodMatcher $arrayCallableMethodMatcher, ReflectionProvider $reflectionProvider) + /** + * @readonly + * @var \Rector\Reflection\ReflectionResolver + */ + private $reflectionResolver; + public function __construct(ArrayCallableMethodMatcher $arrayCallableMethodMatcher, ReflectionProvider $reflectionProvider, ReflectionResolver $reflectionResolver) { $this->arrayCallableMethodMatcher = $arrayCallableMethodMatcher; $this->reflectionProvider = $reflectionProvider; + $this->reflectionResolver = $reflectionResolver; } public function getRuleDefinition() : RuleDefinition { + // see RFC https://wiki.php.net/rfc/first_class_callable_syntax return new RuleDefinition('Upgrade array callable to first class callable', [new CodeSample(<<<'CODE_SAMPLE' final class SomeClass { @@ -109,7 +115,16 @@ public function refactorWithScope(Node $node, Scope $scope) } return new StaticCall($callerExpr->class, $arrayCallable->getMethod(), $args); } - return new MethodCall($callerExpr, $arrayCallable->getMethod(), $args); + $methodName = $arrayCallable->getMethod(); + $methodCall = new MethodCall($callerExpr, $methodName, $args); + $classReflection = $this->reflectionResolver->resolveClassReflectionSourceObject($methodCall); + if ($classReflection instanceof ClassReflection && $classReflection->hasNativeMethod($methodName)) { + $method = $classReflection->getNativeMethod($methodName); + if (!$method->isPublic()) { + return null; + } + } + return $methodCall; } public function provideMinPhpVersion() : int { diff --git a/vendor/rector/rector/rules/Php81/Rector/ClassConst/FinalizePublicClassConstantRector.php b/vendor/rector/rector/rules/Php81/Rector/ClassConst/FinalizePublicClassConstantRector.php deleted file mode 100644 index 4a241703d..000000000 --- a/vendor/rector/rector/rules/Php81/Rector/ClassConst/FinalizePublicClassConstantRector.php +++ /dev/null @@ -1,62 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [Class_::class]; - } - /** - * @param Class_ $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as its functionality caused bugs. Without knowing the full dependency tree, its risky to change.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } - public function provideMinPhpVersion() : int - { - return PhpVersionFeature::FINAL_CLASS_CONSTANTS; - } -} diff --git a/vendor/rector/rector/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php b/vendor/rector/rector/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php index 84aa90dfe..3108c5c42 100644 --- a/vendor/rector/rector/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php @@ -12,6 +12,7 @@ use PhpParser\Node\Stmt\Property; use PHPStan\Reflection\ClassReflection; use Rector\FamilyTree\NodeAnalyzer\ClassChildAnalyzer; +use Rector\NodeManipulator\StmtsManipulator; use Rector\Php81\NodeAnalyzer\CoalesePropertyAssignMatcher; use Rector\Rector\AbstractRector; use Rector\Reflection\ReflectionResolver; @@ -21,8 +22,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/new_in_initializers - * * @see \Rector\Tests\Php81\Rector\ClassMethod\NewInInitializerRector\NewInInitializerRectorTest */ final class NewInInitializerRector extends AbstractRector implements MinPhpVersionInterface @@ -42,11 +41,17 @@ final class NewInInitializerRector extends AbstractRector implements MinPhpVersi * @var \Rector\Php81\NodeAnalyzer\CoalesePropertyAssignMatcher */ private $coalesePropertyAssignMatcher; - public function __construct(ReflectionResolver $reflectionResolver, ClassChildAnalyzer $classChildAnalyzer, CoalesePropertyAssignMatcher $coalesePropertyAssignMatcher) + /** + * @readonly + * @var \Rector\NodeManipulator\StmtsManipulator + */ + private $stmtsManipulator; + public function __construct(ReflectionResolver $reflectionResolver, ClassChildAnalyzer $classChildAnalyzer, CoalesePropertyAssignMatcher $coalesePropertyAssignMatcher, StmtsManipulator $stmtsManipulator) { $this->reflectionResolver = $reflectionResolver; $this->classChildAnalyzer = $classChildAnalyzer; $this->coalesePropertyAssignMatcher = $coalesePropertyAssignMatcher; + $this->stmtsManipulator = $stmtsManipulator; } public function getRuleDefinition() : RuleDefinition { @@ -100,6 +105,11 @@ public function refactor(Node $node) : ?Node return null; } $hasChanged = \false; + // stmts variable defined to avoid unset overlap when used via array_slice() on + // StmtsManipulator::isVariableUsedInNextStmt() + // @see https://github.com/rectorphp/rector-src/pull/5968 + // @see https://3v4l.org/eojhk + $stmts = (array) $constructClassMethod->stmts; foreach ((array) $constructClassMethod->stmts as $key => $stmt) { foreach ($params as $param) { $paramName = $this->getName($param); @@ -107,6 +117,9 @@ public function refactor(Node $node) : ?Node if (!$coalesce instanceof Coalesce) { continue; } + if ($this->stmtsManipulator->isVariableUsedInNextStmt($stmts, $key + 1, $paramName)) { + continue; + } /** @var NullableType $currentParamType */ $currentParamType = $param->type; $param->type = $currentParamType->type; diff --git a/vendor/rector/rector/rules/Php81/Rector/Class_/MyCLabsClassToEnumRector.php b/vendor/rector/rector/rules/Php81/Rector/Class_/MyCLabsClassToEnumRector.php index a9b68102c..79547d9b9 100644 --- a/vendor/rector/rector/rules/Php81/Rector/Class_/MyCLabsClassToEnumRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/Class_/MyCLabsClassToEnumRector.php @@ -13,9 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/enumerations - * @changelog https://github.com/myclabs/php-enum - * * @see \Rector\Tests\Php81\Rector\Class_\MyCLabsClassToEnumRector\MyCLabsClassToEnumRectorTest */ final class MyCLabsClassToEnumRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php b/vendor/rector/rector/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php index c7be15a3c..6bba6f0ee 100644 --- a/vendor/rector/rector/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php @@ -15,9 +15,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/enumerations - * @changelog https://github.com/spatie/enum - * * @see \Rector\Tests\Php81\Rector\Class_\SpatieEnumClassToEnumRector\SpatieEnumClassToEnumRectorTest */ final class SpatieEnumClassToEnumRector extends AbstractRector implements MinPhpVersionInterface, ConfigurableRectorInterface @@ -65,7 +62,7 @@ enum StatusEnum : string case ARCHIVED = 'archived'; } CODE_SAMPLE -, [\Rector\Php81\Rector\Class_\SpatieEnumClassToEnumRector::TO_UPPER_SNAKE_CASE => \false])]); +, [self::TO_UPPER_SNAKE_CASE => \false])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Php81/Rector/MethodCall/MyCLabsMethodCallToEnumConstRector.php b/vendor/rector/rector/rules/Php81/Rector/MethodCall/MyCLabsMethodCallToEnumConstRector.php index 570c72309..c1d0d4e8f 100644 --- a/vendor/rector/rector/rules/Php81/Rector/MethodCall/MyCLabsMethodCallToEnumConstRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/MethodCall/MyCLabsMethodCallToEnumConstRector.php @@ -20,9 +20,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/enumerations - * @changelog https://github.com/myclabs/php-enum - * * @see \Rector\Tests\Php81\Rector\MethodCall\MyCLabsMethodCallToEnumConstRector\MyCLabsMethodCallToEnumConstRectorTest */ final class MyCLabsMethodCallToEnumConstRector extends AbstractRector implements MinPhpVersionInterface @@ -132,8 +129,8 @@ private function refactorGetValueMethodCall(MethodCall $methodCall) : ?PropertyF if ($this->shouldOmitEnumCase($enumCaseName)) { return null; } - $enumConstFetch = $this->nodeFactory->createClassConstFetch($className, $enumCaseName); - return new PropertyFetch($enumConstFetch, 'value'); + $classConstFetch = $this->nodeFactory->createClassConstFetch($className, $enumCaseName); + return new PropertyFetch($classConstFetch, 'value'); } private function refactorEqualsMethodCall(MethodCall $methodCall) : ?Identical { diff --git a/vendor/rector/rector/rules/Php81/Rector/MethodCall/SpatieEnumMethodCallToEnumConstRector.php b/vendor/rector/rector/rules/Php81/Rector/MethodCall/SpatieEnumMethodCallToEnumConstRector.php index 9280c415a..a47f5e47f 100644 --- a/vendor/rector/rector/rules/Php81/Rector/MethodCall/SpatieEnumMethodCallToEnumConstRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/MethodCall/SpatieEnumMethodCallToEnumConstRector.php @@ -12,18 +12,15 @@ use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; -use RectorPrefix202405\Spatie\Enum\Enum; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/enumerations - * * @see \Rector\Tests\Php81\Rector\MethodCall\MyCLabsMethodCallToEnumConstRector\MyCLabsMethodCallToEnumConstRectorTest */ final class SpatieEnumMethodCallToEnumConstRector extends AbstractRector implements MinPhpVersionInterface { /** - * @var class-string + * @var string */ private const SPATIE_FQN = 'Spatie\\Enum\\Enum'; /** @@ -103,8 +100,8 @@ private function refactorGetterToMethodCall(MethodCall $methodCall, string $prop return null; } $upperCaseName = \strtoupper($enumCaseName); - $enumConstFetch = $this->nodeFactory->createClassConstFetch($className, $upperCaseName); - return new PropertyFetch($enumConstFetch, $property); + $classConstFetch = $this->nodeFactory->createClassConstFetch($className, $upperCaseName); + return new PropertyFetch($classConstFetch, $property); } private function refactorMethodCall(MethodCall $methodCall, string $methodName) : ?\PhpParser\Node\Expr\PropertyFetch { diff --git a/vendor/rector/rector/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php b/vendor/rector/rector/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php index 51c175fae..0fcf2aa06 100644 --- a/vendor/rector/rector/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php +++ b/vendor/rector/rector/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php @@ -33,8 +33,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/readonly_properties_v2 - * * @see \Rector\Tests\Php81\Rector\Property\ReadOnlyPropertyRector\ReadOnlyPropertyRectorTest */ final class ReadOnlyPropertyRector extends AbstractScopeAwareRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php82/Rector/Class_/ReadOnlyClassRector.php b/vendor/rector/rector/rules/Php82/Rector/Class_/ReadOnlyClassRector.php index 397401a26..a4d64529b 100644 --- a/vendor/rector/rector/rules/Php82/Rector/Class_/ReadOnlyClassRector.php +++ b/vendor/rector/rector/rules/Php82/Rector/Class_/ReadOnlyClassRector.php @@ -26,8 +26,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/readonly_classes - * * @see \Rector\Tests\Php82\Rector\Class_\ReadOnlyClassRector\ReadOnlyClassRectorTest */ final class ReadOnlyClassRector extends AbstractScopeAwareRector implements MinPhpVersionInterface @@ -263,8 +261,8 @@ private function shouldSkipClass(Class_ $class) : bool private function shouldSkipParams(array $params) : bool { foreach ($params as $param) { - // has non-property promotion, skip - if (!$this->visibilityManipulator->hasVisibility($param, Visibility::READONLY)) { + // has non-readonly property promotion + if (!$this->visibilityManipulator->hasVisibility($param, Visibility::READONLY) && $param->flags !== 0) { return \true; } // type is missing, invalid syntax diff --git a/vendor/rector/rector/rules/Php82/Rector/Encapsed/VariableInStringInterpolationFixerRector.php b/vendor/rector/rector/rules/Php82/Rector/Encapsed/VariableInStringInterpolationFixerRector.php index f8b66aace..7798055e8 100644 --- a/vendor/rector/rector/rules/Php82/Rector/Encapsed/VariableInStringInterpolationFixerRector.php +++ b/vendor/rector/rector/rules/Php82/Rector/Encapsed/VariableInStringInterpolationFixerRector.php @@ -13,8 +13,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/deprecate_dollar_brace_string_interpolation - * * @see \Rector\Tests\Php82\Rector\Encapsed\VariableInStringInterpolationFixerRector\VariableInStringInterpolationFixerRectorTest */ final class VariableInStringInterpolationFixerRector extends AbstractRector implements MinPhpVersionInterface diff --git a/vendor/rector/rector/rules/Php82/Rector/FuncCall/Utf8DecodeEncodeToMbConvertEncodingRector.php b/vendor/rector/rector/rules/Php82/Rector/FuncCall/Utf8DecodeEncodeToMbConvertEncodingRector.php index 6d8c6057d..284eecaab 100644 --- a/vendor/rector/rector/rules/Php82/Rector/FuncCall/Utf8DecodeEncodeToMbConvertEncodingRector.php +++ b/vendor/rector/rector/rules/Php82/Rector/FuncCall/Utf8DecodeEncodeToMbConvertEncodingRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/remove_utf8_decode_and_utf8_encode - * * @see https://3v4l.org/Q14UR * @see \Rector\Tests\Php82\Rector\FuncCall\Utf8DecodeEncodeToMbConvertEncodingRector\Utf8DecodeEncodeToMbConvertEncodingRectorTest */ diff --git a/vendor/rector/rector/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php b/vendor/rector/rector/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php index 503b6a901..e347351dd 100644 --- a/vendor/rector/rector/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php +++ b/vendor/rector/rector/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php @@ -15,7 +15,7 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Php82\Rector\Param\AddSensitiveParameterAttributeRector\AddSensitiveParameterAttributeRectorTest */ @@ -78,7 +78,7 @@ public function run(#[\SensitiveParameter] string $password) } } CODE_SAMPLE -, [\Rector\Php82\Rector\Param\AddSensitiveParameterAttributeRector::SENSITIVE_PARAMETERS => ['password']])]); +, [self::SENSITIVE_PARAMETERS => ['password']])]); } public function provideMinPhpVersion() : int { diff --git a/vendor/rector/rector/rules/Php83/Rector/ClassConst/AddTypeToConstRector.php b/vendor/rector/rector/rules/Php83/Rector/ClassConst/AddTypeToConstRector.php index 1546eea81..2783a1fe5 100644 --- a/vendor/rector/rector/rules/Php83/Rector/ClassConst/AddTypeToConstRector.php +++ b/vendor/rector/rector/rules/Php83/Rector/ClassConst/AddTypeToConstRector.php @@ -8,6 +8,7 @@ use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\BinaryOp\Concat; +use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Expr\UnaryMinus; use PhpParser\Node\Expr\UnaryPlus; @@ -48,7 +49,7 @@ public function __construct(ReflectionProvider $reflectionProvider, StaticTypeMa } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Add type to constants', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Add type to constants based on their value', [new CodeSample(<<<'CODE_SAMPLE' final class SomeClass { public const TYPE = 'some_type'; @@ -85,7 +86,7 @@ public function refactor(Node $node) : ?Class_ $parentClassReflections = $this->getParentReflections($className); $hasChanged = \false; foreach ($classConsts as $classConst) { - $valueType = null; + $valueTypes = []; // If a type is set, skip if ($classConst->type !== null) { continue; @@ -97,9 +98,20 @@ public function refactor(Node $node) : ?Class_ if ($this->canBeInherited($classConst, $node)) { continue; } - $valueType = $this->findValueType($constNode->value); + $valueTypes[] = $this->findValueType($constNode->value); } - if (!($valueType ?? null) instanceof Identifier) { + if ($valueTypes === []) { + continue; + } + if (\count($valueTypes) > 1) { + $valueTypes = \array_unique($valueTypes, \SORT_REGULAR); + } + // once more verify after uniquate + if (\count($valueTypes) > 1) { + continue; + } + $valueType = \current($valueTypes); + if (!$valueType instanceof Identifier) { continue; } $classConst->type = $valueType; @@ -141,8 +153,8 @@ private function findValueType(Expr $expr) : ?Identifier if ($expr instanceof DNumber) { return new Identifier('float'); } - if ($expr instanceof ConstFetch) { - if ($expr->name->toLowerString() === 'null') { + if ($expr instanceof ConstFetch || $expr instanceof ClassConstFetch) { + if ($expr instanceof ConstFetch && $expr->name->toLowerString() === 'null') { return new Identifier('null'); } $type = $this->nodeTypeResolver->getNativeType($expr); diff --git a/vendor/rector/rector/rules/Php84/Rector/Param/ExplicitNullableParamTypeRector.php b/vendor/rector/rector/rules/Php84/Rector/Param/ExplicitNullableParamTypeRector.php index 2e9a37cd4..e7bd64115 100644 --- a/vendor/rector/rector/rules/Php84/Rector/Param/ExplicitNullableParamTypeRector.php +++ b/vendor/rector/rector/rules/Php84/Rector/Param/ExplicitNullableParamTypeRector.php @@ -4,8 +4,14 @@ namespace Rector\Php84\Rector\Param; use PhpParser\Node; +use PhpParser\Node\ComplexType; use PhpParser\Node\Expr\ConstFetch; +use PhpParser\Node\IntersectionType; +use PhpParser\Node\Name; +use PhpParser\Node\NullableType; use PhpParser\Node\Param; +use PhpParser\Node\UnionType; +use PHPStan\Type\MixedType; use PHPStan\Type\TypeCombinator; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; @@ -64,8 +70,26 @@ public function refactor(Node $node) : ?Param if (TypeCombinator::containsNull($nodeType)) { return null; } + // mixed can't be nullable, ref https://3v4l.org/YUkhH/rfc#vgit.master + if ($nodeType instanceof MixedType) { + return null; + } $newNodeType = TypeCombinator::addNull($nodeType); - $node->type = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($newNodeType, TypeKind::PARAM); + $paramType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($newNodeType, TypeKind::PARAM); + // ensure it process valid Node, otherwise, just return null + if (!$paramType instanceof Node) { + return null; + } + // re-use existing node instead of reprint Node that may cause unnecessary FQCN + if ($node->type instanceof UnionType) { + $node->type->types[] = new Name('null'); + } elseif ($node->type instanceof ComplexType) { + /** @var IntersectionType $nodeType */ + $nodeType = $node->type; + $node->type = new UnionType([$nodeType, new Name('null')]); + } else { + $node->type = new NullableType($node->type); + } return $node; } public function provideMinPhpVersion() : int diff --git a/vendor/rector/rector/rules/Privatization/NodeManipulator/VisibilityManipulator.php b/vendor/rector/rector/rules/Privatization/NodeManipulator/VisibilityManipulator.php index a1400cd7d..f0fbd1d44 100644 --- a/vendor/rector/rector/rules/Privatization/NodeManipulator/VisibilityManipulator.php +++ b/vendor/rector/rector/rules/Privatization/NodeManipulator/VisibilityManipulator.php @@ -9,7 +9,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Property; use Rector\ValueObject\Visibility; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Privatization\NodeManipulator\VisibilityManipulatorTest */ diff --git a/vendor/rector/rector/rules/Privatization/Rector/Class_/FinalizeClassesWithoutChildrenRector.php b/vendor/rector/rector/rules/Privatization/Rector/Class_/FinalizeClassesWithoutChildrenRector.php deleted file mode 100644 index 2d7ccfb8c..000000000 --- a/vendor/rector/rector/rules/Privatization/Rector/Class_/FinalizeClassesWithoutChildrenRector.php +++ /dev/null @@ -1,62 +0,0 @@ -> - */ - public function getNodeTypes() : array - { - return [Class_::class]; - } - /** - * @param Class_ $node - */ - public function refactor(Node $node) : ?Node - { - if ($this->hasWarned) { - return null; - } - \trigger_error(\sprintf('The "%s" rule was deprecated, as its functionality caused bugs. Without knowing the full dependency tree, its risky to change.', self::class)); - \sleep(3); - $this->hasWarned = \true; - return null; - } -} diff --git a/vendor/rector/rector/rules/Removing/NodeManipulator/ComplexNodeRemover.php b/vendor/rector/rector/rules/Removing/NodeManipulator/ComplexNodeRemover.php index ecee231db..7f924a6c8 100644 --- a/vendor/rector/rector/rules/Removing/NodeManipulator/ComplexNodeRemover.php +++ b/vendor/rector/rector/rules/Removing/NodeManipulator/ComplexNodeRemover.php @@ -4,8 +4,40 @@ namespace Rector\Removing\NodeManipulator; use PhpParser\Node\Stmt\ClassMethod; +use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; +use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover; +use Rector\Comments\NodeDocBlock\DocBlockUpdater; +use Rector\NodeNameResolver\NodeNameResolver; final class ComplexNodeRemover { + /** + * @readonly + * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory + */ + private $phpDocInfoFactory; + /** + * @readonly + * @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover + */ + private $phpDocTagRemover; + /** + * @readonly + * @var \Rector\NodeNameResolver\NodeNameResolver + */ + private $nodeNameResolver; + /** + * @readonly + * @var \Rector\Comments\NodeDocBlock\DocBlockUpdater + */ + private $docBlockUpdater; + public function __construct(PhpDocInfoFactory $phpDocInfoFactory, PhpDocTagRemover $phpDocTagRemover, NodeNameResolver $nodeNameResolver, DocBlockUpdater $docBlockUpdater) + { + $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->phpDocTagRemover = $phpDocTagRemover; + $this->nodeNameResolver = $nodeNameResolver; + $this->docBlockUpdater = $docBlockUpdater; + } /** * @param int[] $paramKeysToBeRemoved * @return int[] @@ -14,6 +46,7 @@ public function processRemoveParamWithKeys(ClassMethod $classMethod, array $para { $totalKeys = \count($classMethod->params) - 1; $removedParamKeys = []; + $phpdocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classMethod); foreach ($paramKeysToBeRemoved as $paramKeyToBeRemoved) { $startNextKey = $paramKeyToBeRemoved + 1; for ($nextKey = $startNextKey; $nextKey <= $totalKeys; ++$nextKey) { @@ -27,7 +60,13 @@ public function processRemoveParamWithKeys(ClassMethod $classMethod, array $para } return []; } + $paramName = (string) $this->nodeNameResolver->getName($classMethod->params[$paramKeyToBeRemoved]); unset($classMethod->params[$paramKeyToBeRemoved]); + $paramTagValueByName = $phpdocInfo->getParamTagValueByName($paramName); + if ($paramTagValueByName instanceof ParamTagValueNode) { + $this->phpDocTagRemover->removeTagValueFromNode($phpdocInfo, $paramTagValueByName); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($classMethod); + } $removedParamKeys[] = $paramKeyToBeRemoved; } return $removedParamKeys; diff --git a/vendor/rector/rector/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php b/vendor/rector/rector/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php index 58d2e5560..6f9b4ab28 100644 --- a/vendor/rector/rector/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php +++ b/vendor/rector/rector/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php @@ -15,7 +15,7 @@ use Rector\Removing\ValueObject\ArgumentRemover; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Removing\Rector\ClassMethod\ArgumentRemoverRector\ArgumentRemoverRectorTest */ diff --git a/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveInterfacesRector.php b/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveInterfacesRector.php index e0d59add3..03a7e0300 100644 --- a/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveInterfacesRector.php +++ b/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveInterfacesRector.php @@ -9,7 +9,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Removing\Rector\Class_\RemoveInterfacesRector\RemoveInterfacesRectorTest */ diff --git a/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveTraitUseRector.php b/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveTraitUseRector.php index 6c98be0e7..3d74897b0 100644 --- a/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveTraitUseRector.php +++ b/vendor/rector/rector/rules/Removing/Rector/Class_/RemoveTraitUseRector.php @@ -11,7 +11,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Removing\Rector\Class_\RemoveTraitUseRector\RemoveTraitUseRectorTest */ diff --git a/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallArgRector.php b/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallArgRector.php index e87a0840a..6b4d6bb8b 100644 --- a/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallArgRector.php +++ b/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallArgRector.php @@ -11,7 +11,7 @@ use Rector\Removing\ValueObject\RemoveFuncCallArg; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Removing\Rector\FuncCall\RemoveFuncCallArgRector\RemoveFuncCallArgRectorTest */ diff --git a/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallRector.php b/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallRector.php index 6d002b25b..730d02607 100644 --- a/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallRector.php +++ b/vendor/rector/rector/rules/Removing/Rector/FuncCall/RemoveFuncCallRector.php @@ -11,7 +11,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Removing\Rector\FuncCall\RemoveFuncCallRector\RemoveFuncCallRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/NodeManipulator/ClassRenamer.php b/vendor/rector/rector/rules/Renaming/NodeManipulator/ClassRenamer.php index 37588202a..f6f896ad9 100644 --- a/vendor/rector/rector/rules/Renaming/NodeManipulator/ClassRenamer.php +++ b/vendor/rector/rector/rules/Renaming/NodeManipulator/ClassRenamer.php @@ -76,6 +76,7 @@ public function __construct(PhpDocClassRenamer $phpDocClassRenamer, PhpDocInfoFa } /** * @param array $oldToNewClasses + * @return ($node is FullyQualified ? FullyQualified : Node) */ public function renameNode(Node $node, array $oldToNewClasses, ?Scope $scope) : ?Node { @@ -157,10 +158,6 @@ private function refactorClassLike(ClassLike $classLike, array $oldToNewClasses, $hasChanged = \false; $classLike->implements = \array_unique($classLike->implements); foreach ($classLike->implements as $key => $implementName) { - $virtualNode = (bool) $implementName->getAttribute(AttributeKey::VIRTUAL_NODE); - if (!$virtualNode) { - continue; - } $namespaceName = $scope instanceof Scope ? $scope->getNamespace() : null; $fullyQualifiedName = $namespaceName . '\\' . $implementName->toString(); $newName = $oldToNewClasses[$fullyQualifiedName] ?? null; diff --git a/vendor/rector/rector/rules/Renaming/Rector/ClassConstFetch/RenameClassConstFetchRector.php b/vendor/rector/rector/rules/Renaming/Rector/ClassConstFetch/RenameClassConstFetchRector.php index cf5697698..2c8d0062d 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/ClassConstFetch/RenameClassConstFetchRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/ClassConstFetch/RenameClassConstFetchRector.php @@ -14,7 +14,7 @@ use Rector\Renaming\ValueObject\RenameClassConstFetch; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\ClassConstFetch\RenameClassConstFetchRector\RenameClassConstFetchRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/ClassMethod/RenameAnnotationRector.php b/vendor/rector/rector/rules/Renaming/Rector/ClassMethod/RenameAnnotationRector.php index 0d971a7fc..771040e15 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/ClassMethod/RenameAnnotationRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/ClassMethod/RenameAnnotationRector.php @@ -18,7 +18,7 @@ use Rector\Renaming\ValueObject\RenameAnnotationByType; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\ClassMethod\RenameAnnotationRector\RenameAnnotationRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/Class_/RenameAttributeRector.php b/vendor/rector/rector/rules/Renaming/Rector/Class_/RenameAttributeRector.php new file mode 100644 index 000000000..881f1f704 --- /dev/null +++ b/vendor/rector/rector/rules/Renaming/Rector/Class_/RenameAttributeRector.php @@ -0,0 +1,94 @@ +> + */ + public function getNodeTypes() : array + { + return [Class_::class, ClassMethod::class, Property::class]; + } + /** + * @param Class_|ClassMethod|Property $node + */ + public function refactor(Node $node) : ?Node + { + $hasChanged = \false; + foreach ($node->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attr) { + $newAttributeName = $this->matchNewAttributeName($attr); + if (!\is_string($newAttributeName)) { + continue; + } + $attr->name = new FullyQualified($newAttributeName); + $hasChanged = \true; + } + } + if ($hasChanged) { + return $node; + } + return null; + } + /** + * @param mixed[] $configuration + */ + public function configure(array $configuration) : void + { + Assert::allIsAOf($configuration, RenameAttribute::class); + $this->renameAttributes = $configuration; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::ATTRIBUTES; + } + private function matchNewAttributeName(Attribute $attribute) : ?string + { + foreach ($this->renameAttributes as $renameAttribute) { + if ($this->isName($attribute->name, $renameAttribute->getOldAttribute())) { + return $renameAttribute->getNewAttribute(); + } + } + return null; + } +} diff --git a/vendor/rector/rector/rules/Renaming/Rector/ConstFetch/RenameConstantRector.php b/vendor/rector/rector/rules/Renaming/Rector/ConstFetch/RenameConstantRector.php index 940222c5b..2c3eed971 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/ConstFetch/RenameConstantRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/ConstFetch/RenameConstantRector.php @@ -11,7 +11,7 @@ use Rector\Validation\RectorAssert; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\ConstFetch\RenameConstantRector\RenameConstantRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/FuncCall/RenameFunctionRector.php b/vendor/rector/rector/rules/Renaming/Rector/FuncCall/RenameFunctionRector.php index a44f269b5..b93fdd9fc 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/FuncCall/RenameFunctionRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/FuncCall/RenameFunctionRector.php @@ -8,11 +8,10 @@ use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; use Rector\Contract\Rector\ConfigurableRectorInterface; -use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\FuncCall\RenameFunctionRector\RenameFunctionRectorTest */ @@ -38,11 +37,6 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - // not to refactor here - $isVirtual = (bool) $node->name->getAttribute(AttributeKey::VIRTUAL_NODE); - if ($isVirtual) { - return null; - } $nodeName = $this->getName($node); if ($nodeName === null) { return null; diff --git a/vendor/rector/rector/rules/Renaming/Rector/FunctionLike/RenameFunctionLikeParamWithinCallLikeArgRector.php b/vendor/rector/rector/rules/Renaming/Rector/FunctionLike/RenameFunctionLikeParamWithinCallLikeArgRector.php index a6f465fe1..ce70cad33 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/FunctionLike/RenameFunctionLikeParamWithinCallLikeArgRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/FunctionLike/RenameFunctionLikeParamWithinCallLikeArgRector.php @@ -23,7 +23,7 @@ use Rector\Renaming\ValueObject\RenameFunctionLikeParamWithinCallLikeArg; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\FunctionLike\RenameFunctionLikeParamWithinCallLikeArgRector\RenameFunctionLikeParamWithinCallLikeArgRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/MethodCall/RenameMethodRector.php b/vendor/rector/rector/rules/Renaming/Rector/MethodCall/RenameMethodRector.php index 474572ef0..973c76712 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/MethodCall/RenameMethodRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/MethodCall/RenameMethodRector.php @@ -25,7 +25,7 @@ use Rector\Renaming\ValueObject\MethodCallRenameWithArrayKey; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\RenameMethodRectorTest */ @@ -132,7 +132,7 @@ private function shouldKeepForParentInterface(MethodCallRenameInterface $methodC if (!$classReflection->isInterface()) { return \false; } - return $this->classManipulator->hasParentMethodOrInterface($methodCallRename->getObjectType(), $methodCallRename->getOldMethod(), $methodCallRename->getNewMethod()); + return $this->classManipulator->hasParentMethodOrInterface($methodCallRename->getObjectType(), $methodCallRename->getOldMethod()); } /** * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Interface_ $classOrInterface @@ -151,11 +151,12 @@ private function refactorClass($classOrInterface, Scope $scope) continue; } foreach ($this->methodCallRenames as $methodCallRename) { - if ($this->shouldSkipRename($methodName, $classMethod, $methodCallRename, $classReflection, $classOrInterface)) { + if ($this->shouldSkipRename($methodName, $classMethod, $methodCallRename, $classOrInterface, $classReflection)) { continue; } $classMethod->name = new Identifier($methodCallRename->getNewMethod()); $hasChanged = \true; + continue 2; } } if ($hasChanged) { @@ -166,7 +167,7 @@ private function refactorClass($classOrInterface, Scope $scope) /** * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Interface_ $classOrInterface */ - private function shouldSkipRename(string $methodName, ClassMethod $classMethod, MethodCallRenameInterface $methodCallRename, ClassReflection $classReflection, $classOrInterface) : bool + private function shouldSkipRename(string $methodName, ClassMethod $classMethod, MethodCallRenameInterface $methodCallRename, $classOrInterface, ?ClassReflection $classReflection) : bool { if (!$this->nodeNameResolver->isStringName($methodName, $methodCallRename->getOldMethod())) { return \true; diff --git a/vendor/rector/rector/rules/Renaming/Rector/Name/RenameClassRector.php b/vendor/rector/rector/rules/Renaming/Rector/Name/RenameClassRector.php index e9c235c7b..739dece65 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/Name/RenameClassRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/Name/RenameClassRector.php @@ -18,7 +18,7 @@ use Rector\Renaming\NodeManipulator\ClassRenamer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\Name\RenameClassRector\RenameClassRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/PropertyFetch/RenamePropertyRector.php b/vendor/rector/rector/rules/Renaming/Rector/PropertyFetch/RenamePropertyRector.php index f10d31816..9f156ed78 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/PropertyFetch/RenamePropertyRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/PropertyFetch/RenamePropertyRector.php @@ -15,7 +15,7 @@ use Rector\Renaming\ValueObject\RenameProperty; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\PropertyFetch\RenamePropertyRector\RenamePropertyRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/StaticCall/RenameStaticMethodRector.php b/vendor/rector/rector/rules/Renaming/Rector/StaticCall/RenameStaticMethodRector.php index 105cf9c59..83d17a243 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/StaticCall/RenameStaticMethodRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/StaticCall/RenameStaticMethodRector.php @@ -12,7 +12,7 @@ use Rector\Renaming\ValueObject\RenameStaticMethod; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Renaming\Rector\StaticCall\RenameStaticMethodRector\RenameStaticMethodRectorTest */ diff --git a/vendor/rector/rector/rules/Renaming/Rector/String_/RenameStringRector.php b/vendor/rector/rector/rules/Renaming/Rector/String_/RenameStringRector.php index d6769cf1f..42fc08c31 100644 --- a/vendor/rector/rector/rules/Renaming/Rector/String_/RenameStringRector.php +++ b/vendor/rector/rector/rules/Renaming/Rector/String_/RenameStringRector.php @@ -10,10 +10,8 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://github.com/symfony/symfony/pull/35858 - * * @see \Rector\Tests\Renaming\Rector\String_\RenameStringRector\RenameStringRectorTest */ final class RenameStringRector extends AbstractRector implements ConfigurableRectorInterface diff --git a/vendor/rector/rector/rules/Renaming/ValueObject/RenameAttribute.php b/vendor/rector/rector/rules/Renaming/ValueObject/RenameAttribute.php new file mode 100644 index 000000000..1bf73addc --- /dev/null +++ b/vendor/rector/rector/rules/Renaming/ValueObject/RenameAttribute.php @@ -0,0 +1,34 @@ +oldAttribute = $oldAttribute; + $this->newAttribute = $newAttribute; + } + public function getOldAttribute() : string + { + return $this->oldAttribute; + } + public function getNewAttribute() : string + { + return $this->newAttribute; + } +} diff --git a/vendor/rector/rector/rules/Strict/NodeFactory/ExactCompareFactory.php b/vendor/rector/rector/rules/Strict/NodeFactory/ExactCompareFactory.php index b721844af..428f980ce 100644 --- a/vendor/rector/rector/rules/Strict/NodeFactory/ExactCompareFactory.php +++ b/vendor/rector/rector/rules/Strict/NodeFactory/ExactCompareFactory.php @@ -116,22 +116,19 @@ private function createFromUnionType(UnionType $unionType, Expr $expr, bool $tre */ private function resolveFromCleanedNullUnionType(UnionType $unionType, Expr $expr, bool $treatAsNotEmpty) { - $compareExprs = []; - foreach ($unionType->getTypes() as $unionedType) { - $compareExprs[] = $this->createNotIdenticalFalsyCompare($unionedType, $expr, $treatAsNotEmpty); - } + $compareExprs = $this->collectCompareExprs($unionType, $expr, $treatAsNotEmpty, \false); return $this->createBooleanAnd($compareExprs); } /** * @return array */ - private function collectCompareExprs(UnionType $unionType, Expr $expr, bool $treatAsNonEmpty) : array + private function collectCompareExprs(UnionType $unionType, Expr $expr, bool $treatAsNonEmpty, bool $identical = \true) : array { $compareExprs = []; foreach ($unionType->getTypes() as $unionedType) { - $compareExprs[] = $this->createIdenticalFalsyCompare($unionedType, $expr, $treatAsNonEmpty); + $compareExprs[] = $identical ? $this->createIdenticalFalsyCompare($unionedType, $expr, $treatAsNonEmpty) : $this->createNotIdenticalFalsyCompare($unionedType, $expr, $treatAsNonEmpty); } - return $compareExprs; + return \array_unique($compareExprs, \SORT_REGULAR); } private function cleanUpPossibleNullableUnionType(UnionType $unionType) : Type { diff --git a/vendor/rector/rector/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php b/vendor/rector/rector/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php index e2b6970f1..281ae4174 100644 --- a/vendor/rector/rector/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php +++ b/vendor/rector/rector/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php @@ -5,7 +5,7 @@ use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Rector\AbstractScopeAwareRector; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Strict\Rector\BooleanNot\BooleanInBooleanNotRuleFixerRector\BooleanInBooleanNotRuleFixerRectorTest * diff --git a/vendor/rector/rector/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php b/vendor/rector/rector/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php index 976c3d7f1..94c5b8dbb 100644 --- a/vendor/rector/rector/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php +++ b/vendor/rector/rector/rules/Strict/Rector/BooleanNot/BooleanInBooleanNotRuleFixerRector.php @@ -57,7 +57,7 @@ public function run(string|null $name) } } CODE_SAMPLE -, [\Rector\Strict\Rector\BooleanNot\BooleanInBooleanNotRuleFixerRector::TREAT_AS_NON_EMPTY => \true])]); +, [self::TREAT_AS_NON_EMPTY => \true])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php b/vendor/rector/rector/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php index 3a5a03f7c..b7c9df1b1 100644 --- a/vendor/rector/rector/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php +++ b/vendor/rector/rector/rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php @@ -66,7 +66,7 @@ public function run(array $items) } } CODE_SAMPLE -, [\Rector\Strict\Rector\Empty_\DisallowedEmptyRuleFixerRector::TREAT_AS_NON_EMPTY => \false])]); +, [self::TREAT_AS_NON_EMPTY => \false])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php b/vendor/rector/rector/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php index eb6d904db..054512b63 100644 --- a/vendor/rector/rector/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php +++ b/vendor/rector/rector/rules/Strict/Rector/If_/BooleanInIfConditionRuleFixerRector.php @@ -58,7 +58,7 @@ public function run(string $name) } } CODE_SAMPLE -, [\Rector\Strict\Rector\If_\BooleanInIfConditionRuleFixerRector::TREAT_AS_NON_EMPTY => \false])]); +, [self::TREAT_AS_NON_EMPTY => \false])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php b/vendor/rector/rector/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php index d042fe867..e665a3951 100644 --- a/vendor/rector/rector/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php +++ b/vendor/rector/rector/rules/Strict/Rector/Ternary/BooleanInTernaryOperatorRuleFixerRector.php @@ -49,7 +49,7 @@ public function run(array $data) } } CODE_SAMPLE -, [\Rector\Strict\Rector\Ternary\BooleanInTernaryOperatorRuleFixerRector::TREAT_AS_NON_EMPTY => \false])]); +, [self::TREAT_AS_NON_EMPTY => \false])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php b/vendor/rector/rector/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php index 4c11a3132..8c62c7153 100644 --- a/vendor/rector/rector/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php +++ b/vendor/rector/rector/rules/Strict/Rector/Ternary/DisallowedShortTernaryRuleFixerRector.php @@ -54,7 +54,7 @@ public function run(array $array) } } CODE_SAMPLE -, [\Rector\Strict\Rector\Ternary\DisallowedShortTernaryRuleFixerRector::TREAT_AS_NON_EMPTY => \false])]); +, [self::TREAT_AS_NON_EMPTY => \false])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php b/vendor/rector/rector/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php index bb20da7b2..b8c354fca 100644 --- a/vendor/rector/rector/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php +++ b/vendor/rector/rector/rules/Transform/NodeTypeAnalyzer/TypeProvidingExprFromClassResolver.php @@ -69,7 +69,7 @@ private function resolveMethodCallProvidingType(ClassReflection $classReflection { $methodReflections = $this->getClassMethodReflections($classReflection); foreach ($methodReflections as $methodReflection) { - $functionVariant = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants()); + $functionVariant = ParametersAcceptorSelector::combineAcceptors($methodReflection->getVariants()); $returnType = $functionVariant->getReturnType(); if (!$this->isMatchingType($returnType, $objectType)) { continue; diff --git a/vendor/rector/rector/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php b/vendor/rector/rector/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php index 3d534ceb6..6f90f2c9a 100644 --- a/vendor/rector/rector/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php @@ -7,14 +7,13 @@ use PhpParser\Node\Arg; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Expr\Variable; use PHPStan\Type\ObjectType; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Rector\AbstractRector; use Rector\Transform\ValueObject\ArrayDimFetchToMethodCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\ArrayDimFetch\ArrayDimFetchToMethodCallRector\ArrayDimFetchToMethodCallRectorTest */ @@ -43,9 +42,6 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?MethodCall { - if (!$node->var instanceof Variable) { - return null; - } if (!$node->dim instanceof Node) { return null; } diff --git a/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyAssignToMethodCallRector.php b/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyAssignToMethodCallRector.php index 03f387e32..c6a5ed1ea 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyAssignToMethodCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyAssignToMethodCallRector.php @@ -12,7 +12,7 @@ use Rector\Transform\ValueObject\PropertyAssignToMethodCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\Assign\PropertyAssignToMethodCallRector\PropertyAssignToMethodCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyFetchToMethodCallRector.php b/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyFetchToMethodCallRector.php index c57f95cfd..6d84f3848 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyFetchToMethodCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Assign/PropertyFetchToMethodCallRector.php @@ -13,7 +13,7 @@ use Rector\Transform\ValueObject\PropertyFetchToMethodCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\Assign\PropertyFetchToMethodCallRector\PropertyFetchToMethodCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/Attribute/AttributeKeyToClassConstFetchRector.php b/vendor/rector/rector/rules/Transform/Rector/Attribute/AttributeKeyToClassConstFetchRector.php index dce5a9b62..baccd830f 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Attribute/AttributeKeyToClassConstFetchRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Attribute/AttributeKeyToClassConstFetchRector.php @@ -22,10 +22,8 @@ use Rector\Transform\ValueObject\AttributeKeyToClassConstFetch; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://github.com/doctrine/dbal/blob/3.1.x/src/Types/Types.php - * * @api used in rector-doctrine * @see \Rector\Tests\Transform\Rector\Attribute\AttributeKeyToClassConstFetchRector\AttributeKeyToClassConstFetchRectorTest */ @@ -132,11 +130,11 @@ private function processArg(Arg $arg, AttributeKeyToClassConstFetch $attributeKe if ($constName === null) { return \false; } - $newValue = $this->nodeFactory->createClassConstFetch($attributeKeyToClassConstFetch->getConstantClass(), $constName); - if ($arg->value instanceof ClassConstFetch && $this->getName($arg->value) === $this->getName($newValue)) { + $classConstFetch = $this->nodeFactory->createClassConstFetch($attributeKeyToClassConstFetch->getConstantClass(), $constName); + if ($arg->value instanceof ClassConstFetch && $this->getName($arg->value) === $this->getName($classConstFetch)) { return \false; } - $arg->value = $newValue; + $arg->value = $classConstFetch; return \true; } } diff --git a/vendor/rector/rector/rules/Transform/Rector/ClassMethod/ReturnTypeWillChangeRector.php b/vendor/rector/rector/rules/Transform/Rector/ClassMethod/ReturnTypeWillChangeRector.php index 84788f766..317200098 100644 --- a/vendor/rector/rector/rules/Transform/Rector/ClassMethod/ReturnTypeWillChangeRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/ClassMethod/ReturnTypeWillChangeRector.php @@ -17,7 +17,7 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\ClassMethod\ReturnTypeWillChangeRector\ReturnTypeWillChangeRectorTest */ @@ -89,7 +89,7 @@ public function refactor(Node $node) : ?Node continue; } // the return type is known, no need to add attribute - if ($classMethod->returnType !== null) { + if ($classMethod->returnType instanceof Node) { continue; } foreach ($this->returnTypeChangedClassMethodReferences as $returnTypeChangedClassMethodReference) { diff --git a/vendor/rector/rector/rules/Transform/Rector/ClassMethod/WrapReturnRector.php b/vendor/rector/rector/rules/Transform/Rector/ClassMethod/WrapReturnRector.php index 7247cf0b8..0b328fd4c 100644 --- a/vendor/rector/rector/rules/Transform/Rector/ClassMethod/WrapReturnRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/ClassMethod/WrapReturnRector.php @@ -7,6 +7,7 @@ use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; +use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; use Rector\Contract\Rector\ConfigurableRectorInterface; @@ -14,7 +15,7 @@ use Rector\Transform\ValueObject\WrapReturn; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\ClassMethod\WrapReturnRector\WrapReturnRectorTest */ @@ -51,24 +52,31 @@ public function getItem() */ public function getNodeTypes() : array { - return [ClassMethod::class]; + return [Class_::class]; } /** - * @param ClassMethod $node + * @param Class_ $node */ public function refactor(Node $node) : ?Node { + $hasChanged = \false; foreach ($this->typeMethodWraps as $typeMethodWrap) { - if (!$this->isName($node, $typeMethodWrap->getMethod())) { - continue; - } if (!$this->isObjectType($node, $typeMethodWrap->getObjectType())) { continue; } - if ($node->stmts === null) { - continue; + foreach ($node->getMethods() as $classMethod) { + if (!$this->isName($classMethod, $typeMethodWrap->getMethod())) { + continue; + } + if ($node->stmts === null) { + continue; + } + $this->wrap($classMethod, $typeMethodWrap->isArrayWrap()); + $hasChanged = \true; } - return $this->wrap($node, $typeMethodWrap->isArrayWrap()); + } + if ($hasChanged) { + return $node; } return null; } diff --git a/vendor/rector/rector/rules/Transform/Rector/Class_/AddAllowDynamicPropertiesAttributeRector.php b/vendor/rector/rector/rules/Transform/Rector/Class_/AddAllowDynamicPropertiesAttributeRector.php index c0bbbe3ae..0f8794356 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Class_/AddAllowDynamicPropertiesAttributeRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Class_/AddAllowDynamicPropertiesAttributeRector.php @@ -18,10 +18,8 @@ use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://wiki.php.net/rfc/deprecate_dynamic_properties - * * @see \Rector\Tests\Transform\Rector\Class_\AddAllowDynamicPropertiesAttributeRector\AddAllowDynamicPropertiesAttributeRectorTest */ final class AddAllowDynamicPropertiesAttributeRector extends AbstractRector implements MinPhpVersionInterface, ConfigurableRectorInterface diff --git a/vendor/rector/rector/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php b/vendor/rector/rector/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php index 1b50439a9..e861df615 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Class_/AddInterfaceByTraitRector.php @@ -12,7 +12,7 @@ use Rector\Rector\AbstractScopeAwareRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @api used in rector-doctrine * @see \Rector\Tests\Transform\Rector\Class_\AddInterfaceByTraitRector\AddInterfaceByTraitRectorTest diff --git a/vendor/rector/rector/rules/Transform/Rector/Class_/MergeInterfacesRector.php b/vendor/rector/rector/rules/Transform/Rector/Class_/MergeInterfacesRector.php index 4f8d60930..8d9d73f99 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Class_/MergeInterfacesRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Class_/MergeInterfacesRector.php @@ -11,7 +11,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * Covers cases like * - https://github.com/FriendsOfPHP/PHP-CS-Fixer/commit/a1cdb4d2dd8f45d731244eed406e1d537218cc66 diff --git a/vendor/rector/rector/rules/Transform/Rector/Class_/ParentClassToTraitsRector.php b/vendor/rector/rector/rules/Transform/Rector/Class_/ParentClassToTraitsRector.php index cd71cd77f..0708007b7 100644 --- a/vendor/rector/rector/rules/Transform/Rector/Class_/ParentClassToTraitsRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/Class_/ParentClassToTraitsRector.php @@ -14,7 +14,7 @@ use Rector\Transform\ValueObject\ParentClassToTraits; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * Can handle cases like: * - https://doc.nette.org/en/2.4/migration-2-4#toc-nette-smartobject diff --git a/vendor/rector/rector/rules/Transform/Rector/ConstFetch/ConstFetchToClassConstFetchRector.php b/vendor/rector/rector/rules/Transform/Rector/ConstFetch/ConstFetchToClassConstFetchRector.php index 218ee5c7c..1678ad315 100644 --- a/vendor/rector/rector/rules/Transform/Rector/ConstFetch/ConstFetchToClassConstFetchRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/ConstFetch/ConstFetchToClassConstFetchRector.php @@ -11,7 +11,7 @@ use Rector\Transform\ValueObject\ConstFetchToClassConstFetch; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see Rector\Tests\Transform\Rector\ConstFetch\ConstFetchToClassConstFetchRector\ConstFetchToClassConstFetchTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/FileWithoutNamespace/RectorConfigBuilderRector.php b/vendor/rector/rector/rules/Transform/Rector/FileWithoutNamespace/RectorConfigBuilderRector.php index 015f34e1d..adfcfd3a0 100644 --- a/vendor/rector/rector/rules/Transform/Rector/FileWithoutNamespace/RectorConfigBuilderRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/FileWithoutNamespace/RectorConfigBuilderRector.php @@ -18,7 +18,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\FileWithoutNamespace\RectorConfigBuilderRector\RectorConfigBuilderRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToConstFetchRector.php b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToConstFetchRector.php index 8ecd9c5b6..456ed7b2c 100644 --- a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToConstFetchRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToConstFetchRector.php @@ -11,7 +11,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\FuncCall\FuncCallToConstFetchRector\FunctionCallToConstantRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToMethodCallRector.php b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToMethodCallRector.php index 2ae8ec851..0d174770f 100644 --- a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToMethodCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToMethodCallRector.php @@ -12,7 +12,7 @@ use Rector\Transform\ValueObject\FuncCallToMethodCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\FuncCall\FuncCallToMethodCallRector\FuncCallToMethodCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToNewRector.php b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToNewRector.php index c8bf10be5..5e1f921e8 100644 --- a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToNewRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToNewRector.php @@ -11,7 +11,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\FuncCall\FuncCallToNewRector\FuncCallToNewRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToStaticCallRector.php b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToStaticCallRector.php index cfac9e46a..0933f9558 100644 --- a/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToStaticCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/FuncCall/FuncCallToStaticCallRector.php @@ -10,7 +10,7 @@ use Rector\Transform\ValueObject\FuncCallToStaticCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\FuncCall\FuncCallToStaticCallRector\FuncCallToStaticCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToFuncCallRector.php b/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToFuncCallRector.php index dd054e38e..893f2c7f3 100644 --- a/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToFuncCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToFuncCallRector.php @@ -13,7 +13,7 @@ use Rector\Transform\ValueObject\MethodCallToFuncCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\MethodCall\MethodCallToFuncCallRector\MethodCallToFuncCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToPropertyFetchRector.php b/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToPropertyFetchRector.php index 5db38dd53..e409eb2e3 100644 --- a/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToPropertyFetchRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToPropertyFetchRector.php @@ -10,7 +10,7 @@ use Rector\Transform\ValueObject\MethodCallToPropertyFetch; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\MethodCall\MethodCallToPropertyFetchRector\MethodCallToPropertyFetchRectorTest */ @@ -22,12 +22,12 @@ final class MethodCallToPropertyFetchRector extends AbstractRector implements Co private $methodCallsToPropertyFetches = []; public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Turns method call "$this->something()" to property fetch "$this->something"', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Turns method call "$this->getFirstname()" to property fetch "$this->firstname"', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' class SomeClass { public function run() { - $this->someMethod(); + $this->getFirstname(); } } CODE_SAMPLE @@ -36,11 +36,11 @@ class SomeClass { public function run() { - $this->someProperty; + $this->firstname; } } CODE_SAMPLE -, ['someMethod' => 'someProperty'])]); +, [new MethodCallToPropertyFetch('ExamplePersonClass', 'getFirstname', 'firstname')])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToStaticCallRector.php b/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToStaticCallRector.php index 88c52b202..ab937c428 100644 --- a/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToStaticCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/MethodCall/MethodCallToStaticCallRector.php @@ -10,7 +10,7 @@ use Rector\Transform\ValueObject\MethodCallToStaticCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\MethodCall\MethodCallToStaticCallRector\MethodCallToStaticCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/MethodCall/ReplaceParentCallByPropertyCallRector.php b/vendor/rector/rector/rules/Transform/Rector/MethodCall/ReplaceParentCallByPropertyCallRector.php index f876d9a51..3a1ddb0b0 100644 --- a/vendor/rector/rector/rules/Transform/Rector/MethodCall/ReplaceParentCallByPropertyCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/MethodCall/ReplaceParentCallByPropertyCallRector.php @@ -10,7 +10,7 @@ use Rector\Transform\ValueObject\ReplaceParentCallByPropertyCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\MethodCall\ReplaceParentCallByPropertyCallRector\ReplaceParentCallByPropertyCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/New_/NewToStaticCallRector.php b/vendor/rector/rector/rules/Transform/Rector/New_/NewToStaticCallRector.php index ca2d69c63..1007bf241 100644 --- a/vendor/rector/rector/rules/Transform/Rector/New_/NewToStaticCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/New_/NewToStaticCallRector.php @@ -10,7 +10,7 @@ use Rector\Transform\ValueObject\NewToStaticCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\New_\NewToStaticCallRector\NewToStaticCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/Scalar/ScalarValueToConstFetchRector.php b/vendor/rector/rector/rules/Transform/Rector/Scalar/ScalarValueToConstFetchRector.php new file mode 100644 index 000000000..9ee1f4d73 --- /dev/null +++ b/vendor/rector/rector/rules/Transform/Rector/Scalar/ScalarValueToConstFetchRector.php @@ -0,0 +1,61 @@ +scalarValueToConstFetches as $scalarValueToConstFetch) { + if ($node->value === $scalarValueToConstFetch->getScalar()->value) { + return $scalarValueToConstFetch->getConstFetch(); + } + } + return null; + } + public function configure(array $configuration) : void + { + Assert::allIsAOf($configuration, ScalarValueToConstFetch::class); + $this->scalarValueToConstFetches = $configuration; + } +} diff --git a/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToFuncCallRector.php b/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToFuncCallRector.php index fcb25c54a..f1ad80898 100644 --- a/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToFuncCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToFuncCallRector.php @@ -12,7 +12,7 @@ use Rector\Transform\ValueObject\StaticCallToFuncCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\StaticCall\StaticCallToFuncCallRector\StaticCallToFuncCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php b/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php index 46fd5c86a..e8ca282aa 100644 --- a/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php @@ -17,7 +17,7 @@ use Rector\Transform\ValueObject\StaticCallToMethodCall; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\StaticCall\StaticCallToMethodCallRector\StaticCallToMethodCallRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToNewRector.php b/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToNewRector.php index c3430a0b9..1d53dbe54 100644 --- a/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToNewRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/StaticCall/StaticCallToNewRector.php @@ -12,10 +12,8 @@ use Rector\Transform\ValueObject\StaticCallToNew; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** - * @changelog https://github.com/symfony/symfony/pull/35308 - * * @see \Rector\Tests\Transform\Rector\StaticCall\StaticCallToNewRector\StaticCallToNewRectorTest */ final class StaticCallToNewRector extends AbstractRector implements ConfigurableRectorInterface @@ -54,7 +52,7 @@ public function getNodeTypes() : array return [StaticCall::class]; } /** - * @param Node\Expr\StaticCall $node + * @param StaticCall $node */ public function refactor(Node $node) : ?Node { diff --git a/vendor/rector/rector/rules/Transform/Rector/String_/StringToClassConstantRector.php b/vendor/rector/rector/rules/Transform/Rector/String_/StringToClassConstantRector.php index df2344463..a7fa72869 100644 --- a/vendor/rector/rector/rules/Transform/Rector/String_/StringToClassConstantRector.php +++ b/vendor/rector/rector/rules/Transform/Rector/String_/StringToClassConstantRector.php @@ -11,7 +11,7 @@ use Rector\Transform\ValueObject\StringToClassConstant; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Transform\Rector\String_\StringToClassConstantRector\StringToClassConstantRectorTest */ diff --git a/vendor/rector/rector/rules/Transform/ValueObject/ParentClassToTraits.php b/vendor/rector/rector/rules/Transform/ValueObject/ParentClassToTraits.php index bf41074b9..55745ed16 100644 --- a/vendor/rector/rector/rules/Transform/ValueObject/ParentClassToTraits.php +++ b/vendor/rector/rector/rules/Transform/ValueObject/ParentClassToTraits.php @@ -4,7 +4,7 @@ namespace Rector\Transform\ValueObject; use Rector\Validation\RectorAssert; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class ParentClassToTraits { /** diff --git a/vendor/rector/rector/rules/Transform/ValueObject/ScalarValueToConstFetch.php b/vendor/rector/rector/rules/Transform/ValueObject/ScalarValueToConstFetch.php new file mode 100644 index 000000000..14a839a8d --- /dev/null +++ b/vendor/rector/rector/rules/Transform/ValueObject/ScalarValueToConstFetch.php @@ -0,0 +1,46 @@ +scalar = $scalar; + $this->constFetch = $constFetch; + } + /** + * @return \PhpParser\Node\Scalar\DNumber|\PhpParser\Node\Scalar\String_|\PhpParser\Node\Scalar\LNumber + */ + public function getScalar() + { + return $this->scalar; + } + /** + * @return \PhpParser\Node\Expr\ConstFetch|\PhpParser\Node\Expr\ClassConstFetch + */ + public function getConstFetch() + { + return $this->constFetch; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php b/vendor/rector/rector/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php deleted file mode 100644 index 515f3ffa6..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -typeComparator = $typeComparator; } /** - * @param MethodCall[]|StaticCall[]|ArrayCallable[] $calls + * @param MethodCall[]|StaticCall[] $calls * @return array */ public function resolveStrictTypesFromCalls(array $calls) : array { $staticTypesByArgumentPosition = []; foreach ($calls as $call) { - if (!$call instanceof StaticCall && !$call instanceof MethodCall) { - continue; - } foreach ($call->args as $position => $arg) { - if (!$arg instanceof Arg) { - continue; - } - if ($arg->unpack) { - continue; + // there is first class callable usage, or argument unpack, or named arg + // simply returns array marks as unknown as can be anything and in any position + if (!$arg instanceof Arg || $arg->unpack || $arg->name instanceof Identifier) { + return []; } $staticTypesByArgumentPosition[$position][] = $this->resolveStrictArgValueType($arg); } diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php index 8e170e9f6..11b5fc488 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/CallerParamMatcher.php @@ -56,25 +56,20 @@ public function __construct(NodeNameResolver $nodeNameResolver, AstResolver $ast $this->typeComparator = $typeComparator; } /** - * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\FuncCall $call * @return null|\PhpParser\Node\Identifier|\PhpParser\Node\Name|\PhpParser\Node\NullableType|\PhpParser\Node\UnionType|\PhpParser\Node\ComplexType */ - public function matchCallParamType($call, Param $param, Scope $scope) + public function matchCallParamType(Param $param, Param $callParam) { - $callParam = $this->matchCallParam($call, $param, $scope); - if (!$callParam instanceof Param) { + if (!$callParam->type instanceof Node) { return null; } if (!$param->default instanceof Expr && !$callParam->default instanceof Expr) { // skip as mixed is not helpful and possibly requires more precise change elsewhere - if ($this->isCallParamMixed($callParam)) { + if ($this->isCallParamMixed($callParam->type)) { return null; } return $callParam->type; } - if (!$callParam->type instanceof Node) { - return null; - } $default = $param->default ?? $callParam->default; if (!$default instanceof Expr) { return null; @@ -114,7 +109,7 @@ public function matchParentParam(StaticCall $parentStaticCall, Param $param, Sco /** * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\FuncCall $call */ - private function matchCallParam($call, Param $param, Scope $scope) : ?Param + public function matchCallParam($call, Param $param, Scope $scope) : ?Param { $callArgPosition = $this->matchCallArgPosition($call, $param); if ($callArgPosition === null) { @@ -164,12 +159,9 @@ private function resolveParentMethodParam(Scope $scope, string $methodName, int } return null; } - private function isCallParamMixed(Param $param) : bool + private function isCallParamMixed(Node $node) : bool { - if (!$param->type instanceof Node) { - return \false; - } - $callParamType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($param->type); + $callParamType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($node); return $callParamType instanceof MixedType; } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php index 2532b1a80..36f381016 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ClassMethodParamTypeCompleter.php @@ -6,7 +6,6 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Identifier; -use PhpParser\Node\Name; use PhpParser\Node\Param; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Type\CallableType; @@ -14,12 +13,8 @@ use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; -use Rector\NodeTypeResolver\Node\AttributeKey; -use Rector\Php\PhpVersionProvider; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeCommonTypeNarrower; use Rector\StaticTypeMapper\StaticTypeMapper; -use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodParamVendorLockResolver; final class ClassMethodParamTypeCompleter { @@ -33,22 +28,10 @@ final class ClassMethodParamTypeCompleter * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodParamVendorLockResolver */ private $classMethodParamVendorLockResolver; - /** - * @readonly - * @var \Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeCommonTypeNarrower - */ - private $unionTypeCommonTypeNarrower; - /** - * @readonly - * @var \Rector\Php\PhpVersionProvider - */ - private $phpVersionProvider; - public function __construct(StaticTypeMapper $staticTypeMapper, ClassMethodParamVendorLockResolver $classMethodParamVendorLockResolver, UnionTypeCommonTypeNarrower $unionTypeCommonTypeNarrower, PhpVersionProvider $phpVersionProvider) + public function __construct(StaticTypeMapper $staticTypeMapper, ClassMethodParamVendorLockResolver $classMethodParamVendorLockResolver) { $this->staticTypeMapper = $staticTypeMapper; $this->classMethodParamVendorLockResolver = $classMethodParamVendorLockResolver; - $this->unionTypeCommonTypeNarrower = $unionTypeCommonTypeNarrower; - $this->phpVersionProvider = $phpVersionProvider; } /** * @param array $classParameterTypes @@ -74,9 +57,6 @@ public function complete(ClassMethod $classMethod, array $classParameterTypes, i if ($param->type instanceof Identifier) { continue; } - if ($param->type instanceof Name && $param->type->getAttribute(AttributeKey::VIRTUAL_NODE) === \true) { - continue; - } // update parameter $param->type = $phpParserTypeNode; $hasChanged = \true; @@ -109,8 +89,6 @@ private function shouldSkipArgumentStaticType(ClassMethod $classMethod, Type $ar if ($this->isClosureAndCallableType($currentParameterStaticType, $argumentStaticType)) { return \true; } - // narrow union type in case its not supported yet - $argumentStaticType = $this->narrowUnionTypeIfNotSupported($argumentStaticType); // too many union types if ($this->isTooDetailedUnionType($currentParameterStaticType, $argumentStaticType, $maxUnionTypes)) { return \true; @@ -150,21 +128,6 @@ private function isTooDetailedUnionType(Type $currentType, Type $newType, int $m } return \count($newType->getTypes()) > $maxUnionTypes; } - private function narrowUnionTypeIfNotSupported(Type $type) : Type - { - if (!$type instanceof UnionType) { - return $type; - } - // union is supported, so it's ok - if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::UNION_TYPES)) { - return $type; - } - $narrowedObjectType = $this->unionTypeCommonTypeNarrower->narrowToSharedObjectType($type); - if ($narrowedObjectType instanceof ObjectType) { - return $narrowedObjectType; - } - return $type; - } private function isAcceptedByDefault(Param $param, Type $argumentStaticType) : bool { if (!$param->default instanceof Expr) { diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php index a43c64a57..548deec22 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php @@ -4,34 +4,41 @@ namespace Rector\TypeDeclaration\NodeAnalyzer; use PhpParser\Node\Expr; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; +use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver; final class ReturnAnalyzer { /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike + * @readonly + * @var \Rector\TypeDeclaration\TypeInferer\SilentVoidResolver */ - public function hasClassMethodRootReturn($functionLike) : bool + private $silentVoidResolver; + public function __construct(SilentVoidResolver $silentVoidResolver) { - foreach ((array) $functionLike->stmts as $stmt) { - if ($stmt instanceof Return_) { - return \true; - } - } - return \false; + $this->silentVoidResolver = $silentVoidResolver; } /** * @param Return_[] $returns + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike */ - public function areExclusiveExprReturns(array $returns) : bool + public function hasOnlyReturnWithExpr($functionLike, array $returns) : bool { + if ($functionLike->stmts === null) { + return \false; + } + // void or combined with yield/yield from + if ($returns === []) { + return \false; + } + // possible void foreach ($returns as $return) { if (!$return->expr instanceof Expr) { return \false; } } - return \true; + // possible silent void + return !$this->silentVoidResolver->hasSilentVoid($functionLike); } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php deleted file mode 100644 index cff71f797..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php +++ /dev/null @@ -1,99 +0,0 @@ -betterNodeFinder = $betterNodeFinder; - $this->returnAnalyzer = $returnAnalyzer; - } - /** - * @return Return_[] - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike - */ - public function matchAlwaysStrictReturns($functionLike) : array - { - if ($functionLike->stmts === null) { - return []; - } - if ($this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($functionLike, [Yield_::class, YieldFrom::class])) { - return []; - } - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($functionLike, Return_::class); - if ($returns === []) { - return []; - } - // is one statement depth 3? - if (!$this->returnAnalyzer->areExclusiveExprReturns($returns)) { - return []; - } - // is one in ifOrElse, other in else? - if ($this->hasOnlyStmtWithIfAndElse($functionLike)) { - return $returns; - } - // has root return? - if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) { - return []; - } - return $returns; - } - /** - * @param \PhpParser\Node\Stmt\If_|\PhpParser\Node\Stmt\Else_ $ifOrElse - */ - private function hasFirstLevelReturn($ifOrElse) : bool - { - foreach ($ifOrElse->stmts as $stmt) { - if ($stmt instanceof Return_) { - return \true; - } - } - return \false; - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike - */ - private function hasOnlyStmtWithIfAndElse($functionLike) : bool - { - foreach ((array) $functionLike->stmts as $functionLikeStmt) { - if (!$functionLikeStmt instanceof If_) { - continue; - } - $if = $functionLikeStmt; - if ($if->elseifs !== []) { - return \false; - } - if (!$if->else instanceof Else_) { - return \false; - } - if (!$this->hasFirstLevelReturn($if)) { - return \false; - } - return $this->hasFirstLevelReturn($if->else); - } - return \false; - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php deleted file mode 100644 index d73bd2aac..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php +++ /dev/null @@ -1,48 +0,0 @@ -alwaysStrictBoolExprAnalyzer = $alwaysStrictBoolExprAnalyzer; - $this->alwaysStrictReturnAnalyzer = $alwaysStrictReturnAnalyzer; - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike - */ - public function hasAlwaysStrictBoolReturn($functionLike) : bool - { - $returns = $this->alwaysStrictReturnAnalyzer->matchAlwaysStrictReturns($functionLike); - if ($returns === []) { - return \false; - } - foreach ($returns as $return) { - // we need exact expr return - if (!$return->expr instanceof Expr) { - return \false; - } - if (!$this->alwaysStrictBoolExprAnalyzer->isStrictBoolExpr($return->expr)) { - return \false; - } - } - return \true; - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictNativeFunctionReturnTypeAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictNativeFunctionReturnTypeAnalyzer.php index ea02c321b..daf0d0c34 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictNativeFunctionReturnTypeAnalyzer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictNativeFunctionReturnTypeAnalyzer.php @@ -4,12 +4,8 @@ namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer; use PhpParser\Node\Expr\CallLike; -use PhpParser\Node\Expr\Closure; -use PhpParser\Node\Expr\Yield_; -use PhpParser\Node\Expr\YieldFrom; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\NodeAnalyzer\ReturnFilter\ExclusiveNativeCallLikeReturnMatcher; @@ -38,27 +34,15 @@ public function __construct(BetterNodeFinder $betterNodeFinder, ExclusiveNativeC } /** * @return CallLike[]|null - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike */ public function matchAlwaysReturnNativeCallLikes($functionLike) : ?array { if ($functionLike->stmts === null) { return null; } - if ($this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($functionLike, [Yield_::class, YieldFrom::class])) { - return null; - } - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($functionLike, Return_::class); - if ($returns === []) { - return null; - } - // is one statement depth 3? - if (!$this->returnAnalyzer->areExclusiveExprReturns($returns)) { - return null; - } - // has root return? - if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) { + $returns = $this->betterNodeFinder->findReturnsScoped($functionLike); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($functionLike, $returns)) { return null; } return $this->exclusiveNativeCallLikeReturnMatcher->match($returns); diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php index f11cb6d80..f17183f5e 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php @@ -7,13 +7,10 @@ use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\Variable; -use PhpParser\Node\Expr\Yield_; -use PhpParser\Node\Expr\YieldFrom; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; use PHPStan\Type\ObjectType; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; @@ -50,27 +47,15 @@ public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $this->returnAnalyzer = $returnAnalyzer; } /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike */ public function matchAlwaysReturnVariableNew($functionLike) : ?string { if ($functionLike->stmts === null) { return null; } - if ($this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($functionLike, [Yield_::class, YieldFrom::class])) { - return null; - } - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($functionLike, Return_::class); - if ($returns === []) { - return null; - } - // is one statement depth 3? - if (!$this->returnAnalyzer->areExclusiveExprReturns($returns)) { - return null; - } - // has root return? - if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) { + $returns = $this->betterNodeFinder->findReturnsScoped($functionLike); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($functionLike, $returns)) { return null; } if (\count($returns) !== 1) { diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictScalarReturnTypeAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictScalarReturnTypeAnalyzer.php deleted file mode 100644 index 205beca58..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictScalarReturnTypeAnalyzer.php +++ /dev/null @@ -1,79 +0,0 @@ -alwaysStrictReturnAnalyzer = $alwaysStrictReturnAnalyzer; - $this->alwaysStrictScalarExprAnalyzer = $alwaysStrictScalarExprAnalyzer; - $this->typeFactory = $typeFactory; - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike - */ - public function matchAlwaysScalarReturnType($functionLike, bool $hardCodedOnly = \false) : ?Type - { - $returns = $this->alwaysStrictReturnAnalyzer->matchAlwaysStrictReturns($functionLike); - if ($returns === []) { - return null; - } - $scalarTypes = []; - foreach ($returns as $return) { - // we need exact expr return - if (!$return->expr instanceof Expr) { - return null; - } - if ($hardCodedOnly && !$this->isHardCodedExpression($return->expr)) { - return null; - } - $scalarType = $this->alwaysStrictScalarExprAnalyzer->matchStrictScalarExpr($return->expr); - if (!$scalarType instanceof Type) { - return null; - } - $scalarTypes[] = $scalarType; - } - return $this->typeFactory->createMixedPassedOrUnionType($scalarTypes); - } - private function isHardCodedExpression(Expr $expr) : bool - { - // Normal scalar values like strings, integers and floats - if ($expr instanceof Scalar) { - return \true; - } - // true / false / null are constants - if ($expr instanceof ConstFetch && \in_array($expr->name->toLowerString(), ['true', 'false', 'null'], \true)) { - return \true; - } - // Negative numbers are wrapped in UnaryMinus, so check expression inside it - return ($expr instanceof UnaryMinus || $expr instanceof UnaryPlus) && $expr->expr instanceof Scalar; - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddNeverReturnType.php b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddNeverReturnType.php new file mode 100644 index 000000000..285a93f40 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddNeverReturnType.php @@ -0,0 +1,112 @@ +classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->classModifierChecker = $classModifierChecker; + $this->betterNodeFinder = $betterNodeFinder; + $this->neverFuncCallAnalyzer = $neverFuncCallAnalyzer; + $this->nodeNameResolver = $nodeNameResolver; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node + * @return \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure|null + */ + public function add($node, Scope $scope) + { + if ($this->shouldSkip($node, $scope)) { + return null; + } + $node->returnType = new Identifier('never'); + return $node; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node + */ + private function shouldSkip($node, Scope $scope) : bool + { + // already has return type, and non-void + // it can be "never" return itself, or other return type + if ($node->returnType instanceof Node && !$this->nodeNameResolver->isName($node->returnType, 'void')) { + return \true; + } + if ($this->hasReturnOrYields($node)) { + return \true; + } + if (!$this->hasNeverNodesOrNeverFuncCalls($node)) { + return \true; + } + if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { + return \true; + } + if (!$node->returnType instanceof Node) { + return \false; + } + // skip as most likely intentional + return !$this->classModifierChecker->isInsideFinalClass($node) && $this->nodeNameResolver->isName($node->returnType, 'void'); + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node + */ + private function hasReturnOrYields($node) : bool + { + return $this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($node, \array_merge([Return_::class, Yield_::class, YieldFrom::class], ControlStructure::CONDITIONAL_NODE_SCOPE_TYPES)); + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node + */ + private function hasNeverNodesOrNeverFuncCalls($node) : bool + { + $hasNeverNodes = $this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($node, [Throw_::class]); + if ($hasNeverNodes) { + return \true; + } + return $this->neverFuncCallAnalyzer->hasNeverFuncCall($node); + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromCast.php b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromCast.php new file mode 100644 index 000000000..023d08925 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromCast.php @@ -0,0 +1,76 @@ +betterNodeFinder = $betterNodeFinder; + $this->returnTypeInferer = $returnTypeInferer; + $this->staticTypeMapper = $staticTypeMapper; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + * @return \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|null + */ + public function add($functionLike, Scope $scope) + { + if ($functionLike->returnType instanceof Node) { + return null; + } + if ($functionLike instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope)) { + return null; + } + $hasNonCastReturn = (bool) $this->betterNodeFinder->findFirstInFunctionLikeScoped($functionLike, static function (Node $subNode) : bool { + return $subNode instanceof Return_ && !$subNode->expr instanceof Cast; + }); + if ($hasNonCastReturn) { + return null; + } + $returnType = $this->returnTypeInferer->inferFunctionLike($functionLike); + if ($returnType instanceof UnionType) { + return null; + } + $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); + if (!$returnTypeNode instanceof Node) { + return null; + } + $functionLike->returnType = $returnTypeNode; + return $functionLike; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromParam.php b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromParam.php new file mode 100644 index 000000000..540a6addf --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromParam.php @@ -0,0 +1,163 @@ +nodeNameResolver = $nodeNameResolver; + $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->returnTypeInferer = $returnTypeInferer; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + * @return \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|null + */ + public function add($functionLike, Scope $scope) + { + if ($functionLike->stmts === null) { + return null; + } + if ($this->shouldSkipNode($functionLike, $scope)) { + return null; + } + $return = $this->findCurrentScopeReturn($functionLike->stmts); + if (!$return instanceof Return_ || !$return->expr instanceof Expr) { + return null; + } + $returnName = $this->nodeNameResolver->getName($return->expr); + $stmts = $functionLike->stmts; + foreach ($functionLike->getParams() as $param) { + if (!$param->type instanceof Node) { + continue; + } + if ($this->shouldSkipParam($param, $stmts)) { + continue; + } + $paramName = $this->nodeNameResolver->getName($param); + if ($returnName !== $paramName) { + continue; + } + $functionLike->returnType = $param->type; + return $functionLike; + } + return null; + } + /** + * @param Stmt[] $stmts + */ + private function findCurrentScopeReturn(array $stmts) : ?Return_ + { + $return = null; + $this->simpleCallableNodeTraverser->traverseNodesWithCallable($stmts, static function (Node $node) use(&$return) : ?int { + // skip scope nesting + if ($node instanceof Class_ || $node instanceof FunctionLike) { + $return = null; + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + if (!$node instanceof Return_) { + return null; + } + if (!$node->expr instanceof Variable) { + $return = null; + return NodeTraverser::STOP_TRAVERSAL; + } + $return = $node; + return null; + }); + return $return; + } + /** + * @param Stmt[] $stmts + */ + private function shouldSkipParam(Param $param, array $stmts) : bool + { + $paramName = $this->nodeNameResolver->getName($param); + $isParamModified = \false; + $this->simpleCallableNodeTraverser->traverseNodesWithCallable($stmts, function (Node $node) use($paramName, &$isParamModified) : ?int { + // skip scope nesting + if ($node instanceof Class_ || $node instanceof FunctionLike) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + if ($node instanceof AssignRef && $this->nodeNameResolver->isName($node->expr, $paramName)) { + $isParamModified = \true; + return NodeTraverser::STOP_TRAVERSAL; + } + if (!$node instanceof Assign) { + return null; + } + if (!$node->var instanceof Variable) { + return null; + } + if (!$this->nodeNameResolver->isName($node->var, $paramName)) { + return null; + } + $isParamModified = \true; + return NodeTraverser::STOP_TRAVERSAL; + }); + return $isParamModified; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function shouldSkipNode($functionLike, Scope $scope) : bool + { + // type is already known, skip + if ($functionLike->returnType instanceof Node) { + return \true; + } + if ($functionLike instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope)) { + return \true; + } + $returnType = $this->returnTypeInferer->inferFunctionLike($functionLike); + if ($returnType instanceof MixedType) { + return \true; + } + $returnType = TypeCombinator::removeNull($returnType); + return $returnType instanceof UnionType; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromStrictNativeCall.php b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromStrictNativeCall.php new file mode 100644 index 000000000..871ad5be5 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromStrictNativeCall.php @@ -0,0 +1,86 @@ +staticTypeMapper = $staticTypeMapper; + $this->strictNativeFunctionReturnTypeAnalyzer = $strictNativeFunctionReturnTypeAnalyzer; + $this->nodeTypeResolver = $nodeTypeResolver; + $this->typeFactory = $typeFactory; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + } + /** + * @template TFunctionLike as ClassMethod|Function_ + * + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + * @return TFunctionLike|null + */ + public function add($functionLike, Scope $scope) + { + // already filled, skip + if ($functionLike->returnType instanceof Node) { + return null; + } + if ($functionLike instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope)) { + return null; + } + $nativeCallLikes = $this->strictNativeFunctionReturnTypeAnalyzer->matchAlwaysReturnNativeCallLikes($functionLike); + if ($nativeCallLikes === null) { + return null; + } + $callLikeTypes = []; + foreach ($nativeCallLikes as $nativeCallLike) { + $callLikeTypes[] = $this->nodeTypeResolver->getType($nativeCallLike); + } + $returnType = $this->typeFactory->createMixedPassedOrUnionTypeAndKeepConstant($callLikeTypes); + if ($returnType instanceof MixedType) { + return null; + } + $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); + if (!$returnTypeNode instanceof Node) { + return null; + } + $functionLike->returnType = $returnTypeNode; + return $functionLike; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddUnionReturnType.php b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddUnionReturnType.php new file mode 100644 index 000000000..2617cc55c --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/NodeManipulator/AddUnionReturnType.php @@ -0,0 +1,72 @@ +returnTypeInferer = $returnTypeInferer; + $this->unionTypeMapper = $unionTypeMapper; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + } + /** + * @template TCallLike as ClassMethod|Function_ + * + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $node + * @return TCallLike|null + */ + public function add($node, Scope $scope) + { + if ($node->stmts === null) { + return null; + } + // type is already known + if ($node->returnType instanceof Node) { + return null; + } + if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { + return null; + } + $inferReturnType = $this->returnTypeInferer->inferFunctionLike($node); + if (!$inferReturnType instanceof UnionType) { + return null; + } + $returnType = $this->unionTypeMapper->mapToPhpParserNode($inferReturnType, TypeKind::RETURN); + if (!$returnType instanceof Node) { + return null; + } + // handled by another PHP 7.1 rule with broader scope + if ($returnType instanceof NullableType) { + return null; + } + $node->returnType = $returnType; + return $node; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php b/vendor/rector/rector/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php index 3fde6dab5..5a76114fc 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php +++ b/vendor/rector/rector/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\TypeDeclaration\PHPStan; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\GroupUse; @@ -22,9 +22,6 @@ use Rector\StaticTypeMapper\ValueObject\Type\NonExistingObjectType; use Rector\StaticTypeMapper\ValueObject\Type\ShortenedGenericObjectType; use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType; -use Rector\TypeDeclaration\Contract\PHPStan\TypeWithClassTypeSpecifierInterface; -use Rector\TypeDeclaration\PHPStan\TypeSpecifier\SameNamespacedTypeSpecifier; -use Rector\TypeDeclaration\PHPStan\TypeSpecifier\SelfStaticParentTypeSpecifier; final class ObjectTypeSpecifier { /** @@ -37,35 +34,17 @@ final class ObjectTypeSpecifier * @var \Rector\Naming\Naming\UseImportsResolver */ private $useImportsResolver; - /** - * @var TypeWithClassTypeSpecifierInterface[] - */ - private $typeWithClassTypeSpecifiers = []; - public function __construct(ReflectionProvider $reflectionProvider, UseImportsResolver $useImportsResolver, SelfStaticParentTypeSpecifier $selfStaticParentTypeSpecifier, SameNamespacedTypeSpecifier $sameNamespacedTypeSpecifier) + public function __construct(ReflectionProvider $reflectionProvider, UseImportsResolver $useImportsResolver) { $this->reflectionProvider = $reflectionProvider; $this->useImportsResolver = $useImportsResolver; - $this->typeWithClassTypeSpecifiers = [$selfStaticParentTypeSpecifier, $sameNamespacedTypeSpecifier]; } /** * @return \PHPStan\Type\TypeWithClassName|\Rector\StaticTypeMapper\ValueObject\Type\NonExistingObjectType|\PHPStan\Type\UnionType|\PHPStan\Type\MixedType */ public function narrowToFullyQualifiedOrAliasedObjectType(Node $node, ObjectType $objectType, ?\PHPStan\Analyser\Scope $scope) { - if ($scope instanceof Scope) { - foreach ($this->typeWithClassTypeSpecifiers as $typeWithClassTypeSpecifier) { - if ($typeWithClassTypeSpecifier->match($objectType, $scope)) { - return $typeWithClassTypeSpecifier->resolveObjectReferenceType($objectType, $scope); - } - } - } $uses = $this->useImportsResolver->resolve(); - if ($uses === []) { - if (!$this->reflectionProvider->hasClass($objectType->getClassName())) { - return new NonExistingObjectType($objectType->getClassName()); - } - return new FullyQualifiedObjectType($objectType->getClassName(), null, $objectType->getClassReflection()); - } $aliasedObjectType = $this->matchAliasedObjectType($objectType, $uses); if ($aliasedObjectType instanceof AliasedObjectType) { return $aliasedObjectType; @@ -78,11 +57,21 @@ public function narrowToFullyQualifiedOrAliasedObjectType(Node $node, ObjectType if ($this->reflectionProvider->hasClass($className)) { return new FullyQualifiedObjectType($className); } + // probably in same namespace + if ($scope instanceof Scope) { + $namespaceName = $scope->getNamespace(); + if ($namespaceName !== null) { + $newClassName = $namespaceName . '\\' . $className; + if ($this->reflectionProvider->hasClass($newClassName)) { + return new FullyQualifiedObjectType($newClassName); + } + } + } // invalid type return new NonExistingObjectType($className); } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ private function matchAliasedObjectType(ObjectType $objectType, array $uses) : ?AliasedObjectType { @@ -120,7 +109,7 @@ private function processAliasedObject(string $alias, string $className, string $ return null; } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses * @return \Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType|\Rector\StaticTypeMapper\ValueObject\Type\ShortenedGenericObjectType|null */ private function matchShortenedObjectType(ObjectType $objectType, array $uses) diff --git a/vendor/rector/rector/rules/TypeDeclaration/PHPStan/TypeSpecifier/SameNamespacedTypeSpecifier.php b/vendor/rector/rector/rules/TypeDeclaration/PHPStan/TypeSpecifier/SameNamespacedTypeSpecifier.php deleted file mode 100644 index 4172c9143..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/PHPStan/TypeSpecifier/SameNamespacedTypeSpecifier.php +++ /dev/null @@ -1,37 +0,0 @@ -reflectionProvider = $reflectionProvider; - } - public function match(ObjectType $objectType, Scope $scope) : bool - { - $namespaceName = $scope->getNamespace(); - if ($namespaceName === null) { - return \false; - } - $namespacedClassName = $namespaceName . '\\' . \ltrim($objectType->getClassName(), '\\'); - return $this->reflectionProvider->hasClass($namespacedClassName); - } - public function resolveObjectReferenceType(ObjectType $objectType, Scope $scope) : TypeWithClassName - { - $namespacedClassName = $scope->getNamespace() . '\\' . \ltrim($objectType->getClassName(), '\\'); - return new FullyQualifiedObjectType($namespacedClassName); - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/PHPStan/TypeSpecifier/SelfStaticParentTypeSpecifier.php b/vendor/rector/rector/rules/TypeDeclaration/PHPStan/TypeSpecifier/SelfStaticParentTypeSpecifier.php deleted file mode 100644 index cf6f18cac..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/PHPStan/TypeSpecifier/SelfStaticParentTypeSpecifier.php +++ /dev/null @@ -1,45 +0,0 @@ -getClassReflection(); - if (!$classReflection instanceof ClassReflection) { - return \false; - } - return \in_array($objectType->getClassName(), [ObjectReference::STATIC, ObjectReference::PARENT, ObjectReference::SELF], \true); - } - public function resolveObjectReferenceType(ObjectType $objectType, Scope $scope) : TypeWithClassName - { - $classReflection = $scope->getClassReflection(); - if (!$classReflection instanceof ClassReflection) { - throw new ShouldNotHappenException(); - } - $className = $objectType->getClassName(); - if ($className === ObjectReference::STATIC) { - return new StaticType($classReflection); - } - if ($className === ObjectReference::SELF) { - return new SelfObjectType($className, null, $classReflection); - } - $parentClassReflection = $classReflection->getParentClass(); - if (!$parentClassReflection instanceof ClassReflection) { - throw new ShouldNotHappenException(); - } - return new ParentStaticType($parentClassReflection); - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php b/vendor/rector/rector/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php new file mode 100644 index 000000000..b43d86f44 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php @@ -0,0 +1,148 @@ +scalarStringToTypeMapper = $scalarStringToTypeMapper; + } + public function resolveTypeExpressionFromVarTag(TypeNode $typeNode, Variable $variable) : ?Expr + { + if ($typeNode instanceof IdentifierTypeNode) { + $scalarType = $this->scalarStringToTypeMapper->mapScalarStringToType($typeNode->name); + $scalarTypeFunction = $this->getScalarTypeFunction(\get_class($scalarType)); + if ($scalarTypeFunction !== null) { + $arg = new Arg($variable); + return new FuncCall(new Name($scalarTypeFunction), [$arg]); + } + if ($scalarType instanceof NullType) { + return new Identical($variable, new ConstFetch(new Name('null'))); + } + if ($scalarType instanceof ConstantBooleanType) { + return new Identical($variable, new ConstFetch(new Name($scalarType->getValue() ? 'true' : 'false'))); + } + if ($scalarType instanceof MixedType && !$scalarType->isExplicitMixed()) { + return new Instanceof_($variable, new Name($typeNode->name)); + } + } elseif ($typeNode instanceof NullableTypeNode) { + $unionExpressions = []; + $nullableTypeExpression = $this->resolveTypeExpressionFromVarTag($typeNode->type, $variable); + if (!$nullableTypeExpression instanceof Expr) { + return null; + } + $unionExpressions[] = $nullableTypeExpression; + $nullExpression = $this->resolveTypeExpressionFromVarTag(new IdentifierTypeNode('null'), $variable); + \assert($nullExpression instanceof Expr); + $unionExpressions[] = $nullExpression; + return $this->generateOrExpression($unionExpressions); + } elseif ($typeNode instanceof BracketsAwareUnionTypeNode) { + $unionExpressions = []; + foreach ($typeNode->types as $typeNode) { + $unionExpression = $this->resolveTypeExpressionFromVarTag($typeNode, $variable); + if (!$unionExpression instanceof Expr) { + return null; + } + $unionExpressions[] = $unionExpression; + } + return $this->generateOrExpression($unionExpressions); + } elseif ($typeNode instanceof BracketsAwareIntersectionTypeNode) { + $intersectionExpressions = []; + foreach ($typeNode->types as $typeNode) { + $intersectionExpression = $this->resolveTypeExpressionFromVarTag($typeNode, $variable); + if (!$intersectionExpression instanceof Expr) { + return null; + } + $intersectionExpressions[] = $intersectionExpression; + } + return $this->generateAndExpression($intersectionExpressions); + } + return null; + } + /** + * @param Expr[] $unionExpressions + * @return BooleanOr + */ + private function generateOrExpression(array $unionExpressions) + { + $booleanOr = new BooleanOr($unionExpressions[0], $unionExpressions[1]); + if (\count($unionExpressions) == 2) { + return $booleanOr; + } + \array_splice($unionExpressions, 0, 2, [$booleanOr]); + return $this->generateOrExpression($unionExpressions); + } + /** + * @param Expr[] $intersectionExpressions + * @return BooleanAnd + */ + private function generateAndExpression(array $intersectionExpressions) + { + $booleanAnd = new BooleanAnd($intersectionExpressions[0], $intersectionExpressions[1]); + if (\count($intersectionExpressions) == 2) { + return $booleanAnd; + } + \array_splice($intersectionExpressions, 0, 2, [$booleanAnd]); + return $this->generateAndExpression($intersectionExpressions); + } + /** + * @param class-string $className + */ + private function getScalarTypeFunction(string $className) : ?string + { + switch ($className) { + case IntegerType::class: + return 'is_int'; + case BooleanType::class: + return 'is_bool'; + case FloatType::class: + return 'is_float'; + case StringType::class: + return 'is_string'; + case ArrayType::class: + return 'is_array'; + case CallableType::class: + return 'is_callable'; + case ObjectWithoutClassType::class: + return 'is_object'; + case IterableType::class: + return 'is_iterable'; + default: + return null; + } + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ArrowFunction/AddArrowFunctionReturnTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ArrowFunction/AddArrowFunctionReturnTypeRector.php index 8dc47ed0b..322748495 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ArrowFunction/AddArrowFunctionReturnTypeRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ArrowFunction/AddArrowFunctionReturnTypeRector.php @@ -48,10 +48,11 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if ($node->returnType !== null) { + if ($node->returnType instanceof Node) { return null; } $type = $this->nodeTypeResolver->getNativeType($node->expr); + // not valid to add explicit type in PHP if ($type->isVoid()->yes()) { return null; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php index 08dc436b6..fb1572d89 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php @@ -14,8 +14,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://github.com/symplify/phpstan-rules/blob/master/docs/rules_overview.md#checktypehintcallertyperule - * * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector\AddMethodCallBasedStrictParamTypeRectorTest */ final class AddMethodCallBasedStrictParamTypeRector extends AbstractRector diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php new file mode 100644 index 000000000..c8291a813 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php @@ -0,0 +1,230 @@ +> + */ + private const NATIVE_FUNC_CALLS_WITH_POSITION = ['array_walk' => ['array' => 0, 'callback' => 1], 'array_map' => ['array' => 1, 'callback' => 0], 'usort' => ['array' => 0, 'callback' => 1], 'array_filter' => ['array' => 0, 'callback' => 1]]; + public function __construct(PhpDocInfoFactory $phpDocInfoFactory, ArgsAnalyzer $argsAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, StaticTypeMapper $staticTypeMapper) + { + $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->argsAnalyzer = $argsAnalyzer; + $this->phpDocTypeChanger = $phpDocTypeChanger; + $this->staticTypeMapper = $staticTypeMapper; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add param array docblock based on callable native function call', [new CodeSample(<<<'CODE_SAMPLE' +function process(array $items): void +{ + array_walk($items, function (stdClass $item) { + echo $item->value; + }); +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +/** + * @param stdClass[] $items + */ +function process(array $items): void +{ + array_walk($items, function (stdClass $item) { + echo $item->value; + }); +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + * @return null|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ + */ + public function refactor(Node $node) + { + if ($node->params === []) { + return null; + } + if ($node->stmts === null) { + return null; + } + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); + $variableNamesWithArrayType = $this->collectVariableNamesWithArrayType($node, $phpDocInfo); + if ($variableNamesWithArrayType === []) { + return null; + } + $paramsWithType = []; + $this->traverseNodesWithCallable($node->stmts, function (Node $subNode) use($variableNamesWithArrayType, $node, &$paramsWithType) : ?int { + if ($subNode instanceof Class_ || $subNode instanceof Function_) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + if (!$subNode instanceof FuncCall) { + return null; + } + if (!$this->isNames($subNode, \array_keys(self::NATIVE_FUNC_CALLS_WITH_POSITION))) { + return null; + } + if ($subNode->isFirstClassCallable()) { + return null; + } + $args = $subNode->getArgs(); + if ($this->argsAnalyzer->hasNamedArg($args)) { + return null; + } + if (\count($args) < 2) { + return null; + } + $funcCallName = (string) $this->getName($subNode); + $arrayArgValue = $args[self::NATIVE_FUNC_CALLS_WITH_POSITION[$funcCallName]['array']]->value; + if (!$arrayArgValue instanceof Variable) { + return null; + } + // defined on param provided + if (!$this->isNames($arrayArgValue, $variableNamesWithArrayType)) { + return null; + } + $arrayArgValueType = $this->nodeTypeResolver->getNativeType($arrayArgValue); + // type changed, eg: by reassign + if (!$arrayArgValueType->isArray()->yes()) { + return null; + } + $callbackArgValue = $args[self::NATIVE_FUNC_CALLS_WITH_POSITION[$funcCallName]['callback']]->value; + if (!$callbackArgValue instanceof ArrowFunction && !$callbackArgValue instanceof Closure) { + return null; + } + // no params or more than 2 params + if ($callbackArgValue->params === [] || \count($callbackArgValue->params) > 2) { + return null; + } + foreach ($callbackArgValue->params as $callbackArgValueParam) { + // not typed + if (!$callbackArgValueParam->type instanceof Node) { + return null; + } + } + if (isset($callbackArgValue->params[1]) && !$this->nodeComparator->areNodesEqual($callbackArgValue->params[0]->type, $callbackArgValue->params[1]->type)) { + return null; + } + if (!$callbackArgValue->params[0]->type instanceof Node) { + return null; + } + $arrayArgValueName = (string) $this->getName($arrayArgValue); + $paramToUpdate = $this->getParamByName($node, $arrayArgValueName); + if (!$paramToUpdate instanceof Param) { + return null; + } + $paramType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($callbackArgValue->params[0]->type); + if ($paramType instanceof MixedType) { + return null; + } + $paramsWithType[$this->getName($paramToUpdate)] = \array_unique(\array_merge($paramsWithType[$this->getName($paramToUpdate)] ?? [], [$paramType]), \SORT_REGULAR); + return null; + }); + $hasChanged = \false; + foreach ($paramsWithType as $paramName => $type) { + $type = \count($type) > 1 ? TypeCombinator::union(...$type) : \current($type); + /** @var Param $paramByName */ + $paramByName = $this->getParamByName($node, $paramName); + $this->phpDocTypeChanger->changeParamType($node, $phpDocInfo, new ArrayType(new MixedType(), $type), $paramByName, $paramName); + $hasChanged = \true; + } + if (!$hasChanged) { + return null; + } + return $node; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $node + */ + private function getParamByName($node, string $paramName) : ?Param + { + foreach ($node->params as $param) { + if ($this->isName($param, $paramName)) { + return $param; + } + } + return null; + } + /** + * @return string[] + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $node + */ + private function collectVariableNamesWithArrayType($node, PhpDocInfo $phpDocInfo) : array + { + $variableNamesWithArrayType = []; + foreach ($node->params as $param) { + if (!$param->type instanceof Identifier) { + continue; + } + if ($param->type->toString() !== 'array') { + continue; + } + if (!$param->var instanceof Variable) { + continue; + } + $paramName = $this->getName($param); + $paramTag = $phpDocInfo->getParamTagValueByName($paramName); + if ($paramTag instanceof ParamTagValueNode) { + continue; + } + $variableNamesWithArrayType[] = $paramName; + } + return $variableNamesWithArrayType; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php index ee49f2048..0aa7fd49e 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\TypeDeclaration\Rector\ClassMethod; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Attribute; use PhpParser\Node\AttributeGroup; @@ -165,8 +165,7 @@ private function inferParam(Class_ $class, int $parameterPosition, $dataProvider if (!$dataProviderClassMethod instanceof ClassMethod) { return new MixedType(); } - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($dataProviderClassMethod, Return_::class); + $returns = $this->betterNodeFinder->findReturnsScoped($dataProviderClassMethod); if ($returns !== []) { return $this->resolveReturnStaticArrayTypeByParameterPosition($returns, $parameterPosition); } @@ -308,6 +307,9 @@ private function refactorClassMethod(ClassMethod $classMethod, Class_ $class, ar if ($param->type instanceof Node) { continue; } + if ($param->variadic) { + continue; + } $paramTypes = []; foreach ($dataProviderNodes as $dataProviderNode) { $paramTypes[] = $this->inferParam($class, $parameterPosition, $dataProviderNode); diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php index 6f534ed10..c44201271 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php @@ -21,7 +21,7 @@ use Rector\ValueObject\PhpVersionFeature; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddParamTypeDeclarationRector\AddParamTypeDeclarationRectorTest */ diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php new file mode 100644 index 000000000..f6a031e5d --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php @@ -0,0 +1,171 @@ +betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; + $this->staticTypeMapper = $staticTypeMapper; + $this->typeFactory = $typeFactory; + $this->phpDocTypeChanger = $phpDocTypeChanger; + $this->phpDocInfoFactory = $phpDocInfoFactory; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add @return array docblock based on array_map() return strict type', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + public function getItems(array $items) + { + return array_map(function ($item): int { + return $item->id; + }, $items); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + /** + * @return int[] + */ + public function getItems(array $items) + { + return array_map(function ($item): int { + return $item->id; + }, $items); + } +} +CODE_SAMPLE +)]); + } + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + * @return null|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Stmt\ClassMethod + */ + public function refactor(Node $node) + { + $returnsScoped = $this->betterNodeFinder->findReturnsScoped($node); + if ($this->hasNonArrayReturnType($node)) { + return null; + } + // nothing to return? skip it + if ($returnsScoped === []) { + return null; + } + // only returns with expr and no void + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returnsScoped)) { + return null; + } + $closureReturnTypes = []; + foreach ($returnsScoped as $returnScoped) { + if (!$returnScoped->expr instanceof FuncCall) { + return null; + } + $arrayMapClosure = $this->matchArrayMapClosure($returnScoped->expr); + if (!$arrayMapClosure instanceof FunctionLike) { + return null; + } + if (!$arrayMapClosure->returnType instanceof Node) { + return null; + } + $closureReturnTypes[] = $this->staticTypeMapper->mapPhpParserNodePHPStanType($arrayMapClosure->returnType); + } + $returnType = $this->typeFactory->createMixedPassedOrUnionType($closureReturnTypes); + $arrayType = new ArrayType(new MixedType(), $returnType); + $functionLikePhpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); + $hasChanged = $this->phpDocTypeChanger->changeReturnType($node, $functionLikePhpDocInfo, $arrayType); + if ($hasChanged) { + return null; + } + return $node; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function hasNonArrayReturnType($functionLike) : bool + { + if (!$functionLike->returnType instanceof Identifier) { + return \false; + } + return $functionLike->returnType->toLowerString() !== 'array'; + } + /** + * @return \PhpParser\Node\Expr\Closure|\PhpParser\Node\Expr\ArrowFunction|null + */ + private function matchArrayMapClosure(FuncCall $funcCall) + { + if (!$this->isName($funcCall, 'array_map')) { + return null; + } + if ($funcCall->isFirstClassCallable()) { + return null; + } + // lets infer strict array_map() type + $firstArg = $funcCall->getArgs()[0]; + if (!$firstArg->value instanceof Closure && !$firstArg->value instanceof ArrowFunction) { + return null; + } + return $firstArg->value; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationBasedOnParentClassMethodRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationBasedOnParentClassMethodRector.php index 1e1702ac7..ea1ccd4c3 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationBasedOnParentClassMethodRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationBasedOnParentClassMethodRector.php @@ -8,7 +8,6 @@ use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Reflection\MethodReflection; use PHPStan\Reflection\ParametersAcceptorSelector; -use PHPStan\Reflection\ParametersAcceptorWithPhpDocs; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; @@ -23,7 +22,6 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/lsp_errors * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationBasedOnParentClassMethodRector\AddReturnTypeDeclarationBasedOnParentClassMethodRectorTest */ final class AddReturnTypeDeclarationBasedOnParentClassMethodRector extends AbstractRector implements MinPhpVersionInterface @@ -120,7 +118,7 @@ public function refactor(Node $node) : ?Node private function getReturnTypeRecursive(ClassMethod $classMethod) : ?Type { $returnType = $classMethod->getReturnType(); - if ($returnType !== null) { + if ($returnType instanceof Node) { return $this->staticTypeMapper->mapPhpParserNodePHPStanType($returnType); } $parentMethodReflection = $this->parentClassMethodTypeOverrideGuard->getParentClassMethod($classMethod); @@ -128,10 +126,7 @@ private function getReturnTypeRecursive(ClassMethod $classMethod) : ?Type if ($parentMethodReflection->isPrivate()) { return null; } - $parameterAcceptor = ParametersAcceptorSelector::selectSingle($parentMethodReflection->getVariants()); - if (!$parameterAcceptor instanceof ParametersAcceptorWithPhpDocs) { - return null; - } + $parameterAcceptor = ParametersAcceptorSelector::combineAcceptors($parentMethodReflection->getVariants()); $parentReturnType = $parameterAcceptor->getNativeReturnType(); if (!$parentReturnType instanceof MixedType) { return $parentReturnType; @@ -148,7 +143,7 @@ private function processClassMethodReturnType(Class_ $class, ClassMethod $classM if ($parentType instanceof MixedType) { $className = (string) $this->nodeNameResolver->getName($class); $currentObjectType = new ObjectType($className); - if (!$parentType->equals($currentObjectType) && $classMethod->returnType !== null) { + if (!$parentType->equals($currentObjectType) && $classMethod->returnType instanceof Node) { return null; } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php index bacc58a52..d8005ba71 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php @@ -20,7 +20,7 @@ use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationRector\AddReturnTypeDeclarationRectorTest */ @@ -57,7 +57,6 @@ public function __construct(PhpVersionProvider $phpVersionProvider, ParentClassM } public function getRuleDefinition() : RuleDefinition { - $arrayType = new ArrayType(new MixedType(), new MixedType()); return new RuleDefinition('Changes defined return typehint of method and class.', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' class SomeClass { @@ -74,7 +73,7 @@ public function getData(): array } } CODE_SAMPLE -, [new AddReturnTypeDeclaration('SomeClass', 'getData', $arrayType)])]); +, [new AddReturnTypeDeclaration('SomeClass', 'getData', new ArrayType(new MixedType(), new MixedType()))])]); } /** * @return array> @@ -119,7 +118,7 @@ private function processClassMethodNodeWithTypehints(ClassMethod $classMethod, C if ($newType instanceof MixedType) { $className = (string) $this->nodeNameResolver->getName($class); $currentObjectType = new ObjectType($className); - if (!$objectType->equals($currentObjectType) && $classMethod->returnType !== null) { + if (!$objectType->equals($currentObjectType) && $classMethod->returnType instanceof Node) { return; } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddTypeFromResourceDocblockRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddTypeFromResourceDocblockRector.php new file mode 100644 index 000000000..c13d811d7 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddTypeFromResourceDocblockRector.php @@ -0,0 +1,196 @@ +phpDocInfoFactory = $phpDocInfoFactory; + $this->phpDocTypeChanger = $phpDocTypeChanger; + $this->docBlockUpdater = $docBlockUpdater; + $this->staticTypeMapper = $staticTypeMapper; + $this->phpDocTagRemover = $phpDocTagRemover; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add param and return types on resource docblock', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + /** + * @param resource|null $resource + */ + public function setResource($resource) + { + } + + /** + * @return resource|null + */ + public function getResource() + { + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + public function setResource(?App\ValueObject\Resource $resource) + { + } + + public function getResource(): ?App\ValueObject\Resource + { + } +} +CODE_SAMPLE +, ['App\\ValueObject\\Resource'])]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class]; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::NULLABLE_TYPE; + } + /** + * @param ClassMethod $node + */ + public function refactor(Node $node) : ?Node + { + $hasChanged = \false; + $phpdocInfo = $this->phpDocInfoFactory->createFromNode($node); + if (!$phpdocInfo instanceof PhpDocInfo) { + return null; + } + // for return type + if (!$node->returnType instanceof Node) { + $returnType = $phpdocInfo->getReturnType(); + $newType = $this->resolveNewType($returnType); + if ($newType instanceof Type) { + $returnTagValueNode = $phpdocInfo->getReturnTagValue(); + if ($returnTagValueNode instanceof ReturnTagValueNode) { + if ($returnTagValueNode->description !== '') { + $this->phpDocTypeChanger->changeReturnType($node, $phpdocInfo, $newType); + } else { + $phpdocInfo->removeByType(ReturnTagValueNode::class); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + } + $node->returnType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($newType, TypeKind::RETURN); + $hasChanged = \true; + } + } + } + // for param type + foreach ($node->params as $param) { + if ($param->type instanceof Node) { + continue; + } + $paramName = $this->getName($param); + $paramType = $phpdocInfo->getParamType($this->getName($param)); + $newType = $this->resolveNewType($paramType); + if ($newType instanceof Type) { + $paramTagValueByName = $phpdocInfo->getParamTagValueByName($paramName); + if (!$paramTagValueByName instanceof ParamTagValueNode) { + continue; + } + if ($paramTagValueByName->description !== '') { + $this->phpDocTypeChanger->changeParamType($node, $phpdocInfo, $newType, $param, $paramName); + } else { + $this->phpDocTagRemover->removeTagValueFromNode($phpdocInfo, $paramTagValueByName); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + } + $param->type = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($newType, TypeKind::RETURN); + $hasChanged = \true; + } + } + if ($hasChanged) { + return $node; + } + return null; + } + /** + * @param mixed[] $configuration + */ + public function configure(array $configuration) : void + { + Assert::stringNotEmpty(\current($configuration)); + $this->newTypeFromResourceDoc = \current($configuration); + } + private function resolveNewType(Type $type) : ?Type + { + $newType = null; + if ($type instanceof UnionType) { + $types = $type->getTypes(); + foreach ($types as $key => $type) { + if ($type instanceof ResourceType) { + $types[$key] = new ObjectType($this->newTypeFromResourceDoc); + $newType = new UnionType($types); + break; + } + } + } elseif ($type instanceof ResourceType) { + $newType = new ObjectType($this->newTypeFromResourceDoc); + } + return $newType; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php index f3590c953..b26b9bc4d 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php @@ -7,7 +7,6 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Throw_; -use Rector\NodeAnalyzer\MagicClassMethodAnalyzer; use Rector\Rector\AbstractRector; use Rector\Reflection\ClassModifierChecker; use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver; @@ -31,21 +30,15 @@ final class AddVoidReturnTypeWhereNoReturnRector extends AbstractRector implemen * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnVendorLockResolver */ private $classMethodReturnVendorLockResolver; - /** - * @readonly - * @var \Rector\NodeAnalyzer\MagicClassMethodAnalyzer - */ - private $magicClassMethodAnalyzer; /** * @readonly * @var \Rector\Reflection\ClassModifierChecker */ private $classModifierChecker; - public function __construct(SilentVoidResolver $silentVoidResolver, ClassMethodReturnVendorLockResolver $classMethodReturnVendorLockResolver, MagicClassMethodAnalyzer $magicClassMethodAnalyzer, ClassModifierChecker $classModifierChecker) + public function __construct(SilentVoidResolver $silentVoidResolver, ClassMethodReturnVendorLockResolver $classMethodReturnVendorLockResolver, ClassModifierChecker $classModifierChecker) { $this->silentVoidResolver = $silentVoidResolver; $this->classMethodReturnVendorLockResolver = $classMethodReturnVendorLockResolver; - $this->magicClassMethodAnalyzer = $magicClassMethodAnalyzer; $this->classModifierChecker = $classModifierChecker; } public function getRuleDefinition() : RuleDefinition @@ -106,9 +99,6 @@ public function provideMinPhpVersion() : int } private function shouldSkipClassMethod(ClassMethod $classMethod) : bool { - if ($this->magicClassMethodAnalyzer->isUnsafeOverridden($classMethod)) { - return \true; - } if ($classMethod->isAbstract()) { return \true; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php new file mode 100644 index 000000000..3e51b0c2a --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php @@ -0,0 +1,140 @@ +valueResolver = $valueResolver; + $this->betterNodeFinder = $betterNodeFinder; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->returnAnalyzer = $returnAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add return bool, based on direct true/false returns', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + public function resolve($value) + { + if ($value) { + return false; + } + + return true; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + public function resolve($value): bool + { + if ($value) { + return false; + } + + return true; + } +} +CODE_SAMPLE +)]); + } + /** + * @funcCall array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + if ($this->shouldSkip($node, $scope)) { + return null; + } + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + if (!$this->hasOnlyBooleanConstExprs($returns)) { + return null; + } + $node->returnType = new Identifier('bool'); + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::SCALAR_TYPES; + } + /** + * @param ClassMethod|Function_|Closure $node + */ + private function shouldSkip(Node $node, Scope $scope) : bool + { + // already has the type, skip + if ($node->returnType instanceof Node) { + return \true; + } + return $node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope); + } + /** + * @param Return_[] $returns + */ + private function hasOnlyBooleanConstExprs(array $returns) : bool + { + foreach ($returns as $return) { + if (!$return->expr instanceof ConstFetch) { + return \false; + } + if (!$this->valueResolver->isTrueOrFalse($return->expr)) { + return \false; + } + } + return \true; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php similarity index 71% rename from vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php rename to vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php index 81130c48c..b6ad26ef7 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php @@ -15,8 +15,12 @@ use PhpParser\Node\Expr\BinaryOp\NotIdentical; use PhpParser\Node\Expr\BinaryOp\Smaller; use PhpParser\Node\Expr\BinaryOp\SmallerOrEqual; +use PhpParser\Node\Expr\BooleanNot; use PhpParser\Node\Expr\Closure; +use PhpParser\Node\Expr\ConstFetch; +use PhpParser\Node\Expr\Empty_; use PhpParser\Node\Expr\FuncCall; +use PhpParser\Node\Expr\Isset_; use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Stmt\ClassMethod; @@ -35,15 +39,10 @@ use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromStrictScalarReturnsRector\BoolReturnTypeFromStrictScalarReturnsRectorTest + * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromBooleanStrictReturnsRector\BoolReturnTypeFromBooleanStrictReturnsRectorTest */ -final class BoolReturnTypeFromStrictScalarReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface +final class BoolReturnTypeFromBooleanStrictReturnsRector extends AbstractScopeAwareRector implements MinPhpVersionInterface { - /** - * @readonly - * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer - */ - private $returnAnalyzer; /** * @readonly * @var \PHPStan\Reflection\ReflectionProvider @@ -64,25 +63,26 @@ final class BoolReturnTypeFromStrictScalarReturnsRector extends AbstractScopeAwa * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard */ private $classMethodReturnTypeOverrideGuard; - public function __construct(ReturnAnalyzer $returnAnalyzer, ReflectionProvider $reflectionProvider, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + public function __construct(ReflectionProvider $reflectionProvider, ValueResolver $valueResolver, BetterNodeFinder $betterNodeFinder, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnAnalyzer $returnAnalyzer) { - $this->returnAnalyzer = $returnAnalyzer; $this->reflectionProvider = $reflectionProvider; $this->valueResolver = $valueResolver; $this->betterNodeFinder = $betterNodeFinder; $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->returnAnalyzer = $returnAnalyzer; } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Change return type based on strict returns type operations', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Add bool return type based on strict bool returns type operations', [new CodeSample(<<<'CODE_SAMPLE' class SomeClass { public function resolve($first, $second) { - if ($first) { - return false; - } - return $first > $second; } } @@ -92,10 +92,6 @@ class SomeClass { public function resolve($first, $second): bool { - if ($first) { - return false; - } - return $first > $second; } } @@ -107,18 +103,26 @@ public function resolve($first, $second): bool */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { if ($this->shouldSkip($node, $scope)) { return null; } - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($node, Return_::class); - if (!$this->hasOnlyBoolScalarReturnExprs($returns, $node)) { + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + // handled in another rule + if ($this->hasOnlyBooleanConstExprs($returns)) { + return null; + } + // handled in another rule + if (!$this->hasOnlyBoolScalarReturnExprs($returns)) { return null; } $node->returnType = new Identifier('bool'); @@ -133,6 +137,7 @@ public function provideMinPhpVersion() : int */ private function shouldSkip(Node $node, Scope $scope) : bool { + // already has the type, skip if ($node->returnType instanceof Node) { return \true; } @@ -140,24 +145,14 @@ private function shouldSkip(Node $node, Scope $scope) : bool } /** * @param Return_[] $returns - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike */ - private function hasOnlyBoolScalarReturnExprs(array $returns, $functionLike) : bool + private function hasOnlyBoolScalarReturnExprs(array $returns) : bool { - if ($returns === []) { - return \false; - } - if (!$this->returnAnalyzer->hasClassMethodRootReturn($functionLike)) { - return \false; - } foreach ($returns as $return) { if (!$return->expr instanceof Expr) { return \false; } - if ($this->valueResolver->isTrueOrFalse($return->expr)) { - continue; - } - if ($this->isBooleanBinaryOp($return->expr)) { + if ($this->isBooleanOp($return->expr)) { continue; } if ($return->expr instanceof FuncCall && $this->isNativeBooleanReturnTypeFuncCall($return->expr)) { @@ -173,7 +168,11 @@ private function isNativeBooleanReturnTypeFuncCall(FuncCall $funcCall) : bool if (!\is_string($functionName)) { return \false; } - $functionReflection = $this->reflectionProvider->getFunction(new Name($functionName), null); + $name = new Name($functionName); + if (!$this->reflectionProvider->hasFunction($name, null)) { + return \false; + } + $functionReflection = $this->reflectionProvider->getFunction($name, null); if (!$functionReflection->isBuiltin()) { return \false; } @@ -182,7 +181,7 @@ private function isNativeBooleanReturnTypeFuncCall(FuncCall $funcCall) : bool } return \false; } - private function isBooleanBinaryOp(Expr $expr) : bool + private function isBooleanOp(Expr $expr) : bool { if ($expr instanceof Smaller) { return \true; @@ -211,6 +210,30 @@ private function isBooleanBinaryOp(Expr $expr) : bool if ($expr instanceof Equal) { return \true; } - return $expr instanceof NotEqual; + if ($expr instanceof NotEqual) { + return \true; + } + if ($expr instanceof Empty_) { + return \true; + } + if ($expr instanceof Isset_) { + return \true; + } + return $expr instanceof BooleanNot; + } + /** + * @param Return_[] $returns + */ + private function hasOnlyBooleanConstExprs(array $returns) : bool + { + foreach ($returns as $return) { + if (!$return->expr instanceof ConstFetch) { + return \false; + } + if (!$this->valueResolver->isTrueOrFalse($return->expr)) { + return \false; + } + } + return \true; } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php new file mode 100644 index 000000000..900bff35e --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php @@ -0,0 +1,165 @@ +classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add int/float return type based on strict typed returns', [new CodeSample(<<<'CODE_SAMPLE' +class SomeClass +{ + public function increase($value) + { + return ++$value; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeClass +{ + public function increase($value): int + { + return ++$value; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + if ($this->shouldSkip($node, $scope)) { + return null; + } + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + // handled by another rule + if ($this->isAlwaysNumeric($returns)) { + return null; + } + $isAlwaysIntType = \true; + $isAlwaysFloatType = \true; + foreach ($returns as $return) { + if (!$return->expr instanceof Expr) { + return null; + } + $exprType = $this->nodeTypeResolver->getNativeType($return->expr); + if (!$exprType->isInteger()->yes()) { + $isAlwaysIntType = \false; + } + if (!$exprType->isFloat()->yes()) { + $isAlwaysFloatType = \false; + } + } + if ($isAlwaysFloatType) { + $node->returnType = new Identifier('float'); + return $node; + } + if ($isAlwaysIntType) { + $node->returnType = new Identifier('int'); + return $node; + } + return null; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::SCALAR_TYPES; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function shouldSkip($functionLike, Scope $scope) : bool + { + // type is already known, skip + if ($functionLike->returnType instanceof Node) { + return \true; + } + // empty, nothing to find + if ($functionLike->stmts === null || $functionLike->stmts === []) { + return \true; + } + if (!$functionLike instanceof ClassMethod) { + return \false; + } + return $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope); + } + /** + * @param Return_[] $returns + */ + private function isAlwaysNumeric(array $returns) : bool + { + $isAlwaysFloat = \true; + $isAlwaysInt = \true; + foreach ($returns as $return) { + $epxr = $return->expr; + if ($epxr instanceof UnaryMinus) { + $epxr = $epxr->expr; + } + if (!$epxr instanceof DNumber) { + $isAlwaysFloat = \false; + } + if (!$epxr instanceof LNumber) { + $isAlwaysInt = \false; + } + } + if ($isAlwaysFloat) { + return \true; + } + return $isAlwaysInt; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php index a890097a2..28c63012b 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php @@ -4,13 +4,16 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\Expr\Closure; +use PhpParser\Node\Expr\UnaryMinus; use PhpParser\Node\Identifier; +use PhpParser\Node\Scalar\DNumber; +use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PHPStan\Analyser\Scope; +use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractScopeAwareRector; -use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -28,31 +31,37 @@ final class NumericReturnTypeFromStrictScalarReturnsRector extends AbstractScope private $classMethodReturnTypeOverrideGuard; /** * @readonly - * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer + * @var \Rector\PhpParser\Node\BetterNodeFinder */ - private $returnTypeInferer; - public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer) + private $betterNodeFinder; + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, BetterNodeFinder $betterNodeFinder, ReturnAnalyzer $returnAnalyzer) { $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->returnTypeInferer = $returnTypeInferer; + $this->betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Change numeric return type based on strict returns type operations', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Add int/float return type based on strict scalar returns type', [new CodeSample(<<<'CODE_SAMPLE' class SomeClass { - public function resolve(int $first, int $second) + public function getNumber() { - return $first - $second; + return 200; } } CODE_SAMPLE , <<<'CODE_SAMPLE' class SomeClass { - public function resolve(int $first, int $second): int + public function getNumber(): int { - return $first - $second; + return 200; } } CODE_SAMPLE @@ -63,28 +72,39 @@ public function resolve(int $first, int $second): int */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->returnType instanceof Node) { + if ($this->shouldSkip($node, $scope)) { return null; } - if ($node->stmts === null) { + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { return null; } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return null; + $isAlwaysInt = \true; + $isAlwaysFloat = \true; + foreach ($returns as $return) { + $expr = $return->expr; + if ($expr instanceof UnaryMinus) { + $expr = $expr->expr; + } + if (!$expr instanceof DNumber) { + $isAlwaysFloat = \false; + } + if (!$expr instanceof LNumber) { + $isAlwaysInt = \false; + } } - $returnType = $this->returnTypeInferer->inferFunctionLike($node); - if ($returnType->isFloat()->yes()) { + if ($isAlwaysFloat) { $node->returnType = new Identifier('float'); return $node; } - if ($returnType->isInteger()->yes()) { + if ($isAlwaysInt) { $node->returnType = new Identifier('int'); return $node; } @@ -94,4 +114,22 @@ public function provideMinPhpVersion() : int { return PhpVersionFeature::SCALAR_TYPES; } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function shouldSkip($functionLike, Scope $scope) : bool + { + // type is already known, skip + if ($functionLike->returnType instanceof Node) { + return \true; + } + // empty, nothing to ifnd + if ($functionLike->stmts === null || $functionLike->stmts === []) { + return \true; + } + if (!$functionLike instanceof ClassMethod) { + return \false; + } + return $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope); + } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php index 6f7cca3ef..4d9e5e08f 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php @@ -4,21 +4,19 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\ComplexType; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; -use PhpParser\Node\Identifier; -use PhpParser\Node\Name; -use PhpParser\Node\NullableType; use PhpParser\Node\Param; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; -use PhpParser\Node\UnionType; use PHPStan\Analyser\Scope; -use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\Rector\AbstractScopeAwareRector; +use Rector\StaticTypeMapper\Mapper\PhpParserNodeMapper; +use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\Guard\ParamTypeAddGuard; use Rector\TypeDeclaration\NodeAnalyzer\CallerParamMatcher; use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard; @@ -49,12 +47,30 @@ final class ParamTypeByMethodCallTypeRector extends AbstractScopeAwareRector * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - public function __construct(CallerParamMatcher $callerParamMatcher, ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, ParamTypeAddGuard $paramTypeAddGuard, BetterNodeFinder $betterNodeFinder) + /** + * @readonly + * @var \Rector\StaticTypeMapper\Mapper\PhpParserNodeMapper + */ + private $phpParserNodeMapper; + /** + * @readonly + * @var \Rector\StaticTypeMapper\StaticTypeMapper + */ + private $staticTypeMapper; + /** + * @readonly + * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory + */ + private $typeFactory; + public function __construct(CallerParamMatcher $callerParamMatcher, ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, ParamTypeAddGuard $paramTypeAddGuard, BetterNodeFinder $betterNodeFinder, PhpParserNodeMapper $phpParserNodeMapper, StaticTypeMapper $staticTypeMapper, TypeFactory $typeFactory) { $this->callerParamMatcher = $callerParamMatcher; $this->parentClassMethodTypeOverrideGuard = $parentClassMethodTypeOverrideGuard; $this->paramTypeAddGuard = $paramTypeAddGuard; $this->betterNodeFinder = $betterNodeFinder; + $this->phpParserNodeMapper = $phpParserNodeMapper; + $this->staticTypeMapper = $staticTypeMapper; + $this->typeFactory = $typeFactory; } public function getRuleDefinition() : RuleDefinition { @@ -138,20 +154,6 @@ private function shouldSkipClassMethod(ClassMethod $classMethod) : bool } return $this->parentClassMethodTypeOverrideGuard->hasParentClassMethod($classMethod); } - /** - * @param \PhpParser\Node\Identifier|\PhpParser\Node\Name|\PhpParser\Node\NullableType|\PhpParser\Node\UnionType|\PhpParser\Node\ComplexType $paramType - */ - private function mirrorParamType(Param $decoratedParam, $paramType) : void - { - // mimic type - $newParamType = $paramType; - $this->traverseNodesWithCallable($newParamType, static function (Node $node) { - // original node has to removed to avoid tokens crashing from origin positions - $node->setAttribute(AttributeKey::ORIGINAL_NODE, null); - return null; - }); - $decoratedParam->type = $newParamType; - } private function shouldSkipParam(Param $param, ClassMethod $classMethod) : bool { // already has type, skip @@ -173,14 +175,29 @@ private function refactorClassMethod(ClassMethod $classMethod, array $callers, S if ($this->shouldSkipParam($param, $classMethod)) { continue; } + $paramTypes = []; foreach ($callers as $caller) { - $paramType = $this->callerParamMatcher->matchCallParamType($caller, $param, $scope); - if ($paramType === null) { + $matchCallParam = $this->callerParamMatcher->matchCallParam($caller, $param, $scope); + // nothing to do with param, continue + if (!$matchCallParam instanceof Param) { continue; } - $this->mirrorParamType($param, $paramType); + $paramType = $this->callerParamMatcher->matchCallParamType($param, $matchCallParam); + if (!$paramType instanceof Node) { + $paramTypes = []; + break; + } + $paramTypes[] = $this->phpParserNodeMapper->mapToPHPStanType($paramType); $hasChanged = \true; } + if ($paramTypes === []) { + continue; + } + $type = $this->typeFactory->createMixedPassedOrUnionType($paramTypes); + $paramNodeType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PARAM); + if ($paramNodeType instanceof Node) { + $param->type = $paramNodeType; + } } return $hasChanged; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php index 3a5811433..da7587c2c 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php @@ -4,58 +4,28 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\Expr\Closure; -use PhpParser\Node\Expr\Yield_; -use PhpParser\Node\Expr\YieldFrom; -use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; -use PhpParser\Node\Stmt\Throw_; use PHPStan\Analyser\Scope; -use Rector\NodeNestingScope\ValueObject\ControlStructure; -use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractScopeAwareRector; -use Rector\Reflection\ClassModifierChecker; -use Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer; +use Rector\TypeDeclaration\NodeManipulator\AddNeverReturnType; use Rector\ValueObject\PhpVersionFeature; -use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://wiki.php.net/rfc/noreturn_type - * * @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector\ReturnNeverTypeRectorTest */ final class ReturnNeverTypeRector extends AbstractScopeAwareRector implements MinPhpVersionInterface { /** * @readonly - * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard + * @var \Rector\TypeDeclaration\NodeManipulator\AddNeverReturnType */ - private $classMethodReturnTypeOverrideGuard; - /** - * @readonly - * @var \Rector\PhpParser\Node\BetterNodeFinder - */ - private $betterNodeFinder; - /** - * @readonly - * @var \Rector\TypeDeclaration\NodeAnalyzer\NeverFuncCallAnalyzer - */ - private $neverFuncCallAnalyzer; - /** - * @readonly - * @var \Rector\Reflection\ClassModifierChecker - */ - private $classModifierChecker; - public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, BetterNodeFinder $betterNodeFinder, NeverFuncCallAnalyzer $neverFuncCallAnalyzer, ClassModifierChecker $classModifierChecker) + private $addNeverReturnType; + public function __construct(AddNeverReturnType $addNeverReturnType) { - $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->betterNodeFinder = $betterNodeFinder; - $this->neverFuncCallAnalyzer = $neverFuncCallAnalyzer; - $this->classModifierChecker = $classModifierChecker; + $this->addNeverReturnType = $addNeverReturnType; } public function getRuleDefinition() : RuleDefinition { @@ -84,68 +54,17 @@ public function run(): never */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($this->shouldSkip($node, $scope)) { - return null; - } - $node->returnType = new Identifier('never'); - return $node; + return $this->addNeverReturnType->add($node, $scope); } public function provideMinPhpVersion() : int { return PhpVersionFeature::NEVER_TYPE; } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node - */ - private function shouldSkip($node, Scope $scope) : bool - { - if ($node->returnType instanceof Node && !$this->isName($node->returnType, 'void')) { - return \true; - } - if ($this->hasReturnOrYields($node)) { - return \true; - } - if (!$this->hasNeverNodesOrNeverFuncCalls($node)) { - return \true; - } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return \true; - } - if (!$node->returnType instanceof Node) { - return \false; - } - // skip as most likely intentional - if (!$this->classModifierChecker->isInsideFinalClass($node) && $this->isName($node->returnType, 'void')) { - return \true; - } - return $this->isName($node->returnType, 'never'); - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node - */ - private function hasReturnOrYields($node) : bool - { - if ($this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($node, Return_::class)) { - return \true; - } - return $this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($node, \array_merge([Yield_::class, YieldFrom::class], ControlStructure::CONDITIONAL_NODE_SCOPE_TYPES)); - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node - */ - private function hasNeverNodesOrNeverFuncCalls($node) : bool - { - $hasNeverNodes = $this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($node, [Throw_::class]); - if ($hasNeverNodes) { - return \true; - } - return $this->neverFuncCallAnalyzer->hasNeverFuncCall($node); - } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php new file mode 100644 index 000000000..2b5a3b6a7 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php @@ -0,0 +1,119 @@ +unionTypeMapper = $unionTypeMapper; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->returnTypeInferer = $returnTypeInferer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add basic ? nullable type to class methods and functions, as of PHP 7.1', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + public function getData() + { + if (rand(0, 1)) { + return null; + } + + return 100; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + public function getData(): ?int + { + if (rand(0, 1)) { + return null; + } + + return 100; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::NULLABLE_TYPE; + } + /** + * @param ClassMethod|Function_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + // empty body, nothing to resolve + if ($node->stmts === null || $node->stmts === []) { + return null; + } + // type is already known, skip + if ($node->returnType instanceof Node) { + return null; + } + if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { + return null; + } + $inferReturnType = $this->returnTypeInferer->inferFunctionLike($node); + if (!$inferReturnType instanceof UnionType) { + return null; + } + $returnType = $this->unionTypeMapper->mapToPhpParserNode($inferReturnType, TypeKind::RETURN); + if (!$returnType instanceof Node) { + return null; + } + // handled by union PHP 8.0 rule + if (!$returnType instanceof NullableType) { + return null; + } + $node->returnType = $returnType; + return $node; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php new file mode 100644 index 000000000..d0fb0e49c --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php @@ -0,0 +1,147 @@ +betterNodeFinder = $betterNodeFinder; + $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->returnAnalyzer = $returnAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add known property and return MockObject types', [new CodeSample(<<<'CODE_SAMPLE' +class SomeTest extends TestCase +{ + public function createSomeMock() + { + $someMock = $this->createMock(SomeClass::class); + return $someMock; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +class SomeTest extends TestCase +{ + public function createSomeMock(): \PHPUnit\Framework\MockObject\MockObject + { + $someMock = $this->createMock(SomeClass::class); + return $someMock; + } +} +CODE_SAMPLE +)]); + } + public function getNodeTypes() : array + { + return [ClassMethod::class]; + } + /** + * @param ClassMethod $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + // type is already known + if ($node->returnType instanceof Node) { + return null; + } + if (!$this->isInsideTestCaseClass($scope)) { + return null; + } + if ($this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { + return null; + } + // we need exactly 1 return + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (\count($returns) !== 1) { + return null; + } + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + /** @var Expr $expr */ + $expr = $returns[0]->expr; + $returnType = $this->nodeTypeResolver->getNativeType($expr); + if (!$this->isMockObjectType($returnType)) { + return null; + } + $node->returnType = new FullyQualified(self::MOCK_OBJECT_CLASS); + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::SCALAR_TYPES; + } + private function isIntersectionWithMockObjectType(Type $type) : bool + { + if (!$type instanceof IntersectionType) { + return \false; + } + if (\count($type->getTypes()) !== 2) { + return \false; + } + return \in_array(self::MOCK_OBJECT_CLASS, $type->getObjectClassNames()); + } + private function isMockObjectType(Type $returnType) : bool + { + if ($returnType instanceof ObjectType && $returnType->isInstanceOf(self::MOCK_OBJECT_CLASS)->yes()) { + return \true; + } + return $this->isIntersectionWithMockObjectType($returnType); + } + private function isInsideTestCaseClass(Scope $scope) : bool + { + $classReflection = $scope->getClassReflection(); + if (!$classReflection instanceof ClassReflection) { + return \false; + } + // is phpunit test case? + return $classReflection->isSubclassOf(self::TESTCASE_CLASS); + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php new file mode 100644 index 000000000..03c9758e1 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php @@ -0,0 +1,80 @@ +addReturnTypeFromCast = $addReturnTypeFromCast; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add return type to function like with return cast', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + public function action($param) + { + try { + return (array) $param; + } catch (Exception $exception) { + // some logging + throw $exception; + } + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + public function action($param): array + { + try { + return (array) $param; + } catch (Exception $exception) { + // some logging + throw $exception; + } + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + return $this->addReturnTypeFromCast->add($node, $scope); + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::SCALAR_TYPES; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php index efaa613ed..1909d5659 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php @@ -5,8 +5,6 @@ use PhpParser\Node; use PhpParser\Node\Expr\Array_; -use PhpParser\Node\Expr\ArrowFunction; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; @@ -66,14 +64,15 @@ public function getArray(): array */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class, ArrowFunction::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|ArrowFunction $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->returnType !== null) { + // already has return type, skip + if ($node->returnType instanceof Node) { return null; } if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { @@ -94,11 +93,11 @@ public function provideMinPhpVersion() : int return PhpVersionFeature::SCALAR_TYPES; } /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Expr\ArrowFunction $functionLike + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike */ private function hasReturnArray($functionLike) : bool { - $stmts = $functionLike instanceof ArrowFunction ? $functionLike->getStmts() : $functionLike->stmts; + $stmts = $functionLike->stmts; if (!\is_array($stmts)) { return \false; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php index 3e5a761ea..82edaf3c6 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php @@ -4,8 +4,6 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\Expr\ArrowFunction; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\New_; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; @@ -19,7 +17,6 @@ use PHPStan\Type\ObjectWithoutClassType; use PHPStan\Type\StaticType; use PHPStan\Type\Type; -use PHPStan\Type\UnionType; use Rector\Enum\ObjectReference; use Rector\Exception\ShouldNotHappenException; use Rector\NodeAnalyzer\ClassAnalyzer; @@ -31,8 +28,10 @@ use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\SelfStaticType; +use Rector\Symfony\CodeQuality\Enum\ResponseClass; +use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer\StrictReturnNewAnalyzer; -use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -68,11 +67,6 @@ final class ReturnTypeFromReturnNewRector extends AbstractScopeAwareRector imple * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard */ private $classMethodReturnTypeOverrideGuard; - /** - * @readonly - * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer - */ - private $returnTypeInferer; /** * @readonly * @var \Rector\NodeAnalyzer\ClassAnalyzer @@ -93,36 +87,47 @@ final class ReturnTypeFromReturnNewRector extends AbstractScopeAwareRector imple * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(TypeFactory $typeFactory, ReflectionProvider $reflectionProvider, ReflectionResolver $reflectionResolver, StrictReturnNewAnalyzer $strictReturnNewAnalyzer, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer, ClassAnalyzer $classAnalyzer, NewTypeResolver $newTypeResolver, BetterNodeFinder $betterNodeFinder, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + /** + * @readonly + * @var \Rector\Symfony\TypeAnalyzer\ControllerAnalyzer + */ + private $controllerAnalyzer; + public function __construct(TypeFactory $typeFactory, ReflectionProvider $reflectionProvider, ReflectionResolver $reflectionResolver, StrictReturnNewAnalyzer $strictReturnNewAnalyzer, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ClassAnalyzer $classAnalyzer, NewTypeResolver $newTypeResolver, BetterNodeFinder $betterNodeFinder, StaticTypeMapper $staticTypeMapper, ReturnAnalyzer $returnAnalyzer, ControllerAnalyzer $controllerAnalyzer) { $this->typeFactory = $typeFactory; $this->reflectionProvider = $reflectionProvider; $this->reflectionResolver = $reflectionResolver; $this->strictReturnNewAnalyzer = $strictReturnNewAnalyzer; $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->returnTypeInferer = $returnTypeInferer; $this->classAnalyzer = $classAnalyzer; $this->newTypeResolver = $newTypeResolver; $this->betterNodeFinder = $betterNodeFinder; $this->staticTypeMapper = $staticTypeMapper; + $this->returnAnalyzer = $returnAnalyzer; + $this->controllerAnalyzer = $controllerAnalyzer; } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Add return type to function like with return new', [new CodeSample(<<<'CODE_SAMPLE' final class SomeClass { - public function action() + public function create() { - return new Response(); + return new Project(); } } CODE_SAMPLE , <<<'CODE_SAMPLE' final class SomeClass { - public function action(): Response + public function create(): Project { - return new Response(); + return new Project(); } } CODE_SAMPLE @@ -133,27 +138,30 @@ public function action(): Response */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class, ArrowFunction::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|ArrowFunction $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->returnType !== null) { + // already filled + if ($node->returnType instanceof Node) { return null; } if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { return null; } - if (!$node instanceof ArrowFunction) { - $returnedNewClassName = $this->strictReturnNewAnalyzer->matchAlwaysReturnVariableNew($node); - if (\is_string($returnedNewClassName)) { - $node->returnType = new FullyQualified($returnedNewClassName); - return $node; - } + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + $returnedNewClassName = $this->strictReturnNewAnalyzer->matchAlwaysReturnVariableNew($node); + if (\is_string($returnedNewClassName)) { + $node->returnType = new FullyQualified($returnedNewClassName); + return $node; } - return $this->refactorDirectReturnNew($node); + return $this->refactorDirectReturnNew($node, $returns); } public function provideMinPhpVersion() : int { @@ -185,39 +193,36 @@ private function createObjectTypeFromNew(New_ $new) } return new StaticType($classReflection); } + if (!$this->reflectionProvider->hasClass($className)) { + return null; + } $classReflection = $this->reflectionProvider->getClass($className); return new ObjectType($className, null, $classReflection); } /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\ArrowFunction|\PhpParser\Node\Expr\Closure $node - * @return null|\PhpParser\Node\Expr\ArrowFunction|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure + * @template TFunctionLike as ClassMethod|Function_ + * + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + * @param Return_[] $returns + * @return TFunctionLike|null */ - private function refactorDirectReturnNew($node) + private function refactorDirectReturnNew($functionLike, array $returns) { - if ($node instanceof ArrowFunction) { - $returns = [new Return_($node->expr)]; - } else { - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($node, Return_::class); - } - if ($returns === []) { - return null; - } $newTypes = $this->resolveReturnNewType($returns); if ($newTypes === null) { return null; } $returnType = $this->typeFactory->createMixedPassedOrUnionType($newTypes); - $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); - if (!$returnTypeNode instanceof Node) { + /** handled by @see \Rector\Symfony\CodeQuality\Rector\ClassMethod\ResponseReturnTypeControllerActionRector earlier */ + if ($this->isResponseInsideController($returnType, $functionLike)) { return null; } - $returnType = $this->returnTypeInferer->inferFunctionLike($node); - if ($returnType instanceof UnionType) { + $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); + if (!$returnTypeNode instanceof Node) { return null; } - $node->returnType = $returnTypeNode; - return $node; + $functionLike->returnType = $returnTypeNode; + return $functionLike; } /** * @param Return_[] $returns @@ -238,4 +243,20 @@ private function resolveReturnNewType(array $returns) : ?array } return $newTypes; } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function isResponseInsideController(Type $returnType, $functionLike) : bool + { + if (!$functionLike instanceof ClassMethod) { + return \false; + } + if (!$returnType instanceof ObjectType) { + return \false; + } + if (!$returnType->isInstanceOf(ResponseClass::BASIC)->yes()) { + return \false; + } + return $this->controllerAnalyzer->isInsideController($functionLike); + } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictBoolReturnExprRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictBoolReturnExprRector.php deleted file mode 100644 index 1ecca6d24..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictBoolReturnExprRector.php +++ /dev/null @@ -1,89 +0,0 @@ -strictBoolReturnTypeAnalyzer = $strictBoolReturnTypeAnalyzer; - $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Add strict return type based on returned strict expr type', [new CodeSample(<<<'CODE_SAMPLE' -final class SomeClass -{ - public function run() - { - return $this->first() && $this->somethingElse(); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -final class SomeClass -{ - public function run(): bool - { - return $this->first() && $this->somethingElse(); - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [ClassMethod::class, Function_::class, Closure::class]; - } - /** - * @param ClassMethod|Function_|Closure $node - */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node - { - if ($node->returnType instanceof Node) { - return null; - } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return null; - } - if (!$this->strictBoolReturnTypeAnalyzer->hasAlwaysStrictBoolReturn($node)) { - return null; - } - $node->returnType = new Identifier('bool'); - return $node; - } - public function provideMinPhpVersion() : int - { - return PhpVersion::PHP_70; - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php index cb3fcadfb..7a84591e7 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php @@ -4,13 +4,18 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; +use PhpParser\Node\Expr\ClassConstFetch; +use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Stmt\ClassMethod; +use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use PHPStan\Type\Type; +use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; +use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\Rector\AbstractScopeAwareRector; use Rector\StaticTypeMapper\StaticTypeMapper; -use Rector\TypeDeclaration\TypeAnalyzer\StrictReturnClassConstReturnTypeAnalyzer; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersion; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -21,11 +26,6 @@ */ final class ReturnTypeFromStrictConstantReturnRector extends AbstractScopeAwareRector implements MinPhpVersionInterface { - /** - * @readonly - * @var \Rector\TypeDeclaration\TypeAnalyzer\StrictReturnClassConstReturnTypeAnalyzer - */ - private $strictReturnClassConstReturnTypeAnalyzer; /** * @readonly * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard @@ -36,11 +36,28 @@ final class ReturnTypeFromStrictConstantReturnRector extends AbstractScopeAwareR * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(StrictReturnClassConstReturnTypeAnalyzer $strictReturnClassConstReturnTypeAnalyzer, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\PhpParser\Node\BetterNodeFinder + */ + private $betterNodeFinder; + /** + * @readonly + * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory + */ + private $typeFactory; + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, StaticTypeMapper $staticTypeMapper, BetterNodeFinder $betterNodeFinder, TypeFactory $typeFactory, ReturnAnalyzer $returnAnalyzer) { - $this->strictReturnClassConstReturnTypeAnalyzer = $strictReturnClassConstReturnTypeAnalyzer; $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; $this->staticTypeMapper = $staticTypeMapper; + $this->betterNodeFinder = $betterNodeFinder; + $this->typeFactory = $typeFactory; + $this->returnAnalyzer = $returnAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -83,10 +100,14 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if ($node->returnType instanceof Node) { return null; } + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } if ($this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { return null; } - $matchedType = $this->strictReturnClassConstReturnTypeAnalyzer->matchAlwaysReturnConstFetch($node); + $matchedType = $this->matchAlwaysReturnConstFetch($returns); if (!$matchedType instanceof Type) { return null; } @@ -104,4 +125,18 @@ public function provideMinPhpVersion() : int { return PhpVersion::PHP_70; } + /** + * @param Return_[] $returns + */ + private function matchAlwaysReturnConstFetch(array $returns) : ?Type + { + $classConstFetchTypes = []; + foreach ($returns as $return) { + if (!$return->expr instanceof ClassConstFetch && !$return->expr instanceof ConstFetch) { + return null; + } + $classConstFetchTypes[] = $this->nodeTypeResolver->getType($return->expr); + } + return $this->typeFactory->createMixedPassedOrUnionType($classConstFetchTypes); + } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php index 9b75dc422..6b45e1821 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php @@ -4,18 +4,12 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PHPStan\Analyser\Scope; -use PHPStan\Type\MixedType; -use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; -use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\Rector\AbstractScopeAwareRector; -use Rector\StaticTypeMapper\StaticTypeMapper; -use Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer\StrictNativeFunctionReturnTypeAnalyzer; +use Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromStrictNativeCall; use Rector\ValueObject\PhpVersion; -use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -26,34 +20,16 @@ final class ReturnTypeFromStrictNativeCallRector extends AbstractScopeAwareRecto { /** * @readonly - * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer\StrictNativeFunctionReturnTypeAnalyzer + * @var \Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromStrictNativeCall */ - private $strictNativeFunctionReturnTypeAnalyzer; - /** - * @readonly - * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory - */ - private $typeFactory; - /** - * @readonly - * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard - */ - private $classMethodReturnTypeOverrideGuard; - /** - * @readonly - * @var \Rector\StaticTypeMapper\StaticTypeMapper - */ - private $staticTypeMapper; - public function __construct(StrictNativeFunctionReturnTypeAnalyzer $strictNativeFunctionReturnTypeAnalyzer, TypeFactory $typeFactory, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, StaticTypeMapper $staticTypeMapper) + private $addReturnTypeFromStrictNativeCall; + public function __construct(AddReturnTypeFromStrictNativeCall $addReturnTypeFromStrictNativeCall) { - $this->strictNativeFunctionReturnTypeAnalyzer = $strictNativeFunctionReturnTypeAnalyzer; - $this->typeFactory = $typeFactory; - $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->staticTypeMapper = $staticTypeMapper; + $this->addReturnTypeFromStrictNativeCall = $addReturnTypeFromStrictNativeCall; } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Add strict return type based native function or class method return', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Add strict return type based native function or native method', [new CodeSample(<<<'CODE_SAMPLE' final class SomeClass { public function run() @@ -78,37 +54,14 @@ public function run(): int */ public function getNodeTypes() : array { - return [ClassMethod::class, Closure::class, Function_::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Closure|Function_ $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->returnType !== null) { - return null; - } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return null; - } - $nativeCallLikes = $this->strictNativeFunctionReturnTypeAnalyzer->matchAlwaysReturnNativeCallLikes($node); - if ($nativeCallLikes === null) { - return null; - } - $callLikeTypes = []; - foreach ($nativeCallLikes as $nativeCallLike) { - $callLikeTypes[] = $this->getType($nativeCallLike); - } - $returnType = $this->typeFactory->createMixedPassedOrUnionTypeAndKeepConstant($callLikeTypes); - if ($returnType instanceof MixedType) { - return null; - } - $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); - if (!$returnTypeNode instanceof Node) { - return null; - } - $node->returnType = $returnTypeNode; - return $node; + return $this->addReturnTypeFromStrictNativeCall->add($node, $scope); } public function provideMinPhpVersion() : int { diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php index e5960af2d..a9e504374 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php @@ -8,14 +8,11 @@ use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; -use PhpParser\Node\Expr\Yield_; -use PhpParser\Node\Expr\YieldFrom; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; @@ -27,6 +24,7 @@ use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractScopeAwareRector; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersion; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -63,13 +61,19 @@ final class ReturnTypeFromStrictNewArrayRector extends AbstractScopeAwareRector * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - public function __construct(PhpDocTypeChanger $phpDocTypeChanger, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer, PhpDocInfoFactory $phpDocInfoFactory, BetterNodeFinder $betterNodeFinder) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + public function __construct(PhpDocTypeChanger $phpDocTypeChanger, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer, PhpDocInfoFactory $phpDocInfoFactory, BetterNodeFinder $betterNodeFinder, ReturnAnalyzer $returnAnalyzer) { $this->phpDocTypeChanger = $phpDocTypeChanger; $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; $this->returnTypeInferer = $returnTypeInferer; $this->phpDocInfoFactory = $phpDocInfoFactory; $this->betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -102,10 +106,10 @@ public function run(): array */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { @@ -117,20 +121,16 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if ($stmts === null) { return null; } - $variable = $this->matchArrayAssignedVariable($stmts); - if (!$variable instanceof Variable) { + $variables = $this->matchArrayAssignedVariable($stmts); + if ($variables === []) { return null; } - // 2. skip yields - if ($this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($node, [Yield_::class, YieldFrom::class])) { + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { return null; } - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($node, Return_::class); - if ($returns === []) { - return null; - } - if ($this->isVariableOverriddenWithNonArray($node, $variable)) { + $variables = $this->matchVariableNotOverriddenByNonArray($node, $variables); + if ($variables === []) { return null; } if (\count($returns) > 1) { @@ -141,6 +141,9 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if (!$onlyReturn->expr instanceof Variable) { return null; } + if (!$this->nodeComparator->isNodeEqual($onlyReturn->expr, $variables)) { + return null; + } $returnType = $this->nodeTypeResolver->getNativeType($onlyReturn->expr); return $this->processAddArrayReturnType($node, $returnType); } @@ -170,7 +173,7 @@ private function processAddArrayReturnType($node, Type $returnType) */ private function shouldSkip($node, Scope $scope) : bool { - if ($node->returnType !== null) { + if ($node->returnType instanceof Node) { return \true; } return $node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope); @@ -193,9 +196,11 @@ private function changeReturnType($node, ArrayType $arrayType) : void $this->phpDocTypeChanger->changeReturnType($node, $phpDocInfo, $narrowArrayType); } /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike + * @param Variable[] $variables + * @return Variable[] + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike */ - private function isVariableOverriddenWithNonArray($functionLike, Variable $variable) : bool + private function matchVariableNotOverriddenByNonArray($functionLike, array $variables) : array { // is variable overriden? /** @var Assign[] $assigns */ @@ -204,24 +209,28 @@ private function isVariableOverriddenWithNonArray($functionLike, Variable $varia if (!$assign->var instanceof Variable) { continue; } - if (!$this->nodeNameResolver->areNamesEqual($assign->var, $variable)) { - continue; - } - if ($assign->expr instanceof Array_) { - continue; - } - $nativeType = $this->nodeTypeResolver->getNativeType($assign->expr); - if (!$nativeType->isArray()->yes()) { - return \true; + foreach ($variables as $key => $variable) { + if (!$this->nodeNameResolver->areNamesEqual($assign->var, $variable)) { + continue; + } + if ($assign->expr instanceof Array_) { + continue; + } + $nativeType = $this->nodeTypeResolver->getNativeType($assign->expr); + if (!$nativeType->isArray()->yes()) { + unset($variables[$key]); + } } } - return \false; + return $variables; } /** * @param Stmt[] $stmts + * @return Variable[] */ - private function matchArrayAssignedVariable(array $stmts) : ?\PhpParser\Node\Expr\Variable + private function matchArrayAssignedVariable(array $stmts) : array { + $variables = []; foreach ($stmts as $stmt) { if (!$stmt instanceof Expression) { continue; @@ -235,10 +244,10 @@ private function matchArrayAssignedVariable(array $stmts) : ?\PhpParser\Node\Exp } $nativeType = $this->nodeTypeResolver->getNativeType($assign->expr); if ($nativeType->isArray()->yes()) { - return $assign->var; + $variables[] = $assign->var; } } - return null; + return $variables; } private function shouldAddReturnArrayDocType(ArrayType $arrayType) : bool { diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php index d271fc96b..e03b5f9f0 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php @@ -4,27 +4,12 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\Expr; -use PhpParser\Node\Expr\Assign; -use PhpParser\Node\Expr\AssignRef; -use PhpParser\Node\Expr\Closure; -use PhpParser\Node\Expr\Variable; -use PhpParser\Node\FunctionLike; -use PhpParser\Node\Param; -use PhpParser\Node\Stmt; -use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; -use PhpParser\NodeTraverser; use PHPStan\Analyser\Scope; -use PHPStan\Type\MixedType; -use PHPStan\Type\TypeCombinator; -use PHPStan\Type\UnionType; use Rector\Rector\AbstractScopeAwareRector; -use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; +use Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromParam; use Rector\ValueObject\PhpVersionFeature; -use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -35,18 +20,12 @@ final class ReturnTypeFromStrictParamRector extends AbstractScopeAwareRector imp { /** * @readonly - * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard + * @var \Rector\TypeDeclaration\NodeManipulator\AddReturnTypeFromParam */ - private $classMethodReturnTypeOverrideGuard; - /** - * @readonly - * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer - */ - private $returnTypeInferer; - public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer) + private $addReturnTypeFromParam; + public function __construct(AddReturnTypeFromParam $addReturnTypeFromParam) { - $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->returnTypeInferer = $returnTypeInferer; + $this->addReturnTypeFromParam = $addReturnTypeFromParam; } public function getRuleDefinition() : RuleDefinition { @@ -75,115 +54,17 @@ public function resolve(ParamType $item): ParamType */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } public function provideMinPhpVersion() : int { return PhpVersionFeature::NULLABLE_TYPE; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->stmts === null) { - return null; - } - if ($this->shouldSkipNode($node, $scope)) { - return null; - } - $return = $this->findCurrentScopeReturn($node->stmts); - if (!$return instanceof Return_ || !$return->expr instanceof Expr) { - return null; - } - $returnName = $this->getName($return->expr); - $stmts = $node->stmts; - foreach ($node->getParams() as $param) { - if (!$param->type instanceof Node) { - continue; - } - if ($this->shouldSkipParam($param, $stmts)) { - continue; - } - $paramName = $this->getName($param); - if ($returnName !== $paramName) { - continue; - } - $node->returnType = $param->type; - return $node; - } - return null; - } - /** - * @param Stmt[] $stmts - */ - private function findCurrentScopeReturn(array $stmts) : ?Return_ - { - $return = null; - $this->traverseNodesWithCallable($stmts, static function (Node $node) use(&$return) : ?int { - // skip scope nesting - if ($node instanceof Class_ || $node instanceof FunctionLike) { - $return = null; - return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - } - if (!$node instanceof Return_) { - return null; - } - if (!$node->expr instanceof Variable) { - $return = null; - return NodeTraverser::STOP_TRAVERSAL; - } - $return = $node; - return null; - }); - return $return; - } - /** - * @param Stmt[] $stmts - */ - private function shouldSkipParam(Param $param, array $stmts) : bool - { - $paramName = $this->getName($param); - $isParamModified = \false; - $this->traverseNodesWithCallable($stmts, function (Node $node) use($paramName, &$isParamModified) : ?int { - // skip scope nesting - if ($node instanceof Class_ || $node instanceof FunctionLike) { - return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - } - if ($node instanceof AssignRef && $this->isName($node->expr, $paramName)) { - $isParamModified = \true; - return NodeTraverser::STOP_TRAVERSAL; - } - if (!$node instanceof Assign) { - return null; - } - if (!$node->var instanceof Variable) { - return null; - } - if (!$this->isName($node->var, $paramName)) { - return null; - } - $isParamModified = \true; - return NodeTraverser::STOP_TRAVERSAL; - }); - return $isParamModified; - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node - */ - private function shouldSkipNode($node, Scope $scope) : bool - { - if ($node->returnType !== null) { - return \true; - } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return \true; - } - $returnType = $this->returnTypeInferer->inferFunctionLike($node); - if ($returnType instanceof MixedType) { - return \true; - } - $returnType = TypeCombinator::removeNull($returnType); - return $returnType instanceof UnionType; + return $this->addReturnTypeFromParam->add($node, $scope); } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictScalarReturnExprRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictScalarReturnExprRector.php deleted file mode 100644 index bff79430c..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictScalarReturnExprRector.php +++ /dev/null @@ -1,146 +0,0 @@ -strictScalarReturnTypeAnalyzer = $strictScalarReturnTypeAnalyzer; - $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->staticTypeMapper = $staticTypeMapper; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Change return type based on strict scalar returns - string, int, float or bool', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' -final class SomeClass -{ - public function foo($value) - { - if ($value) { - return 'yes'; - } - - return 'no'; - } - - public function bar(string $value) - { - return strlen($value); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -final class SomeClass -{ - public function foo($value): string - { - if ($value) { - return 'yes'; - } - - return 'no'; - } - - public function bar(string $value): int - { - return strlen($value); - } -} -CODE_SAMPLE -, [\Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictScalarReturnExprRector::HARD_CODED_ONLY => \false])]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [ClassMethod::class, Function_::class, Closure::class]; - } - /** - * @param ClassMethod|Function_|Closure $node - */ - public function refactorWithScope(Node $node, Scope $scope) : ?Node - { - // already added → skip - if ($node->returnType instanceof Node) { - return null; - } - $scalarReturnType = $this->strictScalarReturnTypeAnalyzer->matchAlwaysScalarReturnType($node, $this->hardCodedOnly); - if (!$scalarReturnType instanceof Type) { - return null; - } - // skip null as often placeholder value and not an only type - if ($scalarReturnType instanceof NullType) { - return null; - } - $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($scalarReturnType, TypeKind::RETURN); - if (!$returnTypeNode instanceof Node) { - return null; - } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return null; - } - if ($returnTypeNode instanceof UnionType) { - return null; - } - $node->returnType = $returnTypeNode; - return $node; - } - public function provideMinPhpVersion() : int - { - return PhpVersion::PHP_70; - } - public function configure(array $configuration) : void - { - $hardCodedOnly = $configuration[self::HARD_CODED_ONLY] ?? \false; - Assert::boolean($hardCodedOnly); - $this->hardCodedOnly = $hardCodedOnly; - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php index 7f1e82a0a..d795a1712 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php @@ -5,9 +5,7 @@ use PhpParser\Node; use PhpParser\Node\ComplexType; -use PhpParser\Node\Expr; use PhpParser\Node\Expr\Closure; -use PhpParser\Node\FunctionLike; use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; @@ -16,13 +14,16 @@ use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; use PhpParser\Node\UnionType as PhpParserUnionType; -use PhpParser\NodeTraverser; use PHPStan\Analyser\Scope; use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\UnionType; use Rector\Php\PhpVersionProvider; +use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\Rector\AbstractScopeAwareRector; +use Rector\StaticTypeMapper\StaticTypeMapper; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\NodeAnalyzer\TypeNodeUnwrapper; use Rector\TypeDeclaration\TypeAnalyzer\ReturnStrictTypeAnalyzer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; @@ -51,6 +52,11 @@ final class ReturnTypeFromStrictTypedCallRector extends AbstractScopeAwareRector * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer */ private $returnTypeInferer; + /** + * @readonly + * @var \Rector\PhpParser\Node\BetterNodeFinder + */ + private $betterNodeFinder; /** * @readonly * @var \Rector\Php\PhpVersionProvider @@ -61,13 +67,26 @@ final class ReturnTypeFromStrictTypedCallRector extends AbstractScopeAwareRector * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard */ private $classMethodReturnTypeOverrideGuard; - public function __construct(TypeNodeUnwrapper $typeNodeUnwrapper, ReturnStrictTypeAnalyzer $returnStrictTypeAnalyzer, ReturnTypeInferer $returnTypeInferer, PhpVersionProvider $phpVersionProvider, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + /** + * @readonly + * @var \Rector\StaticTypeMapper\StaticTypeMapper + */ + private $staticTypeMapper; + public function __construct(TypeNodeUnwrapper $typeNodeUnwrapper, ReturnStrictTypeAnalyzer $returnStrictTypeAnalyzer, ReturnTypeInferer $returnTypeInferer, BetterNodeFinder $betterNodeFinder, PhpVersionProvider $phpVersionProvider, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnAnalyzer $returnAnalyzer, StaticTypeMapper $staticTypeMapper) { $this->typeNodeUnwrapper = $typeNodeUnwrapper; $this->returnStrictTypeAnalyzer = $returnStrictTypeAnalyzer; $this->returnTypeInferer = $returnTypeInferer; + $this->betterNodeFinder = $betterNodeFinder; $this->phpVersionProvider = $phpVersionProvider; $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->returnAnalyzer = $returnAnalyzer; + $this->staticTypeMapper = $staticTypeMapper; } public function getRuleDefinition() : RuleDefinition { @@ -106,35 +125,49 @@ private function getNumber(): int */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } public function provideMinPhpVersion() : int { return PhpVersionFeature::SCALAR_TYPES; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { + // already filled → skip + if ($node->returnType instanceof Node) { + return null; + } if ($node->stmts === null) { return null; } if ($this->shouldSkip($node, $scope)) { return null; } - $currentScopeReturns = $this->findCurrentScopeReturns($node); + $currentScopeReturns = $this->betterNodeFinder->findReturnsScoped($node); $returnedStrictTypes = $this->returnStrictTypeAnalyzer->collectStrictReturnTypes($currentScopeReturns, $scope); if ($returnedStrictTypes === []) { return null; } + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $currentScopeReturns)) { + return null; + } if (\count($returnedStrictTypes) === 1) { return $this->refactorSingleReturnType($currentScopeReturns[0], $returnedStrictTypes[0], $node); } if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::UNION_TYPES)) { /** @var PhpParserUnionType[] $returnedStrictTypes */ $unwrappedTypes = $this->typeNodeUnwrapper->unwrapNullableUnionTypes($returnedStrictTypes); - $node->returnType = new PhpParserUnionType($unwrappedTypes); + $unionType = new PhpParserUnionType($unwrappedTypes); + $type = $this->staticTypeMapper->mapPhpParserNodePHPStanType($unionType); + $returnType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::RETURN); + // verify type transformed into node + if (!$returnType instanceof Node) { + return null; + } + $node->returnType = $unionType; return $node; } return null; @@ -170,7 +203,7 @@ private function processSingleUnionType($node, UnionType $unionType, NullableTyp */ private function shouldSkip($node, Scope $scope) : bool { - if ($node->returnType !== null) { + if ($node->returnType instanceof Node) { return \true; } if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { @@ -197,30 +230,4 @@ private function refactorSingleReturnType(Return_ $return, $returnedStrictTypeNo $functionLike->returnType = $returnType; return $functionLike; } - /** - * @return Return_[] - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node - */ - private function findCurrentScopeReturns($node) : array - { - $currentScopeReturns = []; - if ($node->stmts === null) { - return []; - } - $this->traverseNodesWithCallable($node->stmts, static function (Node $node) use(&$currentScopeReturns) : ?int { - // skip scope nesting - if ($node instanceof FunctionLike) { - return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - } - if (!$node instanceof Return_) { - return null; - } - if (!$node->expr instanceof Expr) { - return null; - } - $currentScopeReturns[] = $node; - return null; - }); - return $currentScopeReturns; - } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php index cd8f41d84..37c8a913f 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php @@ -8,7 +8,6 @@ use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Stmt\ClassMethod; -use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Type\MixedType; @@ -19,6 +18,7 @@ use Rector\Rector\AbstractScopeAwareRector; use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\StaticTypeMapper; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -54,13 +54,19 @@ final class ReturnTypeFromStrictTypedPropertyRector extends AbstractScopeAwareRe * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(TypeFactory $typeFactory, ReflectionResolver $reflectionResolver, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, BetterNodeFinder $betterNodeFinder, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + public function __construct(TypeFactory $typeFactory, ReflectionResolver $reflectionResolver, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, BetterNodeFinder $betterNodeFinder, StaticTypeMapper $staticTypeMapper, ReturnAnalyzer $returnAnalyzer) { $this->typeFactory = $typeFactory; $this->reflectionResolver = $reflectionResolver; $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; $this->betterNodeFinder = $betterNodeFinder; $this->staticTypeMapper = $staticTypeMapper; + $this->returnAnalyzer = $returnAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -100,7 +106,7 @@ public function getNodeTypes() : array */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->returnType !== null) { + if ($node->returnType instanceof Node) { return null; } if ($this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { @@ -131,8 +137,7 @@ public function provideMinPhpVersion() : int */ private function resolveReturnPropertyType(ClassMethod $classMethod) : array { - /** @var Return_[] $returns */ - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($classMethod, Return_::class); + $returns = $this->betterNodeFinder->findReturnsScoped($classMethod); $propertyTypes = []; foreach ($returns as $return) { if (!$return->expr instanceof Expr) { @@ -151,6 +156,9 @@ private function resolveReturnPropertyType(ClassMethod $classMethod) : array } $propertyTypes[] = $this->nodeTypeResolver->getNativeType($return->expr); } + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($classMethod, $returns)) { + return []; + } return $propertyTypes; } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php new file mode 100644 index 000000000..b66ceed70 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php @@ -0,0 +1,129 @@ +classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->valueResolver = $valueResolver; + $this->argsAnalyzer = $argsAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add return type from symfony serializer', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + private \Symfony\Component\Serializer\Serializer $serializer; + + public function resolveEntity($data) + { + return $this->serializer->deserialize($data, SomeType::class, 'json'); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + private \Symfony\Component\Serializer\Serializer $serializer; + + public function resolveEntity($data): SomeType + { + return $this->serializer->deserialize($data, SomeType::class, 'json'); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class]; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::HAS_RETURN_TYPE; + } + /** + * @param ClassMethod $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + if ($node->stmts === null) { + return null; + } + if ($node->returnType instanceof Node) { + return null; + } + if ($this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { + return null; + } + if (\count($node->stmts) !== 1) { + return null; + } + if (!$node->stmts[0] instanceof Return_ || !$node->stmts[0]->expr instanceof MethodCall) { + return null; + } + /** @var MethodCall $returnExpr */ + $returnExpr = $node->stmts[0]->expr; + if (!$this->nodeNameResolver->isName($returnExpr->name, 'deserialize')) { + return null; + } + if ($returnExpr->isFirstClassCallable()) { + return null; + } + if (!$this->isObjectType($returnExpr->var, new ObjectType('Symfony\\Component\\Serializer\\Serializer'))) { + return null; + } + $args = $returnExpr->getArgs(); + if ($this->argsAnalyzer->hasNamedArg($args)) { + return null; + } + if (\count($args) !== 3) { + return null; + } + $type = $this->valueResolver->getValue($args[1]->value); + if (!\is_string($type)) { + return null; + } + $node->returnType = new FullyQualified($type); + return $node; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php index 8ae1ff71f..506faea95 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php @@ -4,23 +4,12 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PHPStan\Analyser\Scope; -use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; -use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; -use PHPStan\Type\Constant\ConstantBooleanType; -use PHPStan\Type\UnionType; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; -use Rector\Comments\NodeDocBlock\DocBlockUpdater; -use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper; use Rector\Rector\AbstractScopeAwareRector; -use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; +use Rector\TypeDeclaration\NodeManipulator\AddUnionReturnType; use Rector\ValueObject\PhpVersionFeature; -use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -31,36 +20,12 @@ final class ReturnUnionTypeRector extends AbstractScopeAwareRector implements Mi { /** * @readonly - * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer + * @var \Rector\TypeDeclaration\NodeManipulator\AddUnionReturnType */ - private $returnTypeInferer; - /** - * @readonly - * @var \Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard - */ - private $classMethodReturnTypeOverrideGuard; - /** - * @readonly - * @var \Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper - */ - private $unionTypeMapper; - /** - * @readonly - * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory - */ - private $phpDocInfoFactory; - /** - * @readonly - * @var \Rector\Comments\NodeDocBlock\DocBlockUpdater - */ - private $docBlockUpdater; - public function __construct(ReturnTypeInferer $returnTypeInferer, ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, UnionTypeMapper $unionTypeMapper, PhpDocInfoFactory $phpDocInfoFactory, DocBlockUpdater $docBlockUpdater) + private $addUnionReturnType; + public function __construct(AddUnionReturnType $addUnionReturnType) { - $this->returnTypeInferer = $returnTypeInferer; - $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; - $this->unionTypeMapper = $unionTypeMapper; - $this->phpDocInfoFactory = $phpDocInfoFactory; - $this->docBlockUpdater = $docBlockUpdater; + $this->addUnionReturnType = $addUnionReturnType; } public function getRuleDefinition() : RuleDefinition { @@ -105,67 +70,17 @@ public function getData(): null|\DateTime|\stdClass */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } public function provideMinPhpVersion() : int { - return PhpVersionFeature::NULLABLE_TYPE; + return PhpVersionFeature::UNION_TYPES; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { - if ($node->stmts === null) { - return null; - } - if ($node->returnType instanceof Node) { - return null; - } - if ($node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope)) { - return null; - } - $inferReturnType = $this->returnTypeInferer->inferFunctionLike($node); - if (!$inferReturnType instanceof UnionType) { - return null; - } - $returnType = $this->unionTypeMapper->mapToPhpParserNode($inferReturnType, TypeKind::RETURN); - if (!$returnType instanceof Node) { - return null; - } - $this->mapStandaloneSubType($node, $inferReturnType); - $node->returnType = $returnType; - return $node; - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node - */ - private function mapStandaloneSubType($node, UnionType $unionType) : void - { - $value = null; - foreach ($unionType->getTypes() as $type) { - if ($type instanceof ConstantBooleanType) { - $value = $type->getValue() ? 'true' : 'false'; - break; - } - } - if ($value === null) { - return; - } - $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); - $returnType = $phpDocInfo->getReturnTagValue(); - if (!$returnType instanceof ReturnTagValueNode) { - return; - } - if (!$returnType->type instanceof BracketsAwareUnionTypeNode) { - return; - } - foreach ($returnType->type->types as $key => $type) { - if ($type instanceof IdentifierTypeNode && $type->__toString() === 'bool') { - $returnType->type->types[$key] = new IdentifierTypeNode($value); - $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); - break; - } - } + return $this->addUnionReturnType->add($node, $scope); } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictArrayParamDimFetchRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictArrayParamDimFetchRector.php index 9799b98b3..170d94e7d 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictArrayParamDimFetchRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictArrayParamDimFetchRector.php @@ -14,6 +14,7 @@ use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Empty_; use PhpParser\Node\Expr\FuncCall; +use PhpParser\Node\Expr\Isset_; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\FunctionLike; @@ -85,6 +86,9 @@ public function refactor(Node $node) : ?Node if ($param->type instanceof Node) { continue; } + if ($param->variadic) { + continue; + } if ($param->default instanceof Expr && !$this->getType($param->default)->isArray()->yes()) { continue; } @@ -109,11 +113,11 @@ private function isParamAccessedArrayDimFetch(Param $param, $functionLike) : boo } $paramName = $this->getName($param); $isParamAccessedArrayDimFetch = \false; - $this->traverseNodesWithCallable($functionLike->stmts, function (Node $node) use($paramName, &$isParamAccessedArrayDimFetch) : ?int { + $this->traverseNodesWithCallable($functionLike->stmts, function (Node $node) use($param, $paramName, &$isParamAccessedArrayDimFetch) : ?int { if ($node instanceof Class_ || $node instanceof FunctionLike) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; } - if ($this->shouldStop($node, $paramName)) { + if ($this->shouldStop($node, $param, $paramName)) { // force set to false to avoid too early replaced $isParamAccessedArrayDimFetch = \false; return NodeTraverser::STOP_TRAVERSAL; @@ -159,9 +163,21 @@ private function isEchoed(Node $node, string $paramName) : bool } return \false; } - private function shouldStop(Node $node, string $paramName) : bool + private function shouldStop(Node $node, Param $param, string $paramName) : bool { $nodeToCheck = null; + if (!$param->default instanceof Expr) { + if ($node instanceof Isset_) { + foreach ($node->vars as $var) { + if ($var instanceof ArrayDimFetch && $var->var instanceof Variable && $var->var->name === $paramName) { + return \true; + } + } + } + if ($node instanceof Empty_ && $node->expr instanceof ArrayDimFetch && $node->expr->var instanceof Variable && $node->expr->var->name === $paramName) { + return \true; + } + } if ($node instanceof FuncCall && !$node->isFirstClassCallable() && $this->isNames($node, ['is_array', 'is_string', 'is_int', 'is_bool', 'is_float'])) { $firstArg = $node->getArgs()[0]; $nodeToCheck = $firstArg->value; diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictStringParamConcatRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictStringParamConcatRector.php index 0462f5663..b6407b5d4 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictStringParamConcatRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StrictStringParamConcatRector.php @@ -97,12 +97,19 @@ public function refactor(Node $node) : ?Node continue; } $nativeType = $this->nodeTypeResolver->getNativeType($variableConcattedFromParam); - if ($nativeType instanceof MixedType && $nativeType->getSubtractedType() instanceof Type && TypeCombinator::containsNull($nativeType->getSubtractedType())) { - $param->type = new NullableType(new Identifier('string')); - } else { + if (!$nativeType instanceof MixedType) { + continue; + } + $subtractedType = $nativeType->getSubtractedType(); + if (!$subtractedType instanceof Type) { $param->type = new Identifier('string'); + $hasChanged = \true; + continue; + } + if (TypeCombinator::containsNull($subtractedType)) { + $param->type = new NullableType(new Identifier('string')); + $hasChanged = \true; } - $hasChanged = \true; } if ($hasChanged) { return $node; diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php new file mode 100644 index 000000000..bad1e2cdb --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php @@ -0,0 +1,123 @@ +classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add string return type based on returned string scalar values', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + public function foo($condition) + { + if ($condition) { + return 'yes'; + } + + return 'no'; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + public function foo($condition): string + { + if ($condition) { + return 'yes'; + } + + return 'no'; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + // already added → skip + if ($node->returnType instanceof Node) { + return null; + } + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + foreach ($returns as $return) { + // we need exact string "value" return + if (!$return->expr instanceof String_ && !$return->expr instanceof Encapsed) { + return null; + } + } + if ($this->shouldSkipClassMethodForOverride($node, $scope)) { + return null; + } + $node->returnType = new Identifier('string'); + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersion::PHP_70; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function shouldSkipClassMethodForOverride($functionLike, Scope $scope) : bool + { + if (!$functionLike instanceof ClassMethod) { + return \false; + } + return $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope); + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php new file mode 100644 index 000000000..25566a180 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php @@ -0,0 +1,157 @@ +classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add string return type based on returned strict string values', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + public function foo($condition, $value) + { + if ($value) { + return 'yes'; + } + + return strtoupper($value); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + public function foo($condition, $value): string; + { + if ($value) { + return 'yes'; + } + + return strtoupper($value); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [ClassMethod::class, Function_::class]; + } + /** + * @param ClassMethod|Function_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + // already added → skip + if ($node->returnType instanceof Node) { + return null; + } + $returns = $this->betterNodeFinder->findReturnsScoped($node); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } + // handled by another rule + if ($this->hasAlwaysStringScalarReturn($returns)) { + return null; + } + // anything that return strict string, but no strings only + if (!$this->isAlwaysStringStrictType($returns)) { + return null; + } + if ($this->shouldSkipClassMethodForOverride($node, $scope)) { + return null; + } + $node->returnType = new Identifier('string'); + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersion::PHP_70; + } + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike + */ + private function shouldSkipClassMethodForOverride($functionLike, Scope $scope) : bool + { + if (!$functionLike instanceof ClassMethod) { + return \false; + } + return $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope); + } + /** + * @param Return_[] $returns + */ + private function hasAlwaysStringScalarReturn(array $returns) : bool + { + foreach ($returns as $return) { + // we need exact string "value" return + if (!$return->expr instanceof String_ && !$return->expr instanceof Encapsed) { + return \false; + } + } + return \true; + } + /** + * @param Return_[] $returns + */ + private function isAlwaysStringStrictType(array $returns) : bool + { + foreach ($returns as $return) { + // void return + if (!$return->expr instanceof Expr) { + return \false; + } + $exprType = $this->nodeTypeResolver->getNativeType($return->expr); + if (!$exprType->isString()->yes()) { + return \false; + } + } + return \true; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/MergeDateTimePropertyTypeDeclarationRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/MergeDateTimePropertyTypeDeclarationRector.php index 892ed5b41..00c769ecb 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/MergeDateTimePropertyTypeDeclarationRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/MergeDateTimePropertyTypeDeclarationRector.php @@ -88,8 +88,11 @@ public function refactor(Node $node) : ?Node $varType = $phpDocInfo->getVarType(); $className = $varType instanceof TypeWithClassName ? $this->nodeTypeResolver->getFullyQualifiedClassName($varType) : null; if ($className === 'DateTimeInterface') { - $phpDocInfo->removeByType(VarTagValueNode::class); - $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($property); + $varTagvalueNode = $phpDocInfo->getVarTagValueNode(); + if ($varTagvalueNode instanceof VarTagValueNode && $varTagvalueNode->description === '') { + $phpDocInfo->removeByType(VarTagValueNode::class); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($property); + } $property->type = new FullyQualified('DateTimeInterface'); $hasChanged = \true; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/PropertyTypeFromStrictSetterGetterRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/PropertyTypeFromStrictSetterGetterRector.php index 06b2ad1c3..e07438994 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/PropertyTypeFromStrictSetterGetterRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/PropertyTypeFromStrictSetterGetterRector.php @@ -123,7 +123,8 @@ public function refactor(Node $node) : ?Node if (!$getterSetterPropertyType instanceof Type) { continue; } - if (!$this->isDefaultExprTypeCompatible($property, $getterSetterPropertyType)) { + $hasPropertyDefaultNull = $this->hasPropertyDefaultNull($property); + if (!$hasPropertyDefaultNull && !$this->isDefaultExprTypeCompatible($property, $getterSetterPropertyType)) { continue; } if (!$classReflection instanceof ClassReflection) { @@ -139,7 +140,7 @@ public function refactor(Node $node) : ?Node if (!$propertyTypeDeclaration instanceof Node) { continue; } - $this->decorateDefaultExpr($getterSetterPropertyType, $property); + $this->decorateDefaultExpr($getterSetterPropertyType, $property, $hasPropertyDefaultNull); $property->type = $propertyTypeDeclaration; $hasChanged = \true; } @@ -184,9 +185,13 @@ private function isDefaultExprTypeCompatible(Property $property, Type $getterSet $defaultExprType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($defaultExpr); return $defaultExprType->equals($getterSetterPropertyType); } - private function decorateDefaultExpr(Type $getterSetterPropertyType, Property $property) : void + private function decorateDefaultExpr(Type $getterSetterPropertyType, Property $property, bool $hasPropertyDefaultNull) : void { if (!TypeCombinator::containsNull($getterSetterPropertyType)) { + if ($hasPropertyDefaultNull) { + // reset to nothign + $property->props[0]->default = null; + } return; } $propertyProperty = $property->props[0]; @@ -196,4 +201,12 @@ private function decorateDefaultExpr(Type $getterSetterPropertyType, Property $p } $propertyProperty->default = new ConstFetch(new Name('null')); } + private function hasPropertyDefaultNull(Property $property) : bool + { + $defaultExpr = $property->props[0]->default ?? null; + if (!$defaultExpr instanceof ConstFetch) { + return \false; + } + return $defaultExpr->name->toLowerString() === 'null'; + } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php index d6920820a..2781e8fb8 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php @@ -4,11 +4,9 @@ namespace Rector\TypeDeclaration\Rector\Class_; use PhpParser\Node; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Ternary; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use PHPStan\Type\MixedType; use PHPStan\Type\TypeCombinator; @@ -18,6 +16,7 @@ use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\Rector\AbstractScopeAwareRector; use Rector\StaticTypeMapper\StaticTypeMapper; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\ValueObject\PhpVersionFeature; use Rector\VendorLocker\NodeVendorLocker\ClassMethodReturnTypeOverrideGuard; @@ -49,12 +48,18 @@ final class ReturnTypeFromStrictTernaryRector extends AbstractScopeAwareRector i * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; - public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer, BetterNodeFinder $betterNodeFinder, StaticTypeMapper $staticTypeMapper) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + public function __construct(ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, ReturnTypeInferer $returnTypeInferer, BetterNodeFinder $betterNodeFinder, StaticTypeMapper $staticTypeMapper, ReturnAnalyzer $returnAnalyzer) { $this->classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; $this->returnTypeInferer = $returnTypeInferer; $this->betterNodeFinder = $betterNodeFinder; $this->staticTypeMapper = $staticTypeMapper; + $this->returnAnalyzer = $returnAnalyzer; } public function getRuleDefinition() : RuleDefinition { @@ -83,10 +88,10 @@ public function getValue($number): int */ public function getNodeTypes() : array { - return [ClassMethod::class, Function_::class, Closure::class]; + return [ClassMethod::class, Function_::class]; } /** - * @param ClassMethod|Function_|Closure $node + * @param ClassMethod|Function_ $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { @@ -96,10 +101,13 @@ public function refactorWithScope(Node $node, Scope $scope) : ?Node if ($node->stmts === null) { return null; } - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($node, Return_::class); + $returns = $this->betterNodeFinder->findReturnsScoped($node); if (\count($returns) !== 1) { return null; } + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { + return null; + } $return = $returns[0]; if (!$return->expr instanceof Ternary) { return null; @@ -126,18 +134,19 @@ public function provideMinPhpVersion() : int return PhpVersionFeature::SCALAR_TYPES; } /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $node + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike */ - private function shouldSkip($node, Scope $scope) : bool + private function shouldSkip($functionLike, Scope $scope) : bool { - if ($node->returnType !== null) { + // type is already filled, skip + if ($functionLike->returnType instanceof Node) { return \true; } - $returnType = $this->returnTypeInferer->inferFunctionLike($node); + $returnType = $this->returnTypeInferer->inferFunctionLike($functionLike); $returnType = TypeCombinator::removeNull($returnType); if ($returnType instanceof UnionType) { return \true; } - return $node instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($node, $scope); + return $functionLike instanceof ClassMethod && $this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($functionLike, $scope); } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromCreateMockAssignRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromCreateMockAssignRector.php new file mode 100644 index 000000000..efb08ef76 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromCreateMockAssignRector.php @@ -0,0 +1,135 @@ +assignToPropertyTypeInferer = $assignToPropertyTypeInferer; + $this->staticTypeMapper = $staticTypeMapper; + $this->constructorAssignDetector = $constructorAssignDetector; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add typed property from assigned mock', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + private $someProperty; + + protected function setUp(): void + { + $this->someProperty = $this->createMock(SomeMockedClass::class); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + private \PHPUnit\Framework\MockObject\MockObject $someProperty; + + protected function setUp(): void + { + $this->someProperty = $this->createMock(SomeMockedClass::class); + } +} +CODE_SAMPLE +)]); + } + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + if (!$this->isObjectType($node, new ObjectType(self::TEST_CASE_CLASS))) { + return null; + } + $hasChanged = \false; + foreach ($node->getProperties() as $property) { + // already typed + if ($property->type instanceof Node) { + continue; + } + if (\count($property->props) !== 1) { + continue; + } + $propertyName = (string) $this->getName($property); + $type = $this->assignToPropertyTypeInferer->inferPropertyInClassLike($property, $propertyName, $node); + if (!$type instanceof Type) { + continue; + } + $propertyType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PROPERTY); + if (!$propertyType instanceof Node) { + continue; + } + if (!$this->isObjectType($propertyType, new ObjectType(self::MOCK_OBJECT_CLASS))) { + continue; + } + if (!$this->constructorAssignDetector->isPropertyAssigned($node, $propertyName)) { + if (!$propertyType instanceof NullableType) { + continue; + } + $property->props[0]->default = $this->nodeFactory->createNull(); + } + $property->type = $propertyType; + $hasChanged = \true; + } + if (!$hasChanged) { + return null; + } + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::TYPED_PROPERTIES; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromJMSSerializerAttributeTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromJMSSerializerAttributeTypeRector.php new file mode 100644 index 000000000..28fb1c80e --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromJMSSerializerAttributeTypeRector.php @@ -0,0 +1,191 @@ +allAssignNodePropertyTypeInferer = $allAssignNodePropertyTypeInferer; + $this->makePropertyTypedGuard = $makePropertyTypedGuard; + $this->reflectionResolver = $reflectionResolver; + $this->valueResolver = $valueResolver; + $this->phpAttributeAnalyzer = $phpAttributeAnalyzer; + $this->scalarStringToTypeMapper = $scalarStringToTypeMapper; + $this->staticTypeMapper = $staticTypeMapper; + $this->constructorAssignDetector = $constructorAssignDetector; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add typed property from JMS Serializer Type attribute', [new CodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + #[\JMS\Serializer\Annotation\Type('string')] + private $name; +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +final class SomeClass +{ + #[\JMS\Serializer\Annotation\Type('string')] + private ?string $name = null; +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::ATTRIBUTES; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + $hasChanged = \false; + $classReflection = null; + foreach ($node->getProperties() as $property) { + if (!$property->isPrivate()) { + continue; + } + if ($property->type instanceof Node) { + continue; + } + if (!$this->phpAttributeAnalyzer->hasPhpAttribute($property, self::JMS_TYPE)) { + continue; + } + if (!$classReflection instanceof ClassReflection) { + $classReflection = $this->reflectionResolver->resolveClassReflection($node); + } + if (!$classReflection instanceof ClassReflection) { + return null; + } + if (!$this->makePropertyTypedGuard->isLegal($property, $classReflection, \false)) { + continue; + } + $inferredType = $this->allAssignNodePropertyTypeInferer->inferProperty($property, $classReflection, $this->file); + // has assigned with type + if ($inferredType instanceof Type) { + continue; + } + if ($property->props[0]->default instanceof Node) { + continue; + } + $typeValue = null; + foreach ($property->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attr) { + if ($attr->name->toString() === self::JMS_TYPE) { + $typeValue = $this->valueResolver->getValue($attr->args[0]->value); + break; + } + } + } + if (!\is_string($typeValue)) { + continue; + } + $typeValue = Strings::match($typeValue, '#\\w+#'); + if (isset($typeValue[0]) && \is_string($typeValue[0])) { + $type = $this->scalarStringToTypeMapper->mapScalarStringToType($typeValue[0]); + if ($type instanceof MixedType) { + $type = new ObjectType($typeValue[0]); + } + $propertyType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($type, TypeKind::PROPERTY); + if (!$propertyType instanceof Identifier && !$propertyType instanceof FullyQualified) { + return null; + } + $isInConstructorAssigned = $this->constructorAssignDetector->isPropertyAssigned($node, $this->getName($property)); + $type = $isInConstructorAssigned ? $propertyType : new NullableType($propertyType); + $property->type = $type; + if (!$isInConstructorAssigned) { + $property->props[0]->default = new ConstFetch(new Name('null')); + } + $hasChanged = \true; + } + } + if ($hasChanged) { + return $node; + } + return null; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php new file mode 100644 index 000000000..264def049 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php @@ -0,0 +1,61 @@ +addNeverReturnType = $addNeverReturnType; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add "never" return-type for closure that never return anything', [new CodeSample(<<<'CODE_SAMPLE' +function () { + throw new InvalidException(); +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +function (): never { + throw new InvalidException(); +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Closure::class]; + } + /** + * @param Closure $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + return $this->addNeverReturnType->add($node, $scope); + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::NEVER_TYPE; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureVoidReturnTypeWhereNoReturnRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureVoidReturnTypeWhereNoReturnRector.php index 83f474198..21d5aaa87 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureVoidReturnTypeWhereNoReturnRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/AddClosureVoidReturnTypeWhereNoReturnRector.php @@ -30,11 +30,11 @@ public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Add closure return type void if there is no return', [new CodeSample(<<<'CODE_SAMPLE' function () { -} +}; CODE_SAMPLE , <<<'CODE_SAMPLE' function (): void { -} +}; CODE_SAMPLE )]); } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/ClosureReturnTypeRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/ClosureReturnTypeRector.php new file mode 100644 index 000000000..0da137c6d --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Closure/ClosureReturnTypeRector.php @@ -0,0 +1,83 @@ +returnTypeInferer = $returnTypeInferer; + $this->staticTypeMapper = $staticTypeMapper; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add return type to closures based on known return values', [new CodeSample(<<<'CODE_SAMPLE' +function () { + return 100; +}; +CODE_SAMPLE +, <<<'CODE_SAMPLE' +function (): int { + return 100; +}; +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Closure::class]; + } + /** + * @param Closure $node + */ + public function refactor(Node $node) : ?Node + { + // type is already set + if ($node->returnType instanceof Node) { + return null; + } + $closureReturnType = $this->returnTypeInferer->inferFunctionLike($node); + // handled by other rules + if ($closureReturnType instanceof NeverType) { + return null; + } + $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($closureReturnType, TypeKind::RETURN); + if (!$returnTypeNode instanceof Node) { + return null; + } + $node->returnType = $returnTypeNode; + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::SCALAR_TYPES; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php index c6ea6b961..0a3a00366 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php @@ -9,16 +9,19 @@ use PhpParser\Node\Expr\Empty_; use PhpParser\Node\Expr\Instanceof_; use PhpParser\Node\Name; +use PHPStan\Analyser\Scope; use PHPStan\Type\ObjectType; +use PHPStan\Type\TypeCombinator; +use PHPStan\Type\UnionType; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use Rector\Rector\AbstractRector; +use Rector\Rector\AbstractScopeAwareRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Tests\TypeDeclaration\Rector\Empty_\EmptyOnNullableObjectToInstanceOfRector\EmptyOnNullableObjectToInstanceOfRectorTest */ -final class EmptyOnNullableObjectToInstanceOfRector extends AbstractRector +final class EmptyOnNullableObjectToInstanceOfRector extends AbstractScopeAwareRector { /** * @readonly @@ -68,8 +71,9 @@ public function getNodeTypes() : array } /** * @param Empty_|BooleanNot $node + * @return null|\PhpParser\Node\Expr\Instanceof_|\PhpParser\Node\Expr\BooleanNot */ - public function refactor(Node $node) : ?Node + public function refactorWithScope(Node $node, Scope $scope) { if ($node instanceof BooleanNot) { if (!$node->expr instanceof Empty_) { @@ -84,7 +88,11 @@ public function refactor(Node $node) : ?Node if ($empty->expr instanceof ArrayDimFetch) { return null; } - $exprType = $this->nodeTypeResolver->getNativeType($empty->expr); + $exprType = $scope->getNativeType($empty->expr); + if (!$exprType instanceof UnionType) { + return null; + } + $exprType = TypeCombinator::removeNull($exprType); if (!$exprType instanceof ObjectType) { return null; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Expression/InlineVarDocTagToAssertRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Expression/InlineVarDocTagToAssertRector.php new file mode 100644 index 000000000..cfe783c86 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Expression/InlineVarDocTagToAssertRector.php @@ -0,0 +1,112 @@ +phpDocInfoFactory = $phpDocInfoFactory; + $this->docBlockUpdater = $docBlockUpdater; + $this->typeExpressionFromVarTagResolver = $typeExpressionFromVarTagResolver; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Convert inline @var tags to calls to assert()', [new CodeSample(<<<'CODE_SAMPLE' +/** @var Foo $foo */ +$foo = createFoo(); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +$foo = createFoo(); +assert($foo instanceof Foo); +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Expression::class]; + } + /** + * @param Expression $node + * @return Node[]|null + */ + public function refactor(Node $node) : ?array + { + if (!$node->expr instanceof Assign) { + return null; + } + if (!$node->expr->var instanceof Variable) { + return null; + } + $docComment = $node->getDocComment(); + if (!$docComment instanceof Doc) { + return null; + } + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($node); + if (!$phpDocInfo instanceof PhpDocInfo || $phpDocInfo->getPhpDocNode()->children === []) { + return null; + } + $expressionVariableName = $node->expr->var->name; + foreach ($phpDocInfo->getPhpDocNode()->getVarTagValues() as $varTagValueNode) { + //remove $ from variable name + $variableName = \substr($varTagValueNode->variableName, 1); + if ($variableName === $expressionVariableName && $varTagValueNode->description === '') { + $typeExpression = $this->typeExpressionFromVarTagResolver->resolveTypeExpressionFromVarTag($varTagValueNode->type, new Variable($variableName)); + if ($typeExpression instanceof Expr) { + $phpDocInfo->removeByType(VarTagValueNode::class, $variableName); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + $arg = new Arg($typeExpression); + $funcCall = new FuncCall(new Name('assert'), [$arg]); + $expression = new Expression($funcCall); + return [$node, $expression]; + } + } + } + return null; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::STRING_IN_ASSERT_ARG; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromArgRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromArgRector.php new file mode 100644 index 000000000..620be9ba5 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromArgRector.php @@ -0,0 +1,188 @@ +typeComparator = $typeComparator; + $this->staticTypeMapper = $staticTypeMapper; + $this->reflectionProvider = $reflectionProvider; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add closure param type based on known passed service/string types of method calls', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' +$app = new Container(); +$app->extend(SomeClass::class, function ($parameter) {}); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +$app = new Container(); +$app->extend(SomeClass::class, function (SomeClass $parameter) {}); +CODE_SAMPLE +, [new AddClosureParamTypeFromArg('Container', 'extend', 1, 0)])]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class, StaticCall::class]; + } + /** + * @param MethodCall|StaticCall $node + */ + public function refactor(Node $node) : ?Node + { + foreach ($this->addClosureParamTypeFromArgs as $addClosureParamTypeFromArg) { + if ($node instanceof MethodCall) { + $caller = $node->var; + } elseif ($node instanceof StaticCall) { + $caller = $node->class; + } else { + continue; + } + if (!$this->isCallMatch($caller, $addClosureParamTypeFromArg, $node)) { + continue; + } + return $this->processCallLike($node, $addClosureParamTypeFromArg); + } + return null; + } + /** + * @param mixed[] $configuration + */ + public function configure(array $configuration) : void + { + Assert::allIsAOf($configuration, AddClosureParamTypeFromArg::class); + $this->addClosureParamTypeFromArgs = $configuration; + } + /** + * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $callLike + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null + */ + private function processCallLike($callLike, AddClosureParamTypeFromArg $addClosureParamTypeFromArg) + { + if ($callLike->isFirstClassCallable()) { + return null; + } + $callLikeArg = $callLike->args[$addClosureParamTypeFromArg->getCallLikePosition()] ?? null; + if (!$callLikeArg instanceof Arg) { + return null; + } + // int positions shouldn't have names + if ($callLikeArg->name instanceof Identifier) { + return null; + } + $functionLike = $callLikeArg->value; + if (!$functionLike instanceof Closure && !$functionLike instanceof ArrowFunction) { + return null; + } + if (!isset($functionLike->params[$addClosureParamTypeFromArg->getFunctionLikePosition()])) { + return null; + } + $callLikeArg = $callLike->getArgs()[self::DEFAULT_CLOSURE_ARG_POSITION] ?? null; + if (!$callLikeArg instanceof Arg) { + return null; + } + $hasChanged = $this->refactorParameter($functionLike->params[$addClosureParamTypeFromArg->getFunctionLikePosition()], $callLikeArg); + if ($hasChanged) { + return $callLike; + } + return null; + } + private function refactorParameter(Param $param, Arg $arg) : bool + { + $closureType = $this->resolveClosureType($arg->value); + if (!$closureType instanceof Type) { + return \false; + } + // already set → no change + if ($param->type instanceof Node) { + $currentParamType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($param->type); + if ($this->typeComparator->areTypesEqual($currentParamType, $closureType)) { + return \false; + } + } + $paramTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($closureType, TypeKind::PARAM); + $param->type = $paramTypeNode; + return \true; + } + /** + * @param \PhpParser\Node\Name|\PhpParser\Node\Expr $caller + * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall $call + */ + private function isCallMatch($caller, AddClosureParamTypeFromArg $addClosureParamTypeFromArg, $call) : bool + { + if (!$this->isObjectType($caller, $addClosureParamTypeFromArg->getObjectType())) { + return \false; + } + return $this->isName($call->name, $addClosureParamTypeFromArg->getMethodName()); + } + private function resolveClosureType(Expr $expr) : ?Type + { + $exprType = $this->nodeTypeResolver->getType($expr); + if ($exprType instanceof GenericClassStringType) { + return $exprType->getGenericType(); + } + if ($exprType instanceof ConstantStringType) { + if ($this->reflectionProvider->hasClass($exprType->getValue())) { + return new ObjectType($exprType->getValue()); + } + return new StringType(); + } + return null; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromObjectRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromObjectRector.php new file mode 100644 index 000000000..4ee8934b6 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromObjectRector.php @@ -0,0 +1,163 @@ +typeComparator = $typeComparator; + $this->staticTypeMapper = $staticTypeMapper; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add closure param type based on the object of the method call', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' +$request = new Request(); +$request->when(true, function ($request) {}); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +$request = new Request(); +$request->when(true, function (Request $request) {}); +CODE_SAMPLE +, [new AddClosureParamTypeFromObject('Request', 'when', 1, 0)])]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class, StaticCall::class]; + } + /** + * @param MethodCall|StaticCall $node + */ + public function refactor(Node $node) : ?Node + { + foreach ($this->addClosureParamTypeFromObjects as $addClosureParamTypeFromObject) { + if ($node instanceof MethodCall) { + $caller = $node->var; + } elseif ($node instanceof StaticCall) { + $caller = $node->class; + } else { + continue; + } + if (!$this->isCallMatch($caller, $addClosureParamTypeFromObject, $node)) { + continue; + } + $type = $this->getType($caller); + if (!$type instanceof ObjectType) { + continue; + } + return $this->processCallLike($node, $addClosureParamTypeFromObject, $type); + } + return null; + } + /** + * @param mixed[] $configuration + */ + public function configure(array $configuration) : void + { + Assert::allIsAOf($configuration, AddClosureParamTypeFromObject::class); + $this->addClosureParamTypeFromObjects = $configuration; + } + /** + * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $callLike + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null + */ + private function processCallLike($callLike, AddClosureParamTypeFromObject $addClosureParamTypeFromArg, ObjectType $objectType) + { + if ($callLike->isFirstClassCallable()) { + return null; + } + $callLikeArg = $callLike->args[$addClosureParamTypeFromArg->getCallLikePosition()] ?? null; + if (!$callLikeArg instanceof Arg) { + return null; + } + // int positions shouldn't have names + if ($callLikeArg->name instanceof Identifier) { + return null; + } + $functionLike = $callLikeArg->value; + if (!$functionLike instanceof Closure && !$functionLike instanceof ArrowFunction) { + return null; + } + if (!isset($functionLike->params[$addClosureParamTypeFromArg->getFunctionLikePosition()])) { + return null; + } + $callLikeArg = $callLike->getArgs()[self::DEFAULT_CLOSURE_ARG_POSITION] ?? null; + if (!$callLikeArg instanceof Arg) { + return null; + } + $hasChanged = $this->refactorParameter($functionLike->params[$addClosureParamTypeFromArg->getFunctionLikePosition()], $objectType); + if ($hasChanged) { + return $callLike; + } + return null; + } + private function refactorParameter(Param $param, ObjectType $objectType) : bool + { + // already set → no change + if ($param->type instanceof Node) { + $currentParamType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($param->type); + if ($this->typeComparator->areTypesEqual($currentParamType, $objectType)) { + return \false; + } + } + $paramTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($objectType, TypeKind::PARAM); + $param->type = $paramTypeNode; + return \true; + } + /** + * @param \PhpParser\Node\Name|\PhpParser\Node\Expr $name + * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall $call + */ + private function isCallMatch($name, AddClosureParamTypeFromObject $addClosureParamTypeFromArg, $call) : bool + { + if (!$this->isObjectType($name, $addClosureParamTypeFromArg->getObjectType())) { + return \false; + } + return $this->isName($call->name, $addClosureParamTypeFromArg->getMethodName()); + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector.php index eecc30961..e8d9d369e 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector.php @@ -23,7 +23,7 @@ use Rector\ValueObject\PhpVersionFeature; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\TypeDeclaration\Rector\FunctionLike\AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector\AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRectorTest */ @@ -99,10 +99,7 @@ public function refactor(Node $node) : ?Node if (!$this->isObjectType($type, $addParamTypeForFunctionLikeParamDeclaration->getObjectType())) { continue; } - if (($node->name ?? null) === null) { - continue; - } - if (!$node->name instanceof Identifier) { + if (!($node->name ?? null) instanceof Identifier) { continue; } if (!$this->isName($node->name, $addParamTypeForFunctionLikeParamDeclaration->getMethodName())) { @@ -163,17 +160,18 @@ private function processFunctionLike(CallLike $callLike, AddParamTypeForFunction } private function refactorParameter(Param $param, AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration $addParamTypeForFunctionLikeWithinCallLikeArgDeclaration) : void { + $newParameterType = $addParamTypeForFunctionLikeWithinCallLikeArgDeclaration->getParamType(); // already set → no change if ($param->type !== null) { $currentParamType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($param->type); - if ($this->typeComparator->areTypesEqual($currentParamType, $addParamTypeForFunctionLikeWithinCallLikeArgDeclaration->getParamType())) { + if ($this->typeComparator->areTypesEqual($currentParamType, $newParameterType)) { return; } } - $paramTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($addParamTypeForFunctionLikeWithinCallLikeArgDeclaration->getParamType(), TypeKind::PARAM); + $paramTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($newParameterType, TypeKind::PARAM); $this->hasChanged = \true; // remove it - if ($addParamTypeForFunctionLikeWithinCallLikeArgDeclaration->getParamType() instanceof MixedType) { + if ($newParameterType instanceof MixedType) { if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::MIXED_TYPE)) { $param->type = $paramTypeNode; return; diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php index 716c0e0da..e21f959cd 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php @@ -94,10 +94,10 @@ public function provide(): Iterator */ public function getNodeTypes() : array { - return [Function_::class, ClassMethod::class, Closure::class]; + return [Function_::class, ClassMethod::class]; } /** - * @param Function_|ClassMethod|Closure $node + * @param Function_|ClassMethod $node */ public function refactorWithScope(Node $node, Scope $scope) : ?Node { @@ -184,7 +184,7 @@ private function resolveYieldedTypes(array $yieldNodes) : array } /** * @param array $yieldNodes - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike * @return \Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType|\Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedGenericObjectType */ private function resolveYieldType(array $yieldNodes, $functionLike) diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php index 01c2b5e31..1c8e40ca5 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/AddPropertyTypeDeclarationRector.php @@ -16,7 +16,7 @@ use Rector\TypeDeclaration\ValueObject\AddPropertyTypeDeclaration; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\TypeDeclaration\Rector\Property\AddPropertyTypeDeclarationRector\AddPropertyTypeDeclarationRectorTest */ @@ -37,7 +37,6 @@ public function __construct(StaticTypeMapper $staticTypeMapper) } public function getRuleDefinition() : RuleDefinition { - $configuration = [new AddPropertyTypeDeclaration('ParentClass', 'name', new StringType())]; return new RuleDefinition('Add type to property by added rules, mostly public/property by parent type', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' class SomeClass extends ParentClass { @@ -50,7 +49,7 @@ class SomeClass extends ParentClass public string $name; } CODE_SAMPLE -, $configuration)]); +, [new AddPropertyTypeDeclaration('ParentClass', 'name', new StringType())])]); } /** * @return array> diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/TypedPropertyFromAssignsRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/TypedPropertyFromAssignsRector.php index 2977e55f5..ef501e75b 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/TypedPropertyFromAssignsRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/Property/TypedPropertyFromAssignsRector.php @@ -17,6 +17,9 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\DeadCode\PhpDoc\TagRemover\VarTagRemover; +use Rector\Doctrine\CodeQuality\Enum\CollectionMapping; +use Rector\Doctrine\Enum\MappingClass; +use Rector\Doctrine\NodeAnalyzer\AttrinationFinder; use Rector\Php74\Guard\MakePropertyTypedGuard; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; @@ -74,6 +77,11 @@ final class TypedPropertyFromAssignsRector extends AbstractRector implements Min * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; + /** + * @readonly + * @var \Rector\Doctrine\NodeAnalyzer\AttrinationFinder + */ + private $attrinationFinder; /** * @api * @var string @@ -89,7 +97,7 @@ final class TypedPropertyFromAssignsRector extends AbstractRector implements Min * @var bool */ private $inlinePublic = \false; - public function __construct(AllAssignNodePropertyTypeInferer $allAssignNodePropertyTypeInferer, PropertyTypeDecorator $propertyTypeDecorator, VarTagRemover $varTagRemover, MakePropertyTypedGuard $makePropertyTypedGuard, ReflectionResolver $reflectionResolver, PhpDocInfoFactory $phpDocInfoFactory, ValueResolver $valueResolver, StaticTypeMapper $staticTypeMapper) + public function __construct(AllAssignNodePropertyTypeInferer $allAssignNodePropertyTypeInferer, PropertyTypeDecorator $propertyTypeDecorator, VarTagRemover $varTagRemover, MakePropertyTypedGuard $makePropertyTypedGuard, ReflectionResolver $reflectionResolver, PhpDocInfoFactory $phpDocInfoFactory, ValueResolver $valueResolver, StaticTypeMapper $staticTypeMapper, AttrinationFinder $attrinationFinder) { $this->allAssignNodePropertyTypeInferer = $allAssignNodePropertyTypeInferer; $this->propertyTypeDecorator = $propertyTypeDecorator; @@ -99,6 +107,7 @@ public function __construct(AllAssignNodePropertyTypeInferer $allAssignNodePrope $this->phpDocInfoFactory = $phpDocInfoFactory; $this->valueResolver = $valueResolver; $this->staticTypeMapper = $staticTypeMapper; + $this->attrinationFinder = $attrinationFinder; } public function configure(array $configuration) : void { @@ -128,7 +137,7 @@ public function run() } } CODE_SAMPLE -, [\Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector::INLINE_PUBLIC => \false])]); +, [self::INLINE_PUBLIC => \false])]); } /** * @return array> @@ -142,7 +151,7 @@ public function provideMinPhpVersion() : int return PhpVersionFeature::TYPED_PROPERTIES; } /** - * @param Node\Stmt\Class_ $node + * @param Class_ $node */ public function refactor(Node $node) : ?Node { @@ -153,6 +162,9 @@ public function refactor(Node $node) : ?Node if (!$property->isPrivate() && !$this->inlinePublic) { continue; } + if ($this->isDoctrineMappedProperty($property)) { + continue; + } if (!$classReflection instanceof ClassReflection) { $classReflection = $this->reflectionResolver->resolveClassReflection($node); } @@ -205,4 +217,12 @@ private function decorateTypeWithNullableIfDefaultPropertyNull(Property $propert } return TypeCombinator::addNull($inferredType); } + /** + * Doctrine properties are handled in doctrine rules + */ + private function isDoctrineMappedProperty(Property $property) : bool + { + $mappingClasses = \array_merge(CollectionMapping::TO_MANY_CLASSES, CollectionMapping::TO_ONE_CLASSES, [MappingClass::COLUMN]); + return $this->attrinationFinder->hasByMany($property, $mappingClasses); + } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php index 1a84df46c..4665cd37d 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php @@ -9,6 +9,7 @@ use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Declare_; use PhpParser\Node\Stmt\DeclareDeclare; +use PhpParser\Node\Stmt\InlineHTML; use PhpParser\Node\Stmt\Nop; use Rector\ChangesReporting\ValueObject\RectorWithLineChange; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; @@ -48,8 +49,8 @@ function someFunction() )]); } /** - * @param Node[] $nodes - * @return Node[]|null + * @param Stmt[] $nodes + * @return Stmt[]|null */ public function beforeTraverse(array $nodes) : ?array { @@ -58,17 +59,19 @@ public function beforeTraverse(array $nodes) : ?array if ($this->skipper->shouldSkipElementAndFilePath(self::class, $filePath)) { return null; } - $newStmts = $this->file->getNewStmts(); - if ($newStmts === []) { + if ($nodes === []) { return null; } - $rootStmt = \current($newStmts); + $rootStmt = \current($nodes); $stmt = $rootStmt; if ($rootStmt instanceof FileWithoutNamespace) { $currentStmt = \current($rootStmt->stmts); if (!$currentStmt instanceof Stmt) { return null; } + if ($currentStmt instanceof InlineHTML) { + return null; + } $nodes = $rootStmt->stmts; $stmt = $currentStmt; } diff --git a/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php b/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php index cd7b8712f..0e88e3634 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php +++ b/vendor/rector/rector/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\LNumber; +use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Declare_; use PhpParser\Node\Stmt\DeclareDeclare; use PhpParser\Node\Stmt\Nop; @@ -17,7 +18,7 @@ use Rector\TypeDeclaration\NodeAnalyzer\DeclareStrictTypeFinder; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\TypeDeclaration\Rector\StmtsAwareInterface\IncreaseDeclareStrictTypesRector\IncreaseDeclareStrictTypesRectorTest */ @@ -58,17 +59,16 @@ function someFunction() , [self::LIMIT => 10])]); } /** - * @param Node[] $nodes - * @return Node[]|null + * @param Stmt[] $nodes + * @return Stmt[]|null */ public function beforeTraverse(array $nodes) : ?array { parent::beforeTraverse($nodes); - $newStmts = $this->file->getNewStmts(); - if ($newStmts === []) { + if ($nodes === []) { return null; } - $rootStmt = \current($newStmts); + $rootStmt = \current($nodes); $stmt = $rootStmt; // skip classes without namespace for safety reasons if ($rootStmt instanceof FileWithoutNamespace) { diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php deleted file mode 100644 index 4949c341f..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php +++ /dev/null @@ -1,39 +0,0 @@ -> - */ - private const BOOL_TYPE_NODES = [ - // detect strict type here :) - Empty_::class, - BooleanAnd::class, - BooleanOr::class, - Equal::class, - NotEqual::class, - Identical::class, - NotIdentical::class, - ]; - public function isStrictBoolExpr(Expr $expr) : bool - { - foreach (self::BOOL_TYPE_NODES as $boolTypeNode) { - if ($expr instanceof $boolTypeNode) { - return \true; - } - } - return $expr instanceof ConstFetch && \in_array($expr->name->toLowerString(), ['true', 'false'], \true); - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php deleted file mode 100644 index edf59bf6c..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php +++ /dev/null @@ -1,92 +0,0 @@ -nodeTypeResolver = $nodeTypeResolver; - } - public function matchStrictScalarExpr(Expr $expr) : ?Type - { - if ($expr instanceof Concat) { - return new StringType(); - } - if ($expr instanceof Cast) { - return $this->resolveCastType($expr); - } - if ($expr instanceof Scalar) { - return $this->resolveTypeFromScalar($expr); - } - if ($expr instanceof ConstFetch) { - $name = $expr->name->toLowerString(); - if ($name === 'null') { - return new NullType(); - } - if (\in_array($name, ['true', 'false'], \true)) { - return new BooleanType(); - } - return null; - } - $exprType = $this->nodeTypeResolver->getNativeType($expr); - if ($exprType->isScalar()->yes()) { - return $exprType; - } - return null; - } - private function resolveCastType(Cast $cast) : ?Type - { - $type = $this->nodeTypeResolver->getNativeType($cast); - if ($type->isScalar()->yes()) { - return $type; - } - return null; - } - private function resolveTypeFromScalar(Scalar $scalar) : ?\PHPStan\Type\Type - { - if ($scalar instanceof Encapsed) { - return new StringType(); - } - if ($scalar instanceof String_) { - return new StringType(); - } - if ($scalar instanceof DNumber) { - return new FloatType(); - } - if ($scalar instanceof LNumber) { - return new IntegerType(); - } - if ($scalar instanceof Line) { - return new IntegerType(); - } - if ($scalar instanceof MagicConst) { - return new StringType(); - } - return null; - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/GenericClassStringTypeNormalizer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/GenericClassStringTypeNormalizer.php index 8d0fc1554..a7654b98d 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/GenericClassStringTypeNormalizer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/GenericClassStringTypeNormalizer.php @@ -3,70 +3,10 @@ declare (strict_types=1); namespace Rector\TypeDeclaration\TypeAnalyzer; -use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\ArrayType; -use PHPStan\Type\ClassStringType; -use PHPStan\Type\Constant\ConstantIntegerType; -use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\Generic\GenericClassStringType; -use PHPStan\Type\MixedType; -use PHPStan\Type\ObjectType; -use PHPStan\Type\StringType; -use PHPStan\Type\Type; -use PHPStan\Type\TypeTraverser; use PHPStan\Type\UnionType; -use Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeAnalyzer; -use Rector\TypeDeclaration\NodeTypeAnalyzer\DetailedTypeAnalyzer; final class GenericClassStringTypeNormalizer { - /** - * @readonly - * @var \PHPStan\Reflection\ReflectionProvider - */ - private $reflectionProvider; - /** - * @readonly - * @var \Rector\TypeDeclaration\NodeTypeAnalyzer\DetailedTypeAnalyzer - */ - private $detailedTypeAnalyzer; - /** - * @readonly - * @var \Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeAnalyzer - */ - private $unionTypeAnalyzer; - public function __construct(ReflectionProvider $reflectionProvider, DetailedTypeAnalyzer $detailedTypeAnalyzer, UnionTypeAnalyzer $unionTypeAnalyzer) - { - $this->reflectionProvider = $reflectionProvider; - $this->detailedTypeAnalyzer = $detailedTypeAnalyzer; - $this->unionTypeAnalyzer = $unionTypeAnalyzer; - } - /** - * @return \PHPStan\Type\ArrayType|\PHPStan\Type\UnionType|\PHPStan\Type\Type - */ - public function normalize(Type $type) - { - $type = TypeTraverser::map($type, function (Type $type, $callback) : Type { - if (!$type instanceof ConstantStringType) { - return $callback($type); - } - $value = $type->getValue(); - // skip string that look like classe - if ($value === 'error') { - return $callback($type); - } - if (!$this->reflectionProvider->hasClass($value)) { - return $callback($type); - } - return $this->resolveStringType($value); - }); - if ($type instanceof UnionType && !$this->unionTypeAnalyzer->isNullable($type, \true)) { - return $this->resolveClassStringInUnionType($type); - } - if ($type instanceof ArrayType && $type->getKeyType() instanceof UnionType) { - return $this->resolveArrayTypeWithUnionKeyType($type); - } - return $type; - } public function isAllGenericClassStringType(UnionType $unionType) : bool { foreach ($unionType->getTypes() as $type) { @@ -76,59 +16,4 @@ public function isAllGenericClassStringType(UnionType $unionType) : bool } return \true; } - private function resolveArrayTypeWithUnionKeyType(ArrayType $arrayType) : ArrayType - { - $itemType = $arrayType->getItemType(); - if (!$itemType instanceof UnionType) { - return $arrayType; - } - $keyType = $arrayType->getKeyType(); - $isAllGenericClassStringType = $this->isAllGenericClassStringType($itemType); - if (!$isAllGenericClassStringType) { - return new ArrayType($keyType, new MixedType()); - } - if ($this->detailedTypeAnalyzer->isTooDetailed($itemType)) { - return new ArrayType($keyType, new ClassStringType()); - } - return $arrayType; - } - /** - * @return \PHPStan\Type\UnionType|\PHPStan\Type\ArrayType - */ - private function resolveClassStringInUnionType(UnionType $type) - { - $unionTypes = $type->getTypes(); - foreach ($unionTypes as $unionType) { - if (!$unionType instanceof ArrayType) { - return $type; - } - $keyType = $unionType->getKeyType(); - $itemType = $unionType->getItemType(); - if (!$keyType instanceof MixedType && !$keyType instanceof ConstantIntegerType) { - return $type; - } - if ($itemType instanceof ArrayType) { - $arrayType = new ArrayType(new MixedType(), new MixedType()); - return new ArrayType($keyType, $arrayType); - } - if (!$itemType instanceof ClassStringType) { - return $type; - } - } - return new ArrayType(new MixedType(), new ClassStringType()); - } - /** - * @return \PHPStan\Type\Generic\GenericClassStringType|\PHPStan\Type\StringType - */ - private function resolveStringType(string $value) - { - $classReflection = $this->reflectionProvider->getClass($value); - if ($classReflection->isBuiltin()) { - return new GenericClassStringType(new ObjectType($value)); - } - if (\strpos($value, '\\') !== \false) { - return new GenericClassStringType(new ObjectType($value)); - } - return new StringType(); - } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/ReturnStrictTypeAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/ReturnStrictTypeAnalyzer.php index a22bd87b0..0cc79cacf 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/ReturnStrictTypeAnalyzer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/ReturnStrictTypeAnalyzer.php @@ -20,7 +20,9 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; -use PHPStan\Reflection\FunctionVariantWithPhpDocs; +use PHPStan\Reflection\Native\NativeFunctionReflection; +use PHPStan\Reflection\Native\NativeMethodReflection; +use PHPStan\Reflection\ParametersAcceptorWithPhpDocs; use PHPStan\Type\MixedType; use PHPStan\Type\StaticType; use PHPStan\Type\Type; @@ -95,6 +97,17 @@ public function collectStrictReturnTypes(array $returns, Scope $scope) : array * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\FuncCall $call */ public function resolveMethodCallReturnNode($call) : ?Node + { + $returnType = $this->resolveMethodCallReturnType($call); + if (!$returnType instanceof Type) { + return null; + } + return $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); + } + /** + * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\FuncCall $call + */ + public function resolveMethodCallReturnType($call) : ?Type { $methodReflection = $this->reflectionResolver->resolveFunctionLikeReflectionFromCall($call); if ($methodReflection === null) { @@ -105,17 +118,21 @@ public function resolveMethodCallReturnNode($call) : ?Node return null; } $parametersAcceptorWithPhpDocs = ParametersAcceptorSelectorVariantsWrapper::select($methodReflection, $call, $scope); - if ($parametersAcceptorWithPhpDocs instanceof FunctionVariantWithPhpDocs) { + if ($methodReflection instanceof NativeFunctionReflection || $methodReflection instanceof NativeMethodReflection) { + $returnType = $parametersAcceptorWithPhpDocs->getReturnType(); + } elseif ($parametersAcceptorWithPhpDocs instanceof ParametersAcceptorWithPhpDocs) { // native return type is needed, as docblock can be false $returnType = $parametersAcceptorWithPhpDocs->getNativeReturnType(); } else { $returnType = $parametersAcceptorWithPhpDocs->getReturnType(); } if ($returnType instanceof MixedType) { + if ($returnType->isExplicitMixed()) { + return $returnType; + } return null; } - $returnType = $this->normalizeStaticType($call, $returnType); - return $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($returnType, TypeKind::RETURN); + return $this->normalizeStaticType($call, $returnType); } /** * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\FuncCall $call diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/StrictReturnClassConstReturnTypeAnalyzer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/StrictReturnClassConstReturnTypeAnalyzer.php deleted file mode 100644 index 92da41624..000000000 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeAnalyzer/StrictReturnClassConstReturnTypeAnalyzer.php +++ /dev/null @@ -1,51 +0,0 @@ -alwaysStrictReturnAnalyzer = $alwaysStrictReturnAnalyzer; - $this->nodeTypeResolver = $nodeTypeResolver; - $this->typeFactory = $typeFactory; - } - public function matchAlwaysReturnConstFetch(ClassMethod $classMethod) : ?Type - { - $returns = $this->alwaysStrictReturnAnalyzer->matchAlwaysStrictReturns($classMethod); - if ($returns === []) { - return null; - } - $classConstFetchTypes = []; - foreach ($returns as $return) { - // @todo ~30 mins paid - if (!$return->expr instanceof ClassConstFetch) { - return null; - } - $classConstFetchTypes[] = $this->nodeTypeResolver->getType($return->expr); - } - return $this->typeFactory->createMixedPassedOrUnionType($classConstFetchTypes); - } -} diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer.php index bee7b563b..3b459b1ae 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer.php @@ -3,34 +3,13 @@ declare (strict_types=1); namespace Rector\TypeDeclaration\TypeInferer; -use PhpParser\Node; -use PhpParser\Node\Expr; -use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Closure; -use PhpParser\Node\Expr\Yield_; -use PhpParser\Node\FunctionLike; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; -use PhpParser\Node\Stmt\Return_; -use PHPStan\Reflection\ClassReflection; -use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\BenevolentUnionType; use PHPStan\Type\MixedType; -use PHPStan\Type\ThisType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; -use PHPStan\Type\UnionType; -use Rector\Enum\ObjectReference; -use Rector\Exception\ShouldNotHappenException; -use Rector\NodeTypeResolver\NodeTypeResolver; -use Rector\Php\PhpVersionProvider; -use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\Reflection\ReflectionResolver; -use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; -use Rector\TypeDeclaration\TypeAnalyzer\GenericClassStringTypeNormalizer; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnedNodesReturnTypeInfererTypeInferer; use Rector\TypeDeclaration\TypeNormalizer; -use Rector\ValueObject\PhpVersionFeature; /** * @internal */ @@ -46,203 +25,20 @@ final class ReturnTypeInferer * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnedNodesReturnTypeInfererTypeInferer */ private $returnedNodesReturnTypeInfererTypeInferer; - /** - * @readonly - * @var \Rector\TypeDeclaration\TypeAnalyzer\GenericClassStringTypeNormalizer - */ - private $genericClassStringTypeNormalizer; - /** - * @readonly - * @var \Rector\Php\PhpVersionProvider - */ - private $phpVersionProvider; - /** - * @readonly - * @var \Rector\PhpParser\Node\BetterNodeFinder - */ - private $betterNodeFinder; - /** - * @readonly - * @var \Rector\Reflection\ReflectionResolver - */ - private $reflectionResolver; - /** - * @readonly - * @var \PHPStan\Reflection\ReflectionProvider - */ - private $reflectionProvider; - /** - * @readonly - * @var \Rector\NodeTypeResolver\NodeTypeResolver - */ - private $nodeTypeResolver; - public function __construct(TypeNormalizer $typeNormalizer, ReturnedNodesReturnTypeInfererTypeInferer $returnedNodesReturnTypeInfererTypeInferer, GenericClassStringTypeNormalizer $genericClassStringTypeNormalizer, PhpVersionProvider $phpVersionProvider, BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver) + public function __construct(TypeNormalizer $typeNormalizer, ReturnedNodesReturnTypeInfererTypeInferer $returnedNodesReturnTypeInfererTypeInferer) { $this->typeNormalizer = $typeNormalizer; $this->returnedNodesReturnTypeInfererTypeInferer = $returnedNodesReturnTypeInfererTypeInferer; - $this->genericClassStringTypeNormalizer = $genericClassStringTypeNormalizer; - $this->phpVersionProvider = $phpVersionProvider; - $this->betterNodeFinder = $betterNodeFinder; - $this->reflectionResolver = $reflectionResolver; - $this->reflectionProvider = $reflectionProvider; - $this->nodeTypeResolver = $nodeTypeResolver; } /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Expr\ArrowFunction $functionLike + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike */ public function inferFunctionLike($functionLike) : Type { - $isSupportedStaticReturnType = $this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::STATIC_RETURN_TYPE); $originalType = $this->returnedNodesReturnTypeInfererTypeInferer->inferFunctionLike($functionLike); if ($originalType instanceof MixedType) { return new MixedType(); } - $type = $this->typeNormalizer->normalizeArrayTypeAndArrayNever($originalType); - // in case of void, check return type of children methods - if ($type instanceof MixedType) { - return new MixedType(); - } - $type = $this->verifyStaticType($type, $isSupportedStaticReturnType); - if (!$type instanceof Type) { - return new MixedType(); - } - $type = $this->verifyThisType($type, $functionLike); - // normalize ConstStringType to ClassStringType - $resolvedType = $this->genericClassStringTypeNormalizer->normalize($type); - return $this->resolveTypeWithVoidHandling($functionLike, $resolvedType); - } - private function verifyStaticType(Type $type, bool $isSupportedStaticReturnType) : ?Type - { - if ($this->isStaticType($type)) { - /** @var TypeWithClassName $type */ - return $this->resolveStaticType($isSupportedStaticReturnType, $type); - } - if ($type instanceof UnionType) { - return $this->resolveUnionStaticTypes($type, $isSupportedStaticReturnType); - } - return $type; - } - private function verifyThisType(Type $type, FunctionLike $functionLike) : Type - { - if (!$type instanceof ThisType) { - return $type; - } - $classReflection = $this->reflectionResolver->resolveClassReflection($functionLike); - $objectType = $type->getStaticObjectType(); - $objectTypeClassName = $objectType->getClassName(); - if (!$classReflection instanceof ClassReflection || !$classReflection->isClass()) { - return $type; - } - if ($classReflection->getName() === $objectTypeClassName) { - return $type; - } - return new MixedType(); - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Expr\ArrowFunction $functionLike - */ - private function resolveTypeWithVoidHandling($functionLike, Type $resolvedType) : Type - { - if ($resolvedType->isVoid()->yes()) { - if ($functionLike instanceof ArrowFunction) { - return new MixedType(); - } - $hasReturnValue = (bool) $this->betterNodeFinder->findFirstInFunctionLikeScoped($functionLike, static function (Node $subNode) : bool { - if (!$subNode instanceof Return_) { - // yield return is handled on speicific rule: AddReturnTypeDeclarationFromYieldsRector - return $subNode instanceof Yield_; - } - return $subNode->expr instanceof Expr; - }); - if ($hasReturnValue) { - return new MixedType(); - } - } - if ($resolvedType instanceof UnionType) { - $benevolentUnionTypeIntegerType = $this->resolveBenevolentUnionTypeInteger($functionLike, $resolvedType); - if ($benevolentUnionTypeIntegerType->isInteger()->yes()) { - return $benevolentUnionTypeIntegerType; - } - } - return $resolvedType; - } - /** - * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Expr\ArrowFunction $functionLike - */ - private function resolveBenevolentUnionTypeInteger($functionLike, UnionType $unionType) : Type - { - $types = $unionType->getTypes(); - $countTypes = \count($types); - if ($countTypes !== 2) { - return $unionType; - } - if (!($types[0]->isInteger()->yes() && $types[1]->isString()->yes())) { - return $unionType; - } - if (!$functionLike instanceof ArrowFunction) { - $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($functionLike, Return_::class); - $returnsWithExpr = \array_filter($returns, static function (Return_ $return) : bool { - return $return->expr instanceof Expr; - }); - } else { - $returns = $functionLike->getStmts(); - $returnsWithExpr = $returns; - } - if ($returns !== $returnsWithExpr) { - return $unionType; - } - if ($returnsWithExpr === []) { - return $unionType; - } - foreach ($returnsWithExpr as $returnWithExpr) { - /** @var Expr $expr */ - $expr = $returnWithExpr->expr; - $type = $this->nodeTypeResolver->getNativeType($expr); - if (!$type instanceof BenevolentUnionType) { - return $unionType; - } - } - return $types[0]; - } - private function isStaticType(Type $type) : bool - { - if (!$type instanceof TypeWithClassName) { - return \false; - } - return $type->getClassName() === ObjectReference::STATIC; - } - private function resolveUnionStaticTypes(UnionType $unionType, bool $isSupportedStaticReturnType) : ?\PHPStan\Type\UnionType - { - $resolvedTypes = []; - $hasStatic = \false; - foreach ($unionType->getTypes() as $unionedType) { - if ($this->isStaticType($unionedType)) { - /** @var FullyQualifiedObjectType $unionedType */ - $classReflection = $this->reflectionProvider->getClass($unionedType->getClassName()); - $resolvedTypes[] = new ThisType($classReflection); - $hasStatic = \true; - continue; - } - $resolvedTypes[] = $unionedType; - } - if (!$hasStatic) { - return $unionType; - } - // has static, but it is not supported - if (!$isSupportedStaticReturnType) { - return null; - } - return new UnionType($resolvedTypes); - } - private function resolveStaticType(bool $isSupportedStaticReturnType, TypeWithClassName $typeWithClassName) : ?ThisType - { - if (!$isSupportedStaticReturnType) { - return null; - } - $classReflection = $typeWithClassName->getClassReflection(); - if (!$classReflection instanceof ClassReflection) { - throw new ShouldNotHappenException(); - } - return new ThisType($classReflection); + return $this->typeNormalizer->normalizeArrayTypeAndArrayNever($originalType); } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php b/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php index f5f6875c5..9e81c1fd9 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php +++ b/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/ReturnTypeInferer/ReturnedNodesReturnTypeInfererTypeInferer.php @@ -3,19 +3,17 @@ declare (strict_types=1); namespace Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; -use PhpParser\Node; use PhpParser\Node\Expr; -use PhpParser\Node\FunctionLike; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Stmt\ClassMethod; -use PhpParser\Node\Stmt\Return_; -use PhpParser\NodeTraverser; +use PhpParser\Node\Stmt\Function_; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\MixedType; use PHPStan\Type\Type; use PHPStan\Type\VoidType; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; -use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; +use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Reflection\ReflectionResolver; use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver; use Rector\TypeDeclaration\TypeInferer\SplArrayFixedTypeNarrower; @@ -31,14 +29,14 @@ final class ReturnedNodesReturnTypeInfererTypeInferer private $silentVoidResolver; /** * @readonly - * @var \Rector\NodeTypeResolver\NodeTypeResolver + * @var \Rector\PhpParser\Node\BetterNodeFinder */ - private $nodeTypeResolver; + private $betterNodeFinder; /** * @readonly - * @var \Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser + * @var \Rector\NodeTypeResolver\NodeTypeResolver */ - private $simpleCallableNodeTraverser; + private $nodeTypeResolver; /** * @readonly * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory @@ -54,76 +52,48 @@ final class ReturnedNodesReturnTypeInfererTypeInferer * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - public function __construct(SilentVoidResolver $silentVoidResolver, NodeTypeResolver $nodeTypeResolver, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, TypeFactory $typeFactory, SplArrayFixedTypeNarrower $splArrayFixedTypeNarrower, ReflectionResolver $reflectionResolver) + public function __construct(SilentVoidResolver $silentVoidResolver, BetterNodeFinder $betterNodeFinder, NodeTypeResolver $nodeTypeResolver, TypeFactory $typeFactory, SplArrayFixedTypeNarrower $splArrayFixedTypeNarrower, ReflectionResolver $reflectionResolver) { $this->silentVoidResolver = $silentVoidResolver; + $this->betterNodeFinder = $betterNodeFinder; $this->nodeTypeResolver = $nodeTypeResolver; - $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->typeFactory = $typeFactory; $this->splArrayFixedTypeNarrower = $splArrayFixedTypeNarrower; $this->reflectionResolver = $reflectionResolver; } - public function inferFunctionLike(FunctionLike $functionLike) : Type + /** + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike + */ + public function inferFunctionLike($functionLike) : Type { $classReflection = $this->reflectionResolver->resolveClassReflection($functionLike); - if (!$classReflection instanceof ClassReflection) { - return new MixedType(); - } - if ($functionLike instanceof ClassMethod && $classReflection->isInterface()) { + if ($functionLike instanceof ClassMethod && (!$classReflection instanceof ClassReflection || $classReflection->isInterface())) { return new MixedType(); } $types = []; - $localReturnNodes = $this->collectReturns($functionLike); + // empty returns can have yield, use MixedType() instead + $localReturnNodes = $this->betterNodeFinder->findReturnsScoped($functionLike); if ($localReturnNodes === []) { - return $this->resolveNoLocalReturnNodes($classReflection, $functionLike); + return new MixedType(); } + $hasVoid = \false; foreach ($localReturnNodes as $localReturnNode) { - $returnedExprType = $localReturnNode->expr instanceof Expr ? $this->nodeTypeResolver->getNativeType($localReturnNode->expr) : new VoidType(); + if (!$localReturnNode->expr instanceof Expr) { + $hasVoid = \true; + $types[] = new VoidType(); + continue; + } + $returnedExprType = $this->nodeTypeResolver->getNativeType($localReturnNode->expr); $types[] = $this->splArrayFixedTypeNarrower->narrow($returnedExprType); } - if ($this->silentVoidResolver->hasSilentVoid($functionLike)) { + if (!$hasVoid && $this->silentVoidResolver->hasSilentVoid($functionLike)) { $types[] = new VoidType(); } - return $this->typeFactory->createMixedPassedOrUnionTypeAndKeepConstant($types); - } - /** - * @return Return_[] - */ - private function collectReturns(FunctionLike $functionLike) : array - { - $returns = []; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->getStmts(), static function (Node $node) use(&$returns) : ?int { - // skip Return_ nodes in nested functions or switch statements - if ($node instanceof FunctionLike) { - return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - } - if (!$node instanceof Return_) { - return null; - } - $returns[] = $node; - return null; - }); - return $returns; - } - /** - * @return \PHPStan\Type\VoidType|\PHPStan\Type\MixedType - */ - private function resolveNoLocalReturnNodes(ClassReflection $classReflection, FunctionLike $functionLike) - { - // void type - if (!$this->isAbstractMethod($classReflection, $functionLike)) { - return new VoidType(); - } - return new MixedType(); - } - private function isAbstractMethod(ClassReflection $classReflection, FunctionLike $functionLike) : bool - { - if ($functionLike instanceof ClassMethod && $functionLike->isAbstract()) { - return \true; - } - if (!$classReflection->isClass()) { - return \false; + $returnType = $this->typeFactory->createMixedPassedOrUnionTypeAndKeepConstant($types); + // only void? + if ($returnType->isVoid()->yes()) { + return new MixedType(); } - return $classReflection->isAbstract(); + return $returnType; } } diff --git a/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php b/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php index db367d0aa..1ab3fb983 100644 --- a/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php +++ b/vendor/rector/rector/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php @@ -80,13 +80,12 @@ public function hasExclusiveVoid($functionLike) : bool if ($classReflection instanceof ClassReflection && $classReflection->isInterface()) { return \false; } - if ($this->betterNodeFinder->hasInstancesOfInFunctionLikeScoped($functionLike, [Yield_::class, YieldFrom::class])) { - return \false; - } - $return = $this->betterNodeFinder->findFirstInFunctionLikeScoped($functionLike, static function (Node $node) : bool { - return $node instanceof Return_ && $node->expr instanceof Expr; + return !(bool) $this->betterNodeFinder->findFirstInFunctionLikeScoped($functionLike, function (Node $subNode) : bool { + if ($subNode instanceof Yield_ || $subNode instanceof YieldFrom) { + return \true; + } + return $subNode instanceof Return_ && $subNode->expr instanceof Expr; }); - return !$return instanceof Return_; } public function hasSilentVoid(FunctionLike $functionLike) : bool { diff --git a/vendor/rector/rector/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromArg.php b/vendor/rector/rector/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromArg.php new file mode 100644 index 000000000..b8ed12cbf --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromArg.php @@ -0,0 +1,64 @@ + + * @readonly + */ + private $callLikePosition; + /** + * @var int<0, max> + * @readonly + */ + private $functionLikePosition; + /** + * @param int<0, max> $callLikePosition + * @param int<0, max> $functionLikePosition + */ + public function __construct(string $className, string $methodName, int $callLikePosition, int $functionLikePosition) + { + $this->className = $className; + $this->methodName = $methodName; + $this->callLikePosition = $callLikePosition; + $this->functionLikePosition = $functionLikePosition; + RectorAssert::className($className); + } + public function getObjectType() : ObjectType + { + return new ObjectType($this->className); + } + public function getMethodName() : string + { + return $this->methodName; + } + /** + * @return int<0, max> + */ + public function getCallLikePosition() : int + { + return $this->callLikePosition; + } + /** + * @return int<0, max> + */ + public function getFunctionLikePosition() : int + { + return $this->functionLikePosition; + } +} diff --git a/vendor/rector/rector/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromObject.php b/vendor/rector/rector/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromObject.php new file mode 100644 index 000000000..b9ad8b0f6 --- /dev/null +++ b/vendor/rector/rector/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromObject.php @@ -0,0 +1,64 @@ + + * @readonly + */ + private $callLikePosition; + /** + * @var int<0, max> + * @readonly + */ + private $functionLikePosition; + /** + * @param int<0, max> $callLikePosition + * @param int<0, max> $functionLikePosition + */ + public function __construct(string $className, string $methodName, int $callLikePosition, int $functionLikePosition) + { + $this->className = $className; + $this->methodName = $methodName; + $this->callLikePosition = $callLikePosition; + $this->functionLikePosition = $functionLikePosition; + RectorAssert::className($className); + } + public function getObjectType() : ObjectType + { + return new ObjectType($this->className); + } + public function getMethodName() : string + { + return $this->methodName; + } + /** + * @return int<0, max> + */ + public function getCallLikePosition() : int + { + return $this->callLikePosition; + } + /** + * @return int<0, max> + */ + public function getFunctionLikePosition() : int + { + return $this->functionLikePosition; + } +} diff --git a/vendor/rector/rector/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php b/vendor/rector/rector/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php index 6259969b7..674dc07d1 100644 --- a/vendor/rector/rector/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php +++ b/vendor/rector/rector/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php @@ -4,7 +4,8 @@ namespace Rector\Visibility\Rector\ClassConst; use PhpParser\Node; -use PhpParser\Node\Stmt\ClassConst; +use PhpParser\Node\Stmt\Class_; +use PhpParser\Node\Stmt\Interface_; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Privatization\NodeManipulator\VisibilityManipulator; use Rector\Rector\AbstractRector; @@ -12,7 +13,7 @@ use Rector\Visibility\ValueObject\ChangeConstantVisibility; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Visibility\Rector\ClassConst\ChangeConstantVisibilityRector\ChangeConstantVisibilityRectorTest */ @@ -62,21 +63,27 @@ class MyClass extends FrameworkClass */ public function getNodeTypes() : array { - return [ClassConst::class]; + return [Class_::class, Interface_::class]; } /** - * @param ClassConst $node + * @param Class_|Interface_ $node */ public function refactor(Node $node) : ?Node { + $hasChanged = \false; foreach ($this->classConstantVisibilityChanges as $classConstantVisibilityChange) { - if (!$this->isName($node, $classConstantVisibilityChange->getConstant())) { - continue; - } if (!$this->isObjectType($node, $classConstantVisibilityChange->getObjectType())) { continue; } - $this->visibilityManipulator->changeNodeVisibility($node, $classConstantVisibilityChange->getVisibility()); + foreach ($node->getConstants() as $classConst) { + if (!$this->isName($classConst, $classConstantVisibilityChange->getConstant())) { + continue; + } + $this->visibilityManipulator->changeNodeVisibility($classConst, $classConstantVisibilityChange->getVisibility()); + $hasChanged = \true; + } + } + if ($hasChanged) { return $node; } return null; diff --git a/vendor/rector/rector/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php b/vendor/rector/rector/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php index 44b2d350e..0275b2572 100644 --- a/vendor/rector/rector/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php +++ b/vendor/rector/rector/rules/Visibility/Rector/ClassMethod/ChangeMethodVisibilityRector.php @@ -14,7 +14,7 @@ use Rector\Visibility\ValueObject\ChangeMethodVisibility; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\Visibility\Rector\ClassMethod\ChangeMethodVisibilityRector\ChangeMethodVisibilityRectorTest */ diff --git a/vendor/rector/rector/src/Application/ApplicationFileProcessor.php b/vendor/rector/rector/src/Application/ApplicationFileProcessor.php index 80f94dcc0..ce95b3bdd 100644 --- a/vendor/rector/rector/src/Application/ApplicationFileProcessor.php +++ b/vendor/rector/rector/src/Application/ApplicationFileProcessor.php @@ -3,13 +3,16 @@ declare (strict_types=1); namespace Rector\Application; -use RectorPrefix202405\Nette\Utils\FileSystem as UtilsFileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem as UtilsFileSystem; +use PHPStan\Parser\ParserErrorsException; +use Rector\Application\Provider\CurrentFileProvider; use Rector\Caching\Detector\ChangedFilesDetector; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; -use Rector\Configuration\VendorMissAnalyseGuard; +use Rector\FileSystem\FilesFinder; use Rector\Parallel\Application\ParallelFileProcessor; -use Rector\Provider\CurrentFileProvider; +use Rector\PhpParser\Parser\ParserErrors; +use Rector\Reporting\MissConfigurationReporter; use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment; use Rector\Util\ArrayParametersMerger; use Rector\ValueObject\Application\File; @@ -18,12 +21,11 @@ use Rector\ValueObject\FileProcessResult; use Rector\ValueObject\ProcessResult; use Rector\ValueObject\Reporting\FileDiff; -use Rector\ValueObjectFactory\Application\FileFactory; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; -use RectorPrefix202405\Symplify\EasyParallel\CpuCoreCountProvider; -use RectorPrefix202405\Symplify\EasyParallel\Exception\ParallelShouldNotHappenException; -use RectorPrefix202405\Symplify\EasyParallel\ScheduleFactory; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symplify\EasyParallel\CpuCoreCountProvider; +use RectorPrefix202410\Symplify\EasyParallel\Exception\ParallelShouldNotHappenException; +use RectorPrefix202410\Symplify\EasyParallel\ScheduleFactory; use Throwable; final class ApplicationFileProcessor { @@ -34,9 +36,9 @@ final class ApplicationFileProcessor private $symfonyStyle; /** * @readonly - * @var \Rector\ValueObjectFactory\Application\FileFactory + * @var \Rector\FileSystem\FilesFinder */ - private $fileFactory; + private $filesFinder; /** * @readonly * @var \Rector\Parallel\Application\ParallelFileProcessor @@ -59,7 +61,7 @@ final class ApplicationFileProcessor private $changedFilesDetector; /** * @readonly - * @var \Rector\Provider\CurrentFileProvider + * @var \Rector\Application\Provider\CurrentFileProvider */ private $currentFileProvider; /** @@ -74,9 +76,9 @@ final class ApplicationFileProcessor private $arrayParametersMerger; /** * @readonly - * @var \Rector\Configuration\VendorMissAnalyseGuard + * @var \Rector\Reporting\MissConfigurationReporter */ - private $vendorMissAnalyseGuard; + private $missConfigurationReporter; /** * @var string */ @@ -85,10 +87,10 @@ final class ApplicationFileProcessor * @var SystemError[] */ private $systemErrors = []; - public function __construct(SymfonyStyle $symfonyStyle, FileFactory $fileFactory, ParallelFileProcessor $parallelFileProcessor, ScheduleFactory $scheduleFactory, CpuCoreCountProvider $cpuCoreCountProvider, ChangedFilesDetector $changedFilesDetector, CurrentFileProvider $currentFileProvider, \Rector\Application\FileProcessor $fileProcessor, ArrayParametersMerger $arrayParametersMerger, VendorMissAnalyseGuard $vendorMissAnalyseGuard) + public function __construct(SymfonyStyle $symfonyStyle, FilesFinder $filesFinder, ParallelFileProcessor $parallelFileProcessor, ScheduleFactory $scheduleFactory, CpuCoreCountProvider $cpuCoreCountProvider, ChangedFilesDetector $changedFilesDetector, CurrentFileProvider $currentFileProvider, \Rector\Application\FileProcessor $fileProcessor, ArrayParametersMerger $arrayParametersMerger, MissConfigurationReporter $missConfigurationReporter) { $this->symfonyStyle = $symfonyStyle; - $this->fileFactory = $fileFactory; + $this->filesFinder = $filesFinder; $this->parallelFileProcessor = $parallelFileProcessor; $this->scheduleFactory = $scheduleFactory; $this->cpuCoreCountProvider = $cpuCoreCountProvider; @@ -96,15 +98,13 @@ public function __construct(SymfonyStyle $symfonyStyle, FileFactory $fileFactory $this->currentFileProvider = $currentFileProvider; $this->fileProcessor = $fileProcessor; $this->arrayParametersMerger = $arrayParametersMerger; - $this->vendorMissAnalyseGuard = $vendorMissAnalyseGuard; + $this->missConfigurationReporter = $missConfigurationReporter; } public function run(Configuration $configuration, InputInterface $input) : ProcessResult { - $filePaths = $this->fileFactory->findFilesInPaths($configuration->getPaths(), $configuration); - if ($this->vendorMissAnalyseGuard->isVendorAnalyzed($filePaths)) { - $this->symfonyStyle->warning(\sprintf('Rector has detected a "/vendor" directory in your configured paths. If this is Composer\'s vendor directory, this is not necessary as it will be autoloaded. Scanning the Composer vendor directory will cause Rector to run much slower and possibly with errors.%sRemove "/vendor" from Rector paths and run again.', \PHP_EOL . \PHP_EOL)); - \sleep(3); - } + $filePaths = $this->filesFinder->findFilesInPaths($configuration->getPaths(), $configuration); + $this->missConfigurationReporter->reportVendorInPaths($filePaths); + $this->missConfigurationReporter->reportStartWithShortOpenTag(); // no files found if ($filePaths === []) { return new ProcessResult([], []); @@ -133,7 +133,7 @@ public function run(Configuration $configuration, InputInterface $input) : Proce $preFileCallback = null; } if ($configuration->isParallel()) { - $processResult = $this->runParallel($filePaths, $configuration, $input, $postFileCallback); + $processResult = $this->runParallel($filePaths, $input, $postFileCallback); } else { $processResult = $this->processFiles($filePaths, $configuration, $preFileCallback, $postFileCallback); } @@ -197,6 +197,9 @@ private function resolveSystemError(Throwable $throwable, string $filePath) : Sy } else { $errorMessage .= 'Run Rector with "--debug" option and post the report here: https://github.com/rectorphp/rector/issues/new'; } + if ($throwable instanceof ParserErrorsException) { + $throwable = new ParserErrors($throwable); + } return new SystemError($errorMessage, $filePath, $throwable->getLine()); } /** @@ -226,7 +229,7 @@ private function restoreErrorHandler() : void * @param string[] $filePaths * @param callable(int $stepCount): void $postFileCallback */ - private function runParallel(array $filePaths, Configuration $configuration, InputInterface $input, callable $postFileCallback) : ProcessResult + private function runParallel(array $filePaths, InputInterface $input, callable $postFileCallback) : ProcessResult { $schedule = $this->scheduleFactory->create($this->cpuCoreCountProvider->provide(), SimpleParameterProvider::provideIntParameter(Option::PARALLEL_JOB_SIZE), SimpleParameterProvider::provideIntParameter(Option::PARALLEL_MAX_NUMBER_OF_PROCESSES), $filePaths); $mainScript = $this->resolveCalledRectorBinary(); @@ -234,7 +237,7 @@ private function runParallel(array $filePaths, Configuration $configuration, Inp throw new ParallelShouldNotHappenException('[parallel] Main script was not found'); } // mimics see https://github.com/phpstan/phpstan-src/commit/9124c66dcc55a222e21b1717ba5f60771f7dda92#diff-387b8f04e0db7a06678eb52ce0c0d0aff73e0d7d8fc5df834d0a5fbec198e5daR139 - return $this->parallelFileProcessor->process($schedule, $mainScript, $postFileCallback, $input, $configuration); + return $this->parallelFileProcessor->process($schedule, $mainScript, $postFileCallback, $input); } /** * Path to called "rector" binary file, e.g. "vendor/bin/rector" returns "vendor/bin/rector" This is needed to re-call the diff --git a/vendor/rector/rector/src/Application/FileProcessor.php b/vendor/rector/rector/src/Application/FileProcessor.php index 37bb3186d..ec6028a42 100644 --- a/vendor/rector/rector/src/Application/FileProcessor.php +++ b/vendor/rector/rector/src/Application/FileProcessor.php @@ -3,8 +3,10 @@ declare (strict_types=1); namespace Rector\Application; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Strings; use PHPStan\AnalysedCodeException; +use PHPStan\Parser\ParserErrorsException; use Rector\Caching\Detector\ChangedFilesDetector; use Rector\ChangesReporting\ValueObjectFactory\ErrorFactory; use Rector\ChangesReporting\ValueObjectFactory\FileDiffFactory; @@ -12,8 +14,9 @@ use Rector\FileSystem\FilePathHelper; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\PhpParser\NodeTraverser\RectorNodeTraverser; +use Rector\PhpParser\Parser\ParserErrors; use Rector\PhpParser\Parser\RectorParser; -use Rector\PhpParser\Printer\FormatPerservingPrinter; +use Rector\PhpParser\Printer\BetterStandardPrinter; use Rector\PostRector\Application\PostFileProcessor; use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment; use Rector\ValueObject\Application\File; @@ -21,15 +24,15 @@ use Rector\ValueObject\Error\SystemError; use Rector\ValueObject\FileProcessResult; use Rector\ValueObject\Reporting\FileDiff; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; use Throwable; final class FileProcessor { /** * @readonly - * @var \Rector\PhpParser\Printer\FormatPerservingPrinter + * @var \Rector\PhpParser\Printer\BetterStandardPrinter */ - private $formatPerservingPrinter; + private $betterStandardPrinter; /** * @readonly * @var \Rector\PhpParser\NodeTraverser\RectorNodeTraverser @@ -80,9 +83,9 @@ final class FileProcessor * @see https://regex101.com/r/llm7XZ/1 */ private const OPEN_TAG_SPACED_REGEX = '#^[ \\t]+<\\?php#m'; - public function __construct(FormatPerservingPrinter $formatPerservingPrinter, RectorNodeTraverser $rectorNodeTraverser, SymfonyStyle $symfonyStyle, FileDiffFactory $fileDiffFactory, ChangedFilesDetector $changedFilesDetector, ErrorFactory $errorFactory, FilePathHelper $filePathHelper, PostFileProcessor $postFileProcessor, RectorParser $rectorParser, NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator) + public function __construct(BetterStandardPrinter $betterStandardPrinter, RectorNodeTraverser $rectorNodeTraverser, SymfonyStyle $symfonyStyle, FileDiffFactory $fileDiffFactory, ChangedFilesDetector $changedFilesDetector, ErrorFactory $errorFactory, FilePathHelper $filePathHelper, PostFileProcessor $postFileProcessor, RectorParser $rectorParser, NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator) { - $this->formatPerservingPrinter = $formatPerservingPrinter; + $this->betterStandardPrinter = $betterStandardPrinter; $this->rectorNodeTraverser = $rectorNodeTraverser; $this->symfonyStyle = $symfonyStyle; $this->fileDiffFactory = $fileDiffFactory; @@ -109,7 +112,7 @@ public function processFile(File $file, Configuration $configuration) : FileProc $file->changeHasChanged(\false); $newStmts = $this->rectorNodeTraverser->traverse($file->getNewStmts()); // apply post rectors - $postNewStmts = $this->postFileProcessor->traverse($newStmts, $filePath); + $postNewStmts = $this->postFileProcessor->traverse($newStmts, $file); // this is needed for new tokens added in "afterTraverse()" $file->changeNewStmts($postNewStmts); // 3. print to file or string @@ -149,6 +152,9 @@ private function parseFileAndDecorateNodes(File $file) : ?SystemError throw $throwable; } $relativeFilePath = $this->filePathHelper->relativePath($file->getFilePath()); + if ($throwable instanceof ParserErrorsException) { + $throwable = new ParserErrors($throwable); + } return new SystemError($throwable->getMessage(), $relativeFilePath, $throwable->getLine()); } return null; @@ -156,7 +162,7 @@ private function parseFileAndDecorateNodes(File $file) : ?SystemError private function printFile(File $file, Configuration $configuration, string $filePath) : void { // only save to string first, no need to print to file when not needed - $newContent = $this->formatPerservingPrinter->printParsedStmstAndTokensToString($file); + $newContent = $this->betterStandardPrinter->printFormatPreserving($file->getNewStmts(), $file->getOldStmts(), $file->getOldTokens()); /** * When no diff applied, the PostRector may still change the content, that's why printing still needed * On printing, the space may be wiped, these below check compare with original file content used to verify @@ -186,7 +192,7 @@ private function printFile(File $file, Configuration $configuration, string $fil if (!$file->hasChanged()) { return; } - $this->formatPerservingPrinter->dumpFile($filePath, $newContent); + FileSystem::write($filePath, $newContent, null); } private function parseFileNodes(File $file) : void { diff --git a/vendor/rector/rector/src/Provider/CurrentFileProvider.php b/vendor/rector/rector/src/Application/Provider/CurrentFileProvider.php similarity index 72% rename from vendor/rector/rector/src/Provider/CurrentFileProvider.php rename to vendor/rector/rector/src/Application/Provider/CurrentFileProvider.php index 385d9de67..17536432d 100644 --- a/vendor/rector/rector/src/Provider/CurrentFileProvider.php +++ b/vendor/rector/rector/src/Application/Provider/CurrentFileProvider.php @@ -1,9 +1,12 @@ , string> */ - private const TAGS_TYPES_TO_NAMES = [ReturnTagValueNode::class => '@return', ParamTagValueNode::class => '@param', VarTagValueNode::class => '@var', MethodTagValueNode::class => '@method', PropertyTagValueNode::class => '@property']; + private const TAGS_TYPES_TO_NAMES = [ReturnTagValueNode::class => '@return', ParamTagValueNode::class => '@param', VarTagValueNode::class => '@var', MethodTagValueNode::class => '@method', PropertyTagValueNode::class => '@property', ExtendsTagValueNode::class => '@extends', ImplementsTagValueNode::class => '@implements']; /** * @var bool */ @@ -242,11 +244,11 @@ public function findOneByAnnotationClass(string $desiredClass) : ?DoctrineAnnota * @template T of \PHPStan\PhpDocParser\Ast\Node * @param class-string $typeToRemove */ - public function removeByType(string $typeToRemove) : bool + public function removeByType(string $typeToRemove, ?string $name = null) : bool { $hasChanged = \false; $phpDocNodeTraverser = new PhpDocNodeTraverser(); - $phpDocNodeTraverser->traverseWithCallable($this->phpDocNode, '', static function (Node $node) use($typeToRemove, &$hasChanged) : ?int { + $phpDocNodeTraverser->traverseWithCallable($this->phpDocNode, '', static function (Node $node) use($typeToRemove, &$hasChanged, $name) : ?int { if ($node instanceof PhpDocTagNode && $node->value instanceof $typeToRemove) { // keep special annotation for tools if (\strncmp($node->name, '@psalm-', \strlen('@psalm-')) === 0) { @@ -255,6 +257,9 @@ public function removeByType(string $typeToRemove) : bool if (\strncmp($node->name, '@phpstan-', \strlen('@phpstan-')) === 0) { return null; } + if ($name !== null && $node->value instanceof VarTagValueNode && $node->value->variableName !== '$' . \ltrim($name, '$')) { + return PhpDocNodeTraverser::DONT_TRAVERSE_CHILDREN; + } $hasChanged = \true; return PhpDocNodeTraverser::NODE_REMOVE; } @@ -294,7 +299,7 @@ public function addTagValueNode(PhpDocTagValueNode $phpDocTagValueNode) : void } $name = $this->resolveNameForPhpDocTagValueNode($phpDocTagValueNode); if (!\is_string($name)) { - return; + throw new ShouldNotHappenException(\sprintf('Name could not be resolved for "%s" tag value node. Complete it to %s::TAGS_TYPES_TO_NAMES constant', \get_class($phpDocTagValueNode), self::class)); } $phpDocTagNode = new PhpDocTagNode($name, $phpDocTagValueNode); $this->addPhpDocTagNode($phpDocTagNode); @@ -354,22 +359,6 @@ public function getTemplateNames() : array } return $templateNames; } - /** - * @return TemplateTagValueNode[] - */ - public function getTemplateTagValueNodes() : array - { - return $this->phpDocNode->getTemplateTagValues(); - } - /** - * @deprecated Change doc block and print directly in the node instead - * Should be handled by attributes of phpdoc node - if stard_and_end is missing in one of nodes, it has been changed - * - * @api - */ - public function markAsChanged() : void - { - } public function makeMultiLined() : void { $this->isSingleLine = \false; diff --git a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocInfo/TokenIteratorFactory.php b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocInfo/TokenIteratorFactory.php index c5f903307..d06001ae4 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocInfo/TokenIteratorFactory.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocInfo/TokenIteratorFactory.php @@ -6,7 +6,6 @@ use PHPStan\PhpDocParser\Lexer\Lexer; use PHPStan\PhpDocParser\Parser\TokenIterator; use Rector\BetterPhpDocParser\ValueObject\Parser\BetterTokenIterator; -use Rector\Util\Reflection\PrivatesAccessor; final class TokenIteratorFactory { /** @@ -14,19 +13,9 @@ final class TokenIteratorFactory * @var \PHPStan\PhpDocParser\Lexer\Lexer */ private $lexer; - /** - * @readonly - * @var \Rector\Util\Reflection\PrivatesAccessor - */ - private $privatesAccessor; - /** - * @var string - */ - private const INDEX = 'index'; - public function __construct(Lexer $lexer, PrivatesAccessor $privatesAccessor) + public function __construct(Lexer $lexer) { $this->lexer = $lexer; - $this->privatesAccessor = $privatesAccessor; } public function create(string $content) : BetterTokenIterator { @@ -38,11 +27,9 @@ public function createFromTokenIterator(TokenIterator $tokenIterator) : BetterTo if ($tokenIterator instanceof BetterTokenIterator) { return $tokenIterator; } - $tokens = $this->privatesAccessor->getPrivateProperty($tokenIterator, 'tokens'); - $betterTokenIterator = new BetterTokenIterator($tokens); - // keep original position - $currentIndex = $this->privatesAccessor->getPrivateProperty($tokenIterator, self::INDEX); - $this->privatesAccessor->setPrivateProperty($betterTokenIterator, self::INDEX, $currentIndex); - return $betterTokenIterator; + // keep original tokens and index position + $tokens = $tokenIterator->getTokens(); + $currentIndex = $tokenIterator->currentTokenIndex(); + return new BetterTokenIterator($tokens, $currentIndex); } } diff --git a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php index 477ecf93e..124514756 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocManipulator/PhpDocClassRenamer.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\BetterPhpDocParser\PhpDocManipulator; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use Rector\BetterPhpDocParser\PhpDoc\ArrayItemNode; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; diff --git a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocNodeMapper.php b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocNodeMapper.php index 8291feb66..a595fde67 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocNodeMapper.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocNodeMapper.php @@ -10,7 +10,7 @@ use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\CloningPhpDocNodeVisitor; use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\ParentConnectingPhpDocNodeVisitor; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\BetterPhpDocParser\PhpDocNodeMapperTest */ diff --git a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/BetterPhpDocParser.php b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/BetterPhpDocParser.php index 2cd8c309b..4b5e15e9f 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/BetterPhpDocParser.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/BetterPhpDocParser.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\BetterPhpDocParser\PhpDocParser; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocChildNode; diff --git a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/ClassAnnotationMatcher.php b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/ClassAnnotationMatcher.php index 6df50c7d4..ea9d264bc 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/ClassAnnotationMatcher.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/ClassAnnotationMatcher.php @@ -50,7 +50,7 @@ public function resolveTagFullyQualifiedName(string $tag, Node $node) : string } $tag = \ltrim($tag, '@'); $uses = $this->useImportsResolver->resolve(); - $fullyQualifiedClass = $this->resolveFullyQualifiedClass($uses, $node, $tag, \false); + $fullyQualifiedClass = $this->resolveFullyQualifiedClass($uses, $node, $tag); if ($fullyQualifiedClass === null) { $fullyQualifiedClass = $tag; } @@ -58,9 +58,9 @@ public function resolveTagFullyQualifiedName(string $tag, Node $node) : string return $fullyQualifiedClass; } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ - private function resolveFullyQualifiedClass(array $uses, Node $node, string $tag, bool $returnNullOnUnknownClass) : ?string + private function resolveFullyQualifiedClass(array $uses, Node $node, string $tag) : ?string { $scope = $node->getAttribute(AttributeKey::SCOPE); if ($scope instanceof Scope) { @@ -71,7 +71,7 @@ private function resolveFullyQualifiedClass(array $uses, Node $node, string $tag return $namespacedTag; } if (\strpos($tag, '\\') === \false) { - return $this->resolveAsAliased($uses, $tag, $returnNullOnUnknownClass); + return $this->resolveAsAliased($uses, $tag); } if ($this->isPreslashedExistingClass($tag)) { // Global or absolute Class @@ -79,13 +79,12 @@ private function resolveFullyQualifiedClass(array $uses, Node $node, string $tag } } } - $class = $this->useImportNameMatcher->matchNameWithUses($tag, $uses); - return $this->resolveClass($class, $returnNullOnUnknownClass); + return $this->useImportNameMatcher->matchNameWithUses($tag, $uses); } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ - private function resolveAsAliased(array $uses, string $tag, bool $returnNullOnUnknownClass) : ?string + private function resolveAsAliased(array $uses, string $tag) : ?string { foreach ($uses as $use) { $prefix = $this->useImportsResolver->resolvePrefix($use); @@ -94,21 +93,11 @@ private function resolveAsAliased(array $uses, string $tag, bool $returnNullOnUn continue; } if ($useUse->alias->toString() === $tag) { - $class = $prefix . $useUse->name->toString(); - return $this->resolveClass($class, $returnNullOnUnknownClass); + return $prefix . $useUse->name->toString(); } } } - $class = $this->useImportNameMatcher->matchNameWithUses($tag, $uses); - return $this->resolveClass($class, $returnNullOnUnknownClass); - } - private function resolveClass(?string $class, bool $returnNullOnUnknownClass) : ?string - { - if ($class === null) { - return null; - } - $resolvedClass = $this->reflectionProvider->hasClass($class) ? $class : null; - return $returnNullOnUnknownClass ? $resolvedClass : $class; + return $this->useImportNameMatcher->matchNameWithUses($tag, $uses); } private function isPreslashedExistingClass(string $tag) : bool { diff --git a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/DoctrineAnnotationDecorator.php b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/DoctrineAnnotationDecorator.php index 00e04c197..836086f7c 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/DoctrineAnnotationDecorator.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/PhpDocParser/DoctrineAnnotationDecorator.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\BetterPhpDocParser\PhpDocParser; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocChildNode; @@ -21,7 +21,7 @@ use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; use Rector\BetterPhpDocParser\ValueObject\StartAndEnd; use Rector\Util\StringUtils; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class DoctrineAnnotationDecorator implements PhpDocNodeDecoratorInterface { /** diff --git a/vendor/rector/rector/src/BetterPhpDocParser/Printer/DocBlockInliner.php b/vendor/rector/rector/src/BetterPhpDocParser/Printer/DocBlockInliner.php index 4e92f1a22..6e02d9be2 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/Printer/DocBlockInliner.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/Printer/DocBlockInliner.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\BetterPhpDocParser\Printer; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; final class DocBlockInliner { /** diff --git a/vendor/rector/rector/src/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php b/vendor/rector/rector/src/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php index 089a86b2b..2f616e3ef 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/Printer/PhpDocInfoPrinter.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\BetterPhpDocParser\Printer; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Comment; use PhpParser\Node\Stmt\InlineHTML; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; diff --git a/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/Parser/BetterTokenIterator.php b/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/Parser/BetterTokenIterator.php index 703c9f66c..8946693a2 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/Parser/BetterTokenIterator.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/Parser/BetterTokenIterator.php @@ -5,29 +5,17 @@ use PHPStan\PhpDocParser\Parser\TokenIterator; use Rector\Exception\ShouldNotHappenException; -use Rector\Util\Reflection\PrivatesAccessor; final class BetterTokenIterator extends TokenIterator { - /** - * @var string - */ - private const TOKENS = 'tokens'; - /** - * @var string - */ - private const INDEX = 'index'; /** * @param array $tokens */ public function __construct(array $tokens, int $index = 0) { - $privatesAccessor = new PrivatesAccessor(); if ($tokens === []) { - $privatesAccessor->setPrivateProperty($this, self::TOKENS, []); - $privatesAccessor->setPrivateProperty($this, self::INDEX, 0); - } else { - parent::__construct($tokens, $index); + $index = 0; } + parent::__construct($tokens, $index); } /** * @param int[] $types diff --git a/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php b/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php index cc41d1ff1..f118cc0ad 100644 --- a/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php +++ b/vendor/rector/rector/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php @@ -5,7 +5,7 @@ use Rector\BetterPhpDocParser\PhpDoc\ArrayItemNode; use Stringable; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class CurlyListNode extends \Rector\BetterPhpDocParser\ValueObject\PhpDoc\DoctrineAnnotation\AbstractValuesAwareNode { /** diff --git a/vendor/rector/rector/src/Bootstrap/RectorConfigsResolver.php b/vendor/rector/rector/src/Bootstrap/RectorConfigsResolver.php index cb844b6c0..6cd353c78 100644 --- a/vendor/rector/rector/src/Bootstrap/RectorConfigsResolver.php +++ b/vendor/rector/rector/src/Bootstrap/RectorConfigsResolver.php @@ -4,32 +4,15 @@ namespace Rector\Bootstrap; use Rector\ValueObject\Bootstrap\BootstrapConfigs; -use RectorPrefix202405\Symfony\Component\Console\Input\ArgvInput; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Console\Input\ArgvInput; +use RectorPrefix202410\Webmozart\Assert\Assert; final class RectorConfigsResolver { public function provide() : BootstrapConfigs { $argvInput = new ArgvInput(); $mainConfigFile = $this->resolveFromInputWithFallback($argvInput, 'rector.php'); - $rectorRecipeConfigFile = $this->resolveRectorRecipeConfig($argvInput); - $configFiles = []; - if ($rectorRecipeConfigFile !== null) { - $configFiles[] = $rectorRecipeConfigFile; - } - return new BootstrapConfigs($mainConfigFile, $configFiles); - } - private function resolveRectorRecipeConfig(ArgvInput $argvInput) : ?string - { - if ($argvInput->getFirstArgument() !== 'generate') { - return null; - } - // autoload rector recipe file if present, just for \Rector\RectorGenerator\Command\GenerateCommand - $rectorRecipeFilePath = \getcwd() . '/rector-recipe.php'; - if (!\file_exists($rectorRecipeFilePath)) { - return null; - } - return $rectorRecipeFilePath; + return new BootstrapConfigs($mainConfigFile, []); } private function resolveFromInput(ArgvInput $argvInput) : ?string { diff --git a/vendor/rector/rector/src/Bridge/SetProviderCollector.php b/vendor/rector/rector/src/Bridge/SetProviderCollector.php new file mode 100644 index 000000000..8a6d3adf9 --- /dev/null +++ b/vendor/rector/rector/src/Bridge/SetProviderCollector.php @@ -0,0 +1,60 @@ +setProviders = \array_merge($setProviders, $extraSetProviders); + } + /** + * @return array + */ + public function provide() : array + { + return $this->setProviders; + } + /** + * @return array + */ + public function provideSets() : array + { + $sets = []; + foreach ($this->setProviders as $setProvider) { + $sets = \array_merge($sets, $setProvider->provide()); + } + return $sets; + } +} diff --git a/vendor/rector/rector/src/Bridge/SetRectorsResolver.php b/vendor/rector/rector/src/Bridge/SetRectorsResolver.php new file mode 100644 index 000000000..dfd5634d3 --- /dev/null +++ b/vendor/rector/rector/src/Bridge/SetRectorsResolver.php @@ -0,0 +1,35 @@ +> + */ + public function resolveFromFilePath(string $configFilePath) : array + { + Assert::fileExists($configFilePath); + $rectorConfig = new RectorConfig(); + /** @var callable $configCallable */ + $configCallable = (require $configFilePath); + $configCallable($rectorConfig); + // get tagged class-names + $tagsReflectionProperty = new ReflectionProperty($rectorConfig, 'tags'); + $tagsReflectionProperty->setAccessible(\true); + $tags = $tagsReflectionProperty->getValue($rectorConfig); + $rectorClasses = $tags[RectorInterface::class] ?? []; + \sort($rectorClasses); + return \array_unique($rectorClasses); + } +} diff --git a/vendor/rector/rector/src/Caching/Cache.php b/vendor/rector/rector/src/Caching/Cache.php index 1bebddbb3..c3f4c7983 100644 --- a/vendor/rector/rector/src/Caching/Cache.php +++ b/vendor/rector/rector/src/Caching/Cache.php @@ -4,6 +4,7 @@ namespace Rector\Caching; use Rector\Caching\Contract\ValueObject\Storage\CacheStorageInterface; +use Rector\Caching\Enum\CacheKey; final class Cache { /** @@ -16,6 +17,7 @@ public function __construct(CacheStorageInterface $cacheStorage) $this->cacheStorage = $cacheStorage; } /** + * @param CacheKey::* $variableKey * @return mixed|null */ public function load(string $key, string $variableKey) @@ -23,6 +25,7 @@ public function load(string $key, string $variableKey) return $this->cacheStorage->load($key, $variableKey); } /** + * @param CacheKey::* $variableKey * @param mixed $data */ public function save(string $key, string $variableKey, $data) : void diff --git a/vendor/rector/rector/src/Caching/CacheFactory.php b/vendor/rector/rector/src/Caching/CacheFactory.php index 713e165c9..90a716485 100644 --- a/vendor/rector/rector/src/Caching/CacheFactory.php +++ b/vendor/rector/rector/src/Caching/CacheFactory.php @@ -7,7 +7,7 @@ use Rector\Caching\ValueObject\Storage\MemoryCacheStorage; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; -use RectorPrefix202405\Symfony\Component\Filesystem\Filesystem; +use RectorPrefix202410\Symfony\Component\Filesystem\Filesystem; final class CacheFactory { /** diff --git a/vendor/rector/rector/src/Caching/UnchangedFilesFilter.php b/vendor/rector/rector/src/Caching/UnchangedFilesFilter.php index 03dc4aaea..595ba65cf 100644 --- a/vendor/rector/rector/src/Caching/UnchangedFilesFilter.php +++ b/vendor/rector/rector/src/Caching/UnchangedFilesFilter.php @@ -19,9 +19,10 @@ public function __construct(ChangedFilesDetector $changedFilesDetector) * @param string[] $filePaths * @return string[] */ - public function filterFileInfos(array $filePaths) : array + public function filterFilePaths(array $filePaths) : array { $changedFileInfos = []; + $filePaths = \array_unique($filePaths); foreach ($filePaths as $filePath) { if (!$this->changedFilesDetector->hasFileChanged($filePath)) { continue; @@ -29,6 +30,6 @@ public function filterFileInfos(array $filePaths) : array $changedFileInfos[] = $filePath; $this->changedFilesDetector->invalidateFile($filePath); } - return \array_unique($changedFileInfos); + return $changedFileInfos; } } diff --git a/vendor/rector/rector/src/Caching/ValueObject/Storage/FileCacheStorage.php b/vendor/rector/rector/src/Caching/ValueObject/Storage/FileCacheStorage.php index 7ced392bf..b4035d2aa 100644 --- a/vendor/rector/rector/src/Caching/ValueObject/Storage/FileCacheStorage.php +++ b/vendor/rector/rector/src/Caching/ValueObject/Storage/FileCacheStorage.php @@ -4,8 +4,8 @@ namespace Rector\Caching\ValueObject\Storage; use FilesystemIterator; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Random; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Random; use Rector\Caching\Contract\ValueObject\Storage\CacheStorageInterface; use Rector\Caching\ValueObject\CacheFilePaths; use Rector\Caching\ValueObject\CacheItem; @@ -26,7 +26,7 @@ final class FileCacheStorage implements CacheStorageInterface * @var \Symfony\Component\Filesystem\Filesystem */ private $filesystem; - public function __construct(string $directory, \RectorPrefix202405\Symfony\Component\Filesystem\Filesystem $filesystem) + public function __construct(string $directory, \RectorPrefix202410\Symfony\Component\Filesystem\Filesystem $filesystem) { $this->directory = $directory; $this->filesystem = $filesystem; diff --git a/vendor/rector/rector/src/ChangesReporting/Annotation/AnnotationExtractor.php b/vendor/rector/rector/src/ChangesReporting/Annotation/AnnotationExtractor.php deleted file mode 100644 index cfcd28505..000000000 --- a/vendor/rector/rector/src/ChangesReporting/Annotation/AnnotationExtractor.php +++ /dev/null @@ -1,30 +0,0 @@ - $className - */ - public function extractAnnotationFromClass(string $className, string $annotation) : ?string - { - $reflectionClass = new ReflectionClass($className); - $docComment = $reflectionClass->getDocComment(); - if (!\is_string($docComment)) { - return null; - } - // @see https://3v4l.org/ouYfB - // uses 'r?\n' instead of '$' because windows compat - $pattern = '#' . \preg_quote($annotation, '#') . '\\s+(?.*?)\\r?\\n#m'; - $matches = Strings::match($docComment, $pattern); - return $matches['content'] ?? null; - } -} diff --git a/vendor/rector/rector/src/ChangesReporting/Annotation/RectorsChangelogResolver.php b/vendor/rector/rector/src/ChangesReporting/Annotation/RectorsChangelogResolver.php deleted file mode 100644 index 8b5788fc5..000000000 --- a/vendor/rector/rector/src/ChangesReporting/Annotation/RectorsChangelogResolver.php +++ /dev/null @@ -1,40 +0,0 @@ -annotationExtractor = $annotationExtractor; - } - /** - * @param array> $rectorClasses - * @return array - */ - public function resolve(array $rectorClasses) : array - { - $rectorClassesToChangelogUrls = $this->resolveIncludingMissing($rectorClasses); - return \array_filter($rectorClassesToChangelogUrls); - } - /** - * @param array> $rectorClasses - * @return array - */ - public function resolveIncludingMissing(array $rectorClasses) : array - { - $rectorClassesToChangelogUrls = []; - foreach ($rectorClasses as $rectorClass) { - $changelogUrl = $this->annotationExtractor->extractAnnotationFromClass($rectorClass, '@changelog'); - $rectorClassesToChangelogUrls[$rectorClass] = $changelogUrl; - } - return $rectorClassesToChangelogUrls; - } -} diff --git a/vendor/rector/rector/src/ChangesReporting/Output/ConsoleOutputFormatter.php b/vendor/rector/rector/src/ChangesReporting/Output/ConsoleOutputFormatter.php index 6aee11132..b6cf89ebf 100644 --- a/vendor/rector/rector/src/ChangesReporting/Output/ConsoleOutputFormatter.php +++ b/vendor/rector/rector/src/ChangesReporting/Output/ConsoleOutputFormatter.php @@ -3,14 +3,13 @@ declare (strict_types=1); namespace Rector\ChangesReporting\Output; -use RectorPrefix202405\Nette\Utils\Strings; -use Rector\ChangesReporting\Annotation\RectorsChangelogResolver; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\ChangesReporting\Contract\Output\OutputFormatterInterface; use Rector\ValueObject\Configuration; use Rector\ValueObject\Error\SystemError; use Rector\ValueObject\ProcessResult; use Rector\ValueObject\Reporting\FileDiff; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; final class ConsoleOutputFormatter implements OutputFormatterInterface { /** @@ -18,11 +17,6 @@ final class ConsoleOutputFormatter implements OutputFormatterInterface * @var \Symfony\Component\Console\Style\SymfonyStyle */ private $symfonyStyle; - /** - * @readonly - * @var \Rector\ChangesReporting\Annotation\RectorsChangelogResolver - */ - private $rectorsChangelogResolver; /** * @var string */ @@ -32,17 +26,16 @@ final class ConsoleOutputFormatter implements OutputFormatterInterface * @see https://regex101.com/r/q8I66g/1 */ private const ON_LINE_REGEX = '# on line #'; - public function __construct(SymfonyStyle $symfonyStyle, RectorsChangelogResolver $rectorsChangelogResolver) + public function __construct(SymfonyStyle $symfonyStyle) { $this->symfonyStyle = $symfonyStyle; - $this->rectorsChangelogResolver = $rectorsChangelogResolver; } public function report(ProcessResult $processResult, Configuration $configuration) : void { if ($configuration->shouldShowDiffs()) { - $this->reportFileDiffs($processResult->getFileDiffs()); + $this->reportFileDiffs($processResult->getFileDiffs(), $configuration->isReportingWithRealPath()); } - $this->reportErrors($processResult->getSystemErrors()); + $this->reportErrors($processResult->getSystemErrors(), $configuration->isReportingWithRealPath()); if ($processResult->getSystemErrors() !== []) { return; } @@ -60,7 +53,7 @@ public function getName() : string /** * @param FileDiff[] $fileDiffs */ - private function reportFileDiffs(array $fileDiffs) : void + private function reportFileDiffs(array $fileDiffs, bool $absoluteFilePath) : void { if (\count($fileDiffs) <= 0) { return; @@ -71,20 +64,19 @@ private function reportFileDiffs(array $fileDiffs) : void $this->symfonyStyle->title($message); $i = 0; foreach ($fileDiffs as $fileDiff) { - $relativeFilePath = $fileDiff->getRelativeFilePath(); + $filePath = $absoluteFilePath ? $fileDiff->getAbsoluteFilePath() ?? '' : $fileDiff->getRelativeFilePath(); // append line number for faster file jump in diff $firstLineNumber = $fileDiff->getFirstLineNumber(); if ($firstLineNumber !== null) { - $relativeFilePath .= ':' . $firstLineNumber; + $filePath .= ':' . $firstLineNumber; } - $message = \sprintf('%d) %s', ++$i, $relativeFilePath); + $message = \sprintf('%d) %s', ++$i, $filePath); $this->symfonyStyle->writeln($message); $this->symfonyStyle->newLine(); $this->symfonyStyle->writeln($fileDiff->getDiffConsoleFormatted()); - $rectorsChangelogsLines = $this->createRectorChangelogLines($fileDiff); if ($fileDiff->getRectorChanges() !== []) { $this->symfonyStyle->writeln('Applied rules:'); - $this->symfonyStyle->listing($rectorsChangelogsLines); + $this->symfonyStyle->listing($fileDiff->getRectorShortClasses()); $this->symfonyStyle->newLine(); } } @@ -92,12 +84,13 @@ private function reportFileDiffs(array $fileDiffs) : void /** * @param SystemError[] $errors */ - private function reportErrors(array $errors) : void + private function reportErrors(array $errors, bool $absoluteFilePath) : void { foreach ($errors as $error) { $errorMessage = $error->getMessage(); $errorMessage = $this->normalizePathsToRelativeWithLine($errorMessage); - $message = \sprintf('Could not process %s%s, due to: %s"%s".', $error->getFile() !== null ? '"' . $error->getFile() . '" file' : 'some files', $error->getRectorClass() !== null ? ' by "' . $error->getRectorClass() . '"' : '', \PHP_EOL, $errorMessage); + $filePath = $absoluteFilePath ? $error->getAbsoluteFilePath() : $error->getRelativeFilePath(); + $message = \sprintf('Could not process %s%s, due to: %s"%s".', $filePath !== null ? '"' . $filePath . '" file' : 'some files', $error->getRectorClass() !== null ? ' by "' . $error->getRectorClass() . '"' : '', \PHP_EOL, $errorMessage); if ($error->getLine() !== null) { $message .= ' On line: ' . $error->getLine(); } @@ -116,19 +109,6 @@ private function createSuccessMessage(ProcessResult $processResult, Configuratio if ($changeCount === 0) { return 'Rector is done!'; } - return \sprintf('%d file%s %s by Rector', $changeCount, $changeCount > 1 ? 's' : '', $configuration->isDryRun() ? 'would have changed (dry-run)' : ($changeCount === 1 ? 'has' : 'have') . ' been changed'); - } - /** - * @return string[] - */ - private function createRectorChangelogLines(FileDiff $fileDiff) : array - { - $rectorsChangelogs = $this->rectorsChangelogResolver->resolveIncludingMissing($fileDiff->getRectorClasses()); - $rectorsChangelogsLines = []; - foreach ($rectorsChangelogs as $rectorClass => $changelog) { - $rectorShortClass = (string) Strings::after($rectorClass, '\\', -1); - $rectorsChangelogsLines[] = $changelog === null ? $rectorShortClass : $rectorShortClass . ' (' . $changelog . ')'; - } - return $rectorsChangelogsLines; + return \sprintf('%d file%s %s by Rector', $changeCount, $changeCount > 1 ? 's' : '', $configuration->isDryRun() ? 'would have been changed (dry-run)' : ($changeCount === 1 ? 'has' : 'have') . ' been changed'); } } diff --git a/vendor/rector/rector/src/ChangesReporting/Output/JsonOutputFormatter.php b/vendor/rector/rector/src/ChangesReporting/Output/JsonOutputFormatter.php index 869eae4ad..ce190ce93 100644 --- a/vendor/rector/rector/src/ChangesReporting/Output/JsonOutputFormatter.php +++ b/vendor/rector/rector/src/ChangesReporting/Output/JsonOutputFormatter.php @@ -3,8 +3,7 @@ declare (strict_types=1); namespace Rector\ChangesReporting\Output; -use RectorPrefix202405\Nette\Utils\Json; -use Rector\ChangesReporting\Annotation\RectorsChangelogResolver; +use RectorPrefix202410\Nette\Utils\Json; use Rector\ChangesReporting\Contract\Output\OutputFormatterInterface; use Rector\Parallel\ValueObject\Bridge; use Rector\ValueObject\Configuration; @@ -12,19 +11,10 @@ use Rector\ValueObject\ProcessResult; final class JsonOutputFormatter implements OutputFormatterInterface { - /** - * @readonly - * @var \Rector\ChangesReporting\Annotation\RectorsChangelogResolver - */ - private $rectorsChangelogResolver; /** * @var string */ public const NAME = 'json'; - public function __construct(RectorsChangelogResolver $rectorsChangelogResolver) - { - $this->rectorsChangelogResolver = $rectorsChangelogResolver; - } public function getName() : string { return self::NAME; @@ -35,15 +25,14 @@ public function report(ProcessResult $processResult, Configuration $configuratio $fileDiffs = $processResult->getFileDiffs(); \ksort($fileDiffs); foreach ($fileDiffs as $fileDiff) { - $relativeFilePath = $fileDiff->getRelativeFilePath(); - $appliedRectorsWithChangelog = $this->rectorsChangelogResolver->resolve($fileDiff->getRectorClasses()); - $errorsJson[Bridge::FILE_DIFFS][] = ['file' => $relativeFilePath, 'diff' => $fileDiff->getDiff(), 'applied_rectors' => $fileDiff->getRectorClasses(), 'applied_rectors_with_changelog' => $appliedRectorsWithChangelog]; + $filePath = $configuration->isReportingWithRealPath() ? $fileDiff->getAbsoluteFilePath() ?? '' : $fileDiff->getRelativeFilePath(); + $errorsJson[Bridge::FILE_DIFFS][] = ['file' => $filePath, 'diff' => $fileDiff->getDiff(), 'applied_rectors' => $fileDiff->getRectorClasses()]; // for Rector CI - $errorsJson['changed_files'][] = $relativeFilePath; + $errorsJson['changed_files'][] = $filePath; } $systemErrors = $processResult->getSystemErrors(); $errorsJson['totals']['errors'] = \count($systemErrors); - $errorsData = $this->createErrorsData($systemErrors); + $errorsData = $this->createErrorsData($systemErrors, $configuration->isReportingWithRealPath()); if ($errorsData !== []) { $errorsJson['errors'] = $errorsData; } @@ -54,11 +43,11 @@ public function report(ProcessResult $processResult, Configuration $configuratio * @param SystemError[] $errors * @return mixed[] */ - private function createErrorsData(array $errors) : array + private function createErrorsData(array $errors, bool $absoluteFilePath) : array { $errorsData = []; foreach ($errors as $error) { - $errorDataJson = ['message' => $error->getMessage(), 'file' => $error->getRelativeFilePath()]; + $errorDataJson = ['message' => $error->getMessage(), 'file' => $absoluteFilePath ? $error->getAbsoluteFilePath() : $error->getRelativeFilePath()]; if ($error->getRectorClass() !== null) { $errorDataJson['caused_by'] = $error->getRectorClass(); } diff --git a/vendor/rector/rector/src/ChangesReporting/ValueObject/RectorWithLineChange.php b/vendor/rector/rector/src/ChangesReporting/ValueObject/RectorWithLineChange.php index ac45ba83b..ac19bd23d 100644 --- a/vendor/rector/rector/src/ChangesReporting/ValueObject/RectorWithLineChange.php +++ b/vendor/rector/rector/src/ChangesReporting/ValueObject/RectorWithLineChange.php @@ -4,8 +4,8 @@ namespace Rector\ChangesReporting\ValueObject; use Rector\Contract\Rector\RectorInterface; -use RectorPrefix202405\Symplify\EasyParallel\Contract\SerializableInterface; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symplify\EasyParallel\Contract\SerializableInterface; +use RectorPrefix202410\Webmozart\Assert\Assert; final class RectorWithLineChange implements SerializableInterface { /** @@ -48,8 +48,9 @@ public function getRectorClass() : string * @param array $json * @return $this */ - public static function decode(array $json) : \RectorPrefix202405\Symplify\EasyParallel\Contract\SerializableInterface + public static function decode(array $json) : \RectorPrefix202410\Symplify\EasyParallel\Contract\SerializableInterface { + /** @var class-string $rectorClass */ $rectorClass = $json[self::KEY_RECTOR_CLASS]; Assert::string($rectorClass); $line = $json[self::KEY_LINE]; diff --git a/vendor/rector/rector/src/ChangesReporting/ValueObjectFactory/ErrorFactory.php b/vendor/rector/rector/src/ChangesReporting/ValueObjectFactory/ErrorFactory.php index 7114af22e..df2b6f8b6 100644 --- a/vendor/rector/rector/src/ChangesReporting/ValueObjectFactory/ErrorFactory.php +++ b/vendor/rector/rector/src/ChangesReporting/ValueObjectFactory/ErrorFactory.php @@ -4,30 +4,27 @@ namespace Rector\ChangesReporting\ValueObjectFactory; use PHPStan\AnalysedCodeException; -use Rector\Error\ExceptionCorrector; use Rector\FileSystem\FilePathHelper; use Rector\ValueObject\Error\SystemError; final class ErrorFactory { - /** - * @readonly - * @var \Rector\Error\ExceptionCorrector - */ - private $exceptionCorrector; /** * @readonly * @var \Rector\FileSystem\FilePathHelper */ private $filePathHelper; - public function __construct(ExceptionCorrector $exceptionCorrector, FilePathHelper $filePathHelper) + public function __construct(FilePathHelper $filePathHelper) { - $this->exceptionCorrector = $exceptionCorrector; $this->filePathHelper = $filePathHelper; } public function createAutoloadError(AnalysedCodeException $analysedCodeException, string $filePath) : SystemError { - $message = $this->exceptionCorrector->getAutoloadExceptionMessageAndAddLocation($analysedCodeException); + $message = $this->createExceptionMessage($analysedCodeException); $relativeFilePath = $this->filePathHelper->relativePath($filePath); return new SystemError($message, $relativeFilePath); } + private function createExceptionMessage(AnalysedCodeException $analysedCodeException) : string + { + return \sprintf('Analyze error: "%s". Include your files in "$rectorConfig->autoloadPaths([...]);" or "$rectorConfig->bootstrapFiles([...]);" in "rector.php" config.%sSee https://github.com/rectorphp/rector#configuration', $analysedCodeException->getMessage(), \PHP_EOL); + } } diff --git a/vendor/rector/rector/src/Composer/InstalledPackageResolver.php b/vendor/rector/rector/src/Composer/InstalledPackageResolver.php new file mode 100644 index 000000000..08753863c --- /dev/null +++ b/vendor/rector/rector/src/Composer/InstalledPackageResolver.php @@ -0,0 +1,43 @@ + + */ + private $resolvedInstalledPackages = []; + /** + * @return InstalledPackage[] + */ + public function resolve(string $projectDirectory) : array + { + // cache + if (isset($this->resolvedInstalledPackages[$projectDirectory])) { + return $this->resolvedInstalledPackages[$projectDirectory]; + } + Assert::directory($projectDirectory); + $installedPackagesFilePath = $projectDirectory . '/vendor/composer/installed.json'; + if (!\file_exists($installedPackagesFilePath)) { + throw new ShouldNotHappenException('The installed package json not found. Make sure you run `composer update` and "vendor/composer/installed.json" file exists'); + } + $installedPackageFileContents = FileSystem::read($installedPackagesFilePath); + $installedPackagesFilePath = Json::decode($installedPackageFileContents, \true); + $installedPackages = []; + foreach ($installedPackagesFilePath['packages'] as $installedPackage) { + $installedPackages[] = new InstalledPackage($installedPackage['name'], $installedPackage['version_normalized']); + } + $this->resolvedInstalledPackages[$projectDirectory] = $installedPackages; + return $installedPackages; + } +} diff --git a/vendor/rector/rector/src/Composer/ValueObject/InstalledPackage.php b/vendor/rector/rector/src/Composer/ValueObject/InstalledPackage.php new file mode 100644 index 000000000..333787701 --- /dev/null +++ b/vendor/rector/rector/src/Composer/ValueObject/InstalledPackage.php @@ -0,0 +1,31 @@ +name = $name; + $this->version = $version; + } + public function getName() : string + { + return $this->name; + } + public function getVersion() : string + { + return $this->version; + } +} diff --git a/vendor/rector/rector/src/Config/Level/CodeQualityLevel.php b/vendor/rector/rector/src/Config/Level/CodeQualityLevel.php new file mode 100644 index 000000000..da3c9318a --- /dev/null +++ b/vendor/rector/rector/src/Config/Level/CodeQualityLevel.php @@ -0,0 +1,130 @@ +> + */ + public const RULES = [CombinedAssignRector::class, SimplifyEmptyArrayCheckRector::class, ReplaceMultipleBooleanNotRector::class, ForeachToInArrayRector::class, SimplifyForeachToCoalescingRector::class, SimplifyFuncGetArgsCountRector::class, SimplifyInArrayValuesRector::class, SimplifyStrposLowerRector::class, SimplifyArraySearchRector::class, SimplifyConditionsRector::class, SimplifyIfNotNullReturnRector::class, SimplifyIfReturnBoolRector::class, UnnecessaryTernaryExpressionRector::class, RemoveExtraParametersRector::class, SimplifyDeMorganBinaryRector::class, SimplifyTautologyTernaryRector::class, SingleInArrayToCompareRector::class, SimplifyIfElseToTernaryRector::class, JoinStringConcatRector::class, ConsecutiveNullCompareReturnsToNullCoalesceQueueRector::class, ExplicitBoolCompareRector::class, CombineIfRector::class, UseIdenticalOverEqualWithSameTypeRector::class, SimplifyBoolIdenticalTrueRector::class, SimplifyRegexPatternRector::class, BooleanNotIdenticalToNotIdenticalRector::class, AndAssignsToSeparateLinesRector::class, CompactToVariablesRector::class, CompleteDynamicPropertiesRector::class, IsAWithStringWithThirdArgumentRector::class, StrlenZeroToIdenticalEmptyStringRector::class, ThrowWithPreviousExceptionRector::class, RemoveSoleValueSprintfRector::class, ShortenElseIfRector::class, ExplicitReturnNullRector::class, ArrayMergeOfNonArraysToSimpleArrayRector::class, ArrayKeyExistsTernaryThenValueToCoalescingRector::class, AbsolutizeRequireAndIncludePathRector::class, ChangeArrayPushToArrayAssignRector::class, ForRepeatedCountToOwnVariableRector::class, ForeachItemsAssignToEmptyArrayToAssignRector::class, InlineIfToExplicitIfRector::class, UnusedForeachValueToArrayKeysRector::class, CommonNotEqualRector::class, SetTypeToCastRector::class, LogicalToBooleanRector::class, VarToPublicPropertyRector::class, IssetOnPropertyObjectToPropertyExistsRector::class, NewStaticToNewSelfRector::class, UnwrapSprintfOneArgumentRector::class, SwitchNegatedTernaryRector::class, SingularSwitchToIfRector::class, SimplifyIfNullableReturnRector::class, FuncGetArgsToVariadicParamRector::class, CallUserFuncToMethodCallRector::class, CallUserFuncWithArrowFunctionToInlineRector::class, CountArrayToEmptyArrayComparisonRector::class, FlipTypeControlToUseExclusiveTypeRector::class, InlineArrayReturnAssignRector::class, InlineIsAInstanceOfRector::class, TernaryFalseExpressionToIfRector::class, InlineConstructorDefaultToPropertyRector::class, TernaryEmptyArrayArrayDimFetchToCoalesceRector::class, OptionalParametersAfterRequiredRector::class, SimplifyEmptyCheckOnEmptyArrayRector::class, SwitchTrueToIfRector::class, CleanupUnneededNullsafeOperatorRector::class, DisallowedEmptyRuleFixerRector::class, ConvertStaticPrivateConstantToSelfRector::class, LocallyCalledStaticMethodToNonStaticRector::class, NumberCompareToMaxFuncCallRector::class, CompleteMissingIfElseBracketRector::class, RemoveUselessIsObjectCheckRector::class, StaticToSelfStaticMethodCallOnFinalClassRector::class]; + /** + * @var array, mixed[]> + */ + public const RULES_WITH_CONFIGURATION = [RenameFunctionRector::class => [ + 'split' => 'explode', + 'join' => 'implode', + 'sizeof' => 'count', + # https://www.php.net/manual/en/aliases.php + 'chop' => 'rtrim', + 'doubleval' => 'floatval', + 'gzputs' => 'gzwrites', + 'fputs' => 'fwrite', + 'ini_alter' => 'ini_set', + 'is_double' => 'is_float', + 'is_integer' => 'is_int', + 'is_long' => 'is_int', + 'is_real' => 'is_float', + 'is_writeable' => 'is_writable', + 'key_exists' => 'array_key_exists', + 'pos' => 'current', + 'strchr' => 'strstr', + # mb + 'mbstrcut' => 'mb_strcut', + 'mbstrlen' => 'mb_strlen', + 'mbstrpos' => 'mb_strpos', + 'mbstrrpos' => 'mb_strrpos', + 'mbsubstr' => 'mb_substr', + ]]; +} diff --git a/vendor/rector/rector/src/Config/Level/DeadCodeLevel.php b/vendor/rector/rector/src/Config/Level/DeadCodeLevel.php index d9bf0c0ca..78c614e46 100644 --- a/vendor/rector/rector/src/Config/Level/DeadCodeLevel.php +++ b/vendor/rector/rector/src/Config/Level/DeadCodeLevel.php @@ -12,10 +12,12 @@ use Rector\DeadCode\Rector\Cast\RecastingRemovalRector; use Rector\DeadCode\Rector\ClassConst\RemoveUnusedPrivateClassConstantRector; use Rector\DeadCode\Rector\ClassMethod\RemoveEmptyClassMethodRector; +use Rector\DeadCode\Rector\ClassMethod\RemoveNullTagValueNodeRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedConstructorParamRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedPrivateMethodParameterRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedPrivateMethodRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedPromotedPropertyRector; +use Rector\DeadCode\Rector\ClassMethod\RemoveUnusedPublicMethodParameterRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUselessParamTagRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUselessReturnExprInConstructRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUselessReturnTagRector; @@ -90,6 +92,8 @@ final class DeadCodeLevel RemoveUselessReadOnlyTagRector::class, RemoveNonExistingVarAnnotationRector::class, RemoveUselessVarTagRector::class, + // prioritize safe belt on RemoveUseless*TagRector that registered previously first + RemoveNullTagValueNodeRector::class, RemovePhpVersionIdCheckRector::class, RemoveAlwaysTrueIfConditionRector::class, ReduceAlwaysFalseIfOrRector::class, @@ -107,6 +111,7 @@ final class DeadCodeLevel // removing methods could be risky if there is some magic loading them RemoveUnusedPromotedPropertyRector::class, RemoveUnusedPrivateMethodParameterRector::class, + RemoveUnusedPublicMethodParameterRector::class, RemoveUnusedPrivateMethodRector::class, RemoveUnreachableStatementRector::class, RemoveUnusedVariableAssignRector::class, diff --git a/vendor/rector/rector/src/Config/Level/TypeDeclarationLevel.php b/vendor/rector/rector/src/Config/Level/TypeDeclarationLevel.php index 2354f0581..b4346d94f 100644 --- a/vendor/rector/rector/src/Config/Level/TypeDeclarationLevel.php +++ b/vendor/rector/rector/src/Config/Level/TypeDeclarationLevel.php @@ -4,37 +4,48 @@ namespace Rector\Config\Level; use Rector\Contract\Rector\RectorInterface; +use Rector\Symfony\CodeQuality\Rector\ClassMethod\ResponseReturnTypeControllerActionRector; use Rector\TypeDeclaration\Rector\ArrowFunction\AddArrowFunctionReturnTypeRector; use Rector\TypeDeclaration\Rector\Class_\AddTestsVoidReturnTypeWhereNoReturnRector; use Rector\TypeDeclaration\Rector\Class_\ChildDoctrineRepositoryClassTypeRector; use Rector\TypeDeclaration\Rector\Class_\MergeDateTimePropertyTypeDeclarationRector; use Rector\TypeDeclaration\Rector\Class_\PropertyTypeFromStrictSetterGetterRector; use Rector\TypeDeclaration\Rector\Class_\ReturnTypeFromStrictTernaryRector; +use Rector\TypeDeclaration\Rector\Class_\TypedPropertyFromCreateMockAssignRector; +use Rector\TypeDeclaration\Rector\Class_\TypedPropertyFromJMSSerializerAttributeTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddParamTypeBasedOnPHPUnitDataProviderRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddParamTypeFromPropertyTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationBasedOnParentClassMethodRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddVoidReturnTypeWhereNoReturnRector; -use Rector\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromStrictScalarReturnsRector; +use Rector\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromBooleanConstReturnsRector; +use Rector\TypeDeclaration\Rector\ClassMethod\BoolReturnTypeFromBooleanStrictReturnsRector; +use Rector\TypeDeclaration\Rector\ClassMethod\NumericReturnTypeFromStrictReturnsRector; use Rector\TypeDeclaration\Rector\ClassMethod\NumericReturnTypeFromStrictScalarReturnsRector; use Rector\TypeDeclaration\Rector\ClassMethod\ParamTypeByMethodCallTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\ParamTypeByParentCallTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector; +use Rector\TypeDeclaration\Rector\ClassMethod\ReturnNullableTypeRector; +use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromMockObjectRector; +use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnCastRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnDirectArrayRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnNewRector; -use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictBoolReturnExprRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictConstantReturnRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictFluentReturnRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNativeCallRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictNewArrayRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictParamRector; -use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictScalarReturnExprRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedCallRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedPropertyRector; +use Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromSymfonySerializerRector; use Rector\TypeDeclaration\Rector\ClassMethod\ReturnUnionTypeRector; use Rector\TypeDeclaration\Rector\ClassMethod\StrictArrayParamDimFetchRector; use Rector\TypeDeclaration\Rector\ClassMethod\StrictStringParamConcatRector; +use Rector\TypeDeclaration\Rector\ClassMethod\StringReturnTypeFromStrictScalarReturnsRector; +use Rector\TypeDeclaration\Rector\ClassMethod\StringReturnTypeFromStrictStringReturnsRector; +use Rector\TypeDeclaration\Rector\Closure\AddClosureNeverReturnTypeRector; use Rector\TypeDeclaration\Rector\Closure\AddClosureVoidReturnTypeWhereNoReturnRector; +use Rector\TypeDeclaration\Rector\Closure\ClosureReturnTypeRector; use Rector\TypeDeclaration\Rector\Empty_\EmptyOnNullableObjectToInstanceOfRector; use Rector\TypeDeclaration\Rector\Function_\AddFunctionVoidReturnTypeWhereNoReturnRector; use Rector\TypeDeclaration\Rector\FunctionLike\AddParamTypeSplFixedArrayRector; @@ -51,31 +62,38 @@ final class TypeDeclarationLevel * @var array> */ public const RULES = [ - // php 7.0 - // start with closure first, as safest + // php 7.1, start with closure first, as safest AddClosureVoidReturnTypeWhereNoReturnRector::class, AddFunctionVoidReturnTypeWhereNoReturnRector::class, AddTestsVoidReturnTypeWhereNoReturnRector::class, + ReturnTypeFromMockObjectRector::class, + TypedPropertyFromCreateMockAssignRector::class, AddArrowFunctionReturnTypeRector::class, - ReturnTypeFromStrictConstantReturnRector::class, + BoolReturnTypeFromBooleanConstReturnsRector::class, ReturnTypeFromStrictNewArrayRector::class, - ReturnTypeFromStrictBoolReturnExprRector::class, + // scalar and array from constant + ReturnTypeFromStrictConstantReturnRector::class, + StringReturnTypeFromStrictScalarReturnsRector::class, NumericReturnTypeFromStrictScalarReturnsRector::class, - BoolReturnTypeFromStrictScalarReturnsRector::class, + BoolReturnTypeFromBooleanStrictReturnsRector::class, + StringReturnTypeFromStrictStringReturnsRector::class, + NumericReturnTypeFromStrictReturnsRector::class, ReturnTypeFromStrictTernaryRector::class, - ReturnTypeFromStrictScalarReturnExprRector::class, ReturnTypeFromReturnDirectArrayRector::class, + ResponseReturnTypeControllerActionRector::class, ReturnTypeFromReturnNewRector::class, + ReturnTypeFromReturnCastRector::class, + ReturnTypeFromSymfonySerializerRector::class, AddVoidReturnTypeWhereNoReturnRector::class, + ReturnTypeFromStrictTypedPropertyRector::class, + ReturnNullableTypeRector::class, // php 7.4 EmptyOnNullableObjectToInstanceOfRector::class, // php 7.4 TypedPropertyFromStrictConstructorRector::class, - ReturnTypeFromStrictTypedPropertyRector::class, AddParamTypeSplFixedArrayRector::class, AddReturnTypeDeclarationFromYieldsRector::class, AddParamTypeBasedOnPHPUnitDataProviderRector::class, - // php 7.4 TypedPropertyFromStrictSetUpRector::class, ReturnTypeFromStrictNativeCallRector::class, ReturnTypeFromStrictTypedCallRector::class, @@ -83,7 +101,11 @@ final class TypeDeclarationLevel // param AddMethodCallBasedStrictParamTypeRector::class, ParamTypeByParentCallTypeRector::class, + // multi types (nullable, union) ReturnUnionTypeRector::class, + // closures + AddClosureNeverReturnTypeRector::class, + ClosureReturnTypeRector::class, // more risky rules ReturnTypeFromStrictParamRector::class, AddParamTypeFromPropertyTypeRector::class, @@ -96,5 +118,6 @@ final class TypeDeclarationLevel ReturnNeverTypeRector::class, StrictArrayParamDimFetchRector::class, StrictStringParamConcatRector::class, + TypedPropertyFromJMSSerializerAttributeTypeRector::class, ]; } diff --git a/vendor/rector/rector/src/Config/RectorConfig.php b/vendor/rector/rector/src/Config/RectorConfig.php index 3a9102dd8..f52e772b6 100644 --- a/vendor/rector/rector/src/Config/RectorConfig.php +++ b/vendor/rector/rector/src/Config/RectorConfig.php @@ -3,12 +3,13 @@ declare (strict_types=1); namespace Rector\Config; -use RectorPrefix202405\Illuminate\Container\Container; +use RectorPrefix202410\Illuminate\Container\Container; use Rector\Caching\Contract\ValueObject\Storage\CacheStorageInterface; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Configuration\RectorConfigBuilder; use Rector\Contract\DependencyInjection\RelatedConfigInterface; +use Rector\Contract\DependencyInjection\ResetableInterface; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Contract\Rector\RectorInterface; use Rector\DependencyInjection\Laravel\ContainerMemento; @@ -17,24 +18,24 @@ use Rector\Validation\RectorConfigValidator; use Rector\ValueObject\PhpVersion; use Rector\ValueObject\PolyfillPackage; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\ArrayInput; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutput; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\ArrayInput; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutput; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @api */ final class RectorConfig extends Container { /** - * @var array, mixed[]>> + * @var array, mixed[]>> */ private $ruleConfigurations = []; /** * @var string[] */ - private $autotagInterfaces = [Command::class]; + private $autotagInterfaces = [Command::class, ResetableInterface::class]; public static function configure() : RectorConfigBuilder { return new RectorConfigBuilder(); @@ -331,4 +332,24 @@ public function singleton($abstract, $concrete = null) : void $this->tag($abstract, $autotagInterface); } } + public function reportingRealPath(bool $absolute = \true) : void + { + SimpleParameterProvider::setParameter(Option::ABSOLUTE_FILE_PATH, $absolute); + } + /** + * @internal Used only for bridge + * @return array, mixed> + */ + public function getRuleConfigurations() : array + { + return $this->ruleConfigurations; + } + /** + * @internal Used only for bridge + * @return array> + */ + public function getRectorClasses() : array + { + return $this->tags[RectorInterface::class] ?? []; + } } diff --git a/vendor/rector/rector/src/Configuration/ConfigInitializer.php b/vendor/rector/rector/src/Configuration/ConfigInitializer.php index 8278827c1..1f16a2090 100644 --- a/vendor/rector/rector/src/Configuration/ConfigInitializer.php +++ b/vendor/rector/rector/src/Configuration/ConfigInitializer.php @@ -3,13 +3,11 @@ declare (strict_types=1); namespace Rector\Configuration; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\FileSystem; use Rector\Contract\Rector\RectorInterface; use Rector\FileSystem\InitFilePathsResolver; -use Rector\Php\PhpVersionProvider; use Rector\PostRector\Contract\Rector\PostRectorInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; final class ConfigInitializer { /** @@ -27,20 +25,14 @@ final class ConfigInitializer * @var \Symfony\Component\Console\Style\SymfonyStyle */ private $symfonyStyle; - /** - * @readonly - * @var \Rector\Php\PhpVersionProvider - */ - private $phpVersionProvider; /** * @param RectorInterface[] $rectors */ - public function __construct(array $rectors, InitFilePathsResolver $initFilePathsResolver, SymfonyStyle $symfonyStyle, PhpVersionProvider $phpVersionProvider) + public function __construct(array $rectors, InitFilePathsResolver $initFilePathsResolver, SymfonyStyle $symfonyStyle) { $this->rectors = $rectors; $this->initFilePathsResolver = $initFilePathsResolver; $this->symfonyStyle = $symfonyStyle; - $this->phpVersionProvider = $phpVersionProvider; } public function createConfig(string $projectDirectory) : void { @@ -56,7 +48,6 @@ public function createConfig(string $projectDirectory) : void return; } $configContents = FileSystem::read(__DIR__ . '/../../templates/rector.php.dist'); - $configContents = $this->replacePhpLevelContents($configContents); $configContents = $this->replacePathsContents($configContents, $projectDirectory); FileSystem::write($commonRectorConfigPath, $configContents, null); $this->symfonyStyle->success('The config is added now. Re-run command to make Rector do the work!'); @@ -76,12 +67,6 @@ private function filterActiveRectors(array $rectors) : array return !$rector instanceof PostRectorInterface; }); } - private function replacePhpLevelContents(string $rectorPhpTemplateContents) : string - { - $fullPHPVersion = (string) $this->phpVersionProvider->provide(); - $phpVersion = Strings::substring($fullPHPVersion, 0, 1) . Strings::substring($fullPHPVersion, 2, 1); - return \str_replace('LevelSetList::UP_TO_PHP_XY', 'LevelSetList::UP_TO_PHP_' . $phpVersion, $rectorPhpTemplateContents); - } private function replacePathsContents(string $rectorPhpTemplateContents, string $projectDirectory) : string { $projectPhpDirectories = $this->initFilePathsResolver->resolve($projectDirectory); diff --git a/vendor/rector/rector/src/Configuration/ConfigurationFactory.php b/vendor/rector/rector/src/Configuration/ConfigurationFactory.php index 9aa1727ce..f7c8d14ff 100644 --- a/vendor/rector/rector/src/Configuration/ConfigurationFactory.php +++ b/vendor/rector/rector/src/Configuration/ConfigurationFactory.php @@ -6,8 +6,8 @@ use Rector\ChangesReporting\Output\ConsoleOutputFormatter; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\ValueObject\Configuration; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; /** * @see \Rector\Tests\Configuration\ConfigurationFactoryTest */ @@ -29,7 +29,7 @@ public function __construct(SymfonyStyle $symfonyStyle) public function createForTests(array $paths) : Configuration { $fileExtensions = SimpleParameterProvider::provideArrayParameter(\Rector\Configuration\Option::FILE_EXTENSIONS); - return new Configuration(\false, \true, \false, ConsoleOutputFormatter::NAME, $fileExtensions, $paths, \true, null, null, \false, null, \false); + return new Configuration(\false, \true, \false, ConsoleOutputFormatter::NAME, $fileExtensions, $paths, \true, null, null, \false, null, \false, \false); } /** * Needs to run in the start of the life cycle, since the rest of workflow uses it. @@ -47,8 +47,13 @@ public function createFromInput(InputInterface $input) : Configuration $parallelPort = (string) $input->getOption(\Rector\Configuration\Option::PARALLEL_PORT); $parallelIdentifier = (string) $input->getOption(\Rector\Configuration\Option::PARALLEL_IDENTIFIER); $isDebug = (bool) $input->getOption(\Rector\Configuration\Option::DEBUG); + // using debug disables parallel, so emitting exception is straightforward and easier to debug + if ($isDebug) { + $isParallel = \false; + } $memoryLimit = $this->resolveMemoryLimit($input); - return new Configuration($isDryRun, $showProgressBar, $shouldClearCache, $outputFormat, $fileExtensions, $paths, $showDiffs, $parallelPort, $parallelIdentifier, $isParallel, $memoryLimit, $isDebug); + $isReportingWithRealPath = SimpleParameterProvider::provideBoolParameter(\Rector\Configuration\Option::ABSOLUTE_FILE_PATH); + return new Configuration($isDryRun, $showProgressBar, $shouldClearCache, $outputFormat, $fileExtensions, $paths, $showDiffs, $parallelPort, $parallelIdentifier, $isParallel, $memoryLimit, $isDebug, $isReportingWithRealPath); } private function shouldShowProgressBar(InputInterface $input, string $outputFormat) : bool { diff --git a/vendor/rector/rector/src/Configuration/Deprecation/Contract/DeprecatedInterface.php b/vendor/rector/rector/src/Configuration/Deprecation/Contract/DeprecatedInterface.php new file mode 100644 index 000000000..42df7d888 --- /dev/null +++ b/vendor/rector/rector/src/Configuration/Deprecation/Contract/DeprecatedInterface.php @@ -0,0 +1,14 @@ += 0 on %s', $methodName)); + Assert::allIsAOf($availableRules, RectorInterface::class); $rulesCount = \count($availableRules); - Assert::range($level, 0, $rulesCount - 1, 'Level %s is not available "' . $methodName . '" method. Pick one between %2$s (lowest) and %3$s (highest).'); + if ($availableRules === []) { + throw new ShouldNotHappenException(\sprintf('There are no available rules in "%s()", define the available rules first', $methodName)); + } + // start with 0 + $maxLevel = $rulesCount - 1; + if ($level > $maxLevel) { + $level = $maxLevel; + } $levelRules = []; for ($i = 0; $i <= $level; ++$i) { $levelRules[] = $availableRules[$i]; diff --git a/vendor/rector/rector/src/Configuration/Option.php b/vendor/rector/rector/src/Configuration/Option.php index cd7197cbf..2047e8d70 100644 --- a/vendor/rector/rector/src/Configuration/Option.php +++ b/vendor/rector/rector/src/Configuration/Option.php @@ -200,4 +200,20 @@ final class Option * @var string */ public const REGISTERED_RECTOR_SETS = 'registered_rector_sets'; + /** + * @internal For verify skipped rules exists in registered rules + * @var string + */ + public const SKIPPED_RECTOR_RULES = 'skipped_rector_rules'; + /** + * @internal For collect skipped start with short open tag files to be reported + * @var string + */ + public const SKIPPED_START_WITH_SHORT_OPEN_TAG_FILES = 'skipped_start_with_short_open_tag_files'; + /** + * @internal For reporting with absolute paths instead of relative paths (default behaviour) + * @see \Rector\Config\RectorConfig::reportingRealPath() + * @var string + */ + public const ABSOLUTE_FILE_PATH = 'absolute_file_path'; } diff --git a/vendor/rector/rector/src/Configuration/Parameter/SimpleParameterProvider.php b/vendor/rector/rector/src/Configuration/Parameter/SimpleParameterProvider.php index a207cf2e1..a0a749b74 100644 --- a/vendor/rector/rector/src/Configuration/Parameter/SimpleParameterProvider.php +++ b/vendor/rector/rector/src/Configuration/Parameter/SimpleParameterProvider.php @@ -5,7 +5,7 @@ use Rector\Configuration\Option; use Rector\Exception\ShouldNotHappenException; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @api */ diff --git a/vendor/rector/rector/src/Configuration/PhpLevelSetResolver.php b/vendor/rector/rector/src/Configuration/PhpLevelSetResolver.php index 6260e0f72..b92b984e9 100644 --- a/vendor/rector/rector/src/Configuration/PhpLevelSetResolver.php +++ b/vendor/rector/rector/src/Configuration/PhpLevelSetResolver.php @@ -3,42 +3,32 @@ declare (strict_types=1); namespace Rector\Configuration; -use Rector\Exception\Configuration\InvalidConfigurationException; -use Rector\Set\ValueObject\LevelSetList; +use Rector\Set\ValueObject\SetList; +use Rector\Tests\Configuration\PhpLevelSetResolverTest; use Rector\ValueObject\PhpVersion; +use RectorPrefix202410\Webmozart\Assert\Assert; +/** + * @see PhpLevelSetResolverTest + */ final class PhpLevelSetResolver { - public static function resolveFromPhpVersion(int $phpVersion) : string + /** + * @var array + */ + private const VERSION_LOWER_BOUND_CONFIGS = [PhpVersion::PHP_52 => SetList::PHP_52, PhpVersion::PHP_53 => SetList::PHP_53, PhpVersion::PHP_54 => SetList::PHP_54, PhpVersion::PHP_55 => SetList::PHP_55, PhpVersion::PHP_56 => SetList::PHP_56, PhpVersion::PHP_70 => SetList::PHP_70, PhpVersion::PHP_71 => SetList::PHP_71, PhpVersion::PHP_72 => SetList::PHP_72, PhpVersion::PHP_73 => SetList::PHP_73, PhpVersion::PHP_74 => SetList::PHP_74, PhpVersion::PHP_80 => SetList::PHP_80, PhpVersion::PHP_81 => SetList::PHP_81, PhpVersion::PHP_82 => SetList::PHP_82, PhpVersion::PHP_83 => SetList::PHP_83, PhpVersion::PHP_84 => SetList::PHP_84]; + /** + * @param PhpVersion::* $phpVersion + * @return string[] + */ + public static function resolveFromPhpVersion(int $phpVersion) : array { - switch ($phpVersion) { - case PhpVersion::PHP_53: - return LevelSetList::UP_TO_PHP_53; - case PhpVersion::PHP_54: - return LevelSetList::UP_TO_PHP_54; - case PhpVersion::PHP_55: - return LevelSetList::UP_TO_PHP_55; - case PhpVersion::PHP_56: - return LevelSetList::UP_TO_PHP_56; - case PhpVersion::PHP_70: - return LevelSetList::UP_TO_PHP_70; - case PhpVersion::PHP_71: - return LevelSetList::UP_TO_PHP_71; - case PhpVersion::PHP_72: - return LevelSetList::UP_TO_PHP_72; - case PhpVersion::PHP_73: - return LevelSetList::UP_TO_PHP_73; - case PhpVersion::PHP_74: - return LevelSetList::UP_TO_PHP_74; - case PhpVersion::PHP_80: - return LevelSetList::UP_TO_PHP_80; - case PhpVersion::PHP_81: - return LevelSetList::UP_TO_PHP_81; - case PhpVersion::PHP_82: - return LevelSetList::UP_TO_PHP_82; - case PhpVersion::PHP_83: - return LevelSetList::UP_TO_PHP_83; - default: - throw new InvalidConfigurationException(\sprintf('Could not resolve PHP level set list for "%s"', $phpVersion)); + $configFilePaths = []; + foreach (self::VERSION_LOWER_BOUND_CONFIGS as $versionLowerBound => $phpSetFilePath) { + if ($versionLowerBound <= $phpVersion) { + $configFilePaths[] = $phpSetFilePath; + } } + Assert::allFileExists($configFilePaths); + return $configFilePaths; } } diff --git a/vendor/rector/rector/src/Configuration/RectorConfigBuilder.php b/vendor/rector/rector/src/Configuration/RectorConfigBuilder.php index a2ca1f3de..f595a48a8 100644 --- a/vendor/rector/rector/src/Configuration/RectorConfigBuilder.php +++ b/vendor/rector/rector/src/Configuration/RectorConfigBuilder.php @@ -3,27 +3,33 @@ declare (strict_types=1); namespace Rector\Configuration; +use RectorPrefix202410\Nette\Utils\FileSystem; +use Rector\Bridge\SetProviderCollector; use Rector\Caching\Contract\ValueObject\Storage\CacheStorageInterface; +use Rector\Config\Level\CodeQualityLevel; use Rector\Config\Level\DeadCodeLevel; use Rector\Config\Level\TypeDeclarationLevel; use Rector\Config\RectorConfig; use Rector\Config\RegisteredService; use Rector\Configuration\Levels\LevelRulesResolver; +use Rector\Console\Notifier; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Contract\Rector\RectorInterface; use Rector\Doctrine\Set\DoctrineSetList; use Rector\Exception\Configuration\InvalidConfigurationException; -use Rector\Php\PhpVersionResolver\ProjectComposerJsonPhpVersionResolver; +use Rector\Php\PhpVersionResolver\ComposerJsonPhpVersionResolver; use Rector\PHPUnit\Set\PHPUnitSetList; -use Rector\Set\ValueObject\LevelSetList; +use Rector\Set\Enum\SetGroup; +use Rector\Set\SetManager; +use Rector\Set\ValueObject\DowngradeLevelSetList; use Rector\Set\ValueObject\SetList; use Rector\Symfony\Set\FOSRestSetList; use Rector\Symfony\Set\JMSSetList; use Rector\Symfony\Set\SensiolabsSetList; use Rector\Symfony\Set\SymfonySetList; use Rector\ValueObject\PhpVersion; -use RectorPrefix202405\Symfony\Component\Finder\Finder; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Finder\Finder; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @api */ @@ -147,6 +153,10 @@ final class RectorConfigBuilder * @var bool|null */ private $isDeadCodeLevelUsed; + /** + * @var bool|null + */ + private $isCodeQualityLevelUsed; /** * @var bool|null */ @@ -155,8 +165,33 @@ final class RectorConfigBuilder * @var RegisteredService[] */ private $registerServices = []; + /** + * @var array + */ + private $setGroups = []; + /** + * @var bool|null + */ + private $reportingRealPath; + /** + * @var string[] + */ + private $groupLoadedSets = []; + /** + * @api soon to be used + * @var bool|null + */ + private $isWithPhpSetsUsed; public function __invoke(RectorConfig $rectorConfig) : void { + // @experimental 2024-06 + if ($this->setGroups !== []) { + $setProviderCollector = $rectorConfig->make(SetProviderCollector::class); + $setManager = new SetManager($setProviderCollector); + $this->groupLoadedSets = $setManager->matchBySetGroups($this->setGroups); + } + // merge sets together + $this->sets = \array_merge($this->sets, $this->groupLoadedSets); $uniqueSets = \array_unique($this->sets); if (\in_array(SetList::TYPE_DECLARATION, $uniqueSets, \true) && $this->isTypeCoverageLevelUsed === \true) { throw new InvalidConfigurationException(\sprintf('Your config already enables type declarations set.%sRemove "->withTypeCoverageLevel()" as it only duplicates it, or remove type declaration set.', \PHP_EOL)); @@ -164,6 +199,9 @@ public function __invoke(RectorConfig $rectorConfig) : void if (\in_array(SetList::DEAD_CODE, $uniqueSets, \true) && $this->isDeadCodeLevelUsed === \true) { throw new InvalidConfigurationException(\sprintf('Your config already enables dead code set.%sRemove "->withDeadCodeLevel()" as it only duplicates it, or remove dead code set.', \PHP_EOL)); } + if (\in_array(SetList::CODE_QUALITY, $uniqueSets, \true) && $this->isCodeQualityLevelUsed === \true) { + throw new InvalidConfigurationException(\sprintf('Your config already enables code quality set.%sRemove "->withCodeQualityLevel()" as it only duplicates it, or remove code quality set.', \PHP_EOL)); + } if ($uniqueSets !== []) { $rectorConfig->sets($uniqueSets); } @@ -247,6 +285,9 @@ public function __invoke(RectorConfig $rectorConfig) : void if ($this->isFluentNewLine !== null) { $rectorConfig->newLineOnFluentCall($this->isFluentNewLine); } + if ($this->reportingRealPath !== null) { + $rectorConfig->reportingRealPath($this->reportingRealPath); + } } /** * @param string[] $paths @@ -277,9 +318,41 @@ public function withSkipPath(string $skipPath) : self */ public function withRootFiles() : self { + $gitIgnoreContents = []; + if (\file_exists(\getcwd() . '/.gitignore')) { + $gitIgnoreContents = \array_filter(\iterator_to_array(FileSystem::readLines(\getcwd() . '/.gitignore')), function (string $string) : bool { + $string = \trim($string); + // new line + if ($string === '') { + return \false; + } + // comment + if (\strncmp($string, '#', \strlen('#')) === 0) { + return \false; + } + // normalize + $string = \ltrim($string, '/\\'); + // files in deep directory, no need to be in lists + if (\strpos($string, '/') !== \false || \strpos($string, '\\') !== \false) { + return \false; + } + // only files + return \is_file($string); + }); + // make realpath collection + $gitIgnoreContents = \array_map(function (string $string) : string { + // normalize + $string = \ltrim($string, '/\\'); + return \realpath($string); + }, $gitIgnoreContents); + } $rootPhpFilesFinder = (new Finder())->files()->in(\getcwd())->depth(0)->name('*.php'); foreach ($rootPhpFilesFinder as $rootPhpFileFinder) { - $this->paths[] = $rootPhpFileFinder->getRealPath(); + $path = $rootPhpFileFinder->getRealPath(); + if (\in_array($path, $gitIgnoreContents, \true)) { + continue; + } + $this->paths[] = $path; } return $this; } @@ -294,89 +367,197 @@ public function withSets(array $sets) : self /** * Upgrade your annotations to attributes */ - public function withAttributesSets(bool $symfony = \false, bool $doctrine = \false, bool $mongoDb = \false, bool $gedmo = \false, bool $phpunit = \false, bool $fosRest = \false, bool $jms = \false, bool $sensiolabs = \false) : self + public function withAttributesSets(bool $symfony = \false, bool $doctrine = \false, bool $mongoDb = \false, bool $gedmo = \false, bool $phpunit = \false, bool $fosRest = \false, bool $jms = \false, bool $sensiolabs = \false, bool $all = \false) : self { - if ($symfony) { + if ($symfony || $all) { $this->sets[] = SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES; } - if ($doctrine) { + if ($doctrine || $all) { $this->sets[] = DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES; } - if ($mongoDb) { + if ($mongoDb || $all) { $this->sets[] = DoctrineSetList::MONGODB__ANNOTATIONS_TO_ATTRIBUTES; } - if ($gedmo) { + if ($gedmo || $all) { $this->sets[] = DoctrineSetList::GEDMO_ANNOTATIONS_TO_ATTRIBUTES; } - if ($phpunit) { + if ($phpunit || $all) { $this->sets[] = PHPUnitSetList::ANNOTATIONS_TO_ATTRIBUTES; } - if ($fosRest) { + if ($fosRest || $all) { $this->sets[] = FOSRestSetList::ANNOTATIONS_TO_ATTRIBUTES; } - if ($jms) { + if ($jms || $all) { $this->sets[] = JMSSetList::ANNOTATIONS_TO_ATTRIBUTES; } - if ($sensiolabs) { + if ($sensiolabs || $all) { $this->sets[] = SensiolabsSetList::ANNOTATIONS_TO_ATTRIBUTES; } return $this; } + /** + * make use of polyfill packages in composer.json + */ + public function withPhpPolyfill() : self + { + $this->sets[] = SetList::PHP_POLYFILLS; + return $this; + } /** * What PHP sets should be applied? By default the same version * as composer.json has is used */ public function withPhpSets(bool $php83 = \false, bool $php82 = \false, bool $php81 = \false, bool $php80 = \false, bool $php74 = \false, bool $php73 = \false, bool $php72 = \false, bool $php71 = \false, bool $php70 = \false, bool $php56 = \false, bool $php55 = \false, bool $php54 = \false, bool $php53 = \false, bool $php84 = \false) : self { + $this->isWithPhpSetsUsed = \true; $pickedArguments = \array_filter(\func_get_args()); + if ($pickedArguments !== []) { + Notifier::notifyWithPhpSetsNotSuitableForPHP80(); + } if (\count($pickedArguments) > 1) { throw new InvalidConfigurationException(\sprintf('Pick only one version target in "withPhpSets()". All rules up to this version will be used.%sTo use your composer.json PHP version, keep arguments empty.', \PHP_EOL)); } if ($pickedArguments === []) { - // use composer.json PHP version - $projectComposerJsonFilePath = \getcwd() . '/composer.json'; - if (\file_exists($projectComposerJsonFilePath)) { - $projectPhpVersion = ProjectComposerJsonPhpVersionResolver::resolve($projectComposerJsonFilePath); - if (\is_int($projectPhpVersion)) { - $this->sets[] = \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion($projectPhpVersion); - return $this; - } - } - throw new InvalidConfigurationException(\sprintf('We could not find local "composer.json" to determine your PHP version.%sPlease, fill the PHP version set in withPhpSets() manually.', \PHP_EOL)); + $projectPhpVersion = ComposerJsonPhpVersionResolver::resolveFromCwdOrFail(); + $phpLevelSets = \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion($projectPhpVersion); + $this->sets = \array_merge($this->sets, $phpLevelSets); + return $this; } if ($php53) { - $this->sets[] = LevelSetList::UP_TO_PHP_53; - } elseif ($php54) { - $this->sets[] = LevelSetList::UP_TO_PHP_54; - } elseif ($php55) { - $this->sets[] = LevelSetList::UP_TO_PHP_55; - } elseif ($php56) { - $this->sets[] = LevelSetList::UP_TO_PHP_56; - } elseif ($php70) { - $this->sets[] = LevelSetList::UP_TO_PHP_70; - } elseif ($php71) { - $this->sets[] = LevelSetList::UP_TO_PHP_71; - } elseif ($php72) { - $this->sets[] = LevelSetList::UP_TO_PHP_72; - } elseif ($php73) { - $this->sets[] = LevelSetList::UP_TO_PHP_73; - } elseif ($php74) { - $this->sets[] = LevelSetList::UP_TO_PHP_74; - } elseif ($php80) { - $this->sets[] = LevelSetList::UP_TO_PHP_80; + $this->withPhp53Sets(); + return $this; + } + if ($php54) { + $this->withPhp54Sets(); + return $this; + } + if ($php55) { + $this->withPhp55Sets(); + return $this; + } + if ($php56) { + $this->withPhp56Sets(); + return $this; + } + if ($php70) { + $this->withPhp70Sets(); + return $this; + } + if ($php71) { + $this->withPhp71Sets(); + return $this; + } + if ($php72) { + $this->withPhp72Sets(); + return $this; + } + if ($php73) { + $this->withPhp73Sets(); + return $this; + } + if ($php74) { + $this->withPhp74Sets(); + return $this; + } + if ($php80) { + $targetPhpVersion = PhpVersion::PHP_80; } elseif ($php81) { - $this->sets[] = LevelSetList::UP_TO_PHP_81; + $targetPhpVersion = PhpVersion::PHP_81; } elseif ($php82) { - $this->sets[] = LevelSetList::UP_TO_PHP_82; + $targetPhpVersion = PhpVersion::PHP_82; } elseif ($php83) { - $this->sets[] = LevelSetList::UP_TO_PHP_83; + $targetPhpVersion = PhpVersion::PHP_83; } elseif ($php84) { - $this->sets[] = LevelSetList::UP_TO_PHP_84; + $targetPhpVersion = PhpVersion::PHP_84; + } else { + throw new InvalidConfigurationException('Invalid PHP version set'); } + $phpLevelSets = \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion($targetPhpVersion); + $this->sets = \array_merge($this->sets, $phpLevelSets); + return $this; + } + /** + * Following methods are suitable for PHP 7.4 and lower, before named args + * Let's keep them without warning, in case Rector is run on both PHP 7.4 and PHP 8.0 in CI + */ + public function withPhp53Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_53)); + return $this; + } + public function withPhp54Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_54)); + return $this; + } + public function withPhp55Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_55)); return $this; } - public function withPreparedSets(bool $deadCode = \false, bool $codeQuality = \false, bool $codingStyle = \false, bool $typeDeclarations = \false, bool $privatization = \false, bool $naming = \false, bool $instanceOf = \false, bool $earlyReturn = \false, bool $strictBooleans = \false) : self + public function withPhp56Sets() : self { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_56)); + return $this; + } + public function withPhp70Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_70)); + return $this; + } + public function withPhp71Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_71)); + return $this; + } + public function withPhp72Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_72)); + return $this; + } + public function withPhp73Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_73)); + return $this; + } + public function withPhp74Sets() : self + { + $this->isWithPhpSetsUsed = \true; + $this->sets = \array_merge($this->sets, \Rector\Configuration\PhpLevelSetResolver::resolveFromPhpVersion(PhpVersion::PHP_74)); + return $this; + } + // there is no withPhp80Sets() and above, + // as we already use PHP 8.0 and should go with withPhpSets() instead + public function withPreparedSets( + bool $deadCode = \false, + bool $codeQuality = \false, + bool $codingStyle = \false, + bool $typeDeclarations = \false, + bool $privatization = \false, + bool $naming = \false, + bool $instanceOf = \false, + bool $earlyReturn = \false, + bool $strictBooleans = \false, + bool $carbon = \false, + bool $rectorPreset = \false, + bool $phpunitCodeQuality = \false, + bool $doctrineCodeQuality = \false, + bool $symfonyCodeQuality = \false, + bool $symfonyConfigs = \false, + // composer based + bool $twig = \false, + bool $phpunit = \false + ) : self + { + Notifier::notifyNotSuitableMethodForPHP74(__METHOD__); if ($deadCode) { $this->sets[] = SetList::DEAD_CODE; } @@ -404,6 +585,31 @@ public function withPreparedSets(bool $deadCode = \false, bool $codeQuality = \f if ($strictBooleans) { $this->sets[] = SetList::STRICT_BOOLEANS; } + if ($carbon) { + $this->sets[] = SetList::CARBON; + } + if ($rectorPreset) { + $this->sets[] = SetList::RECTOR_PRESET; + } + if ($phpunitCodeQuality) { + $this->sets[] = PHPUnitSetList::PHPUNIT_CODE_QUALITY; + } + if ($doctrineCodeQuality) { + $this->sets[] = DoctrineSetList::DOCTRINE_CODE_QUALITY; + } + if ($symfonyCodeQuality) { + $this->sets[] = SymfonySetList::SYMFONY_CODE_QUALITY; + } + if ($symfonyConfigs) { + $this->sets[] = SymfonySetList::CONFIGS; + } + // @experimental 2024-06 + if ($twig) { + $this->setGroups[] = SetGroup::TWIG; + } + if ($phpunit) { + $this->setGroups[] = SetGroup::PHPUNIT; + } return $this; } /** @@ -532,8 +738,9 @@ public function withSymfonyContainerPhp(string $symfonyContainerPhpFile) : self */ public function withDeadCodeLevel(int $level) : self { + Assert::natural($level); $this->isDeadCodeLevelUsed = \true; - $levelRules = LevelRulesResolver::resolve($level, DeadCodeLevel::RULES, 'RectorConfig::withDeadCodeLevel()'); + $levelRules = LevelRulesResolver::resolve($level, DeadCodeLevel::RULES, __METHOD__); $this->rules = \array_merge($this->rules, $levelRules); return $this; } @@ -543,11 +750,27 @@ public function withDeadCodeLevel(int $level) : self */ public function withTypeCoverageLevel(int $level) : self { + Assert::natural($level); $this->isTypeCoverageLevelUsed = \true; - $levelRules = LevelRulesResolver::resolve($level, TypeDeclarationLevel::RULES, 'RectorConfig::withTypeCoverageLevel()'); + $levelRules = LevelRulesResolver::resolve($level, TypeDeclarationLevel::RULES, __METHOD__); $this->rules = \array_merge($this->rules, $levelRules); return $this; } + /** + * @experimental Raise your code quality from the safest rules + * to more affecting ones, one level at a time + */ + public function withCodeQualityLevel(int $level) : self + { + Assert::natural($level); + $this->isCodeQualityLevelUsed = \true; + $levelRules = LevelRulesResolver::resolve($level, CodeQualityLevel::RULES, __METHOD__); + $this->rules = \array_merge($this->rules, $levelRules); + foreach (CodeQualityLevel::RULES_WITH_CONFIGURATION as $rectorClass => $configuration) { + $this->rulesWithConfigurations[$rectorClass][] = $configuration; + } + return $this; + } public function withFluentCallNewLine(bool $isFluentNewLine = \true) : self { $this->isFluentNewLine = $isFluentNewLine; @@ -558,4 +781,38 @@ public function registerService(string $className, ?string $alias = null, ?strin $this->registerServices[] = new RegisteredService($className, $alias, $tag); return $this; } + public function withDowngradeSets(bool $php82 = \false, bool $php81 = \false, bool $php80 = \false, bool $php74 = \false, bool $php73 = \false, bool $php72 = \false, bool $php71 = \false) : self + { + $pickedArguments = \array_filter(\func_get_args()); + if (\count($pickedArguments) !== 1) { + throw new InvalidConfigurationException('Pick only one PHP version target in "withDowngradeSets()". All rules down to this version will be used.'); + } + if ($php82) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_82; + } + if ($php81) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_81; + } + if ($php80) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_80; + } + if ($php74) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_74; + } + if ($php73) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_73; + } + if ($php72) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_72; + } + if ($php71) { + $this->sets[] = DowngradeLevelSetList::DOWN_TO_PHP_71; + } + return $this; + } + public function withRealPathReporting(bool $absolutePath = \true) : self + { + $this->reportingRealPath = $absolutePath; + return $this; + } } diff --git a/vendor/rector/rector/src/Configuration/RenamedClassesDataCollector.php b/vendor/rector/rector/src/Configuration/RenamedClassesDataCollector.php index 096f89189..f85573cd3 100644 --- a/vendor/rector/rector/src/Configuration/RenamedClassesDataCollector.php +++ b/vendor/rector/rector/src/Configuration/RenamedClassesDataCollector.php @@ -15,6 +15,10 @@ public function reset() : void { $this->oldToNewClasses = []; } + /** + * keep public modifier and use internally on matchClassName() method + * to keep API as on Configuration level + */ public function hasOldClass(string $oldClass) : bool { return isset($this->oldToNewClasses[$oldClass]); @@ -38,11 +42,10 @@ public function getOldToNewClasses() : array public function matchClassName(ObjectType $objectType) : ?ObjectType { $className = $objectType->getClassName(); - $renamedClassName = $this->oldToNewClasses[$className] ?? null; - if ($renamedClassName === null) { + if (!$this->hasOldClass($className)) { return null; } - return new ObjectType($renamedClassName); + return new ObjectType($this->oldToNewClasses[$className]); } /** * @return string[] diff --git a/vendor/rector/rector/src/Console/Command/CustomRuleCommand.php b/vendor/rector/rector/src/Console/Command/CustomRuleCommand.php index abe99ca62..e0feb26c2 100644 --- a/vendor/rector/rector/src/Console/Command/CustomRuleCommand.php +++ b/vendor/rector/rector/src/Console/Command/CustomRuleCommand.php @@ -7,16 +7,16 @@ use DOMElement; use DOMXPath; use Generator; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\Exception\ShouldNotHappenException; use Rector\FileSystem\JsonFileSystem; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; -use RectorPrefix202405\Symfony\Component\Finder\Finder; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Finder\Finder; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; final class CustomRuleCommand extends Command { /** diff --git a/vendor/rector/rector/src/Console/Command/DetectNodeCommand.php b/vendor/rector/rector/src/Console/Command/DetectNodeCommand.php deleted file mode 100644 index a599357d7..000000000 --- a/vendor/rector/rector/src/Console/Command/DetectNodeCommand.php +++ /dev/null @@ -1,70 +0,0 @@ -simplePhpParser = $simplePhpParser; - $this->nodePrinter = $nodePrinter; - $this->symfonyStyle = $symfonyStyle; - parent::__construct(); - } - protected function configure() : void - { - $this->setName('detect-node'); - $this->setDescription('Detects node for provided PHP content'); - $this->addOption('loop', null, InputOption::VALUE_NONE, 'Keep open so you can try multiple inputs'); - $this->setAliases(['dump-node']); - // @todo invoke https://github.com/matthiasnoback/php-ast-inspector/ - // $this->addOption('file'); - } - protected function execute(InputInterface $input, OutputInterface $output) : int - { - if ((bool) $input->getOption('loop')) { - while (\true) { - $this->askQuestionAndDumpNode(); - } - } - $this->askQuestionAndDumpNode(); - return self::SUCCESS; - } - private function askQuestionAndDumpNode() : void - { - $question = new Question('Write short PHP code snippet'); - $phpContents = $this->symfonyStyle->askQuestion($question); - try { - $nodes = $this->simplePhpParser->parseString($phpContents); - } catch (Throwable $exception) { - $this->symfonyStyle->warning('Provide valid PHP code'); - return; - } - $this->nodePrinter->printNodes($nodes); - } -} diff --git a/vendor/rector/rector/src/Console/Command/ListRulesCommand.php b/vendor/rector/rector/src/Console/Command/ListRulesCommand.php index 829de5b11..3688d629a 100644 --- a/vendor/rector/rector/src/Console/Command/ListRulesCommand.php +++ b/vendor/rector/rector/src/Console/Command/ListRulesCommand.php @@ -3,17 +3,17 @@ declare (strict_types=1); namespace Rector\Console\Command; -use RectorPrefix202405\Nette\Utils\Json; +use RectorPrefix202410\Nette\Utils\Json; use Rector\ChangesReporting\Output\ConsoleOutputFormatter; use Rector\Configuration\Option; use Rector\Contract\Rector\RectorInterface; use Rector\PostRector\Contract\Rector\PostRectorInterface; use Rector\Skipper\SkipCriteriaResolver\SkippedClassResolver; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; final class ListRulesCommand extends Command { /** diff --git a/vendor/rector/rector/src/Console/Command/ProcessCommand.php b/vendor/rector/rector/src/Console/Command/ProcessCommand.php index a1a01cc72..65316e1e2 100644 --- a/vendor/rector/rector/src/Console/Command/ProcessCommand.php +++ b/vendor/rector/rector/src/Console/Command/ProcessCommand.php @@ -14,15 +14,17 @@ use Rector\Console\Output\OutputFormatterCollector; use Rector\Console\ProcessConfigureDecorator; use Rector\Exception\ShouldNotHappenException; +use Rector\Reporting\DeprecatedRulesReporter; +use Rector\Reporting\MissConfigurationReporter; use Rector\StaticReflection\DynamicSourceLocatorDecorator; use Rector\Util\MemoryLimiter; use Rector\ValueObject\Configuration; use Rector\ValueObject\ProcessResult; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; final class ProcessCommand extends Command { /** @@ -70,7 +72,17 @@ final class ProcessCommand extends Command * @var \Rector\Configuration\ConfigurationFactory */ private $configurationFactory; - public function __construct(AdditionalAutoloader $additionalAutoloader, ChangedFilesDetector $changedFilesDetector, ConfigInitializer $configInitializer, ApplicationFileProcessor $applicationFileProcessor, DynamicSourceLocatorDecorator $dynamicSourceLocatorDecorator, OutputFormatterCollector $outputFormatterCollector, SymfonyStyle $symfonyStyle, MemoryLimiter $memoryLimiter, ConfigurationFactory $configurationFactory) + /** + * @readonly + * @var \Rector\Reporting\DeprecatedRulesReporter + */ + private $deprecatedRulesReporter; + /** + * @readonly + * @var \Rector\Reporting\MissConfigurationReporter + */ + private $missConfigurationReporter; + public function __construct(AdditionalAutoloader $additionalAutoloader, ChangedFilesDetector $changedFilesDetector, ConfigInitializer $configInitializer, ApplicationFileProcessor $applicationFileProcessor, DynamicSourceLocatorDecorator $dynamicSourceLocatorDecorator, OutputFormatterCollector $outputFormatterCollector, SymfonyStyle $symfonyStyle, MemoryLimiter $memoryLimiter, ConfigurationFactory $configurationFactory, DeprecatedRulesReporter $deprecatedRulesReporter, MissConfigurationReporter $missConfigurationReporter) { $this->additionalAutoloader = $additionalAutoloader; $this->changedFilesDetector = $changedFilesDetector; @@ -81,12 +93,32 @@ public function __construct(AdditionalAutoloader $additionalAutoloader, ChangedF $this->symfonyStyle = $symfonyStyle; $this->memoryLimiter = $memoryLimiter; $this->configurationFactory = $configurationFactory; + $this->deprecatedRulesReporter = $deprecatedRulesReporter; + $this->missConfigurationReporter = $missConfigurationReporter; parent::__construct(); } protected function configure() : void { $this->setName('process'); $this->setDescription('Upgrades or refactors source code with provided rectors'); + $this->setHelp(<<<'EOF' +The %command.name% command will run Rector main feature: + + %command.full_name% + +To specify a folder or a file, you can run: + + %command.full_name% src/Controller + +You can also dry run to see the changes that Rector will make with the --dry-run option: + + %command.full_name% src/Controller --dry-run + +It's also possible to get debug via the --debug option: + + %command.full_name% src/Controller --dry-run --debug +EOF +); ProcessConfigureDecorator::decorate($this); parent::configure(); } @@ -109,7 +141,14 @@ protected function execute(InputInterface $input, OutputInterface $output) : int // 1. add files and directories to static locator $this->dynamicSourceLocatorDecorator->addPaths($paths); if ($this->dynamicSourceLocatorDecorator->isPathsEmpty()) { - $this->symfonyStyle->error('The given paths do not match any files'); + // read from rector.php, no paths definition needs withPaths() config + if ($paths === []) { + $this->symfonyStyle->error('No paths definition in rector configuration, define paths: https://getrector.com/documentation/define-paths'); + return ExitCode::FAILURE; + } + // read from cli paths arguments, eg: vendor/bin/rector process A B C which A, B, and C not exists + $isSingular = \count($paths) === 1; + $this->symfonyStyle->error(\sprintf('The following given path%s do%s not match any file%s or director%s: %s%s', $isSingular ? '' : 's', $isSingular ? 'es' : '', $isSingular ? '' : 's', $isSingular ? 'y' : 'ies', \PHP_EOL . \PHP_EOL . ' - ', \implode(\PHP_EOL . ' - ', $paths))); return ExitCode::FAILURE; } // MAIN PHASE @@ -121,6 +160,9 @@ protected function execute(InputInterface $input, OutputInterface $output) : int $outputFormat = $configuration->getOutputFormat(); $outputFormatter = $this->outputFormatterCollector->getByName($outputFormat); $outputFormatter->report($processResult, $configuration); + $this->deprecatedRulesReporter->reportDeprecatedRules(); + $this->deprecatedRulesReporter->reportDeprecatedSkippedRules(); + $this->missConfigurationReporter->reportSkippedNeverRegisteredRules(); return $this->resolveReturnCode($processResult, $configuration); } protected function initialize(InputInterface $input, OutputInterface $output) : void diff --git a/vendor/rector/rector/src/Console/Command/SetupCICommand.php b/vendor/rector/rector/src/Console/Command/SetupCICommand.php index 5fedcc7b9..05334ee88 100644 --- a/vendor/rector/rector/src/Console/Command/SetupCICommand.php +++ b/vendor/rector/rector/src/Console/Command/SetupCICommand.php @@ -3,13 +3,13 @@ declare (strict_types=1); namespace Rector\Console\Command; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\OndraM\CiDetector\CiDetector; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\OndraM\CiDetector\CiDetector; use Rector\Git\RepositoryHelper; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; use function sprintf; final class SetupCICommand extends Command { diff --git a/vendor/rector/rector/src/Console/Command/WorkerCommand.php b/vendor/rector/rector/src/Console/Command/WorkerCommand.php index 4de75e4f0..f68632c93 100644 --- a/vendor/rector/rector/src/Console/Command/WorkerCommand.php +++ b/vendor/rector/rector/src/Console/Command/WorkerCommand.php @@ -3,11 +3,11 @@ declare (strict_types=1); namespace Rector\Console\Command; -use RectorPrefix202405\Clue\React\NDJson\Decoder; -use RectorPrefix202405\Clue\React\NDJson\Encoder; -use RectorPrefix202405\React\EventLoop\StreamSelectLoop; -use RectorPrefix202405\React\Socket\ConnectionInterface; -use RectorPrefix202405\React\Socket\TcpConnector; +use RectorPrefix202410\Clue\React\NDJson\Decoder; +use RectorPrefix202410\Clue\React\NDJson\Encoder; +use RectorPrefix202410\React\EventLoop\StreamSelectLoop; +use RectorPrefix202410\React\Socket\ConnectionInterface; +use RectorPrefix202410\React\Socket\TcpConnector; use Rector\Application\ApplicationFileProcessor; use Rector\Configuration\ConfigurationFactory; use Rector\Console\ProcessConfigureDecorator; @@ -16,14 +16,14 @@ use Rector\Util\MemoryLimiter; use Rector\ValueObject\Configuration; use Rector\ValueObject\Error\SystemError; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symplify\EasyParallel\Enum\Action; -use RectorPrefix202405\Symplify\EasyParallel\Enum\ReactCommand; -use RectorPrefix202405\Symplify\EasyParallel\Enum\ReactEvent; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symplify\EasyParallel\Enum\Action; +use RectorPrefix202410\Symplify\EasyParallel\Enum\ReactCommand; +use RectorPrefix202410\Symplify\EasyParallel\Enum\ReactEvent; use Throwable; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * Inspired at: https://github.com/phpstan/phpstan-src/commit/9124c66dcc55a222e21b1717ba5f60771f7dda92 * https://github.com/phpstan/phpstan-src/blob/c471c7b050e0929daf432288770de673b394a983/src/Command/WorkerCommand.php diff --git a/vendor/rector/rector/src/Console/ConsoleApplication.php b/vendor/rector/rector/src/Console/ConsoleApplication.php index febbdd1d3..2332bc9c9 100644 --- a/vendor/rector/rector/src/Console/ConsoleApplication.php +++ b/vendor/rector/rector/src/Console/ConsoleApplication.php @@ -3,17 +3,17 @@ declare (strict_types=1); namespace Rector\Console; -use RectorPrefix202405\Composer\XdebugHandler\XdebugHandler; +use RectorPrefix202410\Composer\XdebugHandler\XdebugHandler; use Rector\Application\VersionResolver; use Rector\ChangesReporting\Output\ConsoleOutputFormatter; use Rector\Configuration\Option; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Webmozart\Assert\Assert; final class ConsoleApplication extends Application { /** diff --git a/vendor/rector/rector/src/Console/ExitCode.php b/vendor/rector/rector/src/Console/ExitCode.php index 0c44f661d..10626eca5 100644 --- a/vendor/rector/rector/src/Console/ExitCode.php +++ b/vendor/rector/rector/src/Console/ExitCode.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Console; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; /** * @api */ diff --git a/vendor/rector/rector/src/Console/Formatter/ColorConsoleDiffFormatter.php b/vendor/rector/rector/src/Console/Formatter/ColorConsoleDiffFormatter.php index 52c1648b8..607858148 100644 --- a/vendor/rector/rector/src/Console/Formatter/ColorConsoleDiffFormatter.php +++ b/vendor/rector/rector/src/Console/Formatter/ColorConsoleDiffFormatter.php @@ -3,9 +3,9 @@ declare (strict_types=1); namespace Rector\Console\Formatter; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\Util\NewLineSplitter; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; /** * Inspired by @see https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/master/src/Differ/DiffConsoleFormatter.php to be * used as standalone class, without need to require whole package by Dariusz Rumiński diff --git a/vendor/rector/rector/src/Console/Formatter/ConsoleDiffer.php b/vendor/rector/rector/src/Console/Formatter/ConsoleDiffer.php index 0dbfc405f..6e61a9ffc 100644 --- a/vendor/rector/rector/src/Console/Formatter/ConsoleDiffer.php +++ b/vendor/rector/rector/src/Console/Formatter/ConsoleDiffer.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\Console\Formatter; -use RectorPrefix202405\SebastianBergmann\Diff\Differ; -use RectorPrefix202405\SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder; +use RectorPrefix202410\SebastianBergmann\Diff\Differ; +use RectorPrefix202410\SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder; final class ConsoleDiffer { /** diff --git a/vendor/rector/rector/src/Console/Notifier.php b/vendor/rector/rector/src/Console/Notifier.php new file mode 100644 index 000000000..68fabed69 --- /dev/null +++ b/vendor/rector/rector/src/Console/Notifier.php @@ -0,0 +1,31 @@ += 80000) { + return; + } + $message = \sprintf('The "%s()" method uses named arguments. Its suitable for PHP 8.0+. In lower PHP versions, use "withSets([...])" method instead', $calledMethod); + $symfonyStyle = new SymfonyStyle(new ArgvInput(), new ConsoleOutput()); + $symfonyStyle->warning($message); + \sleep(3); + } + public static function notifyWithPhpSetsNotSuitableForPHP80() : void + { + if (\PHP_VERSION_ID >= 80000) { + return; + } + $message = 'The "withPhpSets()" method uses named arguments. Its suitable for PHP 8.0+. Use more explicit "withPhp53Sets()" ... "withPhp74Sets()" in lower PHP versions instead.'; + $symfonyStyle = new SymfonyStyle(new ArgvInput(), new ConsoleOutput()); + $symfonyStyle->warning($message); + \sleep(3); + } +} diff --git a/vendor/rector/rector/src/Console/ProcessConfigureDecorator.php b/vendor/rector/rector/src/Console/ProcessConfigureDecorator.php index 475486441..2f648c161 100644 --- a/vendor/rector/rector/src/Console/ProcessConfigureDecorator.php +++ b/vendor/rector/rector/src/Console/ProcessConfigureDecorator.php @@ -5,9 +5,9 @@ use Rector\ChangesReporting\Output\ConsoleOutputFormatter; use Rector\Configuration\Option; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; final class ProcessConfigureDecorator { public static function decorate(Command $command) : void diff --git a/vendor/rector/rector/src/Console/Style/RectorStyle.php b/vendor/rector/rector/src/Console/Style/RectorStyle.php index cf47bedde..2a66df44b 100644 --- a/vendor/rector/rector/src/Console/Style/RectorStyle.php +++ b/vendor/rector/rector/src/Console/Style/RectorStyle.php @@ -3,12 +3,12 @@ declare (strict_types=1); namespace Rector\Console\Style; -use RectorPrefix202405\OndraM\CiDetector\CiDetector; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Helper\ProgressBar; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\OndraM\CiDetector\CiDetector; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Helper\ProgressBar; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; final class RectorStyle extends SymfonyStyle { /** diff --git a/vendor/rector/rector/src/Console/Style/SymfonyStyleFactory.php b/vendor/rector/rector/src/Console/Style/SymfonyStyleFactory.php index 7c4044fe7..e53788c43 100644 --- a/vendor/rector/rector/src/Console/Style/SymfonyStyleFactory.php +++ b/vendor/rector/rector/src/Console/Style/SymfonyStyleFactory.php @@ -4,11 +4,10 @@ namespace Rector\Console\Style; use Rector\Util\Reflection\PrivatesAccessor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Input\ArgvInput; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutput; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Input\ArgvInput; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutput; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; final class SymfonyStyleFactory { /** @@ -23,7 +22,7 @@ public function __construct(PrivatesAccessor $privatesAccessor) /** * @api */ - public function create() : SymfonyStyle + public function create() : \Rector\Console\Style\RectorStyle { // to prevent missing argv indexes if (!isset($_SERVER['argv'])) { diff --git a/vendor/rector/rector/src/DependencyInjection/Laravel/ContainerMemento.php b/vendor/rector/rector/src/DependencyInjection/Laravel/ContainerMemento.php index db0455d91..6e29f5120 100644 --- a/vendor/rector/rector/src/DependencyInjection/Laravel/ContainerMemento.php +++ b/vendor/rector/rector/src/DependencyInjection/Laravel/ContainerMemento.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\DependencyInjection\Laravel; -use RectorPrefix202405\Illuminate\Container\Container; +use RectorPrefix202410\Illuminate\Container\Container; use Rector\Util\Reflection\PrivatesAccessor; /** * Helper service to modify Laravel container diff --git a/vendor/rector/rector/src/DependencyInjection/LazyContainerFactory.php b/vendor/rector/rector/src/DependencyInjection/LazyContainerFactory.php index 0887fedb1..5cdc61f24 100644 --- a/vendor/rector/rector/src/DependencyInjection/LazyContainerFactory.php +++ b/vendor/rector/rector/src/DependencyInjection/LazyContainerFactory.php @@ -3,13 +3,12 @@ declare (strict_types=1); namespace Rector\DependencyInjection; -use RectorPrefix202405\Doctrine\Inflector\Inflector; -use RectorPrefix202405\Doctrine\Inflector\Rules\English\InflectorFactory; -use RectorPrefix202405\Illuminate\Container\Container; +use RectorPrefix202410\Doctrine\Inflector\Inflector; +use RectorPrefix202410\Doctrine\Inflector\Rules\English\InflectorFactory; +use RectorPrefix202410\Illuminate\Container\Container; use PhpParser\Lexer; use PHPStan\Analyser\NodeScopeResolver; use PHPStan\Analyser\ScopeFactory; -use PHPStan\File\FileHelper; use PHPStan\Parser\Parser; use PHPStan\PhpDoc\TypeNodeResolver; use PHPStan\PhpDocParser\Parser\ConstExprParser; @@ -18,9 +17,9 @@ use PHPStan\Reflection\ReflectionProvider; use Rector\Application\ChangedNodeScopeRefresher; use Rector\Application\FileProcessor; +use Rector\Application\Provider\CurrentFileProvider; use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface; use Rector\BetterPhpDocParser\Contract\PhpDocParser\PhpDocNodeDecoratorInterface; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocNodeMapper; use Rector\BetterPhpDocParser\PhpDocNodeVisitor\ArrayTypePhpDocNodeVisitor; use Rector\BetterPhpDocParser\PhpDocNodeVisitor\CallableTypePhpDocNodeVisitor; @@ -50,7 +49,6 @@ use Rector\Configuration\ConfigInitializer; use Rector\Configuration\RenamedClassesDataCollector; use Rector\Console\Command\CustomRuleCommand; -use Rector\Console\Command\DetectNodeCommand; use Rector\Console\Command\ListRulesCommand; use Rector\Console\Command\ProcessCommand; use Rector\Console\Command\SetupCICommand; @@ -79,7 +77,7 @@ use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\NodeTypeResolver\CastTypeResolver; use Rector\NodeTypeResolver\NodeTypeResolver\ClassAndInterfaceTypeResolver; -use Rector\NodeTypeResolver\NodeTypeResolver\ClassMethodOrClassConstTypeResolver; +use Rector\NodeTypeResolver\NodeTypeResolver\ClassConstFetchTypeResolver; use Rector\NodeTypeResolver\NodeTypeResolver\IdentifierTypeResolver; use Rector\NodeTypeResolver\NodeTypeResolver\NameTypeResolver; use Rector\NodeTypeResolver\NodeTypeResolver\NewTypeResolver; @@ -139,6 +137,7 @@ use Rector\PHPStanStaticTypeMapper\TypeMapper\HasOffsetValueTypeTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\HasPropertyTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\IntegerTypeMapper; +use Rector\PHPStanStaticTypeMapper\TypeMapper\IntersectionTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\IterableTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\MixedTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\NeverTypeMapper; @@ -150,26 +149,24 @@ use Rector\PHPStanStaticTypeMapper\TypeMapper\ParentStaticTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\ResourceTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\SelfObjectTypeMapper; +use Rector\PHPStanStaticTypeMapper\TypeMapper\StaticTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\StrictMixedTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\StringTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\ThisTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\TypeWithClassNameTypeMapper; +use Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper; use Rector\PHPStanStaticTypeMapper\TypeMapper\VoidTypeMapper; use Rector\PostRector\Application\PostFileProcessor; -use Rector\Provider\CurrentFileProvider; use Rector\Rector\AbstractRector; -use Rector\Skipper\Contract\SkipVoterInterface; use Rector\Skipper\Skipper\Skipper; -use Rector\Skipper\SkipVoter\ClassSkipVoter; use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface; use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface; use Rector\StaticTypeMapper\Mapper\PhpParserNodeMapper; -use Rector\StaticTypeMapper\Naming\NameScopeFactory; use Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper; -use Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper; -use Rector\StaticTypeMapper\PhpDocParser\IntersectionTypeMapper; -use Rector\StaticTypeMapper\PhpDocParser\NullableTypeMapper; -use Rector\StaticTypeMapper\PhpDocParser\UnionTypeMapper; +use Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper; +use Rector\StaticTypeMapper\PhpDocParser\IntersectionPhpDocTypeMapper; +use Rector\StaticTypeMapper\PhpDocParser\NullablePhpDocTypeMapper; +use Rector\StaticTypeMapper\PhpDocParser\UnionPhpDocTypeMapper; use Rector\StaticTypeMapper\PhpParser\ExprNodeMapper; use Rector\StaticTypeMapper\PhpParser\FullyQualifiedNodeMapper; use Rector\StaticTypeMapper\PhpParser\IdentifierNodeMapper; @@ -178,13 +175,10 @@ use Rector\StaticTypeMapper\PhpParser\NullableTypeNodeMapper; use Rector\StaticTypeMapper\PhpParser\StringNodeMapper; use Rector\StaticTypeMapper\PhpParser\UnionTypeNodeMapper; -use Rector\StaticTypeMapper\StaticTypeMapper; -use Rector\Utils\Command\MissingInSetCommand; -use Rector\Utils\Command\OutsideAnySetCommand; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Webmozart\Assert\Assert; final class LazyContainerFactory { /** @@ -206,7 +200,7 @@ final class LazyContainerFactory /** * @var array> */ - private const PHPDOC_TYPE_MAPPER_CLASSES = [IdentifierTypeMapper::class, IntersectionTypeMapper::class, NullableTypeMapper::class, UnionTypeMapper::class]; + private const PHPDOC_TYPE_MAPPER_CLASSES = [IdentifierPhpDocTypeMapper::class, IntersectionPhpDocTypeMapper::class, NullablePhpDocTypeMapper::class, UnionPhpDocTypeMapper::class]; /** * @var array> */ @@ -214,7 +208,7 @@ final class LazyContainerFactory /** * @var array> */ - private const TYPE_MAPPER_CLASSES = [AccessoryLiteralStringTypeMapper::class, AccessoryNonEmptyStringTypeMapper::class, AccessoryNonFalsyStringTypeMapper::class, AccessoryNumericStringTypeMapper::class, ArrayTypeMapper::class, BooleanTypeMapper::class, CallableTypeMapper::class, ClassStringTypeMapper::class, ClosureTypeMapper::class, ConditionalTypeForParameterMapper::class, ConditionalTypeMapper::class, FloatTypeMapper::class, GenericClassStringTypeMapper::class, HasMethodTypeMapper::class, HasOffsetTypeMapper::class, HasOffsetValueTypeTypeMapper::class, HasPropertyTypeMapper::class, IntegerTypeMapper::class, \Rector\PHPStanStaticTypeMapper\TypeMapper\IntersectionTypeMapper::class, IterableTypeMapper::class, MixedTypeMapper::class, NeverTypeMapper::class, NonEmptyArrayTypeMapper::class, NullTypeMapper::class, ObjectTypeMapper::class, ObjectWithoutClassTypeMapper::class, OversizedArrayTypeMapper::class, ParentStaticTypeMapper::class, ResourceTypeMapper::class, SelfObjectTypeMapper::class, \Rector\PHPStanStaticTypeMapper\TypeMapper\StaticTypeMapper::class, StrictMixedTypeMapper::class, StringTypeMapper::class, ThisTypeMapper::class, TypeWithClassNameTypeMapper::class, \Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper::class, VoidTypeMapper::class]; + private const TYPE_MAPPER_CLASSES = [AccessoryLiteralStringTypeMapper::class, AccessoryNonEmptyStringTypeMapper::class, AccessoryNonFalsyStringTypeMapper::class, AccessoryNumericStringTypeMapper::class, ArrayTypeMapper::class, BooleanTypeMapper::class, CallableTypeMapper::class, ClassStringTypeMapper::class, ClosureTypeMapper::class, ConditionalTypeForParameterMapper::class, ConditionalTypeMapper::class, FloatTypeMapper::class, GenericClassStringTypeMapper::class, HasMethodTypeMapper::class, HasOffsetTypeMapper::class, HasOffsetValueTypeTypeMapper::class, HasPropertyTypeMapper::class, IntegerTypeMapper::class, IntersectionTypeMapper::class, IterableTypeMapper::class, MixedTypeMapper::class, NeverTypeMapper::class, NonEmptyArrayTypeMapper::class, NullTypeMapper::class, ObjectTypeMapper::class, ObjectWithoutClassTypeMapper::class, OversizedArrayTypeMapper::class, ParentStaticTypeMapper::class, ResourceTypeMapper::class, SelfObjectTypeMapper::class, StaticTypeMapper::class, StrictMixedTypeMapper::class, StringTypeMapper::class, ThisTypeMapper::class, TypeWithClassNameTypeMapper::class, UnionTypeMapper::class, VoidTypeMapper::class]; /** * @var array> */ @@ -222,7 +216,7 @@ final class LazyContainerFactory /** * @var array */ - private const PUBLIC_PHPSTAN_SERVICE_TYPES = [ScopeFactory::class, TypeNodeResolver::class, FileHelper::class, NodeScopeResolver::class, ReflectionProvider::class, CachingVisitor::class]; + private const PUBLIC_PHPSTAN_SERVICE_TYPES = [ScopeFactory::class, TypeNodeResolver::class, NodeScopeResolver::class, ReflectionProvider::class, CachingVisitor::class]; /** * @var array> */ @@ -230,15 +224,11 @@ final class LazyContainerFactory /** * @var array> */ - private const NODE_TYPE_RESOLVER_CLASSES = [CastTypeResolver::class, StaticCallMethodCallTypeResolver::class, ClassAndInterfaceTypeResolver::class, ClassMethodOrClassConstTypeResolver::class, IdentifierTypeResolver::class, NameTypeResolver::class, NewTypeResolver::class, ParamTypeResolver::class, PropertyFetchTypeResolver::class, PropertyTypeResolver::class, ScalarTypeResolver::class, TraitTypeResolver::class]; + private const NODE_TYPE_RESOLVER_CLASSES = [CastTypeResolver::class, StaticCallMethodCallTypeResolver::class, ClassAndInterfaceTypeResolver::class, IdentifierTypeResolver::class, NameTypeResolver::class, NewTypeResolver::class, ParamTypeResolver::class, PropertyFetchTypeResolver::class, ClassConstFetchTypeResolver::class, PropertyTypeResolver::class, ScalarTypeResolver::class, TraitTypeResolver::class]; /** * @var array> */ private const PHP_PARSER_NODE_MAPPER_CLASSES = [FullyQualifiedNodeMapper::class, IdentifierNodeMapper::class, IntersectionTypeNodeMapper::class, NameNodeMapper::class, NullableTypeNodeMapper::class, StringNodeMapper::class, UnionTypeNodeMapper::class, ExprNodeMapper::class]; - /** - * @var array> - */ - private const SKIP_VOTER_CLASSES = [ClassSkipVoter::class]; /** * @var array> */ @@ -269,13 +259,7 @@ public function create() : RectorConfig $rectorConfig->singleton(SetupCICommand::class); $rectorConfig->singleton(ListRulesCommand::class); $rectorConfig->singleton(CustomRuleCommand::class); - $rectorConfig->singleton(DetectNodeCommand::class); $rectorConfig->when(ListRulesCommand::class)->needs('$rectors')->giveTagged(RectorInterface::class); - // dev - if (\class_exists(MissingInSetCommand::class)) { - $rectorConfig->singleton(MissingInSetCommand::class); - $rectorConfig->singleton(OutsideAnySetCommand::class); - } $rectorConfig->singleton(FileProcessor::class); $rectorConfig->singleton(PostFileProcessor::class); // phpdoc-parser @@ -289,9 +273,6 @@ public function create() : RectorConfig $phpStanServicesFactory = $container->make(PHPStanServicesFactory::class); return $phpStanServicesFactory->createDynamicSourceLocatorProvider(); }); - $rectorConfig->afterResolving(DynamicSourceLocatorProvider::class, static function (DynamicSourceLocatorProvider $dynamicSourceLocatorProvider, Container $container) : void { - $dynamicSourceLocatorProvider->autowire($container->make(ReflectionProvider::class)); - }); // resetables $rectorConfig->tag(DynamicSourceLocatorProvider::class, ResetableInterface::class); $rectorConfig->tag(RenamedClassesDataCollector::class, ResetableInterface::class); @@ -314,7 +295,7 @@ public function create() : RectorConfig $phpStanStaticTypeMapper = $container->make(PHPStanStaticTypeMapper::class); $conditionalTypeMapper->autowire($phpStanStaticTypeMapper); }); - $rectorConfig->afterResolving(\Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper::class, static function (\Rector\PHPStanStaticTypeMapper\TypeMapper\UnionTypeMapper $unionTypeMapper, Container $container) : void { + $rectorConfig->afterResolving(UnionTypeMapper::class, static function (UnionTypeMapper $unionTypeMapper, Container $container) : void { $phpStanStaticTypeMapper = $container->make(PHPStanStaticTypeMapper::class); $unionTypeMapper->autowire($phpStanStaticTypeMapper); }); @@ -324,8 +305,6 @@ public function create() : RectorConfig $rectorConfig->when(NodeTypeResolver::class)->needs('$nodeTypeResolvers')->giveTagged(NodeTypeResolverInterface::class); // node name resolvers $rectorConfig->when(NodeNameResolver::class)->needs('$nodeNameResolvers')->giveTagged(NodeNameResolverInterface::class); - $rectorConfig->when(Skipper::class)->needs('$skipVoters')->giveTagged(SkipVoterInterface::class); - $this->registerTagged($rectorConfig, self::SKIP_VOTER_CLASSES, SkipVoterInterface::class); $rectorConfig->when(AttributeGroupNamedArgumentManipulator::class)->needs('$converterAttributeDecorators')->giveTagged(ConverterAttributeDecoratorInterface::class); $this->registerTagged($rectorConfig, self::CONVERTER_ATTRIBUTE_DECORATOR_CLASSES, ConverterAttributeDecoratorInterface::class); $rectorConfig->afterResolving(AbstractRector::class, static function (AbstractRector $rector, Container $container) : void { @@ -359,9 +338,6 @@ public function create() : RectorConfig $annotationToAttributeMapper = $container->make(AnnotationToAttributeMapper::class); $arrayItemNodeAnnotationToAttributeMapper->autowire($annotationToAttributeMapper); }); - $rectorConfig->afterResolving(NameScopeFactory::class, static function (NameScopeFactory $nameScopeFactory, Container $container) : void { - $nameScopeFactory->autowire($container->make(PhpDocInfoFactory::class), $container->make(StaticTypeMapper::class)); - }); $rectorConfig->afterResolving(PlainValueParser::class, static function (PlainValueParser $plainValueParser, Container $container) : void { $plainValueParser->autowire($container->make(StaticDoctrineAnnotationParser::class), $container->make(ArrayParser::class)); }); diff --git a/vendor/rector/rector/src/DependencyInjection/RectorContainerFactory.php b/vendor/rector/rector/src/DependencyInjection/RectorContainerFactory.php index e337da8c7..dd6283ef3 100644 --- a/vendor/rector/rector/src/DependencyInjection/RectorContainerFactory.php +++ b/vendor/rector/rector/src/DependencyInjection/RectorContainerFactory.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\DependencyInjection; -use RectorPrefix202405\Illuminate\Container\Container; +use RectorPrefix202410\Illuminate\Container\Container; use Rector\Autoloading\BootstrapFilesIncluder; use Rector\Caching\Detector\ChangedFilesDetector; use Rector\ValueObject\Bootstrap\BootstrapConfigs; @@ -29,11 +29,11 @@ public function createFromBootstrapConfigs(BootstrapConfigs $bootstrapConfigs) : private function createFromConfigs(array $configFiles) : Container { $lazyContainerFactory = new \Rector\DependencyInjection\LazyContainerFactory(); - $container = $lazyContainerFactory->create(); + $rectorConfig = $lazyContainerFactory->create(); foreach ($configFiles as $configFile) { - $container->import($configFile); + $rectorConfig->import($configFile); } - $container->boot(); - return $container; + $rectorConfig->boot(); + return $rectorConfig; } } diff --git a/vendor/rector/rector/src/Differ/DefaultDiffer.php b/vendor/rector/rector/src/Differ/DefaultDiffer.php index b63909dc8..e3539d90c 100644 --- a/vendor/rector/rector/src/Differ/DefaultDiffer.php +++ b/vendor/rector/rector/src/Differ/DefaultDiffer.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\Differ; -use RectorPrefix202405\SebastianBergmann\Diff\Differ; -use RectorPrefix202405\SebastianBergmann\Diff\Output\StrictUnifiedDiffOutputBuilder; +use RectorPrefix202410\SebastianBergmann\Diff\Differ; +use RectorPrefix202410\SebastianBergmann\Diff\Output\StrictUnifiedDiffOutputBuilder; final class DefaultDiffer { /** diff --git a/vendor/rector/rector/src/Error/ExceptionCorrector.php b/vendor/rector/rector/src/Error/ExceptionCorrector.php deleted file mode 100644 index 3222cdf4a..000000000 --- a/vendor/rector/rector/src/Error/ExceptionCorrector.php +++ /dev/null @@ -1,13 +0,0 @@ -autoloadPaths([...]);" or "$rectorConfig->bootstrapFiles([...]);" in "rector.php" config.%sSee https://github.com/rectorphp/rector#configuration', $analysedCodeException->getMessage(), \PHP_EOL); - } -} diff --git a/vendor/rector/rector/src/Exception/ShouldNotHappenException.php b/vendor/rector/rector/src/Exception/ShouldNotHappenException.php index 2d44acf07..d73ceb3ff 100644 --- a/vendor/rector/rector/src/Exception/ShouldNotHappenException.php +++ b/vendor/rector/rector/src/Exception/ShouldNotHappenException.php @@ -8,10 +8,9 @@ final class ShouldNotHappenException extends Exception { /** - * @param string $message * @param int $code */ - public function __construct($message = '', $code = 0, ?Throwable $throwable = null) + public function __construct(string $message = '', $code = 0, ?Throwable $throwable = null) { if ($message === '') { $message = $this->createDefaultMessageWithLocation(); diff --git a/vendor/rector/rector/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php b/vendor/rector/rector/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php index 1d62b294d..2da94533f 100644 --- a/vendor/rector/rector/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php +++ b/vendor/rector/rector/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php @@ -40,7 +40,7 @@ public function resolveParentClassMethodReturnType(ClassReflection $classReflect return new MixedType(); } foreach ($parentClassMethods as $parentClassMethod) { - $parametersAcceptor = ParametersAcceptorSelector::selectSingle($parentClassMethod->getVariants()); + $parametersAcceptor = ParametersAcceptorSelector::combineAcceptors($parentClassMethod->getVariants()); $nativeReturnType = $parametersAcceptor->getNativeReturnType(); if (!$nativeReturnType instanceof MixedType) { return $nativeReturnType; @@ -53,6 +53,9 @@ public function resolveParentClassMethodReturnType(ClassReflection $classReflect */ private function resolveParentClassMethods(ClassReflection $classReflection, string $methodName) : array { + if ($classReflection->hasNativeMethod($methodName) && $classReflection->getNativeMethod($methodName)->isPrivate()) { + return []; + } $parentClassMethods = []; $parents = \array_merge($classReflection->getParents(), $classReflection->getInterfaces()); foreach ($parents as $parent) { diff --git a/vendor/rector/rector/src/FamilyTree/Reflection/FamilyRelationsAnalyzer.php b/vendor/rector/rector/src/FamilyTree/Reflection/FamilyRelationsAnalyzer.php index ca433d087..9915012f6 100644 --- a/vendor/rector/rector/src/FamilyTree/Reflection/FamilyRelationsAnalyzer.php +++ b/vendor/rector/rector/src/FamilyTree/Reflection/FamilyRelationsAnalyzer.php @@ -9,7 +9,6 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ReflectionProvider; use Rector\NodeNameResolver\NodeNameResolver; -use Rector\Util\Reflection\PrivatesAccessor; final class FamilyRelationsAnalyzer { /** @@ -22,35 +21,10 @@ final class FamilyRelationsAnalyzer * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; - /** - * @readonly - * @var \Rector\Util\Reflection\PrivatesAccessor - */ - private $privatesAccessor; - public function __construct(ReflectionProvider $reflectionProvider, NodeNameResolver $nodeNameResolver, PrivatesAccessor $privatesAccessor) + public function __construct(ReflectionProvider $reflectionProvider, NodeNameResolver $nodeNameResolver) { $this->reflectionProvider = $reflectionProvider; $this->nodeNameResolver = $nodeNameResolver; - $this->privatesAccessor = $privatesAccessor; - } - /** - * @return ClassReflection[] - */ - public function getChildrenOfClassReflection(ClassReflection $desiredClassReflection) : array - { - if ($desiredClassReflection->isFinalByKeyword()) { - return []; - } - /** @var ClassReflection[] $classReflections */ - $classReflections = $this->privatesAccessor->getPrivateProperty($this->reflectionProvider, 'classes'); - $childrenClassReflections = []; - foreach ($classReflections as $classReflection) { - if (!$classReflection->isSubclassOf($desiredClassReflection->getName())) { - continue; - } - $childrenClassReflections[] = $classReflection; - } - return $childrenClassReflections; } /** * @api diff --git a/vendor/rector/rector/src/FileSystem/FileAndDirectoryFilter.php b/vendor/rector/rector/src/FileSystem/FileAndDirectoryFilter.php index 43e7d46ca..10f0bedfd 100644 --- a/vendor/rector/rector/src/FileSystem/FileAndDirectoryFilter.php +++ b/vendor/rector/rector/src/FileSystem/FileAndDirectoryFilter.php @@ -15,7 +15,7 @@ final class FileAndDirectoryFilter public function filterDirectories(array $filesAndDirectories) : array { $directories = \array_filter($filesAndDirectories, static function (string $path) : bool { - return \is_dir($path); + return \is_dir($path) && \realpath($path) !== \false; }); return \array_values($directories); } @@ -26,7 +26,7 @@ public function filterDirectories(array $filesAndDirectories) : array public function filterFiles(array $filesAndDirectories) : array { $files = \array_filter($filesAndDirectories, static function (string $path) : bool { - return \is_file($path); + return \is_file($path) && \realpath($path) !== \false; }); return \array_values($files); } diff --git a/vendor/rector/rector/src/FileSystem/FilePathHelper.php b/vendor/rector/rector/src/FileSystem/FilePathHelper.php index 1f3c628c6..3c6215281 100644 --- a/vendor/rector/rector/src/FileSystem/FilePathHelper.php +++ b/vendor/rector/rector/src/FileSystem/FilePathHelper.php @@ -3,10 +3,10 @@ declare (strict_types=1); namespace Rector\FileSystem; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\Skipper\FileSystem\PathNormalizer; -use RectorPrefix202405\Symfony\Component\Filesystem\Filesystem; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Filesystem\Filesystem; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\FileSystem\FilePathHelperTest */ diff --git a/vendor/rector/rector/src/FileSystem/FilesFinder.php b/vendor/rector/rector/src/FileSystem/FilesFinder.php index 03c88f5bb..750919ab0 100644 --- a/vendor/rector/rector/src/FileSystem/FilesFinder.php +++ b/vendor/rector/rector/src/FileSystem/FilesFinder.php @@ -3,9 +3,14 @@ declare (strict_types=1); namespace Rector\FileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem; +use Rector\Caching\Detector\ChangedFilesDetector; use Rector\Caching\UnchangedFilesFilter; +use Rector\Configuration\Option; +use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Skipper\Skipper\PathSkipper; -use RectorPrefix202405\Symfony\Component\Finder\Finder; +use Rector\ValueObject\Configuration; +use RectorPrefix202410\Symfony\Component\Finder\Finder; /** * @see \Rector\Tests\FileSystem\FilesFinder\FilesFinderTest */ @@ -31,12 +36,24 @@ final class FilesFinder * @var \Rector\Skipper\Skipper\PathSkipper */ private $pathSkipper; - public function __construct(\Rector\FileSystem\FilesystemTweaker $filesystemTweaker, UnchangedFilesFilter $unchangedFilesFilter, \Rector\FileSystem\FileAndDirectoryFilter $fileAndDirectoryFilter, PathSkipper $pathSkipper) + /** + * @readonly + * @var \Rector\FileSystem\FilePathHelper + */ + private $filePathHelper; + /** + * @readonly + * @var \Rector\Caching\Detector\ChangedFilesDetector + */ + private $changedFilesDetector; + public function __construct(\Rector\FileSystem\FilesystemTweaker $filesystemTweaker, UnchangedFilesFilter $unchangedFilesFilter, \Rector\FileSystem\FileAndDirectoryFilter $fileAndDirectoryFilter, PathSkipper $pathSkipper, \Rector\FileSystem\FilePathHelper $filePathHelper, ChangedFilesDetector $changedFilesDetector) { $this->filesystemTweaker = $filesystemTweaker; $this->unchangedFilesFilter = $unchangedFilesFilter; $this->fileAndDirectoryFilter = $fileAndDirectoryFilter; $this->pathSkipper = $pathSkipper; + $this->filePathHelper = $filePathHelper; + $this->changedFilesDetector = $changedFilesDetector; } /** * @param string[] $source @@ -46,8 +63,12 @@ public function __construct(\Rector\FileSystem\FilesystemTweaker $filesystemTwea public function findInDirectoriesAndFiles(array $source, array $suffixes = [], bool $sortByName = \true) : array { $filesAndDirectories = $this->filesystemTweaker->resolveWithFnmatch($source); - $files = $this->fileAndDirectoryFilter->filterFiles($filesAndDirectories); - $filteredFilePaths = \array_filter($files, function (string $filePath) : bool { + // filtering files in files collection + $filteredFilePaths = $this->fileAndDirectoryFilter->filterFiles($filesAndDirectories); + $filteredFilePaths = \array_map(function (string $filePath) : string { + return \realpath($filePath); + }, $filteredFilePaths); + $filteredFilePaths = \array_filter($filteredFilePaths, function (string $filePath) : bool { return !$this->pathSkipper->shouldSkip($filePath); }); if ($suffixes !== []) { @@ -57,10 +78,37 @@ public function findInDirectoriesAndFiles(array $source, array $suffixes = [], b }; $filteredFilePaths = \array_filter($filteredFilePaths, $fileWithExtensionsFilter); } + $filteredFilePaths = \array_filter($filteredFilePaths, function (string $file) : bool { + if ($this->isStartWithShortPHPTag(FileSystem::read($file))) { + SimpleParameterProvider::addParameter(Option::SKIPPED_START_WITH_SHORT_OPEN_TAG_FILES, $this->filePathHelper->relativePath($file)); + return \false; + } + return \true; + }); + // filtering files in directories collection $directories = $this->fileAndDirectoryFilter->filterDirectories($filesAndDirectories); $filteredFilePathsInDirectories = $this->findInDirectories($directories, $suffixes, $sortByName); $filePaths = \array_merge($filteredFilePaths, $filteredFilePathsInDirectories); - return $this->unchangedFilesFilter->filterFileInfos($filePaths); + return $this->unchangedFilesFilter->filterFilePaths($filePaths); + } + /** + * @param string[] $paths + * @return string[] + */ + public function findFilesInPaths(array $paths, Configuration $configuration) : array + { + if ($configuration->shouldClearCache()) { + $this->changedFilesDetector->clear(); + } + $supportedFileExtensions = $configuration->getFileExtensions(); + return $this->findInDirectoriesAndFiles($paths, $supportedFileExtensions); + } + /** + * Exclude short "pathSkipper->shouldSkip($path)) { continue; } + if ($this->isStartWithShortPHPTag($fileInfo->getContents())) { + SimpleParameterProvider::addParameter(Option::SKIPPED_START_WITH_SHORT_OPEN_TAG_FILES, $this->filePathHelper->relativePath($path)); + continue; + } $filePaths[] = $path; } return $filePaths; diff --git a/vendor/rector/rector/src/FileSystem/InitFilePathsResolver.php b/vendor/rector/rector/src/FileSystem/InitFilePathsResolver.php index 3b913f7cc..0555480be 100644 --- a/vendor/rector/rector/src/FileSystem/InitFilePathsResolver.php +++ b/vendor/rector/rector/src/FileSystem/InitFilePathsResolver.php @@ -3,19 +3,24 @@ declare (strict_types=1); namespace Rector\FileSystem; -use RectorPrefix202405\Symfony\Component\Finder\Finder; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Finder\Finder; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; /** * @see \Rector\Tests\FileSystem\InitFilePathsResolver\InitFilePathsResolverTest */ final class InitFilePathsResolver { + /** + * @var string + * @see https://regex101.com/r/XkQ6Pe/1 + */ + private const DO_NOT_INCLUDE_PATHS_REGEX = '#(vendor|var|stubs|temp|templates|tmp|e2e|bin|build|Migrations|data(?:base)?|storage|migrations|writable)#'; /** * @return string[] */ public function resolve(string $projectDirectory) : array { - $rootDirectoryFinder = Finder::create()->directories()->depth(0)->notPath('#(vendor|var|stubs|temp|templates|tmp|e2e|bin|build|Migrations|database|storage|migrations)#')->in($projectDirectory)->sortByName(); + $rootDirectoryFinder = Finder::create()->directories()->depth(0)->notPath(self::DO_NOT_INCLUDE_PATHS_REGEX)->in($projectDirectory)->sortByName(); /** @var SplFileInfo[] $rootDirectoryFileInfos */ $rootDirectoryFileInfos = \iterator_to_array($rootDirectoryFinder); $projectDirectories = []; diff --git a/vendor/rector/rector/src/FileSystem/JsonFileSystem.php b/vendor/rector/rector/src/FileSystem/JsonFileSystem.php index cee87745b..04a466913 100644 --- a/vendor/rector/rector/src/FileSystem/JsonFileSystem.php +++ b/vendor/rector/rector/src/FileSystem/JsonFileSystem.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\FileSystem; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Json; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Json; final class JsonFileSystem { /** diff --git a/vendor/rector/rector/src/Git/RepositoryHelper.php b/vendor/rector/rector/src/Git/RepositoryHelper.php index 1c5476cc2..c3b73a5e1 100644 --- a/vendor/rector/rector/src/Git/RepositoryHelper.php +++ b/vendor/rector/rector/src/Git/RepositoryHelper.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\Git; -use RectorPrefix202405\Nette\Utils\Strings; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Nette\Utils\Strings; +use RectorPrefix202410\Symfony\Component\Process\Process; final class RepositoryHelper { /** diff --git a/vendor/rector/rector/src/NodeAnalyzer/DoctrineEntityAnalyzer.php b/vendor/rector/rector/src/NodeAnalyzer/DoctrineEntityAnalyzer.php index bc170de61..ac2505626 100644 --- a/vendor/rector/rector/src/NodeAnalyzer/DoctrineEntityAnalyzer.php +++ b/vendor/rector/rector/src/NodeAnalyzer/DoctrineEntityAnalyzer.php @@ -9,7 +9,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; /** - * @api + * @api used in doctrine */ final class DoctrineEntityAnalyzer { diff --git a/vendor/rector/rector/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php b/vendor/rector/rector/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php index 96e0af13b..385e8509e 100644 --- a/vendor/rector/rector/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php +++ b/vendor/rector/rector/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php @@ -165,7 +165,7 @@ private function resolveClassContextType($classContext, Scope $scope, ?string $c return new ObjectType($classConstantReference, null, $classReflection); } $extendedMethodReflection = $classReflection->getMethod(MethodName::CONSTRUCT, $scope); - $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::selectSingle($extendedMethodReflection->getVariants()); + $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::combineAcceptors($extendedMethodReflection->getVariants()); foreach ($parametersAcceptorWithPhpDocs->getParameters() as $parameterReflectionWithPhpDoc) { if (!$parameterReflectionWithPhpDoc->getDefaultValue() instanceof Type) { return new MixedType(); diff --git a/vendor/rector/rector/src/NodeManipulator/AssignManipulator.php b/vendor/rector/rector/src/NodeManipulator/AssignManipulator.php index 36959236a..21e610023 100644 --- a/vendor/rector/rector/src/NodeManipulator/AssignManipulator.php +++ b/vendor/rector/rector/src/NodeManipulator/AssignManipulator.php @@ -72,7 +72,10 @@ public function isLeftPartOfAssign(Node $node) : bool if ($node->getAttribute(AttributeKey::IS_BEING_ASSIGNED) === \true) { return \true; } - return $node->getAttribute(AttributeKey::IS_ASSIGNED_TO) === \true; + if ($node->getAttribute(AttributeKey::IS_ASSIGN_REF_EXPR) === \true) { + return \true; + } + return $node->getAttribute(AttributeKey::IS_ASSIGN_OP_VAR) === \true; } /** * @api doctrine diff --git a/vendor/rector/rector/src/NodeManipulator/ClassManipulator.php b/vendor/rector/rector/src/NodeManipulator/ClassManipulator.php index 2476b86c7..c3d0be1c1 100644 --- a/vendor/rector/rector/src/NodeManipulator/ClassManipulator.php +++ b/vendor/rector/rector/src/NodeManipulator/ClassManipulator.php @@ -24,7 +24,7 @@ public function __construct(NodeNameResolver $nodeNameResolver, ReflectionProvid $this->nodeNameResolver = $nodeNameResolver; $this->reflectionProvider = $reflectionProvider; } - public function hasParentMethodOrInterface(ObjectType $objectType, string $oldMethod, string $newMethod) : bool + public function hasParentMethodOrInterface(ObjectType $objectType, string $oldMethod) : bool { if (!$this->reflectionProvider->hasClass($objectType->getClassName())) { return \false; diff --git a/vendor/rector/rector/src/NodeManipulator/IfManipulator.php b/vendor/rector/rector/src/NodeManipulator/IfManipulator.php index 279695401..b2ea3821a 100644 --- a/vendor/rector/rector/src/NodeManipulator/IfManipulator.php +++ b/vendor/rector/rector/src/NodeManipulator/IfManipulator.php @@ -157,10 +157,6 @@ public function isIfWithOnly(If_ $if, string $stmtClass) : bool } return $this->hasOnlyStmtOfType($if, $stmtClass); } - public function isIfWithOnlyOneStmt(If_ $if) : bool - { - return \count($if->stmts) === 1; - } public function isIfWithoutElseAndElseIfs(If_ $if) : bool { if ($if->else instanceof Else_) { diff --git a/vendor/rector/rector/src/NodeManipulator/PropertyFetchAssignManipulator.php b/vendor/rector/rector/src/NodeManipulator/PropertyFetchAssignManipulator.php index a503f3e48..847206def 100644 --- a/vendor/rector/rector/src/NodeManipulator/PropertyFetchAssignManipulator.php +++ b/vendor/rector/rector/src/NodeManipulator/PropertyFetchAssignManipulator.php @@ -5,6 +5,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\Assign; +use PhpParser\Node\Expr\AssignOp; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; @@ -50,7 +51,7 @@ public function isAssignedMultipleTimesInConstructor(Class_ $class, Property $pr if ($node instanceof Class_ || $node instanceof Function_) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; } - if (!$node instanceof Assign) { + if (!$node instanceof Assign && !$node instanceof AssignOp) { return null; } if (!$this->propertyFetchAnalyzer->isLocalPropertyFetchName($node->var, $propertyName)) { diff --git a/vendor/rector/rector/src/NodeManipulator/PropertyManipulator.php b/vendor/rector/rector/src/NodeManipulator/PropertyManipulator.php index f765e5b34..784923d8c 100644 --- a/vendor/rector/rector/src/NodeManipulator/PropertyManipulator.php +++ b/vendor/rector/rector/src/NodeManipulator/PropertyManipulator.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\NodeManipulator; -use RectorPrefix202405\Doctrine\ORM\Mapping\Table; +use RectorPrefix202410\Doctrine\ORM\Mapping\Table; use PhpParser\Node; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; diff --git a/vendor/rector/rector/src/NodeManipulator/StmtsManipulator.php b/vendor/rector/rector/src/NodeManipulator/StmtsManipulator.php index 1c0076d6e..2ec893d40 100644 --- a/vendor/rector/rector/src/NodeManipulator/StmtsManipulator.php +++ b/vendor/rector/rector/src/NodeManipulator/StmtsManipulator.php @@ -4,10 +4,12 @@ namespace Rector\NodeManipulator; use PhpParser\Node; +use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; +use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PhpParser\Comparing\NodeComparator; use Rector\PhpParser\Node\BetterNodeFinder; @@ -28,11 +30,17 @@ final class StmtsManipulator * @var \Rector\PhpParser\Comparing\NodeComparator */ private $nodeComparator; - public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTraverser, BetterNodeFinder $betterNodeFinder, NodeComparator $nodeComparator) + /** + * @readonly + * @var \Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer + */ + private $exprUsedInNodeAnalyzer; + public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTraverser, BetterNodeFinder $betterNodeFinder, NodeComparator $nodeComparator, ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer) { $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->betterNodeFinder = $betterNodeFinder; $this->nodeComparator = $nodeComparator; + $this->exprUsedInNodeAnalyzer = $exprUsedInNodeAnalyzer; } /** * @param Stmt[] $stmts @@ -65,12 +73,18 @@ public function filterOutExistingStmts(ClassMethod $classMethod, array $stmts) : }); return $stmts; } - public function isVariableUsedInNextStmt(StmtsAwareInterface $stmtsAware, int $jumpToKey, string $variableName) : bool + /** + * @param StmtsAwareInterface|Stmt[] $stmtsAware + */ + public function isVariableUsedInNextStmt($stmtsAware, int $jumpToKey, string $variableName) : bool { - if ($stmtsAware->stmts === null) { + if ($stmtsAware instanceof StmtsAwareInterface && $stmtsAware->stmts === null) { return \false; } - $stmts = \array_slice($stmtsAware->stmts, $jumpToKey, null, \true); - return (bool) $this->betterNodeFinder->findVariableOfName($stmts, $variableName); + $stmts = \array_slice($stmtsAware instanceof StmtsAwareInterface ? $stmtsAware->stmts : $stmtsAware, $jumpToKey, null, \true); + $variable = new Variable($variableName); + return (bool) $this->betterNodeFinder->findFirst($stmts, function (Node $subNode) use($variable) : bool { + return $this->exprUsedInNodeAnalyzer->isUsed($subNode, $variable); + }); } } diff --git a/vendor/rector/rector/src/NodeNameResolver/NodeNameResolver.php b/vendor/rector/rector/src/NodeNameResolver/NodeNameResolver.php index 03896b366..39fbbe5c9 100644 --- a/vendor/rector/rector/src/NodeNameResolver/NodeNameResolver.php +++ b/vendor/rector/rector/src/NodeNameResolver/NodeNameResolver.php @@ -26,6 +26,7 @@ use Rector\NodeAnalyzer\CallAnalyzer; use Rector\NodeNameResolver\Contract\NodeNameResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\ValueObject\MethodName; final class NodeNameResolver { /** @@ -78,6 +79,7 @@ public function isNames(Node $node, array $names) : bool } /** * @param Node|Node[] $node + * @param MethodName::*|string $name */ public function isName($node, string $name) : bool { @@ -89,24 +91,6 @@ public function isName($node, string $name) : bool } return \false; } - /** - * @api - * @deprecated This method is unused and will be removed, go for isName() instead - */ - public function isCaseSensitiveName(Node $node, string $name) : bool - { - if ($name === '') { - return \false; - } - if ($node instanceof CallLike && !$node instanceof FuncCall) { - return \false; - } - $resolvedName = $this->getName($node); - if ($resolvedName === null) { - return \false; - } - return $name === $resolvedName; - } /** * Some nodes have always-known string name. This makes PHPStan smarter. * @see https://phpstan.org/writing-php-code/phpdoc-types#conditional-return-types diff --git a/vendor/rector/rector/src/NodeNameResolver/Regex/RegexPatternDetector.php b/vendor/rector/rector/src/NodeNameResolver/Regex/RegexPatternDetector.php index 05eaa63e0..d43761b3c 100644 --- a/vendor/rector/rector/src/NodeNameResolver/Regex/RegexPatternDetector.php +++ b/vendor/rector/rector/src/NodeNameResolver/Regex/RegexPatternDetector.php @@ -11,6 +11,10 @@ final class RegexPatternDetector * This prevents miss matching like "aMethoda" */ private const POSSIBLE_DELIMITERS = ['#', '~', '/']; + /** + * @var array + */ + private const START_AND_END_DELIMITERS = ['(' => ')', '{' => '}', '[' => ']', '<' => '>']; public function isRegexPattern(string $name) : bool { if (\strlen($name) <= 2) { @@ -19,6 +23,15 @@ public function isRegexPattern(string $name) : bool $firstChar = $name[0]; $lastChar = $name[\strlen($name) - 1]; if ($firstChar !== $lastChar) { + foreach (self::START_AND_END_DELIMITERS as $start => $end) { + if ($firstChar !== $start) { + continue; + } + if ($lastChar !== $end) { + continue; + } + return \true; + } return \false; } return \in_array($firstChar, self::POSSIBLE_DELIMITERS, \true); diff --git a/vendor/rector/rector/src/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php b/vendor/rector/rector/src/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php index 3b3d0ca93..b8407e10c 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php +++ b/vendor/rector/rector/src/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php @@ -15,11 +15,11 @@ use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider; -use RectorPrefix202405\Symfony\Component\Console\Input\ArrayInput; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutput; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Input\ArrayInput; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutput; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; use Throwable; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * Factory so Symfony app can use services from PHPStan container * @@ -141,6 +141,6 @@ private function resolveAdditionalConfigFiles() : array $additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/static-reflection.neon'; $additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/better-infer.neon'; $additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/parser.neon'; - return \array_filter($additionalConfigFiles, 'file_exists'); + return \array_filter($additionalConfigFiles, \Closure::fromCallable('file_exists')); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/Node/AttributeKey.php b/vendor/rector/rector/src/NodeTypeResolver/Node/AttributeKey.php index 9bba67920..9d0c847fa 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/Node/AttributeKey.php +++ b/vendor/rector/rector/src/NodeTypeResolver/Node/AttributeKey.php @@ -14,10 +14,6 @@ final class AttributeKey * @var string */ public const RAW_VALUE = 'rawValue'; - /** - * @var string - */ - public const VIRTUAL_NODE = 'virtual_node'; /** * @see Scope * @var string @@ -44,21 +40,6 @@ final class AttributeKey * @var string */ public const ORIGINAL_NAME = 'originalName'; - /** - * @deprecated Refactor to a custom visitors/parent node instead, - * @see https://phpstan.org/blog/preprocessing-ast-for-custom-rules - * - * @internal of php-parser, do not change - * @see https://github.com/nikic/PHP-Parser/pull/681/files - * @var string - * - * @api for BC layer - * - * The parent node can be still enabled by using custom PHPStan configuration, - * @see https://github.com/rectorphp/rector-src/pull/4458#discussion_r1257478146 - * @see https://github.com/rectorphp/rector-src/pull/4841 - */ - public const PARENT_NODE = 'parent'; /** * Internal php-parser name. * Do not change this even if you want! @@ -172,15 +153,15 @@ final class AttributeKey /** * @var string */ - public const IS_MULTI_ASSIGN = 'is_multi_assign'; + public const IS_ASSIGN_OP_VAR = 'is_assign_op_var'; /** * @var string */ - public const STATEMENT_DEPTH = 'statementDepth'; + public const IS_ASSIGN_REF_EXPR = 'is_assign_ref_expr'; /** * @var string */ - public const EXPRESSION_DEPTH = 'expressionDepth'; + public const IS_MULTI_ASSIGN = 'is_multi_assign'; /** * @var string */ diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeScopeAndMetadataDecorator.php b/vendor/rector/rector/src/NodeTypeResolver/NodeScopeAndMetadataDecorator.php index 63e6fbd72..0c1e3392a 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeScopeAndMetadataDecorator.php +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeScopeAndMetadataDecorator.php @@ -7,9 +7,7 @@ use PhpParser\NodeTraverser; use PhpParser\NodeVisitor\CloningVisitor; use Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver; -use Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory; use Rector\PhpParser\NodeTraverser\FileWithoutNamespaceNodeTraverser; -use Rector\PHPStan\NodeVisitor\UnreachableStatementNodeVisitor; final class NodeScopeAndMetadataDecorator { /** @@ -17,11 +15,6 @@ final class NodeScopeAndMetadataDecorator * @var \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver */ private $phpStanNodeScopeResolver; - /** - * @readonly - * @var \Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory - */ - private $scopeFactory; /** * @readonly * @var \Rector\PhpParser\NodeTraverser\FileWithoutNamespaceNodeTraverser @@ -32,10 +25,9 @@ final class NodeScopeAndMetadataDecorator * @var \PhpParser\NodeTraverser */ private $nodeTraverser; - public function __construct(CloningVisitor $cloningVisitor, PHPStanNodeScopeResolver $phpStanNodeScopeResolver, ScopeFactory $scopeFactory, FileWithoutNamespaceNodeTraverser $fileWithoutNamespaceNodeTraverser) + public function __construct(CloningVisitor $cloningVisitor, PHPStanNodeScopeResolver $phpStanNodeScopeResolver, FileWithoutNamespaceNodeTraverser $fileWithoutNamespaceNodeTraverser) { $this->phpStanNodeScopeResolver = $phpStanNodeScopeResolver; - $this->scopeFactory = $scopeFactory; $this->fileWithoutNamespaceNodeTraverser = $fileWithoutNamespaceNodeTraverser; $this->nodeTraverser = new NodeTraverser(); // needed for format preserving printing @@ -49,19 +41,6 @@ public function decorateNodesFromFile(string $filePath, array $stmts) : array { $stmts = $this->fileWithoutNamespaceNodeTraverser->traverse($stmts); $stmts = $this->phpStanNodeScopeResolver->processNodes($stmts, $filePath); - if ($this->phpStanNodeScopeResolver->hasUnreachableStatementNode()) { - $unreachableStatementNodeVisitor = new UnreachableStatementNodeVisitor($this->phpStanNodeScopeResolver, $filePath, $this->scopeFactory); - $this->nodeTraverser->addVisitor($unreachableStatementNodeVisitor); - $stmts = $this->nodeTraverser->traverse($stmts); - /** - * immediate remove UnreachableStatementNodeVisitor after traverse to avoid - * re-used in nodeTraverser property in next file - */ - $this->nodeTraverser->removeVisitor($unreachableStatementNodeVisitor); - // next file must be init hasUnreachableStatementNode to be false again - $this->phpStanNodeScopeResolver->resetHasUnreachableStatementNode(); - return $stmts; - } return $this->nodeTraverser->traverse($stmts); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyStringTypeCorrector.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyStringTypeCorrector.php index 2ec1f8ec3..f122b1195 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyStringTypeCorrector.php +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeCorrector/AccessoryNonEmptyStringTypeCorrector.php @@ -3,9 +3,8 @@ declare (strict_types=1); namespace Rector\NodeTypeResolver\NodeTypeCorrector; -use PHPStan\Type\Accessory\AccessoryNonEmptyStringType; -use PHPStan\Type\Accessory\AccessoryNonFalsyStringType; use PHPStan\Type\IntersectionType; +use PHPStan\Type\StringType; use PHPStan\Type\Type; final class AccessoryNonEmptyStringTypeCorrector { @@ -20,19 +19,6 @@ public function correct(Type $mainType) if (!$mainType->isNonEmptyString()->yes()) { return $mainType; } - $clearIntersectionedTypes = []; - foreach ($mainType->getTypes() as $intersectionedType) { - if ($intersectionedType instanceof AccessoryNonEmptyStringType) { - continue; - } - if ($intersectionedType instanceof AccessoryNonFalsyStringType) { - continue; - } - $clearIntersectionedTypes[] = $intersectionedType; - } - if (\count($clearIntersectionedTypes) === 1) { - return $clearIntersectionedTypes[0]; - } - return new IntersectionType($clearIntersectionedTypes); + return new StringType(); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver.php index 1779f7875..cf0bc8a07 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver.php +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver.php @@ -8,17 +8,16 @@ use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\BinaryOp\Coalesce; use PhpParser\Node\Expr\ClassConstFetch; -use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\NullsafeMethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Expr\Ternary; -use PhpParser\Node\Name; -use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\NullableType; use PhpParser\Node\Scalar\String_; -use PhpParser\Node\Stmt\Property; +use PhpParser\Node\Stmt\ClassConst; +use PhpParser\Node\Stmt\ClassLike; +use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\UnionType as NodeUnionType; use PHPStan\Analyser\Scope; use PHPStan\Broker\ClassAutoloadingException; @@ -39,6 +38,7 @@ use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; use Rector\Configuration\RenamedClassesDataCollector; +use Rector\Exception\ShouldNotHappenException; use Rector\NodeAnalyzer\ClassAnalyzer; use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface; use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface; @@ -81,6 +81,10 @@ final class NodeTypeResolver * @var \Rector\Configuration\RenamedClassesDataCollector */ private $renamedClassesDataCollector; + /** + * @var string + */ + private const ERROR_MESSAGE = '%s itself does not have any type. Check the %s node instead'; /** * @var array, NodeTypeResolverInterface> */ @@ -123,6 +127,10 @@ public function isObjectType(Node $node, ObjectType $requiredObjectType) : bool if ($node instanceof ClassConstFetch) { return \false; } + // warn about invalid use of this method + if ($node instanceof ClassMethod || $node instanceof ClassConst) { + throw new ShouldNotHappenException(\sprintf(self::ERROR_MESSAGE, \get_class($node), ClassLike::class)); + } $resolvedType = $this->getType($node); if ($resolvedType instanceof MixedType) { return \false; @@ -145,13 +153,7 @@ public function isObjectType(Node $node, ObjectType $requiredObjectType) : bool } public function getType(Node $node) : Type { - if ($node instanceof Property && $node->type instanceof Node) { - return $this->getType($node->type); - } if ($node instanceof NullableType) { - if ($node->type instanceof Name && $node->type->hasAttribute(AttributeKey::NAMESPACED_NAME)) { - $node->type = new FullyQualified($node->type->getAttribute(AttributeKey::NAMESPACED_NAME)); - } $type = $this->getType($node->type); if (!$type instanceof MixedType) { return new UnionType([$type, new NullType()]); @@ -182,12 +184,6 @@ public function getType(Node $node) : Type } $scope = $node->getAttribute(AttributeKey::SCOPE); if (!$scope instanceof Scope) { - if ($node instanceof ConstFetch) { - $name = $node->name->toString(); - if (\strtolower($name) === 'null') { - return new NullType(); - } - } return new MixedType(); } if ($node instanceof NodeUnionType) { @@ -233,7 +229,7 @@ public function getNativeType(Expr $expr) : Type return $type; } } - $type = $scope->getNativeType($expr); + $type = $this->resolveNativeTypeWithBuiltinMethodCallFallback($expr, $scope); if ($expr instanceof ArrayDimFetch) { $type = $this->resolveArrayDimFetchType($expr, $scope, $type); } @@ -463,4 +459,18 @@ private function resolveTernaryType(Ternary $ternary) } return new MixedType(); } + /** + * Method calls on native PHP classes report mixed, + * even on strict known type; this fallbacks to getType() that provides correct type + */ + private function resolveNativeTypeWithBuiltinMethodCallFallback(Expr $expr, Scope $scope) : Type + { + if ($expr instanceof MethodCall) { + $callerType = $scope->getType($expr->var); + if ($callerType instanceof ObjectType && $callerType->getClassReflection() instanceof ClassReflection && $callerType->getClassReflection()->isBuiltin()) { + return $scope->getType($expr); + } + } + return $scope->getNativeType($expr); + } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/ClassConstFetchTypeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/ClassConstFetchTypeResolver.php new file mode 100644 index 000000000..294fecd11 --- /dev/null +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/ClassConstFetchTypeResolver.php @@ -0,0 +1,46 @@ + + */ +final class ClassConstFetchTypeResolver implements NodeTypeResolverInterface +{ + /** + * @return array> + */ + public function getNodeClasses() : array + { + return [ClassConstFetch::class]; + } + /** + * @param ClassConstFetch $node + */ + public function resolve(Node $node) : Type + { + $scope = $node->getAttribute(AttributeKey::SCOPE); + if (!$scope instanceof Scope) { + return new MixedType(); + } + if ($node->class instanceof FullyQualified) { + return $scope->getType($node); + } + if ($node->class instanceof Name && $node->class->hasAttribute(AttributeKey::NAMESPACED_NAME)) { + $newNode = clone $node; + $newNode->class = new FullyQualified($node->class->getAttribute(AttributeKey::NAMESPACED_NAME)); + return $scope->getType($newNode); + } + return $scope->getType($node); + } +} diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php deleted file mode 100644 index ea4631394..000000000 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php +++ /dev/null @@ -1,45 +0,0 @@ - - */ -final class ClassMethodOrClassConstTypeResolver implements NodeTypeResolverInterface -{ - /** - * @return array> - */ - public function getNodeClasses() : array - { - return [ClassMethod::class, ClassConst::class]; - } - /** - * @param ClassMethod|ClassConst $node - */ - public function resolve(Node $node) : Type - { - $scope = $node->getAttribute(AttributeKey::SCOPE); - if (!$scope instanceof Scope) { - // anonymous class - return new ObjectWithoutClassType(); - } - $classReflection = $scope->getClassReflection(); - if (!$classReflection instanceof ClassReflection || $classReflection->isAnonymous()) { - // anonymous class - return new ObjectWithoutClassType(); - } - return new ObjectType($classReflection->getName()); - } -} diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php index f2d9cf71c..cc6715a9a 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php @@ -8,7 +8,6 @@ use PhpParser\Node\Name\FullyQualified; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; -use PHPStan\Type\ArrayType; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; @@ -35,13 +34,14 @@ public function getNodeClasses() : array */ public function resolve(Node $node) : Type { + // not instanceof FullyQualified means it is a Name + if (!$node instanceof FullyQualified && $node->hasAttribute(AttributeKey::NAMESPACED_NAME)) { + return $this->resolve(new FullyQualified($node->getAttribute(AttributeKey::NAMESPACED_NAME))); + } if ($node->toString() === ObjectReference::PARENT) { return $this->resolveParent($node); } $fullyQualifiedName = $this->resolveFullyQualifiedName($node); - if ($node->toString() === 'array') { - return new ArrayType(new MixedType(), new MixedType()); - } return new ObjectType($fullyQualifiedName); } /** @@ -82,7 +82,7 @@ private function resolveParent(Name $name) private function resolveFullyQualifiedName(Name $name) : string { $nameValue = $name->toString(); - if (\in_array($nameValue, [ObjectReference::SELF, ObjectReference::STATIC, 'this'], \true)) { + if (\in_array($nameValue, [ObjectReference::SELF, ObjectReference::STATIC], \true)) { $classReflection = $this->resolveClassReflection($name); if (!$classReflection instanceof ClassReflection || $classReflection->isAnonymous()) { return $name->toString(); diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php index 966c16192..db70f679e 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php @@ -90,7 +90,7 @@ private function getVendorPropertyFetchType(PropertyFetch $propertyFetch) : Type if (!$propertyFetchScope instanceof Scope) { return new MixedType(); } - $propertyReflection = $classReflection->getProperty($propertyName, $propertyFetchScope); - return $propertyReflection->getReadableType(); + $extendedPropertyReflection = $classReflection->getProperty($propertyName, $propertyFetchScope); + return $extendedPropertyReflection->getReadableType(); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php index a0f68a4b2..4c6f0eef5 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php +++ b/vendor/rector/rector/src/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php @@ -17,6 +17,8 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper; +use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType; +use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; /** * @implements NodeTypeResolverInterface */ @@ -69,6 +71,9 @@ public function resolve(Node $node) : Type } else { $callerType = $this->nodeTypeResolver->getType($node->class); } + if ($callerType instanceof AliasedObjectType) { + $callerType = new FullyQualifiedObjectType($callerType->getFullyQualifiedName()); + } foreach ($callerType->getObjectClassReflections() as $objectClassReflection) { $classMethodReturnType = $this->resolveClassMethodReturnType($objectClassReflection, $node, $methodName, $scope); if (!$classMethodReturnType instanceof MixedType) { diff --git a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php index 6e32bf53d..1c0898339 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/ParametersAcceptorSelectorVariantsWrapper.php @@ -23,8 +23,8 @@ public static function select($reflection, $node, Scope $scope) : ParametersAcce return ParametersAcceptorSelector::combineAcceptors($variants); } if ($node->isFirstClassCallable()) { - return ParametersAcceptorSelector::selectSingle($variants); + return ParametersAcceptorSelector::combineAcceptors($variants); } - return \count($variants) > 1 ? ParametersAcceptorSelector::selectFromArgs($scope, $node->getArgs(), $variants) : ParametersAcceptorSelector::selectSingle($variants); + return ParametersAcceptorSelector::selectFromArgs($scope, $node->getArgs(), $variants); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/AssignedToNodeVisitor.php b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/AssignedToNodeVisitor.php index 571467971..4b75dba56 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/AssignedToNodeVisitor.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/AssignedToNodeVisitor.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\AssignOp; +use PhpParser\Node\Expr\AssignRef; use PhpParser\NodeVisitorAbstract; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface; @@ -17,7 +18,11 @@ final class AssignedToNodeVisitor extends NodeVisitorAbstract implements ScopeRe public function enterNode(Node $node) : ?Node { if ($node instanceof AssignOp) { - $node->var->setAttribute(AttributeKey::IS_ASSIGNED_TO, \true); + $node->var->setAttribute(AttributeKey::IS_ASSIGN_OP_VAR, \true); + return null; + } + if ($node instanceof AssignRef) { + $node->expr->setAttribute(AttributeKey::IS_ASSIGN_REF_EXPR, \true); return null; } if (!$node instanceof Assign) { diff --git a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StmtKeyNodeVisitor.php b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StmtKeyNodeVisitor.php index b9ea9109e..17b0af08b 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StmtKeyNodeVisitor.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StmtKeyNodeVisitor.php @@ -6,39 +6,12 @@ use PhpParser\Node; use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\Declare_; -use PhpParser\Node\Stmt\Namespace_; use PhpParser\NodeVisitorAbstract; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface; final class StmtKeyNodeVisitor extends NodeVisitorAbstract implements ScopeResolverNodeVisitorInterface { - /** - * @param Node[] $nodes - */ - public function beforeTraverse(array $nodes) : ?array - { - if ($nodes === []) { - return null; - } - if (!$nodes[0] instanceof Declare_ && !$nodes[0] instanceof Namespace_) { - return null; - } - // on target node or no other root stmt, eg: only namespace without declare, no need to index - if (\count($nodes) === 1) { - return null; - } - // ensure statement depth is 0 to avoid declare in deep statements - // eg: declare(ticks=1) @see https://www.php.net/manual/en/control-structures.declare.php#123674 - $statementDepth = $nodes[0]->getAttribute(AttributeKey::STATEMENT_DEPTH); - if ($statementDepth > 0 || $statementDepth === null) { - return null; - } - foreach ($nodes as $key => $node) { - $node->setAttribute(AttributeKey::STMT_KEY, $key); - } - return $nodes; - } public function enterNode(Node $node) : ?Node { if (!$node instanceof StmtsAwareInterface && !$node instanceof ClassLike && !$node instanceof Declare_) { diff --git a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 7c4978bb3..44b0d69df 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -8,14 +8,17 @@ use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; +use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\AssignOp; use PhpParser\Node\Expr\BinaryOp; use PhpParser\Node\Expr\CallLike; use PhpParser\Node\Expr\Cast; use PhpParser\Node\Expr\ClassConstFetch; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Expr\FuncCall; +use PhpParser\Node\Expr\Match_; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\NullsafeMethodCall; @@ -28,14 +31,19 @@ use PhpParser\Node\IntersectionType; use PhpParser\Node\Name; use PhpParser\Node\NullableType; +use PhpParser\Node\Param; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Catch_; use PhpParser\Node\Stmt\Class_; +use PhpParser\Node\Stmt\ClassConst; +use PhpParser\Node\Stmt\ClassLike; +use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Enum_; use PhpParser\Node\Stmt\EnumCase; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Finally_; use PhpParser\Node\Stmt\Foreach_; +use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\Return_; @@ -48,20 +56,20 @@ use PHPStan\Analyser\NodeScopeResolver; use PHPStan\Analyser\ScopeContext; use PHPStan\Node\UnreachableStatementNode; +use PHPStan\Node\VirtualNode; use PHPStan\Reflection\ReflectionProvider; +use PHPStan\ShouldNotHappenException; use PHPStan\Type\ObjectType; use PHPStan\Type\TypeCombinator; -use Rector\Exception\ShouldNotHappenException; use Rector\NodeAnalyzer\ClassAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; -use Rector\PHPStan\NodeVisitor\ExprScopeFromStmtNodeVisitor; +use Rector\PHPStan\NodeVisitor\UnreachableStatementNodeVisitor; use Rector\PHPStan\NodeVisitor\WrappedNodeRestoringNodeVisitor; use Rector\Util\Reflection\PrivatesAccessor; -use Throwable; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @inspired by https://github.com/silverstripe/silverstripe-upgrader/blob/532182b23e854d02e0b27e68ebc394f436de0682/src/UpgradeRule/PHP/Visitor/PHPStanScopeVisitor.php * - https://github.com/silverstripe/silverstripe-upgrader/pull/57/commits/e5c7cfa166ad940d9d4ff69537d9f7608e992359#diff-5e0807bb3dc03d6a8d8b6ad049abd774 @@ -107,10 +115,6 @@ final class PHPStanNodeScopeResolver * @var \PhpParser\NodeTraverser */ private $nodeTraverser; - /** - * @var bool - */ - private $hasUnreachableStatementNode = \false; /** * @param ScopeResolverNodeVisitorInterface[] $nodeVisitors */ @@ -140,89 +144,147 @@ public function processNodes(array $stmts, string $filePath, ?MutatingScope $for Assert::allIsInstanceOf($stmts, Stmt::class); $this->nodeTraverser->traverse($stmts); $scope = $formerMutatingScope ?? $this->scopeFactory->createFromFile($filePath); - // skip chain method calls, performance issue: https://github.com/phpstan/phpstan/issues/254 - $nodeCallback = function (Node $node, MutatingScope $mutatingScope) use(&$nodeCallback, $filePath) : void { - if ($node instanceof FileWithoutNamespace) { + $hasUnreachableStatementNode = \false; + $nodeCallback = function (Node $node, MutatingScope $mutatingScope) use(&$nodeCallback, $filePath, &$hasUnreachableStatementNode) : void { + // the class reflection is resolved AFTER entering to class node + // so we need to get it from the first after this one + if ($node instanceof Class_ || $node instanceof Interface_ || $node instanceof Enum_) { + /** @var MutatingScope $mutatingScope */ + $mutatingScope = $this->resolveClassOrInterfaceScope($node, $mutatingScope); $node->setAttribute(AttributeKey::SCOPE, $mutatingScope); + return; + } + if ($node instanceof Trait_) { + $this->processTrait($node, $mutatingScope, $nodeCallback); + return; + } + // special case for unreachable nodes + // early check here as UnreachableStatementNode is special VirtualNode + // so node to be checked inside + if ($node instanceof UnreachableStatementNode) { + $this->processUnreachableStatementNode($node, $filePath, $mutatingScope); + $hasUnreachableStatementNode = \true; + return; + } + // init current Node set Attribute + // not a VirtualNode, then set scope attribute + // do not return early, as its properties will be checked next + if (!$node instanceof VirtualNode) { + $node->setAttribute(AttributeKey::SCOPE, $mutatingScope); + } + if ($node instanceof FileWithoutNamespace) { $this->nodeScopeResolverProcessNodes($node->stmts, $mutatingScope, $nodeCallback); return; } + $this->decorateNodeAttrGroups($node, $mutatingScope, $nodeCallback); if (($node instanceof Expression || $node instanceof Return_ || $node instanceof EnumCase || $node instanceof Cast) && $node->expr instanceof Expr) { $node->expr->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } elseif ($node instanceof Assign || $node instanceof AssignOp) { + return; + } + if ($node instanceof Assign || $node instanceof AssignOp) { $this->processAssign($node, $mutatingScope); - } elseif ($node instanceof Ternary) { + if ($node->var instanceof Variable && $node->var->name instanceof Expr) { + $this->nodeScopeResolverProcessNodes([new Expression($node->var), new Expression($node->expr)], $mutatingScope, $nodeCallback); + } + return; + } + if ($node instanceof Ternary) { $this->processTernary($node, $mutatingScope); - } elseif ($node instanceof BinaryOp) { + return; + } + if ($node instanceof BinaryOp) { $this->processBinaryOp($node, $mutatingScope); - } elseif ($node instanceof Arg) { + return; + } + if ($node instanceof Arg) { $node->value->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } elseif ($node instanceof Foreach_) { + return; + } + if ($node instanceof Foreach_) { // decorate value as well $node->valueVar->setAttribute(AttributeKey::SCOPE, $mutatingScope); if ($node->valueVar instanceof Array_) { $this->processArray($node->valueVar, $mutatingScope); } - } elseif ($node instanceof Array_) { + return; + } + if ($node instanceof Array_) { $this->processArray($node, $mutatingScope); - } elseif ($node instanceof Property) { + return; + } + if ($node instanceof Property) { $this->processProperty($node, $mutatingScope); - } elseif ($node instanceof Switch_) { + return; + } + if ($node instanceof Switch_) { $this->processSwitch($node, $mutatingScope); - } elseif ($node instanceof TryCatch) { + return; + } + if ($node instanceof TryCatch) { $this->processTryCatch($node, $mutatingScope); - } elseif ($node instanceof Catch_) { + return; + } + if ($node instanceof Catch_) { $this->processCatch($node, $filePath, $mutatingScope); - } elseif ($node instanceof ArrayItem) { + return; + } + if ($node instanceof ArrayItem) { $this->processArrayItem($node, $mutatingScope); - } elseif ($node instanceof NullableType) { + return; + } + if ($node instanceof NullableType) { $node->type->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } elseif ($node instanceof UnionType || $node instanceof IntersectionType) { + return; + } + if ($node instanceof UnionType || $node instanceof IntersectionType) { foreach ($node->types as $type) { $type->setAttribute(AttributeKey::SCOPE, $mutatingScope); } - } elseif ($node instanceof StaticPropertyFetch || $node instanceof ClassConstFetch) { + return; + } + if ($node instanceof StaticPropertyFetch || $node instanceof ClassConstFetch) { $node->class->setAttribute(AttributeKey::SCOPE, $mutatingScope); $node->name->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } elseif ($node instanceof PropertyFetch) { + return; + } + if ($node instanceof PropertyFetch) { $node->var->setAttribute(AttributeKey::SCOPE, $mutatingScope); $node->name->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } elseif ($node instanceof ConstFetch) { - $node->name->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } elseif ($node instanceof CallLike) { - $this->processCallike($node, $mutatingScope); + return; } - if ($node instanceof Trait_) { - $this->processTrait($node, $mutatingScope, $nodeCallback); + if ($node instanceof ConstFetch) { + $node->name->setAttribute(AttributeKey::SCOPE, $mutatingScope); return; } - // the class reflection is resolved AFTER entering to class node - // so we need to get it from the first after this one - if ($node instanceof Class_ || $node instanceof Interface_ || $node instanceof Enum_) { - /** @var MutatingScope $mutatingScope */ - $mutatingScope = $this->resolveClassOrInterfaceScope($node, $mutatingScope); + if ($node instanceof CallLike) { + $this->processCallike($node, $mutatingScope); + return; } - // special case for unreachable nodes - if ($node instanceof UnreachableStatementNode) { - $this->processUnreachableStatementNode($node, $filePath, $mutatingScope); - } else { - $node->setAttribute(AttributeKey::SCOPE, $mutatingScope); + if ($node instanceof Match_) { + $this->processMatch($node, $mutatingScope); + return; } }; $this->nodeScopeResolverProcessNodes($stmts, $scope, $nodeCallback); $nodeTraverser = new NodeTraverser(); $nodeTraverser->addVisitor(new WrappedNodeRestoringNodeVisitor()); - $nodeTraverser->addVisitor(new ExprScopeFromStmtNodeVisitor($this, $filePath, $scope)); + if ($hasUnreachableStatementNode) { + $nodeTraverser->addVisitor(new UnreachableStatementNodeVisitor($this, $filePath, $scope)); + } $nodeTraverser->traverse($stmts); return $stmts; } - public function hasUnreachableStatementNode() : bool + private function processMatch(Match_ $match, MutatingScope $mutatingScope) : void { - return $this->hasUnreachableStatementNode; - } - public function resetHasUnreachableStatementNode() : void - { - $this->hasUnreachableStatementNode = \false; + $match->cond->setAttribute(AttributeKey::SCOPE, $mutatingScope); + foreach ($match->arms as $arm) { + if ($arm->conds !== null) { + foreach ($arm->conds as $cond) { + $cond->setAttribute(AttributeKey::SCOPE, $mutatingScope); + } + } + $arm->body->setAttribute(AttributeKey::SCOPE, $mutatingScope); + } } /** * @param Stmt[] $stmts @@ -232,10 +294,7 @@ private function nodeScopeResolverProcessNodes(array $stmts, MutatingScope $muta { try { $this->nodeScopeResolver->processNodes($stmts, $mutatingScope, $nodeCallback); - } catch (Throwable $throwable) { - if ($throwable->getMessage() !== 'Internal error.') { - throw $throwable; - } + } catch (ShouldNotHappenException $exception) { } } private function processCallike(CallLike $callLike, MutatingScope $mutatingScope) : void @@ -275,12 +334,20 @@ private function processArrayItem(ArrayItem $arrayItem, MutatingScope $mutatingS } $arrayItem->value->setAttribute(AttributeKey::SCOPE, $mutatingScope); } - private function decorateTraitAttrGroups(Trait_ $trait, MutatingScope $mutatingScope) : void + /** + * @param callable(Node $trait, MutatingScope $scope): void $nodeCallback + */ + private function decorateNodeAttrGroups(Node $node, MutatingScope $mutatingScope, callable $nodeCallback) : void { - foreach ($trait->attrGroups as $attrGroup) { + // better to have AttrGroupsAwareInterface for all Node definition with attrGroups property + // but because may conflict with StmtsAwareInterface patch, this needs to be here + if (!$node instanceof Param && !$node instanceof ArrowFunction && !$node instanceof Closure && !$node instanceof ClassConst && !$node instanceof ClassLike && !$node instanceof ClassMethod && !$node instanceof EnumCase && !$node instanceof Function_ && !$node instanceof Property) { + return; + } + foreach ($node->attrGroups as $attrGroup) { foreach ($attrGroup->attrs as $attr) { foreach ($attr->args as $arg) { - $arg->value->setAttribute(AttributeKey::SCOPE, $mutatingScope); + $this->nodeScopeResolverProcessNodes([new Expression($arg->value)], $mutatingScope, $nodeCallback); } } } @@ -313,7 +380,6 @@ private function processUnreachableStatementNode(UnreachableStatementNode $unrea $originalStmt->setAttribute(AttributeKey::IS_UNREACHABLE, \true); $originalStmt->setAttribute(AttributeKey::SCOPE, $mutatingScope); $this->processNodes([$originalStmt], $filePath, $mutatingScope); - $this->hasUnreachableStatementNode = \true; } private function processProperty(Property $property, MutatingScope $mutatingScope) : void { @@ -323,11 +389,6 @@ private function processProperty(Property $property, MutatingScope $mutatingScop $propertyProperty->default->setAttribute(AttributeKey::SCOPE, $mutatingScope); } } - foreach ($property->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - $attribute->setAttribute(AttributeKey::SCOPE, $mutatingScope); - } - } } private function processBinaryOp(BinaryOp $binaryOp, MutatingScope $mutatingScope) : void { @@ -346,23 +407,28 @@ private function processTernary(Ternary $ternary, MutatingScope $mutatingScope) */ private function resolveClassOrInterfaceScope($classLike, MutatingScope $mutatingScope) : MutatingScope { - $className = $this->resolveClassName($classLike); $isAnonymous = $this->classAnalyzer->isAnonymousClass($classLike); // is anonymous class? - not possible to enter it since PHPStan 0.12.33, see https://github.com/phpstan/phpstan-src/commit/e87fb0ec26f9c8552bbeef26a868b1e5d8185e91 if ($classLike instanceof Class_ && $isAnonymous) { $classReflection = $this->reflectionProvider->getAnonymousClassReflection($classLike, $mutatingScope); - } elseif (!$this->reflectionProvider->hasClass($className)) { - return $mutatingScope; } else { + $className = $this->resolveClassName($classLike); + if (!$this->reflectionProvider->hasClass($className)) { + return $mutatingScope; + } $classReflection = $this->reflectionProvider->getClass($className); } try { return $mutatingScope->enterClass($classReflection); - } catch (\PHPStan\ShouldNotHappenException $exception) { + } catch (ShouldNotHappenException $exception) { } $context = $this->privatesAccessor->getPrivateProperty($mutatingScope, 'context'); $this->privatesAccessor->setPrivateProperty($context, 'classReflection', null); - return $mutatingScope->enterClass($classReflection); + try { + return $mutatingScope->enterClass($classReflection); + } catch (ShouldNotHappenException $exception) { + } + return $mutatingScope; } /** * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Interface_|\PhpParser\Node\Stmt\Trait_|\PhpParser\Node\Stmt\Enum_ $classLike @@ -373,7 +439,7 @@ private function resolveClassName($classLike) : string return (string) $classLike->namespacedName; } if (!$classLike->name instanceof Identifier) { - throw new ShouldNotHappenException(); + return ''; } return $classLike->name->toString(); } @@ -383,6 +449,12 @@ private function resolveClassName($classLike) : string private function processTrait(Trait_ $trait, MutatingScope $mutatingScope, callable $nodeCallback) : void { $traitName = $this->resolveClassName($trait); + if (!$this->reflectionProvider->hasClass($traitName)) { + $trait->setAttribute(AttributeKey::SCOPE, $mutatingScope); + $this->nodeScopeResolverProcessNodes($trait->stmts, $mutatingScope, $nodeCallback); + $this->decorateNodeAttrGroups($trait, $mutatingScope, $nodeCallback); + return; + } $traitClassReflection = $this->reflectionProvider->getClass($traitName); $traitScope = clone $mutatingScope; /** @var ScopeContext $scopeContext */ @@ -393,6 +465,6 @@ private function processTrait(Trait_ $trait, MutatingScope $mutatingScope, calla $this->privatesAccessor->setPrivateProperty($traitScope, self::CONTEXT, $traitContext); $trait->setAttribute(AttributeKey::SCOPE, $traitScope); $this->nodeScopeResolverProcessNodes($trait->stmts, $traitScope, $nodeCallback); - $this->decorateTraitAttrGroups($trait, $traitScope); + $this->decorateNodeAttrGroups($trait, $traitScope, $nodeCallback); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/TypeHasher.php b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/TypeHasher.php index 112aeec99..905bcc077 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PHPStan/TypeHasher.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PHPStan/TypeHasher.php @@ -6,7 +6,6 @@ use PHPStan\Type\ArrayType; use PHPStan\Type\ConstantType; use PHPStan\Type\Generic\GenericObjectType; -use PHPStan\Type\IterableType; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; @@ -40,16 +39,6 @@ public function createTypeHash(Type $type) : string return \get_class($type); } $type = $this->normalizeObjectType($type); - // normalize iterable - $type = TypeTraverser::map($type, static function (Type $currentType, callable $traverseCallback) : Type { - if (!$currentType instanceof ObjectType) { - return $traverseCallback($currentType); - } - if ($currentType->getClassName() === 'iterable') { - return new IterableType(new MixedType(), new MixedType()); - } - return $traverseCallback($currentType); - }); return $type->describe(VerbosityLevel::value()); } private function resolveUniqueTypeWithClassNameHash(TypeWithClassName $typeWithClassName) : string diff --git a/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php b/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php index d10812fb5..bb8f212c7 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php @@ -78,10 +78,6 @@ public function enterNode(Node $node) : ?Node } /** @var \PhpParser\Node $currentPhpNode */ $currentPhpNode = $this->currentPhpNode; - $virtualNode = $currentPhpNode->getAttribute(AttributeKey::VIRTUAL_NODE); - if ($virtualNode === \true) { - return null; - } $identifier = clone $node; $identifier->name = $this->resolveNamespacedName($identifier, $currentPhpNode, $node->name); $staticType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($identifier, $currentPhpNode); @@ -154,7 +150,7 @@ private function resolveNamespacedName(IdentifierTypeNode $identifierTypeNode, P return $namespaceName . '\\' . $nameFromUse; } /** - * @param Use_[]|GroupUse[] $uses + * @param array $uses */ private function resolveNamefromUse(array $uses, string $name) : string { diff --git a/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php b/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php index 651f73d47..fb02e9760 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php +++ b/vendor/rector/rector/src/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php @@ -3,13 +3,14 @@ declare (strict_types=1); namespace Rector\NodeTypeResolver\PhpDocNodeVisitor; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node as PhpParserNode; use PHPStan\PhpDocParser\Ast\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ObjectType; +use Rector\Application\Provider\CurrentFileProvider; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\BetterPhpDocParser\PhpDoc\SpacelessPhpDocTagNode; use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; @@ -19,9 +20,9 @@ use Rector\Exception\ShouldNotHappenException; use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Rector\PostRector\Collector\UseNodesToAddCollector; -use Rector\Provider\CurrentFileProvider; -use Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper; +use Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; +use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType; use Rector\ValueObject\Application\File; final class NameImportingPhpDocNodeVisitor extends AbstractPhpDocNodeVisitor { @@ -37,7 +38,7 @@ final class NameImportingPhpDocNodeVisitor extends AbstractPhpDocNodeVisitor private $useNodesToAddCollector; /** * @readonly - * @var \Rector\Provider\CurrentFileProvider + * @var \Rector\Application\Provider\CurrentFileProvider */ private $currentFileProvider; /** @@ -47,9 +48,9 @@ final class NameImportingPhpDocNodeVisitor extends AbstractPhpDocNodeVisitor private $reflectionProvider; /** * @readonly - * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper + * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper */ - private $identifierTypeMapper; + private $identifierPhpDocTypeMapper; /** * @var PhpParserNode|null */ @@ -58,15 +59,15 @@ final class NameImportingPhpDocNodeVisitor extends AbstractPhpDocNodeVisitor * @var bool */ private $hasChanged = \false; - public function __construct(ClassNameImportSkipper $classNameImportSkipper, UseNodesToAddCollector $useNodesToAddCollector, CurrentFileProvider $currentFileProvider, ReflectionProvider $reflectionProvider, IdentifierTypeMapper $identifierTypeMapper) + public function __construct(ClassNameImportSkipper $classNameImportSkipper, UseNodesToAddCollector $useNodesToAddCollector, CurrentFileProvider $currentFileProvider, ReflectionProvider $reflectionProvider, IdentifierPhpDocTypeMapper $identifierPhpDocTypeMapper) { $this->classNameImportSkipper = $classNameImportSkipper; $this->useNodesToAddCollector = $useNodesToAddCollector; $this->currentFileProvider = $currentFileProvider; $this->reflectionProvider = $reflectionProvider; - $this->identifierTypeMapper = $identifierTypeMapper; + $this->identifierPhpDocTypeMapper = $identifierPhpDocTypeMapper; } - public function beforeTraverse(Node $node) : void + public function beforeTraverse(\PHPStan\PhpDocParser\Ast\Node $node) : void { if (!$this->currentPhpParserNode instanceof PhpParserNode) { throw new ShouldNotHappenException('Set "$currentPhpParserNode" first'); @@ -84,7 +85,17 @@ public function enterNode(Node $node) : ?Node if (!$node instanceof IdentifierTypeNode) { return null; } - $staticType = $this->identifierTypeMapper->mapIdentifierTypeNode($node, $this->currentPhpParserNode); + if (!$this->currentPhpParserNode instanceof PhpParserNode) { + throw new ShouldNotHappenException(); + } + // no \, skip early + if (\strpos($node->name, '\\') === \false) { + return null; + } + $staticType = $this->identifierPhpDocTypeMapper->mapIdentifierTypeNode($node, $this->currentPhpParserNode); + if ($staticType instanceof ShortenedObjectType) { + $staticType = new FullyQualifiedObjectType($staticType->getFullyQualifiedName()); + } if (!$staticType instanceof FullyQualifiedObjectType) { return null; } @@ -96,9 +107,6 @@ public function enterNode(Node $node) : ?Node if (!$file instanceof File) { return null; } - if (!$this->currentPhpParserNode instanceof PhpParserNode) { - throw new ShouldNotHappenException(); - } return $this->processFqnNameImport($this->currentPhpParserNode, $node, $staticType, $file); } public function setCurrentNode(PhpParserNode $phpParserNode) : void @@ -176,7 +184,7 @@ private function processDoctrineAnnotationTagValueNode(DoctrineAnnotationTagValu throw new ShouldNotHappenException(); } $identifierTypeNode = $doctrineAnnotationTagValueNode->identifierTypeNode; - $staticType = $this->identifierTypeMapper->mapIdentifierTypeNode($identifierTypeNode, $currentPhpParserNode); + $staticType = $this->identifierPhpDocTypeMapper->mapIdentifierTypeNode($identifierTypeNode, $currentPhpParserNode); if (!$staticType instanceof FullyQualifiedObjectType) { if (!$staticType instanceof ObjectType) { return; @@ -209,7 +217,7 @@ private function enterSpacelessPhpDocTagNode(SpacelessPhpDocTagNode $spacelessPh if (!$currentPhpParserNode instanceof PhpParserNode) { throw new ShouldNotHappenException(); } - $staticType = $this->identifierTypeMapper->mapIdentifierTypeNode(new IdentifierTypeNode($attributeClass), $currentPhpParserNode); + $staticType = $this->identifierPhpDocTypeMapper->mapIdentifierTypeNode(new IdentifierTypeNode($attributeClass), $currentPhpParserNode); if (!$staticType instanceof FullyQualifiedObjectType) { if (!$staticType instanceof ObjectType) { return null; diff --git a/vendor/rector/rector/src/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php b/vendor/rector/rector/src/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php index 4c82a57cd..a8f465bf5 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php +++ b/vendor/rector/rector/src/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php @@ -3,16 +3,11 @@ declare (strict_types=1); namespace Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider; -use PHPStan\BetterReflection\Reflector\DefaultReflector; use PHPStan\BetterReflection\SourceLocator\Type\AggregateSourceLocator; use PHPStan\BetterReflection\SourceLocator\Type\SourceLocator; -use PHPStan\Broker\ClassNotFoundException; -use PHPStan\File\CouldNotReadFileException; use PHPStan\Reflection\BetterReflection\SourceLocator\FileNodesFetcher; -use PHPStan\Reflection\BetterReflection\SourceLocator\NewOptimizedDirectorySourceLocator; use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLocatorFactory; use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedSingleFileSourceLocator; -use PHPStan\Reflection\ReflectionProvider; use Rector\Contract\DependencyInjection\ResetableInterface; use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment; /** @@ -42,19 +37,11 @@ final class DynamicSourceLocatorProvider implements ResetableInterface * @var \PHPStan\BetterReflection\SourceLocator\Type\AggregateSourceLocator|null */ private $aggregateSourceLocator; - /** - * @var \PHPStan\Reflection\ReflectionProvider - */ - private $reflectionProvider; public function __construct(FileNodesFetcher $fileNodesFetcher, OptimizedDirectorySourceLocatorFactory $optimizedDirectorySourceLocatorFactory) { $this->fileNodesFetcher = $fileNodesFetcher; $this->optimizedDirectorySourceLocatorFactory = $optimizedDirectorySourceLocatorFactory; } - public function autowire(ReflectionProvider $reflectionProvider) : void - { - $this->reflectionProvider = $reflectionProvider; - } public function setFilePath(string $filePath) : void { $this->filePaths = [$filePath]; @@ -87,9 +74,7 @@ public function provide() : SourceLocator foreach ($this->directories as $directory) { $sourceLocators[] = $this->optimizedDirectorySourceLocatorFactory->createByDirectory($directory); } - $aggregateSourceLocator = $this->aggregateSourceLocator = new AggregateSourceLocator($sourceLocators); - $this->collectClasses($aggregateSourceLocator, $sourceLocators); - return $aggregateSourceLocator; + return $this->aggregateSourceLocator = new AggregateSourceLocator($sourceLocators); } public function isPathsEmpty() : bool { @@ -104,30 +89,4 @@ public function reset() : void $this->directories = []; $this->aggregateSourceLocator = null; } - /** - * @param OptimizedSingleFileSourceLocator[]|NewOptimizedDirectorySourceLocator[] $sourceLocators - */ - private function collectClasses(AggregateSourceLocator $aggregateSourceLocator, array $sourceLocators) : void - { - if ($sourceLocators === []) { - return; - } - // no need to collect classes on single file, will auto collected - if (\count($sourceLocators) === 1 && $sourceLocators[0] instanceof OptimizedSingleFileSourceLocator) { - return; - } - $reflector = new DefaultReflector($aggregateSourceLocator); - // trigger collect "classes" on get class on locate identifier - try { - $reflections = $reflector->reflectAllClasses(); - foreach ($reflections as $reflection) { - // make 'classes' collection - try { - $this->reflectionProvider->getClass($reflection->getName()); - } catch (ClassNotFoundException $exception) { - } - } - } catch (CouldNotReadFileException $exception) { - } - } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/TypeAnalyzer/ArrayTypeAnalyzer.php b/vendor/rector/rector/src/NodeTypeResolver/TypeAnalyzer/ArrayTypeAnalyzer.php index 8e6ac45c7..ec9d71786 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/TypeAnalyzer/ArrayTypeAnalyzer.php +++ b/vendor/rector/rector/src/NodeTypeResolver/TypeAnalyzer/ArrayTypeAnalyzer.php @@ -4,19 +4,7 @@ namespace Rector\NodeTypeResolver\TypeAnalyzer; use PhpParser\Node\Expr; -use PhpParser\Node\Expr\Array_; -use PhpParser\Node\Expr\PropertyFetch; -use PhpParser\Node\Expr\StaticPropertyFetch; -use PHPStan\Reflection\ClassReflection; -use PHPStan\Reflection\Php\PhpPropertyReflection; -use PHPStan\Type\Accessory\HasOffsetType; -use PHPStan\Type\Accessory\NonEmptyArrayType; -use PHPStan\Type\ArrayType; -use PHPStan\Type\IntersectionType; -use PHPStan\Type\MixedType; -use PHPStan\Type\Type; use Rector\NodeTypeResolver\NodeTypeResolver; -use Rector\Reflection\ReflectionResolver; final class ArrayTypeAnalyzer { /** @@ -24,74 +12,13 @@ final class ArrayTypeAnalyzer * @var \Rector\NodeTypeResolver\NodeTypeResolver */ private $nodeTypeResolver; - /** - * @readonly - * @var \Rector\Reflection\ReflectionResolver - */ - private $reflectionResolver; - public function __construct(NodeTypeResolver $nodeTypeResolver, ReflectionResolver $reflectionResolver) + public function __construct(NodeTypeResolver $nodeTypeResolver) { $this->nodeTypeResolver = $nodeTypeResolver; - $this->reflectionResolver = $reflectionResolver; } public function isArrayType(Expr $expr) : bool { $nodeType = $this->nodeTypeResolver->getNativeType($expr); - if ($this->isIntersectionArrayType($nodeType)) { - return \true; - } - // PHPStan false positive, when variable has type[] docblock, but default array is missing - if (($expr instanceof PropertyFetch || $expr instanceof StaticPropertyFetch) && $this->isPropertyFetchWithArrayDefault($expr)) { - return \true; - } - if ($nodeType instanceof MixedType) { - if ($nodeType->isExplicitMixed()) { - return \false; - } - if ($this->isPropertyFetchWithArrayDefault($expr)) { - return \true; - } - } - return $nodeType instanceof ArrayType; - } - private function isIntersectionArrayType(Type $nodeType) : bool - { - if (!$nodeType instanceof IntersectionType) { - return \false; - } - foreach ($nodeType->getTypes() as $intersectionNodeType) { - if ($intersectionNodeType instanceof ArrayType) { - continue; - } - if ($intersectionNodeType instanceof HasOffsetType) { - continue; - } - if ($intersectionNodeType instanceof NonEmptyArrayType) { - continue; - } - return \false; - } - return \true; - } - /** - * phpstan bug workaround - https://phpstan.org/r/0443f283-244c-42b8-8373-85e7deb3504c - */ - private function isPropertyFetchWithArrayDefault(Expr $expr) : bool - { - if (!$expr instanceof PropertyFetch && !$expr instanceof StaticPropertyFetch) { - return \false; - } - $classReflection = $this->reflectionResolver->resolveClassReflection($expr); - if (!$classReflection instanceof ClassReflection) { - return \false; - } - $phpPropertyReflection = $this->reflectionResolver->resolvePropertyReflectionFromPropertyFetch($expr); - if ($phpPropertyReflection instanceof PhpPropertyReflection) { - $reflectionProperty = $phpPropertyReflection->getNativeReflection(); - $betterReflection = $reflectionProperty->getBetterReflection(); - $defaultValueExpr = $betterReflection->getDefaultValueExpression(); - return $defaultValueExpr instanceof Array_; - } - return \false; + return $nodeType->isArray()->yes(); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/ArrayTypeComparator.php b/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/ArrayTypeComparator.php index 064db3d74..365b904ee 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/ArrayTypeComparator.php +++ b/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/ArrayTypeComparator.php @@ -6,22 +6,11 @@ use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\MixedType; -use PHPStan\Type\UnionType; -use Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeCommonTypeNarrower; /** * @see \Rector\Tests\NodeTypeResolver\TypeComparator\ArrayTypeComparatorTest */ final class ArrayTypeComparator { - /** - * @readonly - * @var \Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeCommonTypeNarrower - */ - private $unionTypeCommonTypeNarrower; - public function __construct(UnionTypeCommonTypeNarrower $unionTypeCommonTypeNarrower) - { - $this->unionTypeCommonTypeNarrower = $unionTypeCommonTypeNarrower; - } public function isSubtype(ArrayType $checkedType, ArrayType $mainType) : bool { if (!$checkedType instanceof ConstantArrayType && !$mainType instanceof ConstantArrayType) { @@ -33,13 +22,7 @@ public function isSubtype(ArrayType $checkedType, ArrayType $mainType) : bool return \true; } $checkedItemType = $checkedType->getItemType(); - if ($checkedItemType instanceof UnionType) { - $checkedItemType = $this->unionTypeCommonTypeNarrower->narrowToGenericClassStringType($checkedItemType); - } $mainItemType = $mainType->getItemType(); - if ($mainItemType instanceof UnionType) { - $mainItemType = $this->unionTypeCommonTypeNarrower->narrowToGenericClassStringType($mainItemType); - } return $checkedItemType->isSuperTypeOf($mainItemType)->yes(); } } diff --git a/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/TypeComparator.php b/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/TypeComparator.php index bf4b25461..11eed12a7 100644 --- a/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/TypeComparator.php +++ b/vendor/rector/rector/src/NodeTypeResolver/TypeComparator/TypeComparator.php @@ -4,25 +4,18 @@ namespace Rector\NodeTypeResolver\TypeComparator; use PhpParser\Node; -use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\PhpDocParser\Ast\Type\TypeNode; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\ArrayType; use PHPStan\Type\BooleanType; -use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\ConstantScalarType; -use PHPStan\Type\Generic\GenericClassStringType; -use PHPStan\Type\IntegerType; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\StaticType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; use PHPStan\Type\TypeTraverser; -use PHPStan\Type\UnionType; -use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; -use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\NodeTypeResolver\PHPStan\TypeHasher; use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\StaticTypeMapper; @@ -55,24 +48,18 @@ final class TypeComparator * @var \Rector\NodeTypeResolver\TypeComparator\ScalarTypeComparator */ private $scalarTypeComparator; - /** - * @readonly - * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory - */ - private $typeFactory; /** * @readonly * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - public function __construct(TypeHasher $typeHasher, TypeNormalizer $typeNormalizer, StaticTypeMapper $staticTypeMapper, \Rector\NodeTypeResolver\TypeComparator\ArrayTypeComparator $arrayTypeComparator, \Rector\NodeTypeResolver\TypeComparator\ScalarTypeComparator $scalarTypeComparator, TypeFactory $typeFactory, ReflectionResolver $reflectionResolver) + public function __construct(TypeHasher $typeHasher, TypeNormalizer $typeNormalizer, StaticTypeMapper $staticTypeMapper, \Rector\NodeTypeResolver\TypeComparator\ArrayTypeComparator $arrayTypeComparator, \Rector\NodeTypeResolver\TypeComparator\ScalarTypeComparator $scalarTypeComparator, ReflectionResolver $reflectionResolver) { $this->typeHasher = $typeHasher; $this->typeNormalizer = $typeNormalizer; $this->staticTypeMapper = $staticTypeMapper; $this->arrayTypeComparator = $arrayTypeComparator; $this->scalarTypeComparator = $scalarTypeComparator; - $this->typeFactory = $typeFactory; $this->reflectionResolver = $reflectionResolver; } public function areTypesEqual(Type $firstType, Type $secondType) : bool @@ -89,9 +76,6 @@ public function areTypesEqual(Type $firstType, Type $secondType) : bool if ($this->areAliasedObjectMatchingFqnObject($firstType, $secondType)) { return \true; } - if ($this->areArrayUnionConstantEqualTypes($firstType, $secondType)) { - return \true; - } $firstType = $this->typeNormalizer->normalizeArrayOfUnionToUnionArray($firstType); $secondType = $this->typeNormalizer->normalizeArrayOfUnionToUnionArray($secondType); if ($this->typeHasher->areTypesEqual($firstType, $secondType)) { @@ -115,9 +99,6 @@ public function arePhpParserAndPhpStanPhpDocTypesEqual(Node $phpParserNode, Type if (!$areDifferentScalarTypes && !$this->areTypesEqual($phpParserNodeType, $phpStanDocType)) { return \false; } - if ($this->isTypeSelfAndDocParamTypeStatic($phpStanDocType, $phpParserNodeType, $phpStanDocTypeNode)) { - return \false; - } if ($this->areTypesSameWithLiteralTypeInPhpDoc($areDifferentScalarTypes, $phpStanDocType, $phpParserNodeType)) { return \false; } @@ -162,17 +143,7 @@ private function areArrayTypeWithSingleObjectChildToParent(Type $firstType, Type } $firstArrayItemType = $firstType->getItemType(); $secondArrayItemType = $secondType->getItemType(); - if ($this->isMutualObjectSubtypes($firstArrayItemType, $secondArrayItemType)) { - return \true; - } - if (!$firstArrayItemType instanceof GenericClassStringType) { - return \false; - } - if (!$secondArrayItemType instanceof GenericClassStringType) { - return \false; - } - // @todo resolve later better with template map, @see https://github.com/symplify/symplify/pull/3034/commits/4f6be8b87e52117b1aa1613b9b689ae958a9d6f4 - return $firstArrayItemType->getGenericType() instanceof ObjectType && $secondArrayItemType->getGenericType() instanceof ObjectType; + return $this->isMutualObjectSubtypes($firstArrayItemType, $secondArrayItemType); } private function isMutualObjectSubtypes(Type $firstArrayItemType, Type $secondArrayItemType) : bool { @@ -187,44 +158,6 @@ private function isMutualObjectSubtypes(Type $firstArrayItemType, Type $secondAr } return $secondArrayItemType->isSuperTypeOf($firstArrayItemType)->yes(); } - private function normalizeSingleUnionType(Type $type) : Type - { - if (!$type instanceof UnionType) { - return $type; - } - $uniqueTypes = $this->typeFactory->uniquateTypes($type->getTypes()); - if (\count($uniqueTypes) !== 1) { - return $type; - } - return $uniqueTypes[0]; - } - private function areArrayUnionConstantEqualTypes(Type $firstType, Type $secondType) : bool - { - if (!$firstType instanceof ArrayType) { - return \false; - } - if (!$secondType instanceof ArrayType) { - return \false; - } - if ($firstType instanceof ConstantArrayType || $secondType instanceof ConstantArrayType) { - return \false; - } - $firstKeyType = $this->normalizeSingleUnionType($firstType->getKeyType()); - $secondKeyType = $this->normalizeSingleUnionType($secondType->getKeyType()); - // mixed and integer type are mutual replaceable in practise - if ($firstKeyType instanceof MixedType) { - $firstKeyType = new IntegerType(); - } - if ($secondKeyType instanceof MixedType) { - $secondKeyType = new IntegerType(); - } - if (!$this->areTypesEqual($firstKeyType, $secondKeyType)) { - return \false; - } - $firstArrayType = $this->normalizeSingleUnionType($firstType->getItemType()); - $secondArrayType = $this->normalizeSingleUnionType($secondType->getItemType()); - return $this->areTypesEqual($firstArrayType, $secondArrayType); - } private function normalizeConstantBooleanType(Type $type) : Type { return TypeTraverser::map($type, static function (Type $type, callable $callable) : Type { @@ -234,10 +167,6 @@ private function normalizeConstantBooleanType(Type $type) : Type return $callable($type); }); } - private function isTypeSelfAndDocParamTypeStatic(Type $phpStanDocType, Type $phpParserNodeType, TypeNode $phpStanDocTypeNode) : bool - { - return $phpStanDocType instanceof StaticType && $phpParserNodeType instanceof ThisType && $phpStanDocTypeNode->getAttribute(PhpDocAttributeKey::PARENT) instanceof ParamTagValueNode; - } private function areTypesSameWithLiteralTypeInPhpDoc(bool $areDifferentScalarTypes, Type $phpStanDocType, Type $phpParserNodeType) : bool { return $areDifferentScalarTypes && $phpStanDocType instanceof ConstantScalarType && $phpParserNodeType->isSuperTypeOf($phpStanDocType)->yes(); diff --git a/vendor/rector/rector/src/PHPStan/NodeVisitor/ExprScopeFromStmtNodeVisitor.php b/vendor/rector/rector/src/PHPStan/NodeVisitor/ExprScopeFromStmtNodeVisitor.php deleted file mode 100644 index 673aa8ac0..000000000 --- a/vendor/rector/rector/src/PHPStan/NodeVisitor/ExprScopeFromStmtNodeVisitor.php +++ /dev/null @@ -1,83 +0,0 @@ -phpStanNodeScopeResolver = $phpStanNodeScopeResolver; - $this->filePath = $filePath; - $this->mutatingScope = $mutatingScope; - } - public function enterNode(Node $node) : ?Node - { - if ($node instanceof FileWithoutNamespace || $node instanceof Namespace_ || $node instanceof ClassLike || $node instanceof ClassMethod || $node instanceof Function_) { - return null; - } - if ($node instanceof Stmt) { - $this->currentStmt = $node; - return null; - } - if ($node instanceof VirtualNode) { - return null; - } - if (!$node instanceof Expr) { - return null; - } - if ($this->shouldSkipExpr($node)) { - return null; - } - $scope = $node->getAttribute(AttributeKey::SCOPE); - if ($scope instanceof MutatingScope) { - return null; - } - // too deep Expr, eg: $$param = $$bar = self::decodeValue($result->getItem()->getTextContent()); - $scope = $this->currentStmt instanceof Stmt ? $this->currentStmt->getAttribute(AttributeKey::SCOPE) : $this->mutatingScope; - $scope = $scope instanceof MutatingScope ? $scope : $this->mutatingScope; - $node->setAttribute(AttributeKey::SCOPE, $scope); - if ($node instanceof Closure) { - $this->phpStanNodeScopeResolver->processNodes($node->stmts, $this->filePath, $scope); - } - return null; - } - private function shouldSkipExpr(Expr $expr) : bool - { - return $expr->getAttribute(AttributeKey::EXPRESSION_DEPTH) < 2 && !$expr instanceof CallLike; - } -} diff --git a/vendor/rector/rector/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php b/vendor/rector/rector/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php index 52d328a6a..80b9da486 100644 --- a/vendor/rector/rector/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php +++ b/vendor/rector/rector/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php @@ -12,7 +12,6 @@ use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver; -use Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory; final class UnreachableStatementNodeVisitor extends NodeVisitorAbstract { /** @@ -27,14 +26,14 @@ final class UnreachableStatementNodeVisitor extends NodeVisitorAbstract private $filePath; /** * @readonly - * @var \Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory + * @var \PHPStan\Analyser\MutatingScope */ - private $scopeFactory; - public function __construct(PHPStanNodeScopeResolver $phpStanNodeScopeResolver, string $filePath, ScopeFactory $scopeFactory) + private $mutatingScope; + public function __construct(PHPStanNodeScopeResolver $phpStanNodeScopeResolver, string $filePath, MutatingScope $mutatingScope) { $this->phpStanNodeScopeResolver = $phpStanNodeScopeResolver; $this->filePath = $filePath; - $this->scopeFactory = $scopeFactory; + $this->mutatingScope = $mutatingScope; } public function enterNode(Node $node) : ?Node { @@ -64,6 +63,6 @@ public function enterNode(Node $node) : ?Node } private function resolveScope(?Scope $mutatingScope) : MutatingScope { - return $mutatingScope instanceof MutatingScope ? $mutatingScope : $this->scopeFactory->createFromFile($this->filePath); + return $mutatingScope instanceof MutatingScope ? $mutatingScope : $this->mutatingScope; } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php index 0f14523fc..410a0d1cf 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/DoctrineTypeAnalyzer.php @@ -6,7 +6,6 @@ use PHPStan\Type\ArrayType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; final class DoctrineTypeAnalyzer { @@ -18,7 +17,7 @@ public function isDoctrineCollectionWithIterableUnionType(Type $type) : bool $arrayType = null; $hasDoctrineCollectionType = \false; foreach ($type->getTypes() as $unionedType) { - if ($this->isCollectionObjectType($unionedType)) { + if ($this->isInstanceOfCollectionType($unionedType)) { $hasDoctrineCollectionType = \true; } if ($unionedType instanceof ArrayType) { @@ -37,11 +36,4 @@ public function isInstanceOfCollectionType(Type $type) : bool } return $type->isInstanceOf('Doctrine\\Common\\Collections\\Collection')->yes(); } - private function isCollectionObjectType(Type $type) : bool - { - if (!$type instanceof TypeWithClassName) { - return \false; - } - return $type->getClassName() === 'Doctrine\\Common\\Collections\\Collection'; - } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/Enum/TypeKind.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/Enum/TypeKind.php index c6adc6528..6a8577c9c 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/Enum/TypeKind.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/Enum/TypeKind.php @@ -17,4 +17,8 @@ final class TypeKind * @var string */ public const PARAM = 'param'; + /** + * @var string + */ + public const UNION = 'union'; } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/PHPStanStaticTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/PHPStanStaticTypeMapper.php index 1742d88d2..286ade283 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/PHPStanStaticTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/PHPStanStaticTypeMapper.php @@ -11,7 +11,7 @@ use Rector\Exception\NotImplementedYetException; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class PHPStanStaticTypeMapper { /** diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeAnalyzer.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeAnalyzer.php index 5cc2bbf11..098b8fd7a 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeAnalyzer.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeAnalyzer.php @@ -3,62 +3,12 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper\TypeAnalyzer; -use PHPStan\Type\ArrayType; -use PHPStan\Type\IterableType; -use PHPStan\Type\NullType; -use PHPStan\Type\ObjectType; -use PHPStan\Type\TypeWithClassName; +use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; -use Rector\PHPStanStaticTypeMapper\ValueObject\UnionTypeAnalysis; -use Traversable; final class UnionTypeAnalyzer { - public function analyseForArrayAndIterable(UnionType $unionType) : ?UnionTypeAnalysis + public function isNullable(UnionType $unionType) : bool { - $hasIterable = \false; - $hasArray = \false; - foreach ($unionType->getTypes() as $unionedType) { - if ($unionedType instanceof IterableType) { - $hasIterable = \true; - continue; - } - if ($unionedType instanceof ArrayType) { - $hasArray = \true; - continue; - } - if ($unionedType instanceof ObjectType && $unionedType->getClassName() === Traversable::class) { - $hasIterable = \true; - continue; - } - return null; - } - return new UnionTypeAnalysis($hasIterable, $hasArray); - } - /** - * @return TypeWithClassName[] - */ - public function matchExclusiveTypesWithClassNames(UnionType $unionType) : array - { - $typesWithClassNames = []; - foreach ($unionType->getTypes() as $unionedType) { - if (!$unionedType instanceof TypeWithClassName) { - return []; - } - $typesWithClassNames[] = $unionedType; - } - return $typesWithClassNames; - } - public function isNullable(UnionType $unionType, bool $checkTwoTypes = \false) : bool - { - $types = $unionType->getTypes(); - if ($checkTwoTypes && \count($types) > 2) { - return \false; - } - foreach ($types as $type) { - if ($type instanceof NullType) { - return \true; - } - } - return \false; + return TypeCombinator::containsNull($unionType); } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeCommonTypeNarrower.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeCommonTypeNarrower.php deleted file mode 100644 index 02d1f76a3..000000000 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeCommonTypeNarrower.php +++ /dev/null @@ -1,165 +0,0 @@ -|class-string<\PHPStan\PhpDocParser\Ast\Node>|class-string>> - */ - private const PRIORITY_TYPES = [ClassLike::class => [ClassLike::class], FunctionLike::class => [FunctionLike::class], BinaryOp::class => [BinaryOp::class, Expr::class], Expr::class => [Node::class, Expr::class], Stmt::class => [Node::class, Stmt::class], PhpDocTagValueNode::class => [PhpDocTagValueNode::class, \PHPStan\PhpDocParser\Ast\Node::class], Node::class => [Node::class], RectorInterface::class => [RectorInterface::class]]; - public function __construct(GenericClassStringTypeCorrector $genericClassStringTypeCorrector, ReflectionProvider $reflectionProvider) - { - $this->genericClassStringTypeCorrector = $genericClassStringTypeCorrector; - $this->reflectionProvider = $reflectionProvider; - } - public function narrowToSharedObjectType(UnionType $unionType) : ?ObjectType - { - $sharedTypes = $this->narrowToSharedTypes($unionType); - if ($sharedTypes !== []) { - foreach (self::PRIORITY_TYPES as $winningType => $groupTypes) { - $intersectedGroupTypes = \array_intersect($groupTypes, $sharedTypes); - if ($intersectedGroupTypes === $groupTypes) { - return new ObjectType($winningType); - } - } - $firstSharedType = $sharedTypes[0]; - return new ObjectType($firstSharedType); - } - return null; - } - /** - * @return \PHPStan\Type\UnionType|\PHPStan\Type\Generic\GenericClassStringType - */ - public function narrowToGenericClassStringType(UnionType $unionType) - { - $availableTypes = []; - foreach ($unionType->getTypes() as $unionedType) { - if ($unionedType instanceof ConstantStringType) { - $unionedType = $this->genericClassStringTypeCorrector->correct($unionedType); - } - if (!$unionedType instanceof GenericClassStringType) { - return $unionType; - } - $genericClassStrings = []; - if ($unionedType->getGenericType() instanceof ObjectType) { - $parentClassReflections = $this->resolveClassParentClassesAndInterfaces($unionedType->getGenericType()); - foreach ($parentClassReflections as $parentClassReflection) { - $genericClassStrings[] = $parentClassReflection->getName(); - } - } - $availableTypes[] = $genericClassStrings; - } - $genericClassStringType = $this->createGenericClassStringType($availableTypes); - if ($genericClassStringType instanceof GenericClassStringType) { - return $genericClassStringType; - } - return $unionType; - } - /** - * @return string[] - */ - private function narrowToSharedTypes(UnionType $unionType) : array - { - $availableTypes = []; - foreach ($unionType->getTypes() as $unionedType) { - if (!$unionedType instanceof ObjectType) { - return []; - } - $typeClassReflections = $this->resolveClassParentClassesAndInterfaces($unionedType); - $typeClassNames = []; - foreach ($typeClassReflections as $typeClassReflection) { - $typeClassNames[] = $typeClassReflection->getName(); - } - if ($typeClassNames === []) { - continue; - } - $availableTypes[] = $typeClassNames; - } - return $this->narrowAvailableTypes($availableTypes); - } - /** - * @return ClassReflection[] - */ - private function resolveClassParentClassesAndInterfaces(ObjectType $objectType) : array - { - if (!$this->reflectionProvider->hasClass($objectType->getClassName())) { - return []; - } - $classReflection = $this->reflectionProvider->getClass($objectType->getClassName()); - // put earliest interfaces first - $implementedInterfaceClassReflections = \array_reverse($classReflection->getInterfaces()); - /** @var ClassReflection[] $parentClassAndInterfaceReflections */ - $parentClassAndInterfaceReflections = \array_merge($implementedInterfaceClassReflections, $classReflection->getParents()); - return $this->filterOutNativeClassReflections($parentClassAndInterfaceReflections); - } - /** - * @param string[][] $availableTypes - * @return string[] - */ - private function narrowAvailableTypes(array $availableTypes) : array - { - if (\count($availableTypes) < 2) { - return []; - } - /** @var string[] $sharedTypes */ - $sharedTypes = \array_intersect(...$availableTypes); - return \array_values($sharedTypes); - } - /** - * @param string[][] $availableTypes - */ - private function createGenericClassStringType(array $availableTypes) : ?GenericClassStringType - { - $sharedTypes = $this->narrowAvailableTypes($availableTypes); - if ($sharedTypes !== []) { - foreach (self::PRIORITY_TYPES as $winningType => $groupTypes) { - $intersectedGroupTypes = \array_intersect($groupTypes, $sharedTypes); - if ($intersectedGroupTypes === $groupTypes) { - return new GenericClassStringType(new ObjectType($winningType)); - } - } - $firstSharedType = $sharedTypes[0]; - return new GenericClassStringType(new ObjectType($firstSharedType)); - } - return null; - } - /** - * @param ClassReflection[] $classReflections - * @return ClassReflection[] - */ - private function filterOutNativeClassReflections(array $classReflections) : array - { - return \array_filter($classReflections, static function (ClassReflection $classReflection) : bool { - return !$classReflection->isBuiltin(); - }); - } -} diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php index 6cf164e14..03ff58369 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ArrayTypeMapper.php @@ -8,7 +8,6 @@ use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\PhpDocParser\Ast\Type\TypeNode; -use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ArrayType; use PHPStan\Type\ClassStringType; use PHPStan\Type\Constant\ConstantArrayType; @@ -16,14 +15,12 @@ use PHPStan\Type\Generic\GenericClassStringType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; -use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareArrayTypeNode; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; use Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper; -use Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeCommonTypeNarrower; use Rector\TypeDeclaration\NodeTypeAnalyzer\DetailedTypeAnalyzer; use Rector\TypeDeclaration\TypeAnalyzer\GenericClassStringTypeNormalizer; /** @@ -33,16 +30,6 @@ */ final class ArrayTypeMapper implements TypeMapperInterface { - /** - * @readonly - * @var \Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeCommonTypeNarrower - */ - private $unionTypeCommonTypeNarrower; - /** - * @readonly - * @var \PHPStan\Reflection\ReflectionProvider - */ - private $reflectionProvider; /** * @readonly * @var \Rector\TypeDeclaration\TypeAnalyzer\GenericClassStringTypeNormalizer @@ -61,10 +48,8 @@ final class ArrayTypeMapper implements TypeMapperInterface * @var \Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper */ private $phpStanStaticTypeMapper; - public function __construct(UnionTypeCommonTypeNarrower $unionTypeCommonTypeNarrower, ReflectionProvider $reflectionProvider, GenericClassStringTypeNormalizer $genericClassStringTypeNormalizer, DetailedTypeAnalyzer $detailedTypeAnalyzer) + public function __construct(GenericClassStringTypeNormalizer $genericClassStringTypeNormalizer, DetailedTypeAnalyzer $detailedTypeAnalyzer) { - $this->unionTypeCommonTypeNarrower = $unionTypeCommonTypeNarrower; - $this->reflectionProvider = $reflectionProvider; $this->genericClassStringTypeNormalizer = $genericClassStringTypeNormalizer; $this->detailedTypeAnalyzer = $detailedTypeAnalyzer; } @@ -95,10 +80,6 @@ public function mapToPHPStanPhpDocTypeNode(Type $type) : TypeNode if ($isGenericArray) { return $this->createGenericArrayType($type, \true); } - $narrowedTypeNode = $this->narrowConstantArrayTypeOfUnionType($type, $itemType); - if ($narrowedTypeNode instanceof TypeNode) { - return $narrowedTypeNode; - } $itemTypeNode = $this->phpStanStaticTypeMapper->mapToPHPStanPhpDocTypeNode($itemType); return new SpacingAwareArrayTypeNode($itemTypeNode); } @@ -197,33 +178,6 @@ private function isIntegerKeyAndNonNestedArray(ArrayType $arrayType) : bool } return !$arrayType->getItemType() instanceof ArrayType; } - private function narrowConstantArrayTypeOfUnionType(ArrayType $arrayType, Type $itemType) : ?TypeNode - { - if ($arrayType instanceof ConstantArrayType && $itemType instanceof UnionType) { - $narrowedItemType = $this->unionTypeCommonTypeNarrower->narrowToSharedObjectType($itemType); - if ($narrowedItemType instanceof ObjectType) { - $itemTypeNode = $this->phpStanStaticTypeMapper->mapToPHPStanPhpDocTypeNode($narrowedItemType); - return new SpacingAwareArrayTypeNode($itemTypeNode); - } - $narrowedItemType = $this->unionTypeCommonTypeNarrower->narrowToGenericClassStringType($itemType); - if ($narrowedItemType instanceof GenericClassStringType) { - return $this->createTypeNodeFromGenericClassStringType($narrowedItemType); - } - } - return null; - } - /** - * @return \PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode|\PHPStan\PhpDocParser\Ast\Type\GenericTypeNode - */ - private function createTypeNodeFromGenericClassStringType(GenericClassStringType $genericClassStringType) - { - $genericType = $genericClassStringType->getGenericType(); - if ($genericType instanceof ObjectType && !$this->reflectionProvider->hasClass($genericType->getClassName())) { - return new IdentifierTypeNode($genericType->getClassName()); - } - $itemTypeNode = $this->phpStanStaticTypeMapper->mapToPHPStanPhpDocTypeNode($genericClassStringType); - return new GenericTypeNode(new IdentifierTypeNode('array'), [$itemTypeNode]); - } private function isClassStringArrayType(ArrayType $arrayType) : bool { if ($arrayType->getKeyType() instanceof MixedType) { diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php index 2a8ae4a44..14662ace7 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/BooleanTypeMapper.php @@ -46,15 +46,15 @@ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::SCALAR_TYPES)) { return null; } - if ($typeKind !== TypeKind::RETURN) { + if ($typeKind === TypeKind::PROPERTY) { return new Identifier('bool'); } - if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE)) { - return new Identifier('bool'); + if ($typeKind === TypeKind::UNION && $type instanceof ConstantBooleanType && $type->getValue() === \false) { + return new Identifier('false'); } - if (!$type instanceof ConstantBooleanType) { - return new Identifier('bool'); + if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE) && $type instanceof ConstantBooleanType) { + return $type->getValue() ? new Identifier('true') : new Identifier('false'); } - return $type->getValue() ? new Identifier('true') : new Identifier('false'); + return new Identifier('bool'); } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ConditionalTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ConditionalTypeMapper.php index ef373875b..5e4b25841 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ConditionalTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ConditionalTypeMapper.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper\TypeMapper; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PHPStan\PhpDocParser\Ast\Type\TypeNode; use PHPStan\Reflection\ClassReflection; diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/MixedTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/MixedTypeMapper.php index 2a7eac27f..e446ba533 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/MixedTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/MixedTypeMapper.php @@ -10,6 +10,7 @@ use PHPStan\Type\Type; use Rector\Php\PhpVersionProvider; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; +use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\ValueObject\PhpVersionFeature; /** * @implements TypeMapperInterface @@ -47,6 +48,9 @@ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node if (!$type->isExplicitMixed()) { return null; } + if ($typeKind === TypeKind::UNION) { + return null; + } return new Identifier('mixed'); } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/NullTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/NullTypeMapper.php index 010c14939..69dd2aa18 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/NullTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/NullTypeMapper.php @@ -43,12 +43,14 @@ public function mapToPHPStanPhpDocTypeNode(Type $type) : TypeNode */ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node { - if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE)) { - return null; + // can be a standalone type, only case where null makes sense + if ($this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE) && $typeKind === TypeKind::RETURN) { + return new Identifier('null'); } - if ($typeKind !== TypeKind::RETURN) { - return null; + // if part of union, can be added even in PHP 8.0 + if ($typeKind === TypeKind::UNION && $this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULLABLE_TYPE)) { + return new Identifier('null'); } - return new Identifier('null'); + return null; } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php index 967457aba..01be2f353 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper\TypeMapper; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/StrictMixedTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/StrictMixedTypeMapper.php index 961a63638..9539d083b 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/StrictMixedTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/StrictMixedTypeMapper.php @@ -8,16 +8,28 @@ use PHPStan\PhpDocParser\Ast\Type\TypeNode; use PHPStan\Type\StrictMixedType; use PHPStan\Type\Type; +use Rector\Php\PhpVersionProvider; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; +use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; +use Rector\ValueObject\PhpVersionFeature; /** * @implements TypeMapperInterface */ final class StrictMixedTypeMapper implements TypeMapperInterface { + /** + * @readonly + * @var \Rector\Php\PhpVersionProvider + */ + private $phpVersionProvider; /** * @var string */ private const MIXED = 'mixed'; + public function __construct(PhpVersionProvider $phpVersionProvider) + { + $this->phpVersionProvider = $phpVersionProvider; + } public function getNodeClass() : string { return StrictMixedType::class; @@ -34,6 +46,12 @@ public function mapToPHPStanPhpDocTypeNode(Type $type) : TypeNode */ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node { + if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::MIXED_TYPE)) { + return null; + } + if ($typeKind === TypeKind::UNION) { + return null; + } return new Identifier(self::MIXED); } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php index 19cce2e5f..ee90f5c45 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php @@ -11,29 +11,18 @@ use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\NullableType; use PhpParser\Node\UnionType as PhpParserUnionType; -use PhpParser\NodeAbstract; use PHPStan\PhpDocParser\Ast\Type\TypeNode; -use PHPStan\Type\Constant\ConstantBooleanType; -use PHPStan\Type\IterableType; -use PHPStan\Type\MixedType; -use PHPStan\Type\NullType; -use PHPStan\Type\ObjectType; +use PHPStan\Type\CallableType; use PHPStan\Type\Type; -use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; -use PHPStan\Type\VoidType; use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode; -use Rector\NodeNameResolver\NodeNameResolver; use Rector\Php\PhpVersionProvider; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper; -use Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeAnalyzer; -use Rector\PHPStanStaticTypeMapper\ValueObject\UnionTypeAnalysis; -use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; -use RectorPrefix202405\Webmozart\Assert\Assert; -use RectorPrefix202405\Webmozart\Assert\InvalidArgumentException; +use RectorPrefix202410\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\InvalidArgumentException; /** * @implements TypeMapperInterface */ @@ -44,25 +33,13 @@ final class UnionTypeMapper implements TypeMapperInterface * @var \Rector\Php\PhpVersionProvider */ private $phpVersionProvider; - /** - * @readonly - * @var \Rector\PHPStanStaticTypeMapper\TypeAnalyzer\UnionTypeAnalyzer - */ - private $unionTypeAnalyzer; - /** - * @readonly - * @var \Rector\NodeNameResolver\NodeNameResolver - */ - private $nodeNameResolver; /** * @var \Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper */ private $phpStanStaticTypeMapper; - public function __construct(PhpVersionProvider $phpVersionProvider, UnionTypeAnalyzer $unionTypeAnalyzer, NodeNameResolver $nodeNameResolver) + public function __construct(PhpVersionProvider $phpVersionProvider) { $this->phpVersionProvider = $phpVersionProvider; - $this->unionTypeAnalyzer = $unionTypeAnalyzer; - $this->nodeNameResolver = $nodeNameResolver; } public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper) : void { @@ -77,16 +54,10 @@ public function getNodeClass() : string */ public function mapToPHPStanPhpDocTypeNode(Type $type) : TypeNode { - // note: cannot be handled by PHPStan as uses no-space around | $unionTypesNodes = []; - $skipIterable = $this->shouldSkipIterable($type); foreach ($type->getTypes() as $unionedType) { - if ($unionedType instanceof IterableType && $skipIterable) { - continue; - } $unionTypesNodes[] = $this->phpStanStaticTypeMapper->mapToPHPStanPhpDocTypeNode($unionedType); } - $unionTypesNodes = \array_unique($unionTypesNodes); return new BracketsAwareUnionTypeNode($unionTypesNodes); } /** @@ -94,17 +65,18 @@ public function mapToPHPStanPhpDocTypeNode(Type $type) : TypeNode */ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node { - // special case for nullable - $nullabledType = $this->matchTypeForNullableUnionType($type); - if (!$nullabledType instanceof Type) { - return $this->matchTypeForUnionedTypes($type, $typeKind); + $phpParserUnionType = $this->matchPhpParserUnionType($type, $typeKind); + if ($phpParserUnionType instanceof PhpParserUnionType) { + return $this->resolveUnionTypeNode($phpParserUnionType); } - return $this->mapNullabledType($nullabledType, $typeKind); + return $phpParserUnionType; } /** + * If type is nullable, and has only one other value, + * this creates at least "?Type" in case of PHP 7.1-7.4 * @return PhpParserUnionType|\PhpParser\Node\NullableType|null */ - public function resolveTypeWithNullablePHPParserUnionType(PhpParserUnionType $phpParserUnionType) + private function resolveTypeWithNullablePHPParserUnionType(PhpParserUnionType $phpParserUnionType) { $totalTypes = \count($phpParserUnionType->types); if ($totalTypes === 2) { @@ -142,48 +114,19 @@ private function resolveNullableType(NullableType $nullableType) /** @var PHPParserNodeIntersectionType|Identifier|Name $type */ $type = $nullableType->type; if (!$type instanceof PHPParserNodeIntersectionType) { + // ?false is allowed only since PHP 8.2+, lets fallback to bool instead + if ($type->toString() === 'false' && !$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::NULL_FALSE_TRUE_STANDALONE_TYPE)) { + return new NullableType(new Identifier('bool')); + } return $nullableType; } - if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::INTERSECTION_TYPES)) { + if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::UNION_TYPES)) { return null; } $types = [$type]; $types[] = new Identifier('null'); return new PhpParserUnionType($types); } - /** - * @param TypeKind::* $typeKind - */ - private function mapNullabledType(Type $nullabledType, string $typeKind) : ?Node - { - // void cannot be nullable - if ($nullabledType->isVoid()->yes()) { - return null; - } - $nullabledTypeNode = $this->phpStanStaticTypeMapper->mapToPhpParserNode($nullabledType, $typeKind); - if (!$nullabledTypeNode instanceof Node) { - return null; - } - if (\in_array(\get_class($nullabledTypeNode), [NullableType::class, ComplexType::class], \true)) { - return $nullabledTypeNode; - } - /** @var Name $nullabledTypeNode */ - if (!$this->nodeNameResolver->isNames($nullabledTypeNode, ['false', 'mixed'])) { - return $this->resolveNullableType(new NullableType($nullabledTypeNode)); - } - return null; - } - private function shouldSkipIterable(UnionType $unionType) : bool - { - $unionTypeAnalysis = $this->unionTypeAnalyzer->analyseForArrayAndIterable($unionType); - if (!$unionTypeAnalysis instanceof UnionTypeAnalysis) { - return \false; - } - if (!$unionTypeAnalysis->hasIterable()) { - return \false; - } - return $unionTypeAnalysis->hasArray(); - } private function resolveUnionTypes(PhpParserUnionType $phpParserUnionType) : ?PhpParserUnionType { if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::UNION_TYPES)) { @@ -191,21 +134,6 @@ private function resolveUnionTypes(PhpParserUnionType $phpParserUnionType) : ?Ph } return $phpParserUnionType; } - private function matchTypeForNullableUnionType(UnionType $unionType) : ?Type - { - if (\count($unionType->getTypes()) !== 2) { - return null; - } - $firstType = $unionType->getTypes()[0]; - $secondType = $unionType->getTypes()[1]; - if ($firstType instanceof NullType) { - return $secondType; - } - if ($secondType instanceof NullType) { - return $firstType; - } - return null; - } private function hasObjectAndStaticType(PhpParserUnionType $phpParserUnionType) : bool { $hasAnonymousObjectType = \false; @@ -223,135 +151,38 @@ private function hasObjectAndStaticType(PhpParserUnionType $phpParserUnionType) return $hasObjectType && $hasAnonymousObjectType; } /** - * @param TypeKind::* $typeKind - * @return Name|FullyQualified|ComplexType|Identifier|null - */ - private function matchTypeForUnionedTypes(UnionType $unionType, string $typeKind) : ?Node - { - // use first unioned type in case of unioned object types - $compatibleObjectTypeNode = $this->processResolveCompatibleObjectCandidates($unionType); - if ($compatibleObjectTypeNode instanceof NullableType || $compatibleObjectTypeNode instanceof FullyQualified) { - return $compatibleObjectTypeNode; - } - $phpParserUnionType = $this->matchPhpParserUnionType($unionType, $typeKind); - if ($phpParserUnionType instanceof NullableType) { - return $phpParserUnionType; - } - if ($phpParserUnionType instanceof PhpParserUnionType) { - return $this->resolveUnionTypeNode($phpParserUnionType); - } - return $phpParserUnionType; - } - private function processResolveCompatibleObjectCandidates(UnionType $unionType) : ?Node - { - // the type should be compatible with all other types, e.g. A extends B, B - $compatibleObjectType = $this->resolveCompatibleObjectCandidate($unionType); - if ($compatibleObjectType instanceof UnionType) { - $type = $this->matchTypeForNullableUnionType($compatibleObjectType); - if ($type instanceof ObjectType) { - return $this->resolveNullableType(new NullableType(new FullyQualified($type->getClassName()))); - } - } - if (!$compatibleObjectType instanceof ObjectType) { - return null; - } - return new FullyQualified($compatibleObjectType->getClassName()); - } - /** - * @param TypeKind::* $typeKind * @return Name|FullyQualified|ComplexType|Identifier|null */ private function matchPhpParserUnionType(UnionType $unionType, string $typeKind) : ?Node { $phpParserUnionedTypes = []; foreach ($unionType->getTypes() as $unionedType) { + // NullType or ConstantBooleanType with false value inside UnionType is allowed // void type and mixed type are not allowed in union - if (\in_array(\get_class($unionedType), [MixedType::class, VoidType::class], \true)) { + $phpParserNode = $this->phpStanStaticTypeMapper->mapToPhpParserNode($unionedType, TypeKind::UNION); + if ($phpParserNode === null) { return null; } - /** - * NullType or ConstantBooleanType with false value inside UnionType is allowed - */ - $phpParserNode = $this->resolveAllowedStandaloneTypeInUnionType($unionedType, $typeKind); - if ($phpParserNode === null) { + // special callable type only not allowed on property + if ($typeKind === TypeKind::PROPERTY && $unionedType instanceof CallableType) { return null; } $phpParserUnionedTypes[] = $phpParserNode; } /** @var Identifier[]|Name[] $phpParserUnionedTypes */ - $phpParserUnionedTypes = \array_unique($phpParserUnionedTypes); + $phpParserUnionedTypes = \array_unique($phpParserUnionedTypes, \SORT_REGULAR); $countPhpParserUnionedTypes = \count($phpParserUnionedTypes); if ($countPhpParserUnionedTypes === 1) { return $phpParserUnionedTypes[0]; } - if ($countPhpParserUnionedTypes === 0) { - return null; - } return $this->resolveTypeWithNullablePHPParserUnionType(new PhpParserUnionType($phpParserUnionedTypes)); } - /** - * @param TypeKind::* $typeKind - * @return \PhpParser\Node\Identifier|\PhpParser\Node\Name|null|PHPParserNodeIntersectionType|\PhpParser\Node\ComplexType - */ - private function resolveAllowedStandaloneTypeInUnionType(Type $unionedType, string $typeKind) - { - if ($unionedType instanceof NullType) { - return new Identifier('null'); - } - if ($unionedType instanceof ConstantBooleanType && !$unionedType->getValue()) { - return new Identifier('false'); - } - return $this->phpStanStaticTypeMapper->mapToPhpParserNode($unionedType, $typeKind); - } - /** - * @return \PHPStan\Type\UnionType|\PHPStan\Type\TypeWithClassName|null - */ - private function resolveCompatibleObjectCandidate(UnionType $unionType) - { - $typesWithClassNames = $this->unionTypeAnalyzer->matchExclusiveTypesWithClassNames($unionType); - if ($typesWithClassNames === []) { - return null; - } - $sharedTypeWithClassName = $this->matchTwoObjectTypes($typesWithClassNames); - if ($sharedTypeWithClassName instanceof TypeWithClassName) { - return $this->correctObjectType($sharedTypeWithClassName); - } - return null; - } - /** - * @param TypeWithClassName[] $typesWithClassNames - */ - private function matchTwoObjectTypes(array $typesWithClassNames) : ?TypeWithClassName - { - foreach ($typesWithClassNames as $typeWithClassName) { - foreach ($typesWithClassNames as $nestedTypeWithClassName) { - if (!$this->areTypeWithClassNamesRelated($typeWithClassName, $nestedTypeWithClassName)) { - continue 2; - } - } - return $typeWithClassName; - } - return null; - } - private function areTypeWithClassNamesRelated(TypeWithClassName $firstType, TypeWithClassName $secondType) : bool - { - return $firstType->accepts($secondType, \false)->yes(); - } - private function correctObjectType(TypeWithClassName $typeWithClassName) : TypeWithClassName - { - if ($typeWithClassName->getClassName() === NodeAbstract::class) { - return new ObjectType('PhpParser\\Node'); - } - if ($typeWithClassName->getClassName() === AbstractRector::class) { - return new ObjectType('Rector\\Contract\\Rector\\RectorInterface'); - } - return $typeWithClassName; - } private function resolveUnionTypeNode(PhpParserUnionType $phpParserUnionType) : ?PhpParserUnionType { if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::UNION_TYPES)) { return null; } + // special case that would crash, when stdClass and object is used, if ($this->hasObjectAndStaticType($phpParserUnionType)) { return null; } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/VoidTypeMapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/VoidTypeMapper.php index 91e8b8dcc..e640706d9 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/VoidTypeMapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/TypeMapper/VoidTypeMapper.php @@ -50,7 +50,7 @@ public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node if (!$this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::VOID_TYPE)) { return null; } - if (\in_array($typeKind, [TypeKind::PARAM, TypeKind::PROPERTY], \true)) { + if (\in_array($typeKind, [TypeKind::PARAM, TypeKind::PROPERTY, TypeKind::UNION], \true)) { return null; } return new Identifier(self::VOID); diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php index 432ecc422..cea3977d6 100644 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php +++ b/vendor/rector/rector/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php @@ -4,6 +4,7 @@ namespace Rector\PHPStanStaticTypeMapper\Utils; use PHPStan\Type\Type; +use PHPStan\Type\TypeCombinator; use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; final class TypeUnwrapper @@ -21,15 +22,8 @@ public function unwrapFirstObjectTypeFromUnionType(Type $type) : Type } return $type; } - public function removeNullTypeFromUnionType(UnionType $unionType) : UnionType + public function removeNullTypeFromUnionType(UnionType $unionType) : Type { - $unionedTypesWithoutNullType = []; - foreach ($unionType->getTypes() as $type) { - if ($type instanceof UnionType) { - continue; - } - $unionedTypesWithoutNullType[] = $type; - } - return new UnionType($unionedTypesWithoutNullType); + return TypeCombinator::removeNull($unionType); } } diff --git a/vendor/rector/rector/src/PHPStanStaticTypeMapper/ValueObject/UnionTypeAnalysis.php b/vendor/rector/rector/src/PHPStanStaticTypeMapper/ValueObject/UnionTypeAnalysis.php deleted file mode 100644 index df1c11286..000000000 --- a/vendor/rector/rector/src/PHPStanStaticTypeMapper/ValueObject/UnionTypeAnalysis.php +++ /dev/null @@ -1,31 +0,0 @@ -hasIterable = $hasIterable; - $this->hasArray = $hasArray; - } - public function hasIterable() : bool - { - return $this->hasIterable; - } - public function hasArray() : bool - { - return $this->hasArray; - } -} diff --git a/vendor/rector/rector/src/Parallel/Application/ParallelFileProcessor.php b/vendor/rector/rector/src/Parallel/Application/ParallelFileProcessor.php index 0c29a0225..30fed0054 100644 --- a/vendor/rector/rector/src/Parallel/Application/ParallelFileProcessor.php +++ b/vendor/rector/rector/src/Parallel/Application/ParallelFileProcessor.php @@ -3,30 +3,29 @@ declare (strict_types=1); namespace Rector\Parallel\Application; -use RectorPrefix202405\Clue\React\NDJson\Decoder; -use RectorPrefix202405\Clue\React\NDJson\Encoder; -use RectorPrefix202405\Nette\Utils\Random; -use RectorPrefix202405\React\EventLoop\StreamSelectLoop; -use RectorPrefix202405\React\Socket\ConnectionInterface; -use RectorPrefix202405\React\Socket\TcpServer; +use RectorPrefix202410\Clue\React\NDJson\Decoder; +use RectorPrefix202410\Clue\React\NDJson\Encoder; +use RectorPrefix202410\Nette\Utils\Random; +use RectorPrefix202410\React\EventLoop\StreamSelectLoop; +use RectorPrefix202410\React\Socket\ConnectionInterface; +use RectorPrefix202410\React\Socket\TcpServer; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Console\Command\ProcessCommand; use Rector\Parallel\Command\WorkerCommandLineFactory; use Rector\Parallel\ValueObject\Bridge; -use Rector\ValueObject\Configuration; use Rector\ValueObject\Error\SystemError; use Rector\ValueObject\ProcessResult; use Rector\ValueObject\Reporting\FileDiff; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symplify\EasyParallel\Enum\Action; -use RectorPrefix202405\Symplify\EasyParallel\Enum\Content; -use RectorPrefix202405\Symplify\EasyParallel\Enum\ReactCommand; -use RectorPrefix202405\Symplify\EasyParallel\Enum\ReactEvent; -use RectorPrefix202405\Symplify\EasyParallel\ValueObject\ParallelProcess; -use RectorPrefix202405\Symplify\EasyParallel\ValueObject\ProcessPool; -use RectorPrefix202405\Symplify\EasyParallel\ValueObject\Schedule; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symplify\EasyParallel\Enum\Action; +use RectorPrefix202410\Symplify\EasyParallel\Enum\Content; +use RectorPrefix202410\Symplify\EasyParallel\Enum\ReactCommand; +use RectorPrefix202410\Symplify\EasyParallel\Enum\ReactEvent; +use RectorPrefix202410\Symplify\EasyParallel\ValueObject\ParallelProcess; +use RectorPrefix202410\Symplify\EasyParallel\ValueObject\ProcessPool; +use RectorPrefix202410\Symplify\EasyParallel\ValueObject\Schedule; use Throwable; /** * Inspired from @see @@ -63,7 +62,7 @@ public function __construct(WorkerCommandLineFactory $workerCommandLineFactory) /** * @param callable(int $stepCount): void $postFileCallback Used for progress bar jump */ - public function process(Schedule $schedule, string $mainScript, callable $postFileCallback, InputInterface $input, Configuration $configuration) : ProcessResult + public function process(Schedule $schedule, string $mainScript, callable $postFileCallback, InputInterface $input) : ProcessResult { $jobs = \array_reverse($schedule->getJobs()); $streamSelectLoop = new StreamSelectLoop(); diff --git a/vendor/rector/rector/src/Parallel/Command/WorkerCommandLineFactory.php b/vendor/rector/rector/src/Parallel/Command/WorkerCommandLineFactory.php index ed4c68ccd..478dc1a2e 100644 --- a/vendor/rector/rector/src/Parallel/Command/WorkerCommandLineFactory.php +++ b/vendor/rector/rector/src/Parallel/Command/WorkerCommandLineFactory.php @@ -6,10 +6,10 @@ use Rector\ChangesReporting\Output\JsonOutputFormatter; use Rector\Configuration\Option; use Rector\FileSystem\FilePathHelper; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symplify\EasyParallel\Exception\ParallelShouldNotHappenException; -use RectorPrefix202405\Symplify\EasyParallel\Reflection\CommandFromReflectionFactory; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symplify\EasyParallel\Exception\ParallelShouldNotHappenException; +use RectorPrefix202410\Symplify\EasyParallel\Reflection\CommandFromReflectionFactory; /** * @see \Rector\Tests\Parallel\Command\WorkerCommandLineFactoryTest * @todo possibly extract to symplify/easy-parallel diff --git a/vendor/rector/rector/src/Parallel/ValueObject/BridgeItem.php b/vendor/rector/rector/src/Parallel/ValueObject/BridgeItem.php index 72b7fed98..1b03b2dda 100644 --- a/vendor/rector/rector/src/Parallel/ValueObject/BridgeItem.php +++ b/vendor/rector/rector/src/Parallel/ValueObject/BridgeItem.php @@ -21,6 +21,10 @@ final class BridgeItem * @var string */ public const RELATIVE_FILE_PATH = 'relative_file_path'; + /** + * @var string + */ + public const ABSOLUTE_FILE_PATH = 'absolute_file_path'; /** * @var string */ diff --git a/vendor/rector/rector/src/Php/PhpVersionProvider.php b/vendor/rector/rector/src/Php/PhpVersionProvider.php index 6ddc11330..578bb889d 100644 --- a/vendor/rector/rector/src/Php/PhpVersionProvider.php +++ b/vendor/rector/rector/src/Php/PhpVersionProvider.php @@ -6,7 +6,7 @@ use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Exception\Configuration\InvalidConfigurationException; -use Rector\Php\PhpVersionResolver\ProjectComposerJsonPhpVersionResolver; +use Rector\Php\PhpVersionResolver\ComposerJsonPhpVersionResolver; use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment; use Rector\Util\StringUtils; use Rector\ValueObject\PhpVersion; @@ -44,7 +44,7 @@ public function provide() : int } $projectComposerJson = \getcwd() . '/composer.json'; if (\file_exists($projectComposerJson)) { - $phpVersion = ProjectComposerJsonPhpVersionResolver::resolve($projectComposerJson); + $phpVersion = ComposerJsonPhpVersionResolver::resolve($projectComposerJson); if ($phpVersion !== null) { return $this->phpVersionFeatures = $phpVersion; } diff --git a/vendor/rector/rector/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php b/vendor/rector/rector/src/Php/PhpVersionResolver/ComposerJsonPhpVersionResolver.php similarity index 56% rename from vendor/rector/rector/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php rename to vendor/rector/rector/src/Php/PhpVersionResolver/ComposerJsonPhpVersionResolver.php index bfaf0931e..6e15a3fe5 100644 --- a/vendor/rector/rector/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php +++ b/vendor/rector/rector/src/Php/PhpVersionResolver/ComposerJsonPhpVersionResolver.php @@ -3,26 +3,44 @@ declare (strict_types=1); namespace Rector\Php\PhpVersionResolver; -use RectorPrefix202405\Composer\Semver\VersionParser; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Json; +use RectorPrefix202410\Composer\Semver\VersionParser; +use Rector\Exception\Configuration\InvalidConfigurationException; +use Rector\FileSystem\JsonFileSystem; use Rector\Util\PhpVersionFactory; +use Rector\ValueObject\PhpVersion; /** - * @see \Rector\Tests\Php\PhpVersionResolver\ProjectComposerJsonPhpVersionResolver\ProjectComposerJsonPhpVersionResolverTest + * @see \Rector\Tests\Php\PhpVersionResolver\ComposerJsonPhpVersionResolver\ComposerJsonPhpVersionResolverTest */ -final class ProjectComposerJsonPhpVersionResolver +final class ComposerJsonPhpVersionResolver { /** - * @var array + * @var array */ private static $cachedPhpVersions = []; + /** + * @return PhpVersion::* + */ + public static function resolveFromCwdOrFail() : int + { + // use composer.json PHP version + $projectComposerJsonFilePath = \getcwd() . '/composer.json'; + if (\file_exists($projectComposerJsonFilePath)) { + $projectPhpVersion = self::resolve($projectComposerJsonFilePath); + if (\is_int($projectPhpVersion)) { + return $projectPhpVersion; + } + } + throw new InvalidConfigurationException(\sprintf('We could not find local "composer.json" to determine your PHP version.%sPlease, fill the PHP version set in withPhpSets() manually.', \PHP_EOL)); + } + /** + * @return PhpVersion::*|null + */ public static function resolve(string $composerJson) : ?int { if (\array_key_exists($composerJson, self::$cachedPhpVersions)) { return self::$cachedPhpVersions[$composerJson]; } - $composerJsonContents = FileSystem::read($composerJson); - $projectComposerJson = Json::decode($composerJsonContents, \true); + $projectComposerJson = JsonFileSystem::readFilePath($composerJson); // give this one a priority, as more generic one $requirePhpVersion = $projectComposerJson['require']['php'] ?? null; if ($requirePhpVersion !== null) { @@ -37,6 +55,9 @@ public static function resolve(string $composerJson) : ?int } return self::$cachedPhpVersions[$composerJson] = null; } + /** + * @return PhpVersion::* + */ private static function createIntVersionFromComposerVersion(string $projectPhpVersion) : int { $versionParser = new VersionParser(); diff --git a/vendor/rector/rector/src/Php/PolyfillPackagesProvider.php b/vendor/rector/rector/src/Php/PolyfillPackagesProvider.php index f9220a7bf..c5d5cd617 100644 --- a/vendor/rector/rector/src/Php/PolyfillPackagesProvider.php +++ b/vendor/rector/rector/src/Php/PolyfillPackagesProvider.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\Php; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Json; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Json; use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\ValueObject\PolyfillPackage; diff --git a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper.php b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper.php index 81a3e59f6..79fb3e89f 100644 --- a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper.php +++ b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper.php @@ -12,7 +12,7 @@ use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; use Rector\PhpAttribute\Enum\DocTagNodeState; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\PhpAttribute\AnnotationToAttributeMapper\AnnotationToAttributeMapperTest */ diff --git a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php index c2d90a518..b582bd18b 100644 --- a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php +++ b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayAnnotationToAttributeMapper.php @@ -13,7 +13,7 @@ use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; use Rector\PhpAttribute\Enum\DocTagNodeState; use Rector\PhpParser\Node\Value\ValueResolver; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @implements AnnotationToAttributeMapperInterface */ diff --git a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayItemNodeAnnotationToAttributeMapper.php b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayItemNodeAnnotationToAttributeMapper.php index 439ce5041..34a66b41d 100644 --- a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayItemNodeAnnotationToAttributeMapper.php +++ b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/ArrayItemNodeAnnotationToAttributeMapper.php @@ -14,7 +14,7 @@ use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; use Rector\PhpAttribute\Enum\DocTagNodeState; use Rector\Validation\RectorAssert; -use RectorPrefix202405\Webmozart\Assert\InvalidArgumentException; +use RectorPrefix202410\Webmozart\Assert\InvalidArgumentException; /** * @implements AnnotationToAttributeMapperInterface */ diff --git a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php index 4a377996f..45198a850 100644 --- a/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php +++ b/vendor/rector/rector/src/PhpAttribute/AnnotationToAttributeMapper/CurlyListNodeAnnotationToAttributeMapper.php @@ -10,7 +10,7 @@ use Rector\PhpAttribute\AnnotationToAttributeMapper; use Rector\PhpAttribute\Contract\AnnotationToAttributeMapperInterface; use Rector\PhpAttribute\Enum\DocTagNodeState; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @implements AnnotationToAttributeMapperInterface */ diff --git a/vendor/rector/rector/src/PhpAttribute/AttributeArrayNameInliner.php b/vendor/rector/rector/src/PhpAttribute/AttributeArrayNameInliner.php index 3a7e533a2..8ddd696ed 100644 --- a/vendor/rector/rector/src/PhpAttribute/AttributeArrayNameInliner.php +++ b/vendor/rector/rector/src/PhpAttribute/AttributeArrayNameInliner.php @@ -11,15 +11,14 @@ use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\String_; use Rector\Exception\NotImplementedYetException; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class AttributeArrayNameInliner { /** * @param Array_|Arg[] $array - * @param string[] $classReferenceFields * @return Arg[] */ - public function inlineArrayToArgs($array, array $classReferenceFields = []) : array + public function inlineArrayToArgs($array) : array { if (\is_array($array)) { return $this->inlineArray($array); diff --git a/vendor/rector/rector/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php b/vendor/rector/rector/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php new file mode 100644 index 000000000..638bce042 --- /dev/null +++ b/vendor/rector/rector/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php @@ -0,0 +1,96 @@ +reflectionProvider = $reflectionProvider; + } + /** + * @param Arg[] $args + */ + public function castAttributeTypes(AnnotationToAttribute $annotationToAttribute, array $args) : void + { + Assert::allIsInstanceOf($args, Arg::class); + if (!$this->reflectionProvider->hasClass($annotationToAttribute->getAttributeClass())) { + return; + } + $attributeClassReflection = $this->reflectionProvider->getClass($annotationToAttribute->getAttributeClass()); + if (!$attributeClassReflection->hasConstructor()) { + return; + } + $parameterReflections = $this->resolveConstructorParameterReflections($attributeClassReflection); + foreach ($parameterReflections as $parameterReflection) { + foreach ($args as $arg) { + if (!$arg->value instanceof ArrayItem) { + continue; + } + $arrayItem = $arg->value; + if (!$arrayItem->key instanceof String_) { + continue; + } + $keyString = $arrayItem->key; + if ($keyString->value !== $parameterReflection->getName()) { + continue; + } + // ensure type is casted to integer + if (!$arrayItem->value instanceof String_) { + continue; + } + if (!$this->containsInteger($parameterReflection->getType())) { + continue; + } + $valueString = $arrayItem->value; + if (!\is_numeric($valueString->value)) { + continue; + } + $arrayItem->value = new LNumber((int) $valueString->value); + } + } + } + private function containsInteger(Type $type) : bool + { + if ($type instanceof IntegerType) { + return \true; + } + if (!$type instanceof UnionType) { + return \false; + } + foreach ($type->getTypes() as $unionedType) { + if ($unionedType instanceof IntegerType) { + return \true; + } + } + return \false; + } + /** + * @return ParameterReflection[] + */ + private function resolveConstructorParameterReflections(ClassReflection $classReflection) : array + { + $extendedMethodReflection = $classReflection->getConstructor(); + $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::combineAcceptors($extendedMethodReflection->getVariants()); + return $parametersAcceptorWithPhpDocs->getParameters(); + } +} diff --git a/vendor/rector/rector/src/PhpAttribute/NodeFactory/NamedArgsFactory.php b/vendor/rector/rector/src/PhpAttribute/NodeFactory/NamedArgsFactory.php index c8f763623..3b9c9960e 100644 --- a/vendor/rector/rector/src/PhpAttribute/NodeFactory/NamedArgsFactory.php +++ b/vendor/rector/rector/src/PhpAttribute/NodeFactory/NamedArgsFactory.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PhpAttribute\NodeFactory; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\BuilderHelpers; use PhpParser\Node\Arg; use PhpParser\Node\Expr; diff --git a/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpAttributeGroupFactory.php b/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpAttributeGroupFactory.php index 495829b79..8539249b3 100644 --- a/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpAttributeGroupFactory.php +++ b/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpAttributeGroupFactory.php @@ -17,6 +17,7 @@ use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Php80\ValueObject\AnnotationToAttribute; +use Rector\Php81\Enum\AttributeName; use Rector\PhpAttribute\AnnotationToAttributeMapper; use Rector\PhpAttribute\AttributeArrayNameInliner; /** @@ -44,17 +45,26 @@ final class PhpAttributeGroupFactory * @var \Rector\PhpAttribute\AttributeArrayNameInliner */ private $attributeArrayNameInliner; - public function __construct(AnnotationToAttributeMapper $annotationToAttributeMapper, \Rector\PhpAttribute\NodeFactory\AttributeNameFactory $attributeNameFactory, \Rector\PhpAttribute\NodeFactory\NamedArgsFactory $namedArgsFactory, AttributeArrayNameInliner $attributeArrayNameInliner) + /** + * @readonly + * @var \Rector\PhpAttribute\NodeFactory\AnnotationToAttributeIntegerValueCaster + */ + private $annotationToAttributeIntegerValueCaster; + public function __construct(AnnotationToAttributeMapper $annotationToAttributeMapper, \Rector\PhpAttribute\NodeFactory\AttributeNameFactory $attributeNameFactory, \Rector\PhpAttribute\NodeFactory\NamedArgsFactory $namedArgsFactory, AttributeArrayNameInliner $attributeArrayNameInliner, \Rector\PhpAttribute\NodeFactory\AnnotationToAttributeIntegerValueCaster $annotationToAttributeIntegerValueCaster) { $this->annotationToAttributeMapper = $annotationToAttributeMapper; $this->attributeNameFactory = $attributeNameFactory; $this->namedArgsFactory = $namedArgsFactory; $this->attributeArrayNameInliner = $attributeArrayNameInliner; + $this->annotationToAttributeIntegerValueCaster = $annotationToAttributeIntegerValueCaster; } public function createFromSimpleTag(AnnotationToAttribute $annotationToAttribute) : AttributeGroup { return $this->createFromClass($annotationToAttribute->getAttributeClass()); } + /** + * @param AttributeName::*|string $attributeClass + */ public function createFromClass(string $attributeClass) : AttributeGroup { $fullyQualified = new FullyQualified($attributeClass); @@ -68,7 +78,7 @@ public function createFromClass(string $attributeClass) : AttributeGroup public function createFromClassWithItems(string $attributeClass, array $items) : AttributeGroup { $fullyQualified = new FullyQualified($attributeClass); - $args = $this->createArgsFromItems($items, $attributeClass); + $args = $this->createArgsFromItems($items); $attribute = new Attribute($fullyQualified, $args); return new AttributeGroup([$attribute]); } @@ -78,7 +88,8 @@ public function createFromClassWithItems(string $attributeClass, array $items) : public function create(DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode, AnnotationToAttribute $annotationToAttribute, array $uses) : AttributeGroup { $values = $doctrineAnnotationTagValueNode->getValuesWithSilentKey(); - $args = $this->createArgsFromItems($values, $annotationToAttribute->getAttributeClass(), $annotationToAttribute->getClassReferenceFields()); + $args = $this->createArgsFromItems($values, '', $annotationToAttribute->getClassReferenceFields()); + $this->annotationToAttributeIntegerValueCaster->castAttributeTypes($annotationToAttribute, $args); $args = $this->attributeArrayNameInliner->inlineArrayToArgs($args); $attributeName = $this->attributeNameFactory->create($annotationToAttribute, $doctrineAnnotationTagValueNode, $uses); // keep FQN in the attribute, so it can be easily detected later @@ -96,9 +107,10 @@ public function create(DoctrineAnnotationTagValueNode $doctrineAnnotationTagValu * * @param ArrayItemNode[]|mixed[] $items * @param string[] $classReferencedFields + * * @return Arg[] */ - public function createArgsFromItems(array $items, string $attributeClass, array $classReferencedFields = []) : array + public function createArgsFromItems(array $items, string $attributeClass = '', array $classReferencedFields = []) : array { $mappedItems = $this->annotationToAttributeMapper->map($items); $this->mapClassReferences($mappedItems, $classReferencedFields); diff --git a/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpNestedAttributeGroupFactory.php b/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpNestedAttributeGroupFactory.php index 374204aa3..fa656b78f 100644 --- a/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpNestedAttributeGroupFactory.php +++ b/vendor/rector/rector/src/PhpAttribute/NodeFactory/PhpNestedAttributeGroupFactory.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PhpAttribute\NodeFactory; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Arg; use PhpParser\Node\Attribute; use PhpParser\Node\AttributeGroup; @@ -26,7 +26,7 @@ use Rector\Php80\ValueObject\NestedAnnotationToAttribute; use Rector\PhpAttribute\AnnotationToAttributeMapper; use Rector\PhpAttribute\AttributeArrayNameInliner; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class PhpNestedAttributeGroupFactory { /** diff --git a/vendor/rector/rector/src/PhpParser/AstResolver.php b/vendor/rector/rector/src/PhpParser/AstResolver.php index de3521b34..c3f6addd9 100644 --- a/vendor/rector/rector/src/PhpParser/AstResolver.php +++ b/vendor/rector/rector/src/PhpParser/AstResolver.php @@ -19,7 +19,6 @@ use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Property; use PhpParser\Node\Stmt\Trait_; -use PhpParser\NodeTraverser; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\FunctionReflection; @@ -31,7 +30,6 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\NodeTypeResolver\NodeTypeResolver; -use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PhpDocParser\PhpParser\SmartPhpParser; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Reflection\MethodReflectionResolver; @@ -53,11 +51,6 @@ final class AstResolver * @var \Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator */ private $nodeScopeAndMetadataDecorator; - /** - * @readonly - * @var \Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser - */ - private $simpleCallableNodeTraverser; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver @@ -90,11 +83,10 @@ final class AstResolver * @var array */ private $parsedFileNodes = []; - public function __construct(SmartPhpParser $smartPhpParser, NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, MethodReflectionResolver $methodReflectionResolver, BetterNodeFinder $betterNodeFinder) + public function __construct(SmartPhpParser $smartPhpParser, NodeScopeAndMetadataDecorator $nodeScopeAndMetadataDecorator, NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, MethodReflectionResolver $methodReflectionResolver, BetterNodeFinder $betterNodeFinder) { $this->smartPhpParser = $smartPhpParser; $this->nodeScopeAndMetadataDecorator = $nodeScopeAndMetadataDecorator; - $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->nodeNameResolver = $nodeNameResolver; $this->reflectionProvider = $reflectionProvider; $this->nodeTypeResolver = $nodeTypeResolver; @@ -120,22 +112,22 @@ public function resolveClassMethodFromMethodReflection(MethodReflection $methodR $nodes = $this->parseFileNameToDecoratedNodes($fileName); $classLikeName = $classReflection->getName(); $methodName = $methodReflection->getName(); + /** @var ClassMethod|null $classMethod */ $classMethod = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, function (Node $node) use($classLikeName, $methodName, &$classMethod) : ?int { + $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($classLikeName, $methodName, &$classMethod) : bool { if (!$node instanceof ClassLike) { - return null; + return \false; } if (!$this->nodeNameResolver->isName($node, $classLikeName)) { - return null; + return \false; } $method = $node->getMethod($methodName); if ($method instanceof ClassMethod) { $classMethod = $method; - return NodeTraverser::STOP_TRAVERSAL; + return \true; } - return null; + return \false; }); - /** @var ClassMethod|null $classMethod */ return $classMethod; } /** @@ -157,18 +149,13 @@ public function resolveFunctionFromFunctionReflection(FunctionReflection $functi $fileName = $functionReflection->getFileName(); $nodes = $this->parseFileNameToDecoratedNodes($fileName); $functionName = $functionReflection->getName(); - $functionNode = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, function (Node $node) use($functionName, &$functionNode) : ?int { + /** @var Function_|null $functionNode */ + $functionNode = $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($functionName) : bool { if (!$node instanceof Function_) { - return null; - } - if (!$this->nodeNameResolver->isName($node, $functionName)) { - return null; + return \false; } - $functionNode = $node; - return NodeTraverser::STOP_TRAVERSAL; + return $this->nodeNameResolver->isName($node, $functionName); }); - /** @var Function_|null $functionNode */ return $functionNode; } /** @@ -233,16 +220,11 @@ public function parseClassReflectionTraits(ClassReflection $classReflection) : a $fileName = $classLike->getFileName(); $nodes = $this->parseFileNameToDecoratedNodes($fileName); $traitName = $classLike->getName(); - $traitNode = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, function (Node $node) use($traitName, &$traitNode) : ?int { + $traitNode = $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($traitName) : bool { if (!$node instanceof Trait_) { - return null; - } - if (!$this->nodeNameResolver->isName($node, $traitName)) { - return null; + return \false; } - $traitNode = $node; - return NodeTraverser::STOP_TRAVERSAL; + return $this->nodeNameResolver->isName($node, $traitName); }); if (!$traitNode instanceof Trait_) { continue; @@ -265,21 +247,20 @@ public function resolvePropertyFromPropertyReflection(PhpPropertyReflection $php $nativeReflectionProperty = $phpPropertyReflection->getNativeReflection(); $desiredClassName = $classReflection->getName(); $desiredPropertyName = $nativeReflectionProperty->getName(); - /** @var Property|null $propertyNode */ $propertyNode = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, function (Node $node) use($desiredClassName, $desiredPropertyName, &$propertyNode) : ?int { + $this->betterNodeFinder->findFirst($nodes, function (Node $node) use($desiredClassName, $desiredPropertyName, &$propertyNode) : bool { if (!$node instanceof ClassLike) { - return null; + return \false; } if (!$this->nodeNameResolver->isName($node, $desiredClassName)) { - return null; + return \false; } $property = $node->getProperty($desiredPropertyName); if ($property instanceof Property) { $propertyNode = $property; - return NodeTraverser::STOP_TRAVERSAL; + return \true; } - return null; + return \false; }); if ($propertyNode instanceof Property) { return $propertyNode; @@ -321,16 +302,11 @@ private function locateClassMethodInTrait(string $methodName, MethodReflection $ $classReflection = $methodReflection->getDeclaringClass(); $traits = $this->parseClassReflectionTraits($classReflection); /** @var ClassMethod|null $classMethod */ - $classMethod = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($traits, function (Node $node) use($methodName, &$classMethod) : ?int { + $classMethod = $this->betterNodeFinder->findFirst($traits, function (Node $node) use($methodName) : bool { if (!$node instanceof ClassMethod) { - return null; - } - if (!$this->nodeNameResolver->isName($node, $methodName)) { - return null; + return \false; } - $classMethod = $node; - return NodeTraverser::STOP_TRAVERSAL; + return $this->nodeNameResolver->isName($node, $methodName); }); return $classMethod; } @@ -341,16 +317,16 @@ private function findPromotedPropertyByName(array $stmts, string $desiredClassNa { /** @var Param|null $paramNode */ $paramNode = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($stmts, function (Node $node) use($desiredClassName, $desiredPropertyName, &$paramNode) { + $this->betterNodeFinder->findFirst($stmts, function (Node $node) use($desiredClassName, $desiredPropertyName, &$paramNode) : bool { if (!$node instanceof Class_) { - return null; + return \false; } if (!$this->nodeNameResolver->isName($node, $desiredClassName)) { - return null; + return \false; } $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); if (!$constructClassMethod instanceof ClassMethod) { - return null; + return \false; } foreach ($constructClassMethod->getParams() as $param) { if ($param->flags === 0) { @@ -358,9 +334,10 @@ private function findPromotedPropertyByName(array $stmts, string $desiredClassNa } if ($this->nodeNameResolver->isName($param, $desiredPropertyName)) { $paramNode = $param; - return NodeTraverser::STOP_TRAVERSAL; + return \true; } } + return \false; }); return $paramNode; } diff --git a/vendor/rector/rector/src/PhpParser/Node/AssignAndBinaryMap.php b/vendor/rector/rector/src/PhpParser/Node/AssignAndBinaryMap.php index a7f83d10d..b9187050c 100644 --- a/vendor/rector/rector/src/PhpParser/Node/AssignAndBinaryMap.php +++ b/vendor/rector/rector/src/PhpParser/Node/AssignAndBinaryMap.php @@ -58,16 +58,18 @@ final class AssignAndBinaryMap */ private const ASSIGN_OP_TO_BINARY_OP_CLASSES = [AssignBitwiseOr::class => BitwiseOr::class, AssignBitwiseAnd::class => BitwiseAnd::class, AssignBitwiseXor::class => BitwiseXor::class, AssignPlus::class => Plus::class, AssignDiv::class => Div::class, AssignMul::class => Mul::class, AssignMinus::class => Minus::class, AssignConcat::class => Concat::class, AssignPow::class => Pow::class, AssignMod::class => Mod::class, AssignShiftLeft::class => ShiftLeft::class, AssignShiftRight::class => ShiftRight::class]; /** - * @var array, class-string> + * @var array, class-string> */ private $binaryOpToAssignClasses = []; public function __construct(NodeTypeResolver $nodeTypeResolver) { $this->nodeTypeResolver = $nodeTypeResolver; - $this->binaryOpToAssignClasses = \array_flip(self::ASSIGN_OP_TO_BINARY_OP_CLASSES); + /** @var array, class-string> $binaryClassesToAssignOp */ + $binaryClassesToAssignOp = \array_flip(self::ASSIGN_OP_TO_BINARY_OP_CLASSES); + $this->binaryOpToAssignClasses = $binaryClassesToAssignOp; } /** - * @return class-string|null + * @return class-string|null */ public function getAlternative(Node $node) : ?string { diff --git a/vendor/rector/rector/src/PhpParser/Node/BetterNodeFinder.php b/vendor/rector/rector/src/PhpParser/Node/BetterNodeFinder.php index 003437e09..22ac80743 100644 --- a/vendor/rector/rector/src/PhpParser/Node/BetterNodeFinder.php +++ b/vendor/rector/rector/src/PhpParser/Node/BetterNodeFinder.php @@ -6,17 +6,20 @@ use PhpParser\Node; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; +use PhpParser\Node\Expr\Yield_; +use PhpParser\Node\Expr\YieldFrom; +use PhpParser\Node\FunctionLike; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Class_; -use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; +use PhpParser\Node\Stmt\Return_; use PhpParser\NodeFinder; use PhpParser\NodeTraverser; use Rector\NodeAnalyzer\ClassAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\PhpParser\Node\BetterNodeFinder\BetterNodeFinderTest */ @@ -139,7 +142,7 @@ public function find($nodes, callable $filter) : array /** * @api symfony * @param Node[] $nodes - * @return ClassLike|null + * @return Class_|null */ public function findFirstNonAnonymousClass(array $nodes) : ?Node { @@ -168,7 +171,7 @@ public function hasInstancesOfInFunctionLikeScoped($functionLike, $types) : bool } $isFoundNode = \false; $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->stmts, static function (Node $subNode) use($types, &$isFoundNode) : ?int { - if ($subNode instanceof Class_ || $subNode instanceof Function_ || $subNode instanceof Closure) { + if ($subNode instanceof Class_ || $subNode instanceof FunctionLike) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; } foreach ($types as $type) { @@ -182,20 +185,49 @@ public function hasInstancesOfInFunctionLikeScoped($functionLike, $types) : bool return $isFoundNode; } /** - * @template T of Node - * @param array>|class-string $types - * @return array + * @return Return_[] * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike */ - public function findInstancesOfInFunctionLikeScoped($functionLike, $types) : array + public function findReturnsScoped($functionLike) : array { + $returns = []; + $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->stmts, function (Node $subNode) use(&$returns) : ?int { + if ($subNode instanceof Class_ || $subNode instanceof FunctionLike) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + if ($subNode instanceof Yield_ || $subNode instanceof YieldFrom) { + $returns = []; + return NodeTraverser::STOP_TRAVERSAL; + } + if ($subNode instanceof Return_) { + $returns[] = $subNode; + } + return null; + }); + Assert::allIsInstanceOf($returns, Return_::class); + return $returns; + } + /** + * @api to be used + * + * @template T of Node + * @param Node[] $nodes + * @param class-string|array> $types + * @return T[] + */ + public function findInstancesOfScoped(array $nodes, $types) : array + { + // here verify only pass single nodes as FunctionLike + if (\count($nodes) === 1 && $nodes[0] instanceof FunctionLike) { + $nodes = (array) $nodes[0]->getStmts(); + } if (\is_string($types)) { $types = [$types]; } /** @var T[] $foundNodes */ $foundNodes = []; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->stmts, static function (Node $subNode) use($types, &$foundNodes) : ?int { - if ($subNode instanceof Class_ || $subNode instanceof Function_ || $subNode instanceof Closure) { + $this->simpleCallableNodeTraverser->traverseNodesWithCallable($nodes, static function (Node $subNode) use($types, &$foundNodes) : ?int { + if ($subNode instanceof Class_ || $subNode instanceof FunctionLike) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; } foreach ($types as $type) { @@ -208,6 +240,16 @@ public function findInstancesOfInFunctionLikeScoped($functionLike, $types) : arr }); return $foundNodes; } + /** + * @template T of Node + * @param array>|class-string $types + * @return array + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike + */ + public function findInstancesOfInFunctionLikeScoped($functionLike, $types) : array + { + return $this->findInstancesOfScoped([$functionLike], $types); + } /** * @param callable(Node $node): bool $filter * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike @@ -221,12 +263,12 @@ public function findFirstInFunctionLikeScoped($functionLike, callable $filter) : if (!$foundNode instanceof Node) { return null; } - if (!$this->hasInstancesOf($functionLike->stmts, [Class_::class, Function_::class, Closure::class])) { + if (!$this->hasInstancesOf($functionLike->stmts, [Class_::class, FunctionLike::class])) { return $foundNode; } $scopedNode = null; $this->simpleCallableNodeTraverser->traverseNodesWithCallable($functionLike->stmts, function (Node $subNode) use(&$scopedNode, $foundNode, $filter) : ?int { - if ($subNode instanceof Class_ || $subNode instanceof Function_ || $subNode instanceof Closure) { + if ($subNode instanceof Class_ || $subNode instanceof FunctionLike) { if ($foundNode instanceof $subNode && $subNode === $foundNode) { $scopedNode = $subNode; return NodeTraverser::STOP_TRAVERSAL; diff --git a/vendor/rector/rector/src/PhpParser/Node/NodeFactory.php b/vendor/rector/rector/src/PhpParser/Node/NodeFactory.php index efe1af145..e6b5bbaab 100644 --- a/vendor/rector/rector/src/PhpParser/Node/NodeFactory.php +++ b/vendor/rector/rector/src/PhpParser/Node/NodeFactory.php @@ -258,18 +258,6 @@ public function createSelfFetchConstant(string $constantName) : ClassConstFetch $name = new Name(ObjectReference::SELF); return new ClassConstFetch($name, $constantName); } - /** - * @param Param[] $params - * @return Arg[] - */ - public function createArgsFromParams(array $params) : array - { - $args = []; - foreach ($params as $param) { - $args[] = new Arg($param->var); - } - return $args; - } public function createNull() : ConstFetch { return new ConstFetch(new Name('null')); @@ -318,15 +306,24 @@ public function createReturnBooleanAnd(array $newNodes) : ?Expr } return $this->createBooleanAndFromNodes($newNodes); } - public function createReprintedExpr(Expr $expr) : Expr + /** + * Setting all child nodes to null is needed to avoid reprint of invalid tokens + * @see https://github.com/rectorphp/rector/issues/8712 + * + * @template TNode as Node + * + * @param TNode $node + * @return TNode + */ + public function createReprintedNode(Node $node) : Node { - // reset original node, to allow the printer to re-use the expr - $expr->setAttribute(AttributeKey::ORIGINAL_NODE, null); - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($expr, static function (Node $node) : Node { - $node->setAttribute(AttributeKey::ORIGINAL_NODE, null); - return $node; + // reset original node, to allow the printer to re-use the node + $node->setAttribute(AttributeKey::ORIGINAL_NODE, null); + $this->simpleCallableNodeTraverser->traverseNodesWithCallable($node, static function (Node $subNode) : Node { + $subNode->setAttribute(AttributeKey::ORIGINAL_NODE, null); + return $subNode; }); - return $expr; + return $node; } /** * @param string|int|null $key diff --git a/vendor/rector/rector/src/PhpParser/Node/Value/ValueResolver.php b/vendor/rector/rector/src/PhpParser/Node/Value/ValueResolver.php index 44d63ac63..7b6c07ef9 100644 --- a/vendor/rector/rector/src/PhpParser/Node/Value/ValueResolver.php +++ b/vendor/rector/rector/src/PhpParser/Node/Value/ValueResolver.php @@ -11,8 +11,6 @@ use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Name; -use PhpParser\Node\Scalar\MagicConst\Dir; -use PhpParser\Node\Scalar\MagicConst\File; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ReflectionProvider; @@ -26,7 +24,6 @@ use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; -use Rector\Provider\CurrentFileProvider; use Rector\Reflection\ClassReflectionAnalyzer; use Rector\Reflection\ReflectionResolver; use TypeError; @@ -56,11 +53,6 @@ final class ValueResolver * @var \PHPStan\Reflection\ReflectionProvider */ private $reflectionProvider; - /** - * @readonly - * @var \Rector\Provider\CurrentFileProvider - */ - private $currentFileProvider; /** * @readonly * @var \Rector\Reflection\ReflectionResolver @@ -75,13 +67,12 @@ final class ValueResolver * @var \PhpParser\ConstExprEvaluator|null */ private $constExprEvaluator; - public function __construct(NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, ConstFetchAnalyzer $constFetchAnalyzer, ReflectionProvider $reflectionProvider, CurrentFileProvider $currentFileProvider, ReflectionResolver $reflectionResolver, ClassReflectionAnalyzer $classReflectionAnalyzer) + public function __construct(NodeNameResolver $nodeNameResolver, NodeTypeResolver $nodeTypeResolver, ConstFetchAnalyzer $constFetchAnalyzer, ReflectionProvider $reflectionProvider, ReflectionResolver $reflectionResolver, ClassReflectionAnalyzer $classReflectionAnalyzer) { $this->nodeNameResolver = $nodeNameResolver; $this->nodeTypeResolver = $nodeTypeResolver; $this->constFetchAnalyzer = $constFetchAnalyzer; $this->reflectionProvider = $reflectionProvider; - $this->currentFileProvider = $currentFileProvider; $this->reflectionResolver = $reflectionResolver; $this->classReflectionAnalyzer = $classReflectionAnalyzer; } @@ -196,14 +187,6 @@ private function getConstExprEvaluator() : ConstExprEvaluator return $this->constExprEvaluator; } $this->constExprEvaluator = new ConstExprEvaluator(function (Expr $expr) { - if ($expr instanceof Dir) { - // __DIR__ - return $this->resolveDirConstant(); - } - if ($expr instanceof File) { - // __FILE__ - return $this->resolveFileConstant($expr); - } // resolve "SomeClass::SOME_CONST" if ($expr instanceof ClassConstFetch && $expr->class instanceof Name) { return $this->resolveClassConstFetch($expr); @@ -237,22 +220,6 @@ private function extractConstantArrayTypeValue(ConstantArrayType $constantArrayT } return $values; } - private function resolveDirConstant() : string - { - $file = $this->currentFileProvider->getFile(); - if (!$file instanceof \Rector\ValueObject\Application\File) { - throw new ShouldNotHappenException(); - } - return \dirname($file->getFilePath()); - } - private function resolveFileConstant(File $file) : string - { - $file = $this->currentFileProvider->getFile(); - if (!$file instanceof \Rector\ValueObject\Application\File) { - throw new ShouldNotHappenException(); - } - return $file->getFilePath(); - } /** * @return string|mixed */ @@ -289,8 +256,8 @@ private function resolveClassConstFetch(ClassConstFetch $classConstFetch) // fallback to constant reference itself, to avoid fatal error return $classConstantReference; } - $constantReflection = $classReflection->getConstant($constant); - $valueExpr = $constantReflection->getValueExpr(); + $classConstantReflection = $classReflection->getConstant($constant); + $valueExpr = $classConstantReflection->getValueExpr(); if ($valueExpr instanceof ConstFetch) { return $this->resolveExprValueForConst($valueExpr); } diff --git a/vendor/rector/rector/src/PhpParser/NodeFinder/LocalMethodCallFinder.php b/vendor/rector/rector/src/PhpParser/NodeFinder/LocalMethodCallFinder.php index f0ca2274f..3cc8229e8 100644 --- a/vendor/rector/rector/src/PhpParser/NodeFinder/LocalMethodCallFinder.php +++ b/vendor/rector/rector/src/PhpParser/NodeFinder/LocalMethodCallFinder.php @@ -5,6 +5,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Type\TypeWithClassName; @@ -35,7 +36,7 @@ public function __construct(BetterNodeFinder $betterNodeFinder, NodeTypeResolver $this->nodeNameResolver = $nodeNameResolver; } /** - * @return MethodCall[] + * @return MethodCall[]|StaticCall[] */ public function match(Class_ $class, ClassMethod $classMethod) : array { @@ -44,15 +45,15 @@ public function match(Class_ $class, ClassMethod $classMethod) : array return []; } $classMethodName = $this->nodeNameResolver->getName($classMethod); - /** @var MethodCall[] $matchingMethodCalls */ + /** @var MethodCall[]|StaticCall[] $matchingMethodCalls */ $matchingMethodCalls = $this->betterNodeFinder->find($class->getMethods(), function (Node $subNode) use($className, $classMethodName) : bool { - if (!$subNode instanceof MethodCall) { + if (!$subNode instanceof MethodCall && !$subNode instanceof StaticCall) { return \false; } if (!$this->nodeNameResolver->isName($subNode->name, $classMethodName)) { return \false; } - $callerType = $this->nodeTypeResolver->getType($subNode->var); + $callerType = $subNode instanceof MethodCall ? $this->nodeTypeResolver->getType($subNode->var) : $this->nodeTypeResolver->getType($subNode->class); if (!$callerType instanceof TypeWithClassName) { return \false; } diff --git a/vendor/rector/rector/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php b/vendor/rector/rector/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php index d59c48926..649256121 100644 --- a/vendor/rector/rector/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php +++ b/vendor/rector/rector/src/PhpParser/NodeTraverser/FileWithoutNamespaceNodeTraverser.php @@ -10,7 +10,7 @@ final class FileWithoutNamespaceNodeTraverser extends NodeTraverser { /** - * @template TNode as Node + * @template TNode as Node\Stmt * * @param TNode[] $nodes * @return TNode[]|FileWithoutNamespace[] diff --git a/vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php b/vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php index cdcafbc3d..cc55e4ed9 100644 --- a/vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php +++ b/vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php @@ -4,7 +4,9 @@ namespace Rector\PhpParser\NodeTraverser; use PhpParser\Node; +use PhpParser\Node\Stmt; use PhpParser\NodeTraverser; +use PhpParser\NodeVisitor; use Rector\Contract\Rector\RectorInterface; use Rector\VersionBonding\PhpVersionedFilter; final class RectorNodeTraverser extends NodeTraverser @@ -22,6 +24,10 @@ final class RectorNodeTraverser extends NodeTraverser * @var bool */ private $areNodeVisitorsPrepared = \false; + /** + * @var array,RectorInterface[]> + */ + private $visitorsPerNodeClass = []; /** * @param RectorInterface[] $rectors */ @@ -32,8 +38,8 @@ public function __construct(array $rectors, PhpVersionedFilter $phpVersionedFilt parent::__construct(); } /** - * @param Node[] $nodes - * @return Node[] + * @param Stmt[] $nodes + * @return Stmt[] */ public function traverse(array $nodes) : array { @@ -48,8 +54,32 @@ public function refreshPhpRectors(array $rectors) : void { $this->rectors = $rectors; $this->visitors = []; + $this->visitorsPerNodeClass = []; $this->areNodeVisitorsPrepared = \false; } + /** + * We return the list of visitors (rector rules) that can be applied to each node class + * This list is cached so that we don't need to continually check if a rule can be applied to a node + * + * @return NodeVisitor[] + */ + public function getVisitorsForNode(Node $node) : array + { + $nodeClass = \get_class($node); + if (!isset($this->visitorsPerNodeClass[$nodeClass])) { + $this->visitorsPerNodeClass[$nodeClass] = []; + foreach ($this->visitors as $visitor) { + \assert($visitor instanceof RectorInterface); + foreach ($visitor->getNodeTypes() as $nodeType) { + if (\is_a($nodeClass, $nodeType, \true)) { + $this->visitorsPerNodeClass[$nodeClass][] = $visitor; + continue 2; + } + } + } + } + return $this->visitorsPerNodeClass[$nodeClass]; + } /** * This must happen after $this->configuration is set after ProcessCommand::execute() is run, * otherwise we get default false positives. diff --git a/vendor/rector/rector/src/PhpParser/Parser/InlineCodeParser.php b/vendor/rector/rector/src/PhpParser/Parser/InlineCodeParser.php index e127a3a4f..a94028580 100644 --- a/vendor/rector/rector/src/PhpParser/Parser/InlineCodeParser.php +++ b/vendor/rector/rector/src/PhpParser/Parser/InlineCodeParser.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\PhpParser\Parser; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Concat; use PhpParser\Node\Scalar\Encapsed; @@ -71,20 +71,6 @@ public function __construct(BetterStandardPrinter $betterStandardPrinter, \Recto $this->simplePhpParser = $simplePhpParser; $this->valueResolver = $valueResolver; } - /** - * @return Stmt[] - * - * @api - * @deprecated use parseFile() or parseString() instead - */ - public function parse(string $content) : array - { - // to cover files too - if (\is_file($content)) { - $content = FileSystem::read($content); - } - return $this->parseCode($content); - } /** * @api downgrade * diff --git a/vendor/rector/rector/src/PhpParser/Parser/ParserErrors.php b/vendor/rector/rector/src/PhpParser/Parser/ParserErrors.php new file mode 100644 index 000000000..47387ea8b --- /dev/null +++ b/vendor/rector/rector/src/PhpParser/Parser/ParserErrors.php @@ -0,0 +1,32 @@ +message = $parserErrorsException->getMessage(); + $this->line = $parserErrorsException->getAttributes()['startLine'] ?? $parserErrorsException->getLine(); + } + public function getMessage() : string + { + return $this->message; + } + public function getLine() : int + { + return $this->line; + } +} diff --git a/vendor/rector/rector/src/PhpParser/Parser/SimplePhpParser.php b/vendor/rector/rector/src/PhpParser/Parser/SimplePhpParser.php index 057933a39..2f1624273 100644 --- a/vendor/rector/rector/src/PhpParser/Parser/SimplePhpParser.php +++ b/vendor/rector/rector/src/PhpParser/Parser/SimplePhpParser.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PhpParser\Parser; -use RectorPrefix202405\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem; use PhpParser\Node; use PhpParser\Node\Stmt\Expression; use PhpParser\NodeTraverser; diff --git a/vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php b/vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php index 29d7a945b..586a8cc47 100644 --- a/vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php +++ b/vendor/rector/rector/src/PhpParser/Printer/BetterStandardPrinter.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PhpParser\Printer; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Comment; use PhpParser\Node; use PhpParser\Node\Arg; @@ -143,7 +143,7 @@ protected function pExpr_ArrowFunction(ArrowFunction $arrowFunction) : string $commentText = $key > 0 ? $indent . $comment->getText() : $comment->getText(); $text .= $commentText . "\n"; } - return $this->pAttrGroups($arrowFunction->attrGroups, \true) . ($arrowFunction->static ? 'static ' : '') . 'fn' . ($arrowFunction->byRef ? '&' : '') . '(' . $this->pCommaSeparated($arrowFunction->params) . ')' . ($arrowFunction->returnType !== null ? ': ' . $this->p($arrowFunction->returnType) : '') . ' =>' . $text . $indent . $this->p($arrowFunction->expr); + return $this->pAttrGroups($arrowFunction->attrGroups, \true) . ($arrowFunction->static ? 'static ' : '') . 'fn' . ($arrowFunction->byRef ? '&' : '') . '(' . $this->pCommaSeparated($arrowFunction->params) . ')' . ($arrowFunction->returnType instanceof Node ? ': ' . $this->p($arrowFunction->returnType) : '') . ' =>' . $text . $indent . $this->p($arrowFunction->expr); } /** * This allows to use both spaces and tabs vs. original space-only @@ -407,7 +407,7 @@ private function resolveNewStmts(array $stmts) : array { $stmts = \array_values($stmts); if (\count($stmts) === 1 && $stmts[0] instanceof FileWithoutNamespace) { - return $stmts[0]->stmts; + return \array_values($stmts[0]->stmts); } return $stmts; } diff --git a/vendor/rector/rector/src/PhpParser/Printer/FormatPerservingPrinter.php b/vendor/rector/rector/src/PhpParser/Printer/FormatPerservingPrinter.php deleted file mode 100644 index e161385cc..000000000 --- a/vendor/rector/rector/src/PhpParser/Printer/FormatPerservingPrinter.php +++ /dev/null @@ -1,44 +0,0 @@ -betterStandardPrinter = $betterStandardPrinter; - } - /** - * @api tests - * - * @param Node[] $newStmts - * @param Node[] $oldStmts - * @param Node[] $oldTokens - */ - public function printToFile(string $filePath, array $newStmts, array $oldStmts, array $oldTokens) : string - { - $newContent = $this->betterStandardPrinter->printFormatPreserving($newStmts, $oldStmts, $oldTokens); - $this->dumpFile($filePath, $newContent); - return $newContent; - } - public function printParsedStmstAndTokensToString(File $file) : string - { - return $this->betterStandardPrinter->printFormatPreserving($file->getNewStmts(), $file->getOldStmts(), $file->getOldTokens()); - } - public function dumpFile(string $filePath, string $newContent) : void - { - FileSystem::write($filePath, $newContent, null); - } -} diff --git a/vendor/rector/rector/src/PostRector/Application/PostFileProcessor.php b/vendor/rector/rector/src/PostRector/Application/PostFileProcessor.php index 2b45ebfb5..bb3f6d76a 100644 --- a/vendor/rector/rector/src/PostRector/Application/PostFileProcessor.php +++ b/vendor/rector/rector/src/PostRector/Application/PostFileProcessor.php @@ -3,55 +3,87 @@ declare (strict_types=1); namespace Rector\PostRector\Application; -use PhpParser\Node; +use PhpParser\Node\Stmt; use PhpParser\NodeTraverser; +use Rector\Configuration\Option; +use Rector\Configuration\Parameter\SimpleParameterProvider; +use Rector\Configuration\RenamedClassesDataCollector; +use Rector\Contract\DependencyInjection\ResetableInterface; use Rector\PostRector\Contract\Rector\PostRectorInterface; use Rector\PostRector\Rector\ClassRenamingPostRector; +use Rector\PostRector\Rector\DocblockNameImportingPostRector; use Rector\PostRector\Rector\NameImportingPostRector; use Rector\PostRector\Rector\UnusedImportRemovingPostRector; use Rector\PostRector\Rector\UseAddingPostRector; use Rector\Renaming\Rector\Name\RenameClassRector; use Rector\Skipper\Skipper\Skipper; -final class PostFileProcessor +use Rector\ValueObject\Application\File; +final class PostFileProcessor implements ResetableInterface { /** * @readonly * @var \Rector\Skipper\Skipper\Skipper */ private $skipper; + /** + * @readonly + * @var \Rector\PostRector\Rector\UseAddingPostRector + */ + private $useAddingPostRector; + /** + * @readonly + * @var \Rector\PostRector\Rector\NameImportingPostRector + */ + private $nameImportingPostRector; + /** + * @readonly + * @var \Rector\PostRector\Rector\ClassRenamingPostRector + */ + private $classRenamingPostRector; + /** + * @readonly + * @var \Rector\PostRector\Rector\DocblockNameImportingPostRector + */ + private $docblockNameImportingPostRector; + /** + * @readonly + * @var \Rector\PostRector\Rector\UnusedImportRemovingPostRector + */ + private $unusedImportRemovingPostRector; + /** + * @readonly + * @var \Rector\Configuration\RenamedClassesDataCollector + */ + private $renamedClassesDataCollector; /** * @var PostRectorInterface[] */ private $postRectors = []; - public function __construct( - Skipper $skipper, - // set order here - UseAddingPostRector $useAddingPostRector, - NameImportingPostRector $nameImportingPostRector, - ClassRenamingPostRector $classRenamingPostRector, - UnusedImportRemovingPostRector $unusedImportRemovingPostRector - ) + public function __construct(Skipper $skipper, UseAddingPostRector $useAddingPostRector, NameImportingPostRector $nameImportingPostRector, ClassRenamingPostRector $classRenamingPostRector, DocblockNameImportingPostRector $docblockNameImportingPostRector, UnusedImportRemovingPostRector $unusedImportRemovingPostRector, RenamedClassesDataCollector $renamedClassesDataCollector) { $this->skipper = $skipper; - $this->postRectors = [ - // priority: 650 - $classRenamingPostRector, - // priority: 600 - $nameImportingPostRector, - // priority: 500 - $useAddingPostRector, - // priority: 100 - $unusedImportRemovingPostRector, - ]; + $this->useAddingPostRector = $useAddingPostRector; + $this->nameImportingPostRector = $nameImportingPostRector; + $this->classRenamingPostRector = $classRenamingPostRector; + $this->docblockNameImportingPostRector = $docblockNameImportingPostRector; + $this->unusedImportRemovingPostRector = $unusedImportRemovingPostRector; + $this->renamedClassesDataCollector = $renamedClassesDataCollector; + } + public function reset() : void + { + $this->postRectors = []; } /** - * @param Node[] $stmts - * @return Node[] + * @param Stmt[] $stmts + * @return Stmt[] */ - public function traverse(array $stmts, string $filePath) : array + public function traverse(array $stmts, File $file) : array { - foreach ($this->postRectors as $postRector) { - if ($this->shouldSkipPostRector($postRector, $filePath)) { + foreach ($this->getPostRectors() as $postRector) { + // file must be set early into PostRector class to ensure its usage + // always match on skipping process + $postRector->setFile($file); + if ($this->shouldSkipPostRector($postRector, $file->getFilePath(), $stmts)) { continue; } $nodeTraverser = new NodeTraverser(); @@ -60,12 +92,51 @@ public function traverse(array $stmts, string $filePath) : array } return $stmts; } - private function shouldSkipPostRector(PostRectorInterface $postRector, string $filePath) : bool + /** + * @param Stmt[] $stmts + */ + private function shouldSkipPostRector(PostRectorInterface $postRector, string $filePath, array $stmts) : bool { if ($this->skipper->shouldSkipElementAndFilePath($postRector, $filePath)) { return \true; } // skip renaming if rename class rector is skipped - return $postRector instanceof ClassRenamingPostRector && $this->skipper->shouldSkipElementAndFilePath(RenameClassRector::class, $filePath); + if ($postRector instanceof ClassRenamingPostRector && $this->skipper->shouldSkipElementAndFilePath(RenameClassRector::class, $filePath)) { + return \true; + } + return !$postRector->shouldTraverse($stmts); + } + /** + * Load on the fly, to allow test reset with different configuration + * @return PostRectorInterface[] + */ + private function getPostRectors() : array + { + if ($this->postRectors !== []) { + return $this->postRectors; + } + $isRenamedClassEnabled = $this->renamedClassesDataCollector->getOldToNewClasses() !== []; + $isNameImportingEnabled = SimpleParameterProvider::provideBoolParameter(Option::AUTO_IMPORT_NAMES); + $isDocblockNameImportingEnabled = SimpleParameterProvider::provideBoolParameter(Option::AUTO_IMPORT_DOC_BLOCK_NAMES); + $isRemovingUnusedImportsEnabled = SimpleParameterProvider::provideBoolParameter(Option::REMOVE_UNUSED_IMPORTS); + $postRectors = []; + // sorted by priority, to keep removed imports in order + if ($isRenamedClassEnabled) { + $postRectors[] = $this->classRenamingPostRector; + } + // import names + if ($isNameImportingEnabled) { + $postRectors[] = $this->nameImportingPostRector; + } + // import docblocks + if ($isNameImportingEnabled && $isDocblockNameImportingEnabled) { + $postRectors[] = $this->docblockNameImportingPostRector; + } + $postRectors[] = $this->useAddingPostRector; + if ($isRemovingUnusedImportsEnabled) { + $postRectors[] = $this->unusedImportRemovingPostRector; + } + $this->postRectors = $postRectors; + return $this->postRectors; } } diff --git a/vendor/rector/rector/src/PostRector/Collector/UseNodesToAddCollector.php b/vendor/rector/rector/src/PostRector/Collector/UseNodesToAddCollector.php index 449611c81..aed09556f 100644 --- a/vendor/rector/rector/src/PostRector/Collector/UseNodesToAddCollector.php +++ b/vendor/rector/rector/src/PostRector/Collector/UseNodesToAddCollector.php @@ -3,11 +3,10 @@ declare (strict_types=1); namespace Rector\PostRector\Collector; -use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Name\FullyQualified; +use Rector\Application\Provider\CurrentFileProvider; use Rector\Naming\Naming\UseImportsResolver; -use Rector\Provider\CurrentFileProvider; use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\Application\File; @@ -15,7 +14,7 @@ final class UseNodesToAddCollector { /** * @readonly - * @var \Rector\Provider\CurrentFileProvider + * @var \Rector\Application\Provider\CurrentFileProvider */ private $currentFileProvider; /** @@ -61,7 +60,7 @@ public function addFunctionUseImport(FullyQualifiedObjectType $fullyQualifiedObj /** * @return AliasedObjectType[]|FullyQualifiedObjectType[] */ - public function getUseImportTypesByNode(File $file, Node $node) : array + public function getUseImportTypesByNode(File $file) : array { $filePath = $file->getFilePath(); $objectTypes = $this->useImportTypesInFilePath[$filePath] ?? []; @@ -80,7 +79,7 @@ public function getUseImportTypesByNode(File $file, Node $node) : array } public function hasImport(File $file, FullyQualified $fullyQualified, FullyQualifiedObjectType $fullyQualifiedObjectType) : bool { - $useImports = $this->getUseImportTypesByNode($file, $fullyQualified); + $useImports = $this->getUseImportTypesByNode($file); foreach ($useImports as $useImport) { if ($useImport->equals($fullyQualifiedObjectType)) { return \true; diff --git a/vendor/rector/rector/src/PostRector/Contract/Rector/PostRectorInterface.php b/vendor/rector/rector/src/PostRector/Contract/Rector/PostRectorInterface.php index e54878f4e..d21402569 100644 --- a/vendor/rector/rector/src/PostRector/Contract/Rector/PostRectorInterface.php +++ b/vendor/rector/rector/src/PostRector/Contract/Rector/PostRectorInterface.php @@ -3,10 +3,17 @@ declare (strict_types=1); namespace Rector\PostRector\Contract\Rector; +use PhpParser\Node\Stmt; use PhpParser\NodeVisitor; +use Rector\ValueObject\Application\File; /** * @internal */ interface PostRectorInterface extends NodeVisitor { + /** + * @param Stmt[] $stmts + */ + public function shouldTraverse(array $stmts) : bool; + public function setFile(File $file) : void; } diff --git a/vendor/rector/rector/src/PostRector/Guard/AddUseStatementGuard.php b/vendor/rector/rector/src/PostRector/Guard/AddUseStatementGuard.php new file mode 100644 index 000000000..b8a8aa41d --- /dev/null +++ b/vendor/rector/rector/src/PostRector/Guard/AddUseStatementGuard.php @@ -0,0 +1,47 @@ + + */ + private $shouldTraverseOnFiles = []; + public function __construct(BetterNodeFinder $betterNodeFinder) + { + $this->betterNodeFinder = $betterNodeFinder; + } + /** + * @param Stmt[] $stmts + */ + public function shouldTraverse(array $stmts, string $filePath) : bool + { + if (isset($this->shouldTraverseOnFiles[$filePath])) { + return $this->shouldTraverseOnFiles[$filePath]; + } + $totalNamespaces = 0; + // just loop the first level stmts to locate namespace to improve performance + // as namespace is always on first level + foreach ($stmts as $stmt) { + if ($stmt instanceof Namespace_) { + ++$totalNamespaces; + } + // skip if 2 namespaces are present + if ($totalNamespaces === 2) { + return $this->shouldTraverseOnFiles[$filePath] = \false; + } + } + return $this->shouldTraverseOnFiles[$filePath] = !$this->betterNodeFinder->hasInstancesOf($stmts, [InlineHTML::class]); + } +} diff --git a/vendor/rector/rector/src/PostRector/Rector/AbstractPostRector.php b/vendor/rector/rector/src/PostRector/Rector/AbstractPostRector.php index 00d95112f..03790cf26 100644 --- a/vendor/rector/rector/src/PostRector/Rector/AbstractPostRector.php +++ b/vendor/rector/rector/src/PostRector/Rector/AbstractPostRector.php @@ -3,8 +3,31 @@ declare (strict_types=1); namespace Rector\PostRector\Rector; +use PhpParser\Node\Stmt; use PhpParser\NodeVisitorAbstract; use Rector\PostRector\Contract\Rector\PostRectorInterface; +use Rector\ValueObject\Application\File; +use RectorPrefix202410\Webmozart\Assert\Assert; abstract class AbstractPostRector extends NodeVisitorAbstract implements PostRectorInterface { + /** + * @var \Rector\ValueObject\Application\File|null + */ + private $file = null; + /** + * @param Stmt[] $stmts + */ + public function shouldTraverse(array $stmts) : bool + { + return \true; + } + public function setFile(File $file) : void + { + $this->file = $file; + } + public function getFile() : File + { + Assert::isInstanceOf($this->file, File::class); + return $this->file; + } } diff --git a/vendor/rector/rector/src/PostRector/Rector/ClassRenamingPostRector.php b/vendor/rector/rector/src/PostRector/Rector/ClassRenamingPostRector.php index 07ad855c7..180b246dc 100644 --- a/vendor/rector/rector/src/PostRector/Rector/ClassRenamingPostRector.php +++ b/vendor/rector/rector/src/PostRector/Rector/ClassRenamingPostRector.php @@ -43,6 +43,10 @@ final class ClassRenamingPostRector extends \Rector\PostRector\Rector\AbstractPo * @var \Rector\PhpParser\Node\CustomNode\FileWithoutNamespace|\PhpParser\Node\Stmt\Namespace_|null */ private $rootNode = null; + /** + * @var array + */ + private $oldToNewClasses = []; public function __construct(ClassRenamer $classRenamer, RenamedClassesDataCollector $renamedClassesDataCollector, UseImportsRemover $useImportsRemover, RenamedNameCollector $renamedNameCollector) { $this->classRenamer = $classRenamer; @@ -57,13 +61,7 @@ public function __construct(ClassRenamer $classRenamer, RenamedClassesDataCollec public function beforeTraverse(array $nodes) : array { // ensure reset early on every run to avoid reuse existing value - $this->rootNode = null; - foreach ($nodes as $node) { - if ($node instanceof FileWithoutNamespace || $node instanceof Namespace_) { - $this->rootNode = $node; - break; - } - } + $this->rootNode = $this->resolveRootNode($nodes); return $nodes; } public function enterNode(Node $node) : ?Node @@ -72,17 +70,12 @@ public function enterNode(Node $node) : ?Node if (!$node instanceof Name) { return null; } - $oldToNewClasses = $this->renamedClassesDataCollector->getOldToNewClasses(); - if ($oldToNewClasses === []) { - return null; - } /** @var Scope|null $scope */ $scope = $node->getAttribute(AttributeKey::SCOPE); - $result = null; if ($node instanceof FullyQualified) { - $result = $this->classRenamer->renameNode($node, $oldToNewClasses, $scope); + $result = $this->classRenamer->renameNode($node, $this->oldToNewClasses, $scope); } else { - $result = $this->resolveResultWithPhpAttributeName($node, $oldToNewClasses, $scope); + $result = $this->resolveResultWithPhpAttributeName($node, $scope); } if (!SimpleParameterProvider::provideBoolParameter(Option::AUTO_IMPORT_NAMES)) { return $result; @@ -103,14 +96,29 @@ public function afterTraverse(array $nodes) : array $this->renamedNameCollector->reset(); return $nodes; } - /** - * @param array $oldToNewClasses - */ - private function resolveResultWithPhpAttributeName(Name $name, array $oldToNewClasses, ?Scope $scope) : ?FullyQualified + public function shouldTraverse(array $stmts) : bool + { + $this->oldToNewClasses = $this->renamedClassesDataCollector->getOldToNewClasses(); + return $this->oldToNewClasses !== []; + } + private function resolveResultWithPhpAttributeName(Name $name, ?Scope $scope) : ?FullyQualified { $phpAttributeName = $name->getAttribute(AttributeKey::PHP_ATTRIBUTE_NAME); if (\is_string($phpAttributeName)) { - return $this->classRenamer->renameNode(new FullyQualified($phpAttributeName, $name->getAttributes()), $oldToNewClasses, $scope); + return $this->classRenamer->renameNode(new FullyQualified($phpAttributeName, $name->getAttributes()), $this->oldToNewClasses, $scope); + } + return null; + } + /** + * @param Stmt[] $nodes + * @return \Rector\PhpParser\Node\CustomNode\FileWithoutNamespace|\PhpParser\Node\Stmt\Namespace_|null + */ + private function resolveRootNode(array $nodes) + { + foreach ($nodes as $node) { + if ($node instanceof FileWithoutNamespace || $node instanceof Namespace_) { + return $node; + } } return null; } diff --git a/vendor/rector/rector/src/PostRector/Rector/DocblockNameImportingPostRector.php b/vendor/rector/rector/src/PostRector/Rector/DocblockNameImportingPostRector.php new file mode 100644 index 000000000..127139bb0 --- /dev/null +++ b/vendor/rector/rector/src/PostRector/Rector/DocblockNameImportingPostRector.php @@ -0,0 +1,69 @@ +docBlockNameImporter = $docBlockNameImporter; + $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->docBlockUpdater = $docBlockUpdater; + $this->addUseStatementGuard = $addUseStatementGuard; + } + /** + * @return \PhpParser\Node|int|null + */ + public function enterNode(Node $node) + { + if (!$node instanceof Stmt && !$node instanceof Param) { + return null; + } + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($node); + if (!$phpDocInfo instanceof PhpDocInfo) { + return null; + } + $hasDocChanged = $this->docBlockNameImporter->importNames($phpDocInfo->getPhpDocNode(), $node); + if (!$hasDocChanged) { + return null; + } + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + return $node; + } + /** + * @param Stmt[] $stmts + */ + public function shouldTraverse(array $stmts) : bool + { + return $this->addUseStatementGuard->shouldTraverse($stmts, $this->getFile()->getFilePath()); + } +} diff --git a/vendor/rector/rector/src/PostRector/Rector/NameImportingPostRector.php b/vendor/rector/rector/src/PostRector/Rector/NameImportingPostRector.php index 92cb8984e..04ae50586 100644 --- a/vendor/rector/rector/src/PostRector/Rector/NameImportingPostRector.php +++ b/vendor/rector/rector/src/PostRector/Rector/NameImportingPostRector.php @@ -4,28 +4,13 @@ namespace Rector\PostRector\Rector; use PhpParser\Node; -use PhpParser\Node\Identifier; -use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; -use PhpParser\Node\Param; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\GroupUse; -use PhpParser\Node\Stmt\InlineHTML; -use PhpParser\Node\Stmt\Namespace_; use PhpParser\Node\Stmt\Use_; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipper; use Rector\CodingStyle\Node\NameImporter; -use Rector\Comments\NodeDocBlock\DocBlockUpdater; -use Rector\Configuration\Option; -use Rector\Configuration\Parameter\SimpleParameterProvider; -use Rector\Naming\Naming\AliasNameResolver; use Rector\Naming\Naming\UseImportsResolver; -use Rector\NodeTypeResolver\PhpDoc\NodeAnalyzer\DocBlockNameImporter; -use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; -use Rector\Provider\CurrentFileProvider; -use Rector\ValueObject\Application\File; +use Rector\PostRector\Guard\AddUseStatementGuard; final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPostRector { /** @@ -33,26 +18,6 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo * @var \Rector\CodingStyle\Node\NameImporter */ private $nameImporter; - /** - * @readonly - * @var \Rector\NodeTypeResolver\PhpDoc\NodeAnalyzer\DocBlockNameImporter - */ - private $docBlockNameImporter; - /** - * @readonly - * @var \Rector\CodingStyle\ClassNameImport\ClassNameImportSkipper - */ - private $classNameImportSkipper; - /** - * @readonly - * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory - */ - private $phpDocInfoFactory; - /** - * @readonly - * @var \Rector\Provider\CurrentFileProvider - */ - private $currentFileProvider; /** * @readonly * @var \Rector\Naming\Naming\UseImportsResolver @@ -60,124 +25,39 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo private $useImportsResolver; /** * @readonly - * @var \Rector\Naming\Naming\AliasNameResolver + * @var \Rector\PostRector\Guard\AddUseStatementGuard */ - private $aliasNameResolver; + private $addUseStatementGuard; /** - * @readonly - * @var \Rector\Comments\NodeDocBlock\DocBlockUpdater + * @var array */ - private $docBlockUpdater; - public function __construct(NameImporter $nameImporter, DocBlockNameImporter $docBlockNameImporter, ClassNameImportSkipper $classNameImportSkipper, PhpDocInfoFactory $phpDocInfoFactory, CurrentFileProvider $currentFileProvider, UseImportsResolver $useImportsResolver, AliasNameResolver $aliasNameResolver, DocBlockUpdater $docBlockUpdater) + private $currentUses = []; + public function __construct(NameImporter $nameImporter, UseImportsResolver $useImportsResolver, AddUseStatementGuard $addUseStatementGuard) { $this->nameImporter = $nameImporter; - $this->docBlockNameImporter = $docBlockNameImporter; - $this->classNameImportSkipper = $classNameImportSkipper; - $this->phpDocInfoFactory = $phpDocInfoFactory; - $this->currentFileProvider = $currentFileProvider; $this->useImportsResolver = $useImportsResolver; - $this->aliasNameResolver = $aliasNameResolver; - $this->docBlockUpdater = $docBlockUpdater; + $this->addUseStatementGuard = $addUseStatementGuard; } - public function enterNode(Node $node) : ?Node + public function beforeTraverse(array $nodes) { - if (!SimpleParameterProvider::provideBoolParameter(Option::AUTO_IMPORT_NAMES)) { - return null; - } - $file = $this->currentFileProvider->getFile(); - if (!$file instanceof File) { - return null; - } - if ($this->shouldSkipFileWithoutNamespace($file)) { - return null; - } - if ($node instanceof FullyQualified) { - return $this->processNodeName($node, $file); - } - if (!$node instanceof Stmt && !$node instanceof Param) { - return null; - } - $shouldImportDocBlocks = SimpleParameterProvider::provideBoolParameter(Option::AUTO_IMPORT_DOC_BLOCK_NAMES); - if (!$shouldImportDocBlocks) { - return null; - } - $phpDocInfo = $this->phpDocInfoFactory->createFromNode($node); - if (!$phpDocInfo instanceof PhpDocInfo) { - return null; - } - $hasDocChanged = $this->docBlockNameImporter->importNames($phpDocInfo->getPhpDocNode(), $node); - if (!$hasDocChanged) { - return null; - } - $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); - return $node; - } - private function shouldSkipFileWithoutNamespace(File $file) : bool - { - $firstStmt = \current($file->getNewStmts()); - if (!$firstStmt instanceof FileWithoutNamespace) { - return \false; - } - $currentStmt = \current($firstStmt->stmts); - if ($currentStmt instanceof InlineHTML || $currentStmt === \false) { - return \true; - } - $oldTokens = $file->getOldTokens(); - $tokenStartPos = $currentStmt->getStartTokenPos(); - return isset($oldTokens[$tokenStartPos][1]) && $oldTokens[$tokenStartPos][1] === 'isSpecialClassName()) { - return null; - } - $namespaces = \array_filter($file->getNewStmts(), static function (Stmt $stmt) : bool { - return $stmt instanceof Namespace_; - }); - if (\count($namespaces) > 1) { - return null; - } - /** @var Use_[]|GroupUse[] $currentUses */ - $currentUses = $this->useImportsResolver->resolve(); - if ($this->classNameImportSkipper->shouldSkipName($fullyQualified, $currentUses)) { - return null; - } - $nameInUse = $this->resolveNameInUse($fullyQualified, $currentUses); - if ($nameInUse instanceof Name) { - return $nameInUse; - } - return $this->nameImporter->importName($fullyQualified, $file); + $this->currentUses = $this->useImportsResolver->resolve(); + return $nodes; } /** - * @param Use_[]|GroupUse[] $currentUses + * @return \PhpParser\Node|int|null */ - private function resolveNameInUse(FullyQualified $fullyQualified, array $currentUses) : ?\PhpParser\Node\Name + public function enterNode(Node $node) { - $aliasName = $this->aliasNameResolver->resolveByName($fullyQualified, $currentUses); - if (\is_string($aliasName)) { - return new Name($aliasName); + if (!$node instanceof FullyQualified) { + return null; } - return $this->resolveLongNameInUseName($fullyQualified, $currentUses); + return $this->nameImporter->importName($node, $this->getFile(), $this->currentUses); } /** - * @param Use_[]|GroupUse[] $currentUses + * @param Stmt[] $stmts */ - private function resolveLongNameInUseName(FullyQualified $fullyQualified, array $currentUses) : ?Name + public function shouldTraverse(array $stmts) : bool { - if (\substr_count($fullyQualified->toCodeString(), '\\') === 1) { - return null; - } - $lastName = $fullyQualified->getLast(); - foreach ($currentUses as $currentUse) { - foreach ($currentUse->uses as $useUse) { - if ($useUse->name->getLast() !== $lastName) { - continue; - } - if ($useUse->alias instanceof Identifier && $useUse->alias->toString() !== $lastName) { - return new Name($lastName); - } - } - } - return null; + return $this->addUseStatementGuard->shouldTraverse($stmts, $this->getFile()->getFilePath()); } } diff --git a/vendor/rector/rector/src/PostRector/Rector/UnusedImportRemovingPostRector.php b/vendor/rector/rector/src/PostRector/Rector/UnusedImportRemovingPostRector.php index a22186419..c63025953 100644 --- a/vendor/rector/rector/src/PostRector/Rector/UnusedImportRemovingPostRector.php +++ b/vendor/rector/rector/src/PostRector/Rector/UnusedImportRemovingPostRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PostRector\Rector; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Comment; use PhpParser\Comment\Doc; use PhpParser\Node; @@ -15,8 +15,6 @@ use PhpParser\Node\Stmt\UseUse; use PhpParser\NodeTraverser; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\Configuration\Option; -use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; @@ -39,13 +37,11 @@ public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTrave } public function enterNode(Node $node) : ?Node { - if (!SimpleParameterProvider::provideBoolParameter(Option::REMOVE_UNUSED_IMPORTS)) { - return null; - } if (!$node instanceof Namespace_ && !$node instanceof FileWithoutNamespace) { return null; } $hasChanged = \false; + $namespaceName = $node instanceof Namespace_ && $node->name instanceof Name ? $node->name : null; $names = $this->resolveUsedPhpAndDocNames($node); foreach ($node->stmts as $key => $namespaceStmt) { if (!$namespaceStmt instanceof Use_) { @@ -57,7 +53,7 @@ public function enterNode(Node $node) : ?Node continue; } $useUse = $namespaceStmt->uses[0]; - if ($this->isUseImportUsed($useUse, $names)) { + if ($this->isUseImportUsed($useUse, $names, $namespaceName)) { continue; } unset($node->stmts[$key]); @@ -83,14 +79,15 @@ private function findNonUseImportNames($namespace) : array if (!$node instanceof Name) { return null; } - $names[] = $node->toString(); if ($node instanceof FullyQualified) { $originalName = $node->getAttribute(AttributeKey::ORIGINAL_NAME); if ($originalName instanceof Name) { - // collect original Name as well to cover namespaced used + // collect original Name as cover namespaced used $names[] = $originalName->toString(); + return $node; } } + $names[] = $node->toString(); return $node; }); return $names; @@ -142,16 +139,12 @@ private function resolveUsedPhpAndDocNames($namespace) : array $names = \array_merge($phpNames, $docBlockNames); return \array_unique($names); } - private function resolveAliasName(UseUse $useUse) : ?string - { - return $useUse->alias instanceof Identifier ? $useUse->alias->toString() : null; - } /** * @param string[] $names */ - private function isUseImportUsed(UseUse $useUse, array $names) : bool + private function isUseImportUsed(UseUse $useUse, array $names, ?Name $namespaceName) : bool { - $comparedName = $useUse->name->toString(); + $comparedName = $useUse->alias instanceof Identifier ? $useUse->alias->toString() : $useUse->name->toString(); if (\in_array($comparedName, $names, \true)) { return \true; } @@ -159,33 +152,30 @@ private function isUseImportUsed(UseUse $useUse, array $names) : bool if ($namespacedPrefix === '\\') { $namespacedPrefix = $comparedName . '\\'; } - $alias = $this->resolveAliasName($useUse); + $lastName = $useUse->name->getLast(); + $namespaceName = $namespaceName instanceof Name ? $namespaceName->toString() : null; // match partial import foreach ($names as $name) { - if (\substr_compare($comparedName, '\\' . $name, -\strlen('\\' . $name)) === 0) { + if ($this->isSubNamespace($name, $comparedName, $namespacedPrefix)) { return \true; } - if ($this->isSubNamespace($name, $namespacedPrefix)) { - return \true; - } - if (!\is_string($alias)) { + if (\strncmp($name, $lastName . '\\', \strlen($lastName . '\\')) !== 0) { continue; } - if ($alias === $name) { + if ($namespaceName === null) { return \true; } - if (\strpos($name, '\\') === \false) { - continue; - } - $namePrefix = Strings::before($name, '\\', 1); - if ($alias === $namePrefix) { + if (\strncmp($name, $namespaceName . '\\', \strlen($namespaceName . '\\')) !== 0) { return \true; } } return \false; } - private function isSubNamespace(string $name, string $namespacedPrefix) : bool + private function isSubNamespace(string $name, string $comparedName, string $namespacedPrefix) : bool { + if (\substr_compare($comparedName, '\\' . $name, -\strlen('\\' . $name)) === 0) { + return \true; + } if (\strncmp($name, $namespacedPrefix, \strlen($namespacedPrefix)) === 0) { $subNamespace = \substr($name, \strlen($namespacedPrefix)); return \strpos($subNamespace, '\\') === \false; diff --git a/vendor/rector/rector/src/PostRector/Rector/UseAddingPostRector.php b/vendor/rector/rector/src/PostRector/Rector/UseAddingPostRector.php index 4f6208fec..e7e6974f0 100644 --- a/vendor/rector/rector/src/PostRector/Rector/UseAddingPostRector.php +++ b/vendor/rector/rector/src/PostRector/Rector/UseAddingPostRector.php @@ -3,16 +3,15 @@ declare (strict_types=1); namespace Rector\PostRector\Rector; +use PhpParser\Node; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Namespace_; +use PhpParser\NodeTraverser; use Rector\CodingStyle\Application\UseImportsAdder; -use Rector\Exception\ShouldNotHappenException; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\PostRector\Collector\UseNodesToAddCollector; -use Rector\Provider\CurrentFileProvider; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; -use Rector\ValueObject\Application\File; final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRector { /** @@ -30,17 +29,11 @@ final class UseAddingPostRector extends \Rector\PostRector\Rector\AbstractPostRe * @var \Rector\PostRector\Collector\UseNodesToAddCollector */ private $useNodesToAddCollector; - /** - * @readonly - * @var \Rector\Provider\CurrentFileProvider - */ - private $currentFileProvider; - public function __construct(TypeFactory $typeFactory, UseImportsAdder $useImportsAdder, UseNodesToAddCollector $useNodesToAddCollector, CurrentFileProvider $currentFileProvider) + public function __construct(TypeFactory $typeFactory, UseImportsAdder $useImportsAdder, UseNodesToAddCollector $useNodesToAddCollector) { $this->typeFactory = $typeFactory; $this->useImportsAdder = $useImportsAdder; $this->useNodesToAddCollector = $useNodesToAddCollector; - $this->currentFileProvider = $currentFileProvider; } /** * @param Stmt[] $nodes @@ -52,20 +45,10 @@ public function beforeTraverse(array $nodes) : array if ($nodes === []) { return $nodes; } - $rootNode = null; - foreach ($nodes as $node) { - if ($node instanceof FileWithoutNamespace || $node instanceof Namespace_) { - $rootNode = $node; - break; - } - } - $file = $this->currentFileProvider->getFile(); - if (!$file instanceof File) { - throw new ShouldNotHappenException(); - } - $useImportTypes = $this->useNodesToAddCollector->getObjectImportsByFilePath($file->getFilePath()); - $constantUseImportTypes = $this->useNodesToAddCollector->getConstantImportsByFilePath($file->getFilePath()); - $functionUseImportTypes = $this->useNodesToAddCollector->getFunctionImportsByFilePath($file->getFilePath()); + $rootNode = $this->resolveRootNode($nodes); + $useImportTypes = $this->useNodesToAddCollector->getObjectImportsByFilePath($this->getFile()->getFilePath()); + $constantUseImportTypes = $this->useNodesToAddCollector->getConstantImportsByFilePath($this->getFile()->getFilePath()); + $functionUseImportTypes = $this->useNodesToAddCollector->getFunctionImportsByFilePath($this->getFile()->getFilePath()); if ($useImportTypes === [] && $constantUseImportTypes === [] && $functionUseImportTypes === []) { return $nodes; } @@ -79,6 +62,18 @@ public function beforeTraverse(array $nodes) : array } return $this->resolveNodesWithImportedUses($nodes, $useImportTypes, $constantUseImportTypes, $functionUseImportTypes, $rootNode); } + public function enterNode(Node $node) : int + { + /** + * We stop the traversal because all the work has already been done in the beforeTraverse() function + * + * Using STOP_TRAVERSAL is usually dangerous as it will stop the processing of all your nodes for all visitors + * but since the PostFileProcessor is using direct new NodeTraverser() and traverse() for only a single + * visitor per execution, using stop traversal here is safe, + * ref https://github.com/rectorphp/rector-src/blob/fc1e742fa4d9861ccdc5933f3b53613b8223438d/src/PostRector/Application/PostFileProcessor.php#L59-L61 + */ + return NodeTraverser::STOP_TRAVERSAL; + } /** * @param Stmt[] $nodes * @param FullyQualifiedObjectType[] $useImportTypes @@ -116,4 +111,17 @@ private function filterOutNonNamespacedNames(array $useImportTypes) : array } return $namespacedUseImportTypes; } + /** + * @param Stmt[] $nodes + * @return \PhpParser\Node\Stmt\Namespace_|\Rector\PhpParser\Node\CustomNode\FileWithoutNamespace|null + */ + private function resolveRootNode(array $nodes) + { + foreach ($nodes as $node) { + if ($node instanceof FileWithoutNamespace || $node instanceof Namespace_) { + return $node; + } + } + return null; + } } diff --git a/vendor/rector/rector/src/Rector/AbstractRector.php b/vendor/rector/rector/src/Rector/AbstractRector.php index 1014aed2a..15413ef28 100644 --- a/vendor/rector/rector/src/Rector/AbstractRector.php +++ b/vendor/rector/rector/src/Rector/AbstractRector.php @@ -5,10 +5,13 @@ use PhpParser\Node; use PhpParser\Node\Name; +use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Const_; use PhpParser\Node\Stmt\InlineHTML; use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Nop; +use PhpParser\Node\Stmt\Property; +use PhpParser\Node\Stmt\PropertyProperty; use PhpParser\Node\Stmt\Trait_; use PhpParser\NodeTraverser; use PhpParser\NodeVisitorAbstract; @@ -16,6 +19,8 @@ use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use Rector\Application\ChangedNodeScopeRefresher; +use Rector\Application\Provider\CurrentFileProvider; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\ChangesReporting\ValueObject\RectorWithLineChange; use Rector\Contract\Rector\RectorInterface; use Rector\Exception\ShouldNotHappenException; @@ -26,7 +31,6 @@ use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PhpParser\Comparing\NodeComparator; use Rector\PhpParser\Node\NodeFactory; -use Rector\Provider\CurrentFileProvider; use Rector\Skipper\Skipper\Skipper; use Rector\ValueObject\Application\File; abstract class AbstractRector extends NodeVisitorAbstract implements RectorInterface @@ -78,7 +82,7 @@ abstract class AbstractRector extends NodeVisitorAbstract implements RectorInter */ private $simpleCallableNodeTraverser; /** - * @var \Rector\Provider\CurrentFileProvider + * @var \Rector\Application\Provider\CurrentFileProvider */ private $currentFileProvider; /** @@ -196,9 +200,9 @@ protected function isNames(Node $node, array $names) : bool * @see https://phpstan.org/writing-php-code/phpdoc-types#conditional-return-types * * @return ($node is Node\Param ? string : - * ($node is Node\Stmt\ClassMethod ? string : - * ($node is Node\Stmt\Property ? string : - * ($node is Node\Stmt\PropertyProperty ? string : + * ($node is ClassMethod ? string : + * ($node is Property ? string : + * ($node is PropertyProperty ? string : * ($node is Trait_ ? string : * ($node is Interface_ ? string : * ($node is Const_ ? string : @@ -237,7 +241,17 @@ protected function mirrorComments(Node $newNode, Node $oldNode) : void if ($oldNode instanceof InlineHTML) { return; } - $newNode->setAttribute(AttributeKey::PHP_DOC_INFO, $oldNode->getAttribute(AttributeKey::PHP_DOC_INFO)); + $oldPhpDocInfo = $oldNode->getAttribute(AttributeKey::PHP_DOC_INFO); + $newPhpDocInfo = $newNode->getAttribute(AttributeKey::PHP_DOC_INFO); + if ($newPhpDocInfo instanceof PhpDocInfo) { + if (!$oldPhpDocInfo instanceof PhpDocInfo) { + return; + } + if ((string) $oldPhpDocInfo->getPhpDocNode() !== (string) $newPhpDocInfo->getPhpDocNode()) { + return; + } + } + $newNode->setAttribute(AttributeKey::PHP_DOC_INFO, $oldPhpDocInfo); if (!$newNode instanceof Nop) { $newNode->setAttribute(AttributeKey::COMMENTS, $oldNode->getAttribute(AttributeKey::COMMENTS)); } diff --git a/vendor/rector/rector/src/Reflection/ReflectionResolver.php b/vendor/rector/rector/src/Reflection/ReflectionResolver.php index 0273d196b..8b2b69e5e 100644 --- a/vendor/rector/rector/src/Reflection/ReflectionResolver.php +++ b/vendor/rector/rector/src/Reflection/ReflectionResolver.php @@ -22,13 +22,14 @@ use PHPStan\Reflection\MethodReflection; use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Reflection\ReflectionProvider; +use PHPStan\Type\BenevolentUnionType; +use PHPStan\Type\TypeCombinator; use PHPStan\Type\TypeWithClassName; use Rector\Exception\ShouldNotHappenException; use Rector\NodeAnalyzer\ClassAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\NodeTypeResolver; -use Rector\PhpParser\AstResolver; use Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType; use Rector\ValueObject\MethodName; final class ReflectionResolver @@ -58,19 +59,13 @@ final class ReflectionResolver * @var \Rector\Reflection\MethodReflectionResolver */ private $methodReflectionResolver; - /** - * @readonly - * @var \Rector\PhpParser\AstResolver - */ - private $astResolver; - public function __construct(ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, NodeNameResolver $nodeNameResolver, ClassAnalyzer $classAnalyzer, \Rector\Reflection\MethodReflectionResolver $methodReflectionResolver, AstResolver $astResolver) + public function __construct(ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, NodeNameResolver $nodeNameResolver, ClassAnalyzer $classAnalyzer, \Rector\Reflection\MethodReflectionResolver $methodReflectionResolver) { $this->reflectionProvider = $reflectionProvider; $this->nodeTypeResolver = $nodeTypeResolver; $this->nodeNameResolver = $nodeNameResolver; $this->classAnalyzer = $classAnalyzer; $this->methodReflectionResolver = $methodReflectionResolver; - $this->astResolver = $astResolver; } /** * @api @@ -103,19 +98,41 @@ public function resolveClassReflection(?Node $node) : ?ClassReflection */ public function resolveClassReflectionSourceObject($node) : ?ClassReflection { + $objectType = $node instanceof StaticCall || $node instanceof StaticPropertyFetch ? $this->nodeTypeResolver->getType($node->class) : $this->nodeTypeResolver->getType($node->var); + if (!$objectType instanceof TypeWithClassName) { + return null; + } + $className = $objectType->getClassName(); + if (!$this->reflectionProvider->hasClass($className)) { + return null; + } + $classReflection = $this->reflectionProvider->getClass($className); if ($node instanceof PropertyFetch || $node instanceof StaticPropertyFetch) { - $objectType = $node instanceof PropertyFetch ? $this->nodeTypeResolver->getType($node->var) : $this->nodeTypeResolver->getType($node->class); - if (!$objectType instanceof TypeWithClassName) { + $propertyName = (string) $this->nodeNameResolver->getName($node->name); + if (!$classReflection->hasNativeProperty($propertyName)) { return null; } - $className = $objectType->getClassName(); - if (!$this->reflectionProvider->hasClass($className)) { - return null; + $property = $classReflection->getNativeProperty($propertyName); + if ($property->isPrivate()) { + return $classReflection; + } + if ($this->reflectionProvider->hasClass($property->getDeclaringClass()->getName())) { + return $this->reflectionProvider->getClass($property->getDeclaringClass()->getName()); } - return $this->reflectionProvider->getClass($className); + return $classReflection; + } + $methodName = (string) $this->nodeNameResolver->getName($node->name); + if (!$classReflection->hasNativeMethod($methodName)) { + return null; } - $classMethod = $this->astResolver->resolveClassMethodFromCall($node); - return $this->resolveClassReflection($classMethod); + $extendedMethodReflection = $classReflection->getNativeMethod($methodName); + if ($extendedMethodReflection->isPrivate()) { + return $classReflection; + } + if ($this->reflectionProvider->hasClass($extendedMethodReflection->getDeclaringClass()->getName())) { + return $this->reflectionProvider->getClass($extendedMethodReflection->getDeclaringClass()->getName()); + } + return $classReflection; } /** * @param class-string $className @@ -150,6 +167,9 @@ public function resolveMethodReflectionFromStaticCall(StaticCall $staticCall) : public function resolveMethodReflectionFromMethodCall(MethodCall $methodCall) : ?MethodReflection { $callerType = $this->nodeTypeResolver->getType($methodCall->var); + if ($callerType instanceof BenevolentUnionType) { + $callerType = TypeCombinator::removeFalsey($callerType); + } if (!$callerType instanceof TypeWithClassName) { return null; } diff --git a/vendor/rector/rector/src/Reporting/DeprecatedRulesReporter.php b/vendor/rector/rector/src/Reporting/DeprecatedRulesReporter.php new file mode 100644 index 000000000..0dbfd2e51 --- /dev/null +++ b/vendor/rector/rector/src/Reporting/DeprecatedRulesReporter.php @@ -0,0 +1,43 @@ +symfonyStyle = $symfonyStyle; + } + public function reportDeprecatedRules() : void + { + /** @var string[] $registeredRectorRules */ + $registeredRectorRules = SimpleParameterProvider::provideArrayParameter(Option::REGISTERED_RECTOR_RULES); + foreach ($registeredRectorRules as $registeredRectorRule) { + if (!\is_a($registeredRectorRule, DeprecatedInterface::class, \true)) { + continue; + } + $this->symfonyStyle->warning(\sprintf('Registered rule "%s" is deprecated and will be removed. Upgrade your config to use another rule or remove it', $registeredRectorRule)); + } + } + public function reportDeprecatedSkippedRules() : void + { + /** @var string[] $skippedRectorRules */ + $skippedRectorRules = SimpleParameterProvider::provideArrayParameter(Option::SKIPPED_RECTOR_RULES); + foreach ($skippedRectorRules as $skippedRectorRule) { + if (!\is_a($skippedRectorRule, DeprecatedInterface::class, \true)) { + continue; + } + $this->symfonyStyle->warning(\sprintf('Skipped rule "%s" is deprecated', $skippedRectorRule)); + } + } +} diff --git a/vendor/rector/rector/src/Reporting/MissConfigurationReporter.php b/vendor/rector/rector/src/Reporting/MissConfigurationReporter.php new file mode 100644 index 000000000..ae33878a3 --- /dev/null +++ b/vendor/rector/rector/src/Reporting/MissConfigurationReporter.php @@ -0,0 +1,63 @@ +symfonyStyle = $symfonyStyle; + $this->vendorMissAnalyseGuard = $vendorMissAnalyseGuard; + } + public function reportSkippedNeverRegisteredRules() : void + { + $registeredRules = SimpleParameterProvider::provideArrayParameter(Option::REGISTERED_RECTOR_RULES); + $skippedRules = SimpleParameterProvider::provideArrayParameter(Option::SKIPPED_RECTOR_RULES); + $neverRegisteredSkippedRules = \array_unique(\array_diff($skippedRules, $registeredRules)); + foreach ($neverRegisteredSkippedRules as $neverRegisteredSkippedRule) { + // post rules are registered in a different way + if (\is_a($neverRegisteredSkippedRule, PostRectorInterface::class, \true)) { + continue; + } + $this->symfonyStyle->warning(\sprintf('Skipped rule "%s" is never registered. You can remove it from "->withSkip()"', $neverRegisteredSkippedRule)); + } + } + /** + * @param string[] $filePaths + */ + public function reportVendorInPaths(array $filePaths) : void + { + if (!$this->vendorMissAnalyseGuard->isVendorAnalyzed($filePaths)) { + return; + } + $this->symfonyStyle->warning(\sprintf('Rector has detected a "/vendor" directory in your configured paths. If this is Composer\'s vendor directory, this is not necessary as it will be autoloaded. Scanning the Composer /vendor directory will cause Rector to run much slower and possibly with errors.%sRemove "/vendor" from Rector paths and run again.', \PHP_EOL . \PHP_EOL)); + \sleep(3); + } + public function reportStartWithShortOpenTag() : void + { + $files = SimpleParameterProvider::provideArrayParameter(Option::SKIPPED_START_WITH_SHORT_OPEN_TAG_FILES); + if ($files === []) { + return; + } + $suffix = \count($files) > 1 ? 's were' : ' was'; + $fileList = \implode(\PHP_EOL, $files); + $this->symfonyStyle->warning(\sprintf('The following file%s skipped as starting with short open tag. Migrate to long open PHP tag first: %s%s', $suffix, \PHP_EOL . \PHP_EOL, $fileList)); + \sleep(3); + } +} diff --git a/vendor/rector/rector/src/Set/Contract/SetInterface.php b/vendor/rector/rector/src/Set/Contract/SetInterface.php new file mode 100644 index 000000000..99de8ff57 --- /dev/null +++ b/vendor/rector/rector/src/Set/Contract/SetInterface.php @@ -0,0 +1,11 @@ +setProviderCollector = $setProviderCollector; + } + /** + * @return ComposerTriggeredSet[] + */ + public function matchComposerTriggered(string $groupName) : array + { + $matchedSets = []; + foreach ($this->setProviderCollector->provideSets() as $set) { + if (!$set instanceof ComposerTriggeredSet) { + continue; + } + if ($set->getGroupName() === $groupName) { + $matchedSets[] = $set; + } + } + return $matchedSets; + } + /** + * @param string[] $setGroups + * @return string[] + */ + public function matchBySetGroups(array $setGroups) : array + { + $installedPackageResolver = new InstalledPackageResolver(); + $installedComposerPackages = $installedPackageResolver->resolve(\getcwd()); + $groupLoadedSets = []; + foreach ($setGroups as $setGroup) { + $composerTriggeredSets = $this->matchComposerTriggered($setGroup); + foreach ($composerTriggeredSets as $composerTriggeredSet) { + if ($composerTriggeredSet->matchInstalledPackages($installedComposerPackages)) { + // @todo add debug note somewhere + // echo sprintf('Loaded "%s" set as it meets the conditions', $composerTriggeredSet->getSetFilePath()); + // it matched composer package + version requirements → load set + $groupLoadedSets[] = $composerTriggeredSet->getSetFilePath(); + } + } + } + return $groupLoadedSets; + } +} diff --git a/vendor/rector/rector/src/Set/SetProvider/CoreSetProvider.php b/vendor/rector/rector/src/Set/SetProvider/CoreSetProvider.php new file mode 100644 index 000000000..1aa675341 --- /dev/null +++ b/vendor/rector/rector/src/Set/SetProvider/CoreSetProvider.php @@ -0,0 +1,19 @@ +groupName = $groupName; + $this->packageName = $packageName; + $this->version = $version; + $this->setFilePath = $setFilePath; + Assert::regex($this->packageName, self::PACKAGE_REGEX); + Assert::fileExists($setFilePath); + } + public function getGroupName() : string + { + return $this->groupName; + } + public function getSetFilePath() : string + { + return $this->setFilePath; + } + /** + * @param InstalledPackage[] $installedPackages + */ + public function matchInstalledPackages(array $installedPackages) : bool + { + foreach ($installedPackages as $installedPackage) { + if ($installedPackage->getName() !== $this->packageName) { + continue; + } + return \version_compare($installedPackage->getVersion(), $this->version) !== -1; + } + return \false; + } + public function getName() : string + { + return $this->packageName . ' ' . $this->version; + } +} diff --git a/vendor/rector/rector/src/Set/ValueObject/Set.php b/vendor/rector/rector/src/Set/ValueObject/Set.php new file mode 100644 index 000000000..90ed2a1e6 --- /dev/null +++ b/vendor/rector/rector/src/Set/ValueObject/Set.php @@ -0,0 +1,47 @@ +groupName = $groupName; + $this->setName = $setName; + $this->setFilePath = $setFilePath; + Assert::fileExists($setFilePath); + } + public function getGroupName() : string + { + return $this->groupName; + } + public function getName() : string + { + return $this->setName; + } + public function getSetFilePath() : string + { + return $this->setFilePath; + } +} diff --git a/vendor/rector/rector/src/Set/ValueObject/SetList.php b/vendor/rector/rector/src/Set/ValueObject/SetList.php index aa42e85c4..19798cfe5 100644 --- a/vendor/rector/rector/src/Set/ValueObject/SetList.php +++ b/vendor/rector/rector/src/Set/ValueObject/SetList.php @@ -9,6 +9,11 @@ */ final class SetList implements SetListInterface { + /** + * @internal + * @var string + */ + public const PHP_POLYFILLS = __DIR__ . '/../../../config/set/php-polyfills.php'; /** * @var string */ @@ -33,6 +38,12 @@ final class SetList implements SetListInterface * @var string */ public const NAMING = __DIR__ . '/../../../config/set/naming.php'; + /** + * Opinionated rules that match rector coding standard + * + * @var string + */ + public const RECTOR_PRESET = __DIR__ . '/../../../config/set/rector-preset.php'; /** * @var string */ @@ -109,4 +120,8 @@ final class SetList implements SetListInterface * @var string */ public const INSTANCEOF = __DIR__ . '/../../../config/set/instanceof.php'; + /** + * @var string + */ + public const CARBON = __DIR__ . '/../../../config/set/datetime-to-carbon.php'; } diff --git a/vendor/rector/rector/src/Skipper/Contract/SkipVoterInterface.php b/vendor/rector/rector/src/Skipper/Contract/SkipVoterInterface.php deleted file mode 100644 index ca322c7c0..000000000 --- a/vendor/rector/rector/src/Skipper/Contract/SkipVoterInterface.php +++ /dev/null @@ -1,16 +0,0 @@ - - * @readonly - */ - private $skipVoters; /** * @readonly * @var \Rector\Skipper\Skipper\PathSkipper */ private $pathSkipper; /** - * @param array $skipVoters + * @readonly + * @var \Rector\Skipper\SkipVoter\ClassSkipVoter */ - public function __construct(RectifiedAnalyzer $rectifiedAnalyzer, array $skipVoters, \Rector\Skipper\Skipper\PathSkipper $pathSkipper) + private $classSkipVoter; + public function __construct(RectifiedAnalyzer $rectifiedAnalyzer, \Rector\Skipper\Skipper\PathSkipper $pathSkipper, ClassSkipVoter $classSkipVoter) { $this->rectifiedAnalyzer = $rectifiedAnalyzer; - $this->skipVoters = $skipVoters; $this->pathSkipper = $pathSkipper; - Assert::allIsInstanceOf($this->skipVoters, SkipVoterInterface::class); + $this->classSkipVoter = $classSkipVoter; } /** * @param string|object $element @@ -55,16 +50,10 @@ public function shouldSkipFilePath(string $filePath) : bool */ public function shouldSkipElementAndFilePath($element, string $filePath) : bool { - foreach ($this->skipVoters as $skipVoter) { - if (!$skipVoter->match($element)) { - continue; - } - if (!$skipVoter->shouldSkip($element, $filePath)) { - continue; - } - return \true; + if (!$this->classSkipVoter->match($element)) { + return \false; } - return \false; + return $this->classSkipVoter->shouldSkip($element, $filePath); } /** * @param class-string $rectorClass diff --git a/vendor/rector/rector/src/StaticTypeMapper/Mapper/PhpParserNodeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/Mapper/PhpParserNodeMapper.php index d0f27004d..75d7c2da9 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/Mapper/PhpParserNodeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/Mapper/PhpParserNodeMapper.php @@ -4,11 +4,8 @@ namespace Rector\StaticTypeMapper\Mapper; use PhpParser\Node; -use PhpParser\Node\Name; -use PhpParser\Node\Name\FullyQualified; use PHPStan\Type\Type; use Rector\Exception\NotImplementedYetException; -use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface; final class PhpParserNodeMapper { @@ -26,23 +23,12 @@ public function __construct(iterable $phpParserNodeMappers) } public function mapToPHPStanType(Node $node) : Type { - $nameOrExpr = $this->expandedNamespacedName($node); foreach ($this->phpParserNodeMappers as $phpParserNodeMapper) { - if (!\is_a($nameOrExpr, $phpParserNodeMapper->getNodeType())) { + if (!\is_a($node, $phpParserNodeMapper->getNodeType())) { continue; } - return $phpParserNodeMapper->mapToPHPStan($nameOrExpr); + return $phpParserNodeMapper->mapToPHPStan($node); } - throw new NotImplementedYetException(\get_class($nameOrExpr)); - } - /** - * @return \PhpParser\Node|\PhpParser\Node\Name\FullyQualified - */ - private function expandedNamespacedName(Node $node) - { - if (\get_class($node) === Name::class && $node->hasAttribute(AttributeKey::NAMESPACED_NAME)) { - return new FullyQualified($node->getAttribute(AttributeKey::NAMESPACED_NAME)); - } - return $node; + throw new NotImplementedYetException(\get_class($node)); } } diff --git a/vendor/rector/rector/src/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php index c9e628094..be6aec110 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\StaticTypeMapper\Mapper; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PHPStan\Type\Accessory\AccessoryNonEmptyStringType; use PHPStan\Type\ArrayType; use PHPStan\Type\BooleanType; diff --git a/vendor/rector/rector/src/StaticTypeMapper/Naming/NameScopeFactory.php b/vendor/rector/rector/src/StaticTypeMapper/Naming/NameScopeFactory.php index 25d5e4214..349fdae7d 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/Naming/NameScopeFactory.php +++ b/vendor/rector/rector/src/StaticTypeMapper/Naming/NameScopeFactory.php @@ -4,21 +4,14 @@ namespace Rector\StaticTypeMapper\Naming; use PhpParser\Node; -use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\GroupUse; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; use PHPStan\Analyser\NameScope; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; -use PHPStan\Type\Generic\TemplateTypeMap; -use PHPStan\Type\Type; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Naming\Naming\UseImportsResolver; use Rector\NodeTypeResolver\Node\AttributeKey; -use Rector\PhpParser\AstResolver; -use Rector\Reflection\ReflectionResolver; -use Rector\StaticTypeMapper\StaticTypeMapper; /** * @see https://github.com/phpstan/phpstan-src/blob/8376548f76e2c845ae047e3010e873015b796818/src/Analyser/NameScope.php#L32 */ @@ -29,58 +22,27 @@ final class NameScopeFactory * @var \Rector\Naming\Naming\UseImportsResolver */ private $useImportsResolver; - /** - * @readonly - * @var \Rector\PhpParser\AstResolver - */ - private $astResolver; - /** - * @readonly - * @var \Rector\Reflection\ReflectionResolver - */ - private $reflectionResolver; - /** - * @var \Rector\StaticTypeMapper\StaticTypeMapper - */ - private $staticTypeMapper; - /** - * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory - */ - private $phpDocInfoFactory; - public function __construct(UseImportsResolver $useImportsResolver, AstResolver $astResolver, ReflectionResolver $reflectionResolver) + public function __construct(UseImportsResolver $useImportsResolver) { $this->useImportsResolver = $useImportsResolver; - $this->astResolver = $astResolver; - $this->reflectionResolver = $reflectionResolver; - } - // This is needed to avoid circular references - public function autowire(PhpDocInfoFactory $phpDocInfoFactory, StaticTypeMapper $staticTypeMapper) : void - { - $this->phpDocInfoFactory = $phpDocInfoFactory; - $this->staticTypeMapper = $staticTypeMapper; } public function createNameScopeFromNodeWithoutTemplateTypes(Node $node) : NameScope { $scope = $node->getAttribute(AttributeKey::SCOPE); - $namespace = $scope instanceof Scope ? $scope->getNamespace() : null; - $uses = $this->useImportsResolver->resolve(); - $usesAliasesToNames = $this->resolveUseNamesByAlias($uses); - if ($scope instanceof Scope && $scope->getClassReflection() instanceof ClassReflection) { + if ($scope instanceof Scope) { + $namespace = $scope->getNamespace(); $classReflection = $scope->getClassReflection(); - $className = $classReflection->getName(); + $className = $classReflection instanceof ClassReflection ? $classReflection->getName() : null; } else { + $namespace = null; $className = null; } + $uses = $this->useImportsResolver->resolve(); + $usesAliasesToNames = $this->resolveUseNamesByAlias($uses); return new NameScope($namespace, $usesAliasesToNames, $className); } - public function createNameScopeFromNode(Node $node) : NameScope - { - $nameScope = $this->createNameScopeFromNodeWithoutTemplateTypes($node); - $templateTypeMap = $this->templateTemplateTypeMap($node); - return new NameScope($nameScope->getNamespace(), $nameScope->getUses(), $nameScope->getClassName(), null, $templateTypeMap); - } /** - * @param Use_[]|GroupUse[] $useNodes + * @param array $useNodes * @return array */ private function resolveUseNamesByAlias(array $useNodes) : array @@ -98,30 +60,4 @@ private function resolveUseNamesByAlias(array $useNodes) : array } return $useNamesByAlias; } - private function templateTemplateTypeMap(Node $node) : TemplateTypeMap - { - $nodeTemplateTypes = $this->resolveTemplateTypesFromNode($node); - $classTemplateTypes = []; - $classReflection = $this->reflectionResolver->resolveClassReflection($node); - if ($classReflection instanceof ClassReflection) { - $classLike = $this->astResolver->resolveClassFromClassReflection($classReflection); - if ($classLike instanceof ClassLike) { - $classTemplateTypes = $this->resolveTemplateTypesFromNode($classLike); - } - } - $templateTypes = \array_merge($nodeTemplateTypes, $classTemplateTypes); - return new TemplateTypeMap($templateTypes); - } - /** - * @return Type[] - */ - private function resolveTemplateTypesFromNode(Node $node) : array - { - $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); - $templateTypes = []; - foreach ($phpDocInfo->getTemplateTagValueNodes() as $templateTagValueNode) { - $templateTypes[$templateTagValueNode->name] = $this->staticTypeMapper->mapPHPStanPhpDocTypeToPHPStanType($templateTagValueNode, $node); - } - return $templateTypes; - } } diff --git a/vendor/rector/rector/src/StaticTypeMapper/PhpDoc/PhpDocTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/PhpDoc/PhpDocTypeMapper.php index 218d09194..0853c9ceb 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/PhpDoc/PhpDocTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/PhpDoc/PhpDocTypeMapper.php @@ -9,7 +9,7 @@ use PHPStan\PhpDocParser\Ast\Type\TypeNode; use PHPStan\Type\Type; use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Tests\StaticTypeMapper\PhpDoc\PhpDocTypeMapperTest */ diff --git a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IdentifierTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IdentifierPhpDocTypeMapper.php similarity index 94% rename from vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IdentifierTypeMapper.php rename to vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IdentifierPhpDocTypeMapper.php index 6ebb489c4..3200d9729 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IdentifierTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IdentifierPhpDocTypeMapper.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\StaticTypeMapper\PhpDocParser; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PHPStan\Analyser\NameScope; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; @@ -32,7 +32,7 @@ /** * @implements PhpDocTypeMapperInterface */ -final class IdentifierTypeMapper implements PhpDocTypeMapperInterface +final class IdentifierPhpDocTypeMapper implements PhpDocTypeMapperInterface { /** * @readonly @@ -131,7 +131,9 @@ private function mapParent(Node $node) // parent outside the class, e.g. in a function return new MixedType(); } - /** @var ClassReflection $classReflection */ + if (!$this->reflectionProvider->hasClass($className)) { + return new MixedType(); + } $classReflection = $this->reflectionProvider->getClass($className); $parentClassReflection = $classReflection->getParentClass(); if (!$parentClassReflection instanceof ClassReflection) { @@ -149,7 +151,9 @@ private function mapStatic(Node $node) // static outside the class, e.g. in a function return new MixedType(); } - /** @var ClassReflection $classReflection */ + if (!$this->reflectionProvider->hasClass($className)) { + return new MixedType(); + } $classReflection = $this->reflectionProvider->getClass($className); return new StaticType($classReflection); } diff --git a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IntersectionPhpDocTypeMapper.php similarity index 72% rename from vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php rename to vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IntersectionPhpDocTypeMapper.php index b8d6acc5a..fe5928fe9 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/IntersectionPhpDocTypeMapper.php @@ -15,16 +15,16 @@ /** * @implements PhpDocTypeMapperInterface */ -final class IntersectionTypeMapper implements PhpDocTypeMapperInterface +final class IntersectionPhpDocTypeMapper implements PhpDocTypeMapperInterface { /** * @readonly - * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper + * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper */ - private $identifierTypeMapper; - public function __construct(\Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper $identifierTypeMapper) + private $identifierPhpDocTypeMapper; + public function __construct(\Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper $identifierPhpDocTypeMapper) { - $this->identifierTypeMapper = $identifierTypeMapper; + $this->identifierPhpDocTypeMapper = $identifierPhpDocTypeMapper; } public function getNodeType() : string { @@ -40,7 +40,7 @@ public function mapToPHPStanType(TypeNode $typeNode, Node $node, NameScope $name if (!$intersectionedTypeNode instanceof IdentifierTypeNode) { return new MixedType(); } - $intersectionedTypes[] = $this->identifierTypeMapper->mapIdentifierTypeNode($intersectionedTypeNode, $node); + $intersectionedTypes[] = $this->identifierPhpDocTypeMapper->mapIdentifierTypeNode($intersectionedTypeNode, $node); } return new IntersectionType($intersectionedTypes); } diff --git a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/NullableTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/NullablePhpDocTypeMapper.php similarity index 75% rename from vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/NullableTypeMapper.php rename to vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/NullablePhpDocTypeMapper.php index c57b73162..705e9bec9 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/NullableTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/NullablePhpDocTypeMapper.php @@ -16,21 +16,21 @@ /** * @implements PhpDocTypeMapperInterface */ -final class NullableTypeMapper implements PhpDocTypeMapperInterface +final class NullablePhpDocTypeMapper implements PhpDocTypeMapperInterface { /** * @readonly - * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper + * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper */ - private $identifierTypeMapper; + private $identifierPhpDocTypeMapper; /** * @readonly * @var \PHPStan\PhpDoc\TypeNodeResolver */ private $typeNodeResolver; - public function __construct(\Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper $identifierTypeMapper, TypeNodeResolver $typeNodeResolver) + public function __construct(\Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper $identifierPhpDocTypeMapper, TypeNodeResolver $typeNodeResolver) { - $this->identifierTypeMapper = $identifierTypeMapper; + $this->identifierPhpDocTypeMapper = $identifierPhpDocTypeMapper; $this->typeNodeResolver = $typeNodeResolver; } public function getNodeType() : string @@ -43,7 +43,7 @@ public function getNodeType() : string public function mapToPHPStanType(TypeNode $typeNode, Node $node, NameScope $nameScope) : Type { if ($typeNode->type instanceof IdentifierTypeNode) { - $type = $this->identifierTypeMapper->mapToPHPStanType($typeNode->type, $node, $nameScope); + $type = $this->identifierPhpDocTypeMapper->mapToPHPStanType($typeNode->type, $node, $nameScope); if ($type instanceof UnionType) { return new UnionType(\array_merge([new NullType()], $type->getTypes())); } diff --git a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/UnionPhpDocTypeMapper.php similarity index 66% rename from vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php rename to vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/UnionPhpDocTypeMapper.php index 353c44cd3..cfdcc848c 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/PhpDocParser/UnionPhpDocTypeMapper.php @@ -16,7 +16,7 @@ /** * @implements PhpDocTypeMapperInterface */ -final class UnionTypeMapper implements PhpDocTypeMapperInterface +final class UnionPhpDocTypeMapper implements PhpDocTypeMapperInterface { /** * @readonly @@ -25,24 +25,24 @@ final class UnionTypeMapper implements PhpDocTypeMapperInterface private $typeFactory; /** * @readonly - * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper + * @var \Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper */ - private $identifierTypeMapper; + private $identifierPhpDocTypeMapper; /** * @readonly - * @var \Rector\StaticTypeMapper\PhpDocParser\IntersectionTypeMapper + * @var \Rector\StaticTypeMapper\PhpDocParser\IntersectionPhpDocTypeMapper */ - private $intersectionTypeMapper; + private $intersectionPhpDocTypeMapper; /** * @readonly * @var \PHPStan\PhpDoc\TypeNodeResolver */ private $typeNodeResolver; - public function __construct(TypeFactory $typeFactory, \Rector\StaticTypeMapper\PhpDocParser\IdentifierTypeMapper $identifierTypeMapper, \Rector\StaticTypeMapper\PhpDocParser\IntersectionTypeMapper $intersectionTypeMapper, TypeNodeResolver $typeNodeResolver) + public function __construct(TypeFactory $typeFactory, \Rector\StaticTypeMapper\PhpDocParser\IdentifierPhpDocTypeMapper $identifierPhpDocTypeMapper, \Rector\StaticTypeMapper\PhpDocParser\IntersectionPhpDocTypeMapper $intersectionPhpDocTypeMapper, TypeNodeResolver $typeNodeResolver) { $this->typeFactory = $typeFactory; - $this->identifierTypeMapper = $identifierTypeMapper; - $this->intersectionTypeMapper = $intersectionTypeMapper; + $this->identifierPhpDocTypeMapper = $identifierPhpDocTypeMapper; + $this->intersectionPhpDocTypeMapper = $intersectionPhpDocTypeMapper; $this->typeNodeResolver = $typeNodeResolver; } public function getNodeType() : string @@ -57,11 +57,11 @@ public function mapToPHPStanType(TypeNode $typeNode, Node $node, NameScope $name $unionedTypes = []; foreach ($typeNode->types as $unionedTypeNode) { if ($unionedTypeNode instanceof IdentifierTypeNode) { - $unionedTypes[] = $this->identifierTypeMapper->mapToPHPStanType($unionedTypeNode, $node, $nameScope); + $unionedTypes[] = $this->identifierPhpDocTypeMapper->mapToPHPStanType($unionedTypeNode, $node, $nameScope); continue; } if ($unionedTypeNode instanceof IntersectionTypeNode) { - $unionedTypes[] = $this->intersectionTypeMapper->mapToPHPStanType($unionedTypeNode, $node, $nameScope); + $unionedTypes[] = $this->intersectionPhpDocTypeMapper->mapToPHPStanType($unionedTypeNode, $node, $nameScope); continue; } $unionedTypes[] = $this->typeNodeResolver->resolve($unionedTypeNode, $nameScope); diff --git a/vendor/rector/rector/src/StaticTypeMapper/PhpParser/NameNodeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/PhpParser/NameNodeMapper.php index 1f1eaf4a6..1a6a8a81e 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/PhpParser/NameNodeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/PhpParser/NameNodeMapper.php @@ -5,12 +5,14 @@ use PhpParser\Node; use PhpParser\Node\Name; +use PhpParser\Node\Name\FullyQualified; use PHPStan\Reflection\ClassReflection; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectWithoutClassType; use PHPStan\Type\StaticType; use PHPStan\Type\Type; use Rector\Enum\ObjectReference; +use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Reflection\ReflectionResolver; use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface; use Rector\StaticTypeMapper\ValueObject\Type\ParentObjectWithoutClassType; @@ -26,9 +28,15 @@ final class NameNodeMapper implements PhpParserNodeMapperInterface * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - public function __construct(ReflectionResolver $reflectionResolver) + /** + * @readonly + * @var \Rector\StaticTypeMapper\PhpParser\FullyQualifiedNodeMapper + */ + private $fullyQualifiedNodeMapper; + public function __construct(ReflectionResolver $reflectionResolver, \Rector\StaticTypeMapper\PhpParser\FullyQualifiedNodeMapper $fullyQualifiedNodeMapper) { $this->reflectionResolver = $reflectionResolver; + $this->fullyQualifiedNodeMapper = $fullyQualifiedNodeMapper; } public function getNodeType() : string { @@ -43,8 +51,22 @@ public function mapToPHPStan(Node $node) : Type if ($node->isSpecialClassName()) { return $this->createClassReferenceType($node, $name); } + $expandedNamespacedName = $this->expandedNamespacedName($node); + if ($expandedNamespacedName instanceof FullyQualified) { + return $this->fullyQualifiedNodeMapper->mapToPHPStan($expandedNamespacedName); + } return new MixedType(); } + private function expandedNamespacedName(Name $name) : ?FullyQualified + { + if (\get_class($name) !== Name::class) { + return null; + } + if (!$name->hasAttribute(AttributeKey::NAMESPACED_NAME)) { + return null; + } + return new FullyQualified($name->getAttribute(AttributeKey::NAMESPACED_NAME)); + } /** * @return \PHPStan\Type\MixedType|\PHPStan\Type\StaticType|\Rector\StaticTypeMapper\ValueObject\Type\SelfStaticType|\PHPStan\Type\ObjectWithoutClassType */ diff --git a/vendor/rector/rector/src/StaticTypeMapper/StaticTypeMapper.php b/vendor/rector/rector/src/StaticTypeMapper/StaticTypeMapper.php index 5f6614c5d..626b91c52 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/StaticTypeMapper.php +++ b/vendor/rector/rector/src/StaticTypeMapper/StaticTypeMapper.php @@ -88,7 +88,7 @@ public function mapPHPStanPhpDocTypeToPHPStanType(PhpDocTagValueNode $phpDocTagV } public function mapPHPStanPhpDocTypeNodeToPHPStanType(TypeNode $typeNode, Node $node) : Type { - $nameScope = $this->nameScopeFactory->createNameScopeFromNode($node); + $nameScope = $this->nameScopeFactory->createNameScopeFromNodeWithoutTemplateTypes($node); return $this->phpDocTypeMapper->mapToPHPStanType($typeNode, $node, $nameScope); } } diff --git a/vendor/rector/rector/src/StaticTypeMapper/ValueObject/Type/FullyQualifiedObjectType.php b/vendor/rector/rector/src/StaticTypeMapper/ValueObject/Type/FullyQualifiedObjectType.php index 855a1b429..d79bbb61e 100644 --- a/vendor/rector/rector/src/StaticTypeMapper/ValueObject/Type/FullyQualifiedObjectType.php +++ b/vendor/rector/rector/src/StaticTypeMapper/ValueObject/Type/FullyQualifiedObjectType.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\StaticTypeMapper\ValueObject\Type; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Name; use PhpParser\Node\Stmt\Use_; use PhpParser\Node\Stmt\UseUse; @@ -36,8 +36,6 @@ public function getShortName() : string public function getShortNameNode() : Name { $name = new Name($this->getShortName()); - // to avoid processing short name twice - $name->setAttribute(AttributeKey::VIRTUAL_NODE, \true); // keep original to avoid loss on while importing $name->setAttribute(AttributeKey::NAMESPACED_NAME, $this->getClassName()); return $name; diff --git a/vendor/rector/rector/src/Testing/Fixture/FixtureFileFinder.php b/vendor/rector/rector/src/Testing/Fixture/FixtureFileFinder.php index 1955b68a0..ce342e238 100644 --- a/vendor/rector/rector/src/Testing/Fixture/FixtureFileFinder.php +++ b/vendor/rector/rector/src/Testing/Fixture/FixtureFileFinder.php @@ -4,7 +4,7 @@ namespace Rector\Testing\Fixture; use Iterator; -use RectorPrefix202405\Symfony\Component\Finder\Finder; +use RectorPrefix202410\Symfony\Component\Finder\Finder; final class FixtureFileFinder { /** diff --git a/vendor/rector/rector/src/Testing/Fixture/FixtureFileUpdater.php b/vendor/rector/rector/src/Testing/Fixture/FixtureFileUpdater.php index 5a78f6d8f..633f0b789 100644 --- a/vendor/rector/rector/src/Testing/Fixture/FixtureFileUpdater.php +++ b/vendor/rector/rector/src/Testing/Fixture/FixtureFileUpdater.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Testing\Fixture; -use RectorPrefix202405\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem; final class FixtureFileUpdater { /** diff --git a/vendor/rector/rector/src/Testing/Fixture/FixtureSplitter.php b/vendor/rector/rector/src/Testing/Fixture/FixtureSplitter.php index 905f6daa7..d803a41da 100644 --- a/vendor/rector/rector/src/Testing/Fixture/FixtureSplitter.php +++ b/vendor/rector/rector/src/Testing/Fixture/FixtureSplitter.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Testing\Fixture; -use RectorPrefix202405\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem; /** * @api */ diff --git a/vendor/rector/rector/src/Testing/Fixture/FixtureTempFileDumper.php b/vendor/rector/rector/src/Testing/Fixture/FixtureTempFileDumper.php index e83bb65ef..2c0c8d186 100644 --- a/vendor/rector/rector/src/Testing/Fixture/FixtureTempFileDumper.php +++ b/vendor/rector/rector/src/Testing/Fixture/FixtureTempFileDumper.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Testing\Fixture; -use RectorPrefix202405\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem; /** * @api used in tests */ diff --git a/vendor/rector/rector/src/Testing/PHPUnit/AbstractRectorTestCase.php b/vendor/rector/rector/src/Testing/PHPUnit/AbstractRectorTestCase.php index 9daa2404f..cffb3bcff 100644 --- a/vendor/rector/rector/src/Testing/PHPUnit/AbstractRectorTestCase.php +++ b/vendor/rector/rector/src/Testing/PHPUnit/AbstractRectorTestCase.php @@ -3,10 +3,10 @@ declare (strict_types=1); namespace Rector\Testing\PHPUnit; -use RectorPrefix202405\Illuminate\Container\RewindableGenerator; +use RectorPrefix202410\Illuminate\Container\RewindableGenerator; use Iterator; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Strings; use PHPUnit\Framework\ExpectationFailedException; use Rector\Application\ApplicationFileProcessor; use Rector\Autoloading\AdditionalAutoloader; diff --git a/vendor/rector/rector/src/Testing/TestingParser/TestingParser.php b/vendor/rector/rector/src/Testing/TestingParser/TestingParser.php index 265081a2c..669862d52 100644 --- a/vendor/rector/rector/src/Testing/TestingParser/TestingParser.php +++ b/vendor/rector/rector/src/Testing/TestingParser/TestingParser.php @@ -3,12 +3,12 @@ declare (strict_types=1); namespace Rector\Testing\TestingParser; -use RectorPrefix202405\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\FileSystem; use PhpParser\Node; +use Rector\Application\Provider\CurrentFileProvider; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider; use Rector\PhpParser\Parser\RectorParser; -use Rector\Provider\CurrentFileProvider; use Rector\ValueObject\Application\File; /** * @api @@ -27,7 +27,7 @@ final class TestingParser private $nodeScopeAndMetadataDecorator; /** * @readonly - * @var \Rector\Provider\CurrentFileProvider + * @var \Rector\Application\Provider\CurrentFileProvider */ private $currentFileProvider; /** diff --git a/vendor/rector/rector/src/Util/MemoryLimiter.php b/vendor/rector/rector/src/Util/MemoryLimiter.php index 5bd38723c..250d4ddf6 100644 --- a/vendor/rector/rector/src/Util/MemoryLimiter.php +++ b/vendor/rector/rector/src/Util/MemoryLimiter.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Util; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\Exception\Configuration\InvalidConfigurationException; use Rector\ValueObject\Configuration; /** diff --git a/vendor/rector/rector/src/Util/NewLineSplitter.php b/vendor/rector/rector/src/Util/NewLineSplitter.php index 5229a35c0..a4b1738a5 100644 --- a/vendor/rector/rector/src/Util/NewLineSplitter.php +++ b/vendor/rector/rector/src/Util/NewLineSplitter.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Util; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; final class NewLineSplitter { /** diff --git a/vendor/rector/rector/src/Util/NodePrinter.php b/vendor/rector/rector/src/Util/NodePrinter.php index 5f6e4fa21..e347ca315 100644 --- a/vendor/rector/rector/src/Util/NodePrinter.php +++ b/vendor/rector/rector/src/Util/NodePrinter.php @@ -3,10 +3,10 @@ declare (strict_types=1); namespace Rector\Util; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use Rector\CustomRules\SimpleNodeDumper; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; final class NodePrinter { /** diff --git a/vendor/rector/rector/src/Util/PhpVersionFactory.php b/vendor/rector/rector/src/Util/PhpVersionFactory.php index e682a1db7..b8a5c9f4b 100644 --- a/vendor/rector/rector/src/Util/PhpVersionFactory.php +++ b/vendor/rector/rector/src/Util/PhpVersionFactory.php @@ -3,8 +3,12 @@ declare (strict_types=1); namespace Rector\Util; +use Rector\ValueObject\PhpVersion; final class PhpVersionFactory { + /** + * @return PhpVersion::* + */ public static function createIntVersion(string $version) : int { $explodeDash = \explode('-', $version); diff --git a/vendor/rector/rector/src/Util/StringUtils.php b/vendor/rector/rector/src/Util/StringUtils.php index 0937075ef..e7fc42caa 100644 --- a/vendor/rector/rector/src/Util/StringUtils.php +++ b/vendor/rector/rector/src/Util/StringUtils.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Util; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; final class StringUtils { public static function isMatch(string $value, string $regex) : bool diff --git a/vendor/rector/rector/src/Validation/RectorAssert.php b/vendor/rector/rector/src/Validation/RectorAssert.php index 7004b9d1b..df5b77245 100644 --- a/vendor/rector/rector/src/Validation/RectorAssert.php +++ b/vendor/rector/rector/src/Validation/RectorAssert.php @@ -4,7 +4,7 @@ namespace Rector\Validation; use Rector\Util\StringUtils; -use RectorPrefix202405\Webmozart\Assert\InvalidArgumentException; +use RectorPrefix202410\Webmozart\Assert\InvalidArgumentException; /** * @see \Rector\Tests\Validation\RectorAssertTest */ diff --git a/vendor/rector/rector/src/Validation/RectorConfigValidator.php b/vendor/rector/rector/src/Validation/RectorConfigValidator.php index 92cca4021..c12fff6e5 100644 --- a/vendor/rector/rector/src/Validation/RectorConfigValidator.php +++ b/vendor/rector/rector/src/Validation/RectorConfigValidator.php @@ -3,6 +3,8 @@ declare (strict_types=1); namespace Rector\Validation; +use Rector\Configuration\Option; +use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Exception\ShouldNotHappenException; final class RectorConfigValidator { @@ -23,19 +25,26 @@ public static function ensureNoDuplicatedClasses(array $rectorClasses) : void public static function ensureRectorRulesExist(array $skip) : void { $nonExistingRules = []; + $skippedRectorRules = []; foreach ($skip as $key => $value) { - if (self::isRectorClassValue($key) && !\class_exists($key)) { - $nonExistingRules[] = $key; + if (self::isRectorClassValue($key)) { + if (\class_exists($key)) { + $skippedRectorRules[] = $key; + } else { + $nonExistingRules[] = $key; + } continue; } if (!self::isRectorClassValue($value)) { continue; } if (\class_exists($value)) { + $skippedRectorRules[] = $value; continue; } $nonExistingRules[] = $value; } + SimpleParameterProvider::addParameter(Option::SKIPPED_RECTOR_RULES, $skippedRectorRules); if ($nonExistingRules === []) { return; } diff --git a/vendor/rector/rector/src/ValueObject/Application/File.php b/vendor/rector/rector/src/ValueObject/Application/File.php index 5bc5ef189..bad7b1e65 100644 --- a/vendor/rector/rector/src/ValueObject/Application/File.php +++ b/vendor/rector/rector/src/ValueObject/Application/File.php @@ -8,9 +8,6 @@ use Rector\ChangesReporting\ValueObject\RectorWithLineChange; use Rector\Exception\ShouldNotHappenException; use Rector\ValueObject\Reporting\FileDiff; -/** - * @see \Rector\ValueObjectFactory\Application\FileFactory - */ final class File { /** diff --git a/vendor/rector/rector/src/ValueObject/Configuration.php b/vendor/rector/rector/src/ValueObject/Configuration.php index d6f6fa155..1b3b5d005 100644 --- a/vendor/rector/rector/src/ValueObject/Configuration.php +++ b/vendor/rector/rector/src/ValueObject/Configuration.php @@ -4,7 +4,7 @@ namespace Rector\ValueObject; use Rector\ChangesReporting\Output\ConsoleOutputFormatter; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class Configuration { /** @@ -67,11 +67,16 @@ final class Configuration * @var bool */ private $isDebug = \false; + /** + * @readonly + * @var bool + */ + private $reportingWithRealPath = \false; /** * @param string[] $fileExtensions * @param string[] $paths */ - public function __construct(bool $isDryRun = \false, bool $showProgressBar = \true, bool $shouldClearCache = \false, string $outputFormat = ConsoleOutputFormatter::NAME, array $fileExtensions = ['php'], array $paths = [], bool $showDiffs = \true, ?string $parallelPort = null, ?string $parallelIdentifier = null, bool $isParallel = \false, ?string $memoryLimit = null, bool $isDebug = \false) + public function __construct(bool $isDryRun = \false, bool $showProgressBar = \true, bool $shouldClearCache = \false, string $outputFormat = ConsoleOutputFormatter::NAME, array $fileExtensions = ['php'], array $paths = [], bool $showDiffs = \true, ?string $parallelPort = null, ?string $parallelIdentifier = null, bool $isParallel = \false, ?string $memoryLimit = null, bool $isDebug = \false, bool $reportingWithRealPath = \false) { $this->isDryRun = $isDryRun; $this->showProgressBar = $showProgressBar; @@ -85,6 +90,7 @@ public function __construct(bool $isDryRun = \false, bool $showProgressBar = \tr $this->isParallel = $isParallel; $this->memoryLimit = $memoryLimit; $this->isDebug = $isDebug; + $this->reportingWithRealPath = $reportingWithRealPath; } public function isDryRun() : bool { @@ -141,4 +147,8 @@ public function isDebug() : bool { return $this->isDebug; } + public function isReportingWithRealPath() : bool + { + return $this->reportingWithRealPath; + } } diff --git a/vendor/rector/rector/src/ValueObject/Error/SystemError.php b/vendor/rector/rector/src/ValueObject/Error/SystemError.php index 6337e9255..a7d2e520d 100644 --- a/vendor/rector/rector/src/ValueObject/Error/SystemError.php +++ b/vendor/rector/rector/src/ValueObject/Error/SystemError.php @@ -4,7 +4,7 @@ namespace Rector\ValueObject\Error; use Rector\Parallel\ValueObject\BridgeItem; -use RectorPrefix202405\Symplify\EasyParallel\Contract\SerializableInterface; +use RectorPrefix202410\Symplify\EasyParallel\Contract\SerializableInterface; final class SystemError implements SerializableInterface { /** @@ -50,18 +50,31 @@ public function getRelativeFilePath() : ?string { return $this->relativeFilePath; } + public function getAbsoluteFilePath() : ?string + { + if ($this->relativeFilePath === null) { + return null; + } + return \realpath($this->relativeFilePath); + } /** - * @return array{message: string, relative_file_path: string|null, line: int|null, rector_class: string|null} + * @return array{ + * message: string, + * relative_file_path: string|null, + * absolute_file_path: string|null, + * line: int|null, + * rector_class: string|null + * } */ public function jsonSerialize() : array { - return [BridgeItem::MESSAGE => $this->message, BridgeItem::RELATIVE_FILE_PATH => $this->relativeFilePath, BridgeItem::LINE => $this->line, BridgeItem::RECTOR_CLASS => $this->rectorClass]; + return [BridgeItem::MESSAGE => $this->message, BridgeItem::RELATIVE_FILE_PATH => $this->relativeFilePath, BridgeItem::ABSOLUTE_FILE_PATH => $this->getAbsoluteFilePath(), BridgeItem::LINE => $this->line, BridgeItem::RECTOR_CLASS => $this->rectorClass]; } /** * @param mixed[] $json * @return $this */ - public static function decode(array $json) : \RectorPrefix202405\Symplify\EasyParallel\Contract\SerializableInterface + public static function decode(array $json) : \RectorPrefix202410\Symplify\EasyParallel\Contract\SerializableInterface { return new self($json[BridgeItem::MESSAGE], $json[BridgeItem::RELATIVE_FILE_PATH], $json[BridgeItem::LINE], $json[BridgeItem::RECTOR_CLASS]); } diff --git a/vendor/rector/rector/src/ValueObject/FileProcessResult.php b/vendor/rector/rector/src/ValueObject/FileProcessResult.php index 6c3881024..1cd1fb054 100644 --- a/vendor/rector/rector/src/ValueObject/FileProcessResult.php +++ b/vendor/rector/rector/src/ValueObject/FileProcessResult.php @@ -5,7 +5,7 @@ use Rector\ValueObject\Error\SystemError; use Rector\ValueObject\Reporting\FileDiff; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class FileProcessResult { /** diff --git a/vendor/rector/rector/src/ValueObject/PhpVersionFeature.php b/vendor/rector/rector/src/ValueObject/PhpVersionFeature.php index b36db8ae3..94f0c5c09 100644 --- a/vendor/rector/rector/src/ValueObject/PhpVersionFeature.php +++ b/vendor/rector/rector/src/ValueObject/PhpVersionFeature.php @@ -333,6 +333,14 @@ final class PhpVersionFeature * @var int */ public const DEPRECATE_NESTED_TERNARY = \Rector\ValueObject\PhpVersion::PHP_74; + /** + * @var int + */ + public const DEPRECATE_RESTORE_INCLUDE_PATH = \Rector\ValueObject\PhpVersion::PHP_74; + /** + * @var int + */ + public const DEPRECATE_HEBREVC = \Rector\ValueObject\PhpVersion::PHP_74; /** * @var int */ diff --git a/vendor/rector/rector/src/ValueObject/ProcessResult.php b/vendor/rector/rector/src/ValueObject/ProcessResult.php index 0e1da84d2..a5e94ad13 100644 --- a/vendor/rector/rector/src/ValueObject/ProcessResult.php +++ b/vendor/rector/rector/src/ValueObject/ProcessResult.php @@ -5,7 +5,7 @@ use Rector\ValueObject\Error\SystemError; use Rector\ValueObject\Reporting\FileDiff; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class ProcessResult { /** diff --git a/vendor/rector/rector/src/ValueObject/Reporting/FileDiff.php b/vendor/rector/rector/src/ValueObject/Reporting/FileDiff.php index 8a67ba2d4..5454f7f45 100644 --- a/vendor/rector/rector/src/ValueObject/Reporting/FileDiff.php +++ b/vendor/rector/rector/src/ValueObject/Reporting/FileDiff.php @@ -3,12 +3,12 @@ declare (strict_types=1); namespace Rector\ValueObject\Reporting; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\ChangesReporting\ValueObject\RectorWithLineChange; use Rector\Contract\Rector\RectorInterface; use Rector\Parallel\ValueObject\BridgeItem; -use RectorPrefix202405\Symplify\EasyParallel\Contract\SerializableInterface; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symplify\EasyParallel\Contract\SerializableInterface; +use RectorPrefix202410\Webmozart\Assert\Assert; final class FileDiff implements SerializableInterface { /** @@ -63,6 +63,10 @@ public function getRelativeFilePath() : string { return $this->relativeFilePath; } + public function getAbsoluteFilePath() : ?string + { + return \realpath($this->relativeFilePath) ?: null; + } /** * @return RectorWithLineChange[] */ @@ -70,6 +74,17 @@ public function getRectorChanges() : array { return $this->rectorsWithLineChanges; } + /** + * @return string[] + */ + public function getRectorShortClasses() : array + { + $rectorShortClasses = []; + foreach ($this->getRectorClasses() as $rectorClass) { + $rectorShortClasses[] = (string) Strings::after($rectorClass, '\\', -1); + } + return $rectorShortClasses; + } /** * @return array> */ @@ -101,7 +116,7 @@ public function jsonSerialize() : array * @param array $json * @return $this */ - public static function decode(array $json) : \RectorPrefix202405\Symplify\EasyParallel\Contract\SerializableInterface + public static function decode(array $json) : \RectorPrefix202410\Symplify\EasyParallel\Contract\SerializableInterface { $rectorWithLineChanges = []; foreach ($json[BridgeItem::RECTORS_WITH_LINE_CHANGES] as $rectorWithLineChangesJson) { diff --git a/vendor/rector/rector/src/ValueObjectFactory/Application/FileFactory.php b/vendor/rector/rector/src/ValueObjectFactory/Application/FileFactory.php deleted file mode 100644 index ad36090d6..000000000 --- a/vendor/rector/rector/src/ValueObjectFactory/Application/FileFactory.php +++ /dev/null @@ -1,41 +0,0 @@ -filesFinder = $filesFinder; - $this->changedFilesDetector = $changedFilesDetector; - } - /** - * @param string[] $paths - * @return string[] - */ - public function findFilesInPaths(array $paths, Configuration $configuration) : array - { - if ($configuration->shouldClearCache()) { - $this->changedFilesDetector->clear(); - } - $supportedFileExtensions = $configuration->getFileExtensions(); - return $this->filesFinder->findInDirectoriesAndFiles($paths, $supportedFileExtensions); - } -} diff --git a/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodParamVendorLockResolver.php b/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodParamVendorLockResolver.php index 9eb09c338..548124e5e 100644 --- a/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodParamVendorLockResolver.php +++ b/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodParamVendorLockResolver.php @@ -36,6 +36,9 @@ public function isVendorLocked(ClassMethod $classMethod) : bool if ($classMethod->isMagic()) { return \true; } + if ($classMethod->isPrivate()) { + return \false; + } $classReflection = $this->reflectionResolver->resolveClassReflection($classMethod); if (!$classReflection instanceof ClassReflection) { return \false; diff --git a/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnTypeOverrideGuard.php b/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnTypeOverrideGuard.php index 8467117c9..1b2e515d9 100644 --- a/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnTypeOverrideGuard.php +++ b/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnTypeOverrideGuard.php @@ -3,40 +3,24 @@ declare (strict_types=1); namespace Rector\VendorLocker\NodeVendorLocker; -use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\FunctionVariantWithPhpDocs; use PHPStan\Reflection\MethodReflection; -use PHPStan\Reflection\ParametersAcceptorSelector; -use PHPStan\Reflection\Php\PhpMethodReflection; use PHPStan\Type\MixedType; -use PHPStan\Type\Type; -use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer; use Rector\FileSystem\FilePathHelper; use Rector\NodeAnalyzer\MagicClassMethodAnalyzer; use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper; use Rector\Reflection\ReflectionResolver; -use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard; final class ClassMethodReturnTypeOverrideGuard { - /** - * @readonly - * @var \Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer - */ - private $familyRelationsAnalyzer; /** * @readonly * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - /** - * @readonly - * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer - */ - private $returnTypeInferer; /** * @readonly * @var \Rector\VendorLocker\ParentClassMethodTypeOverrideGuard @@ -52,11 +36,9 @@ final class ClassMethodReturnTypeOverrideGuard * @var \Rector\NodeAnalyzer\MagicClassMethodAnalyzer */ private $magicClassMethodAnalyzer; - public function __construct(FamilyRelationsAnalyzer $familyRelationsAnalyzer, ReflectionResolver $reflectionResolver, ReturnTypeInferer $returnTypeInferer, ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, FilePathHelper $filePathHelper, MagicClassMethodAnalyzer $magicClassMethodAnalyzer) + public function __construct(ReflectionResolver $reflectionResolver, ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, FilePathHelper $filePathHelper, MagicClassMethodAnalyzer $magicClassMethodAnalyzer) { - $this->familyRelationsAnalyzer = $familyRelationsAnalyzer; $this->reflectionResolver = $reflectionResolver; - $this->returnTypeInferer = $returnTypeInferer; $this->parentClassMethodTypeOverrideGuard = $parentClassMethodTypeOverrideGuard; $this->filePathHelper = $filePathHelper; $this->magicClassMethodAnalyzer = $magicClassMethodAnalyzer; @@ -74,46 +56,13 @@ public function shouldSkipClassMethod(ClassMethod $classMethod, Scope $scope) : if (!$classReflection instanceof ClassReflection) { return \true; } - if ($classMethod->isAbstract()) { + if ($classReflection->isAbstract()) { return \true; } if ($classReflection->isInterface()) { return \true; } - if (!$this->isReturnTypeChangeAllowed($classMethod, $scope)) { - return \true; - } - if ($classMethod->isFinal()) { - return \false; - } - $childrenClassReflections = $this->familyRelationsAnalyzer->getChildrenOfClassReflection($classReflection); - if ($childrenClassReflections === []) { - return \false; - } - if ($classMethod->returnType instanceof Node) { - return \true; - } - $returnType = $this->returnTypeInferer->inferFunctionLike($classMethod); - return $this->hasChildrenDifferentTypeClassMethod($classMethod, $childrenClassReflections, $returnType); - } - /** - * @param ClassReflection[] $childrenClassReflections - */ - private function hasChildrenDifferentTypeClassMethod(ClassMethod $classMethod, array $childrenClassReflections, Type $returnType) : bool - { - $methodName = $classMethod->name->toString(); - foreach ($childrenClassReflections as $childClassReflection) { - $methodReflection = $childClassReflection->getNativeMethod($methodName); - if (!$methodReflection instanceof PhpMethodReflection) { - continue; - } - $parametersAcceptor = ParametersAcceptorSelector::combineAcceptors($methodReflection->getVariants()); - $childReturnType = $parametersAcceptor->getNativeReturnType(); - if (!$returnType->isSuperTypeOf($childReturnType)->yes()) { - return \true; - } - } - return \false; + return !$this->isReturnTypeChangeAllowed($classMethod, $scope); } private function isReturnTypeChangeAllowed(ClassMethod $classMethod, Scope $scope) : bool { diff --git a/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnVendorLockResolver.php b/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnVendorLockResolver.php index 77cfdc7e8..4e96aefa6 100644 --- a/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnVendorLockResolver.php +++ b/vendor/rector/rector/src/VendorLocker/NodeVendorLocker/ClassMethodReturnVendorLockResolver.php @@ -7,6 +7,7 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\FunctionVariantWithPhpDocs; use PHPStan\Type\MixedType; +use Rector\NodeAnalyzer\MagicClassMethodAnalyzer; use Rector\NodeNameResolver\NodeNameResolver; use Rector\Reflection\ReflectionResolver; final class ClassMethodReturnVendorLockResolver @@ -21,13 +22,22 @@ final class ClassMethodReturnVendorLockResolver * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - public function __construct(NodeNameResolver $nodeNameResolver, ReflectionResolver $reflectionResolver) + /** + * @readonly + * @var \Rector\NodeAnalyzer\MagicClassMethodAnalyzer + */ + private $magicClassMethodAnalyzer; + public function __construct(NodeNameResolver $nodeNameResolver, ReflectionResolver $reflectionResolver, MagicClassMethodAnalyzer $magicClassMethodAnalyzer) { $this->nodeNameResolver = $nodeNameResolver; $this->reflectionResolver = $reflectionResolver; + $this->magicClassMethodAnalyzer = $magicClassMethodAnalyzer; } public function isVendorLocked(ClassMethod $classMethod) : bool { + if ($this->magicClassMethodAnalyzer->isUnsafeOverridden($classMethod)) { + return \true; + } if ($classMethod->isPrivate()) { return \false; } @@ -49,6 +59,9 @@ private function isVendorLockedByAncestors(ClassReflection $classReflection, str if (!$nativeClassReflection->hasMethod($methodName)) { continue; } + if (!$ancestorClassReflections->hasNativeMethod($methodName)) { + continue; + } $parentClassMethodReflection = $ancestorClassReflections->getNativeMethod($methodName); $parametersAcceptor = $parentClassMethodReflection->getVariants()[0]; if (!$parametersAcceptor instanceof FunctionVariantWithPhpDocs) { diff --git a/vendor/rector/rector/src/VendorLocker/ParentClassMethodTypeOverrideGuard.php b/vendor/rector/rector/src/VendorLocker/ParentClassMethodTypeOverrideGuard.php index 376b93fc2..552c89207 100644 --- a/vendor/rector/rector/src/VendorLocker/ParentClassMethodTypeOverrideGuard.php +++ b/vendor/rector/rector/src/VendorLocker/ParentClassMethodTypeOverrideGuard.php @@ -53,10 +53,6 @@ public function __construct(NodeNameResolver $nodeNameResolver, ReflectionResolv */ public function hasParentClassMethod($classMethod) : bool { - // early got false on private method - if ($classMethod->isPrivate()) { - return \false; - } try { $parentClassMethod = $this->resolveParentClassMethod($classMethod); return $parentClassMethod instanceof MethodReflection; @@ -93,18 +89,17 @@ public function shouldSkipReturnTypeChange(ClassMethod $classMethod, Type $paren */ private function resolveParentClassMethod($classMethod) : ?MethodReflection { - if ($classMethod instanceof ClassMethod) { - $classReflection = $this->reflectionResolver->resolveClassReflection($classMethod); - if (!$classReflection instanceof ClassReflection) { - // we can't resolve the class, so we don't know. - throw new UnresolvableClassException(); - } - /** @var string $methodName */ - $methodName = $this->nodeNameResolver->getName($classMethod); - } else { - $classReflection = $classMethod->getDeclaringClass(); - $methodName = $classMethod->getName(); + // early got null on private method + if ($classMethod->isPrivate()) { + return null; + } + $classReflection = $classMethod instanceof ClassMethod ? $this->reflectionResolver->resolveClassReflection($classMethod) : $classMethod->getDeclaringClass(); + if (!$classReflection instanceof ClassReflection) { + // we can't resolve the class, so we don't know. + throw new UnresolvableClassException(); } + /** @var string $methodName */ + $methodName = $classMethod instanceof ClassMethod ? $this->nodeNameResolver->getName($classMethod) : $classMethod->getName(); $currentClassReflection = $classReflection; while ($this->hasClassParent($currentClassReflection)) { $parentClassReflection = $currentClassReflection->getParentClass(); diff --git a/vendor/rector/rector/src/VersionBonding/PhpVersionedFilter.php b/vendor/rector/rector/src/VersionBonding/PhpVersionedFilter.php index dc62eaa8d..fbf24fff4 100644 --- a/vendor/rector/rector/src/VersionBonding/PhpVersionedFilter.php +++ b/vendor/rector/rector/src/VersionBonding/PhpVersionedFilter.php @@ -29,7 +29,7 @@ public function __construct(PhpVersionProvider $phpVersionProvider, PolyfillPack * @param array $rectors * @return array */ - public function filter(iterable $rectors) : array + public function filter(array $rectors) : array { $minProjectPhpVersion = $this->phpVersionProvider->provide(); $activeRectors = []; diff --git a/vendor/rector/rector/src/functions/node_helper.php b/vendor/rector/rector/src/functions/node_helper.php index 64f38b5c5..8f7920444 100644 --- a/vendor/rector/rector/src/functions/node_helper.php +++ b/vendor/rector/rector/src/functions/node_helper.php @@ -1,14 +1,14 @@ withPaths([ @@ -11,6 +10,4 @@ __PATHS__ ]) // uncomment to reach your current PHP version // ->withPhpSets() - ->withRules([ - AddVoidReturnTypeWhereNoReturnRector::class, - ]); + ->withTypeCoverageLevel(0); diff --git a/vendor/rector/rector/vendor/autoload.php b/vendor/rector/rector/vendor/autoload.php index 5c2f04e00..6ab6c8f74 100644 --- a/vendor/rector/rector/vendor/autoload.php +++ b/vendor/rector/rector/vendor/autoload.php @@ -22,4 +22,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit70e3025dac7e7555f69a9b4ca9e3dfde::getLoader(); +return ComposerAutoloaderInit7c12491db1a700dd78980ecb6595c088::getLoader(); diff --git a/vendor/rector/rector/vendor/bin/php-parse b/vendor/rector/rector/vendor/bin/php-parse index 20deae1c8..aea2272de 100755 --- a/vendor/rector/rector/vendor/bin/php-parse +++ b/vendor/rector/rector/vendor/bin/php-parse @@ -8,12 +8,12 @@ * * @generated */ -namespace RectorPrefix202405\Composer; +namespace RectorPrefix202410\Composer; $GLOBALS['_composer_bin_dir'] = __DIR__; $GLOBALS['_composer_autoload_path'] = __DIR__ . '/..' . '/autoload.php'; if (\PHP_VERSION_ID < 80000) { - if (!\class_exists('RectorPrefix202405\\Composer\\BinProxyWrapper')) { + if (!\class_exists('RectorPrefix202410\\Composer\\BinProxyWrapper')) { /** * @internal */ @@ -87,7 +87,7 @@ if (\PHP_VERSION_ID < 80000) { } } } - if (\function_exists('stream_get_wrappers') && \in_array('phpvfscomposer', \stream_get_wrappers(), \true) || \function_exists('stream_wrapper_register') && \stream_wrapper_register('phpvfscomposer', 'RectorPrefix202405\\Composer\\BinProxyWrapper')) { + if (\function_exists('stream_get_wrappers') && \in_array('phpvfscomposer', \stream_get_wrappers(), \true) || \function_exists('stream_wrapper_register') && \stream_wrapper_register('phpvfscomposer', 'RectorPrefix202410\\Composer\\BinProxyWrapper')) { return include "phpvfscomposer://" . __DIR__ . '/..' . '/nikic/php-parser/bin/php-parse'; } } diff --git a/vendor/rector/rector/vendor/bin/yaml-lint b/vendor/rector/rector/vendor/bin/yaml-lint index e8d2b1715..13dc1b841 100755 --- a/vendor/rector/rector/vendor/bin/yaml-lint +++ b/vendor/rector/rector/vendor/bin/yaml-lint @@ -8,12 +8,12 @@ * * @generated */ -namespace RectorPrefix202405\Composer; +namespace RectorPrefix202410\Composer; $GLOBALS['_composer_bin_dir'] = __DIR__; $GLOBALS['_composer_autoload_path'] = __DIR__ . '/..' . '/autoload.php'; if (\PHP_VERSION_ID < 80000) { - if (!\class_exists('RectorPrefix202405\\Composer\\BinProxyWrapper')) { + if (!\class_exists('RectorPrefix202410\\Composer\\BinProxyWrapper')) { /** * @internal */ @@ -87,7 +87,7 @@ if (\PHP_VERSION_ID < 80000) { } } } - if (\function_exists('stream_get_wrappers') && \in_array('phpvfscomposer', \stream_get_wrappers(), \true) || \function_exists('stream_wrapper_register') && \stream_wrapper_register('phpvfscomposer', 'RectorPrefix202405\\Composer\\BinProxyWrapper')) { + if (\function_exists('stream_get_wrappers') && \in_array('phpvfscomposer', \stream_get_wrappers(), \true) || \function_exists('stream_wrapper_register') && \stream_wrapper_register('phpvfscomposer', 'RectorPrefix202410\\Composer\\BinProxyWrapper')) { return include "phpvfscomposer://" . __DIR__ . '/..' . '/symfony/yaml/Resources/bin/yaml-lint'; } } diff --git a/vendor/rector/rector/vendor/clue/ndjson-react/composer.json b/vendor/rector/rector/vendor/clue/ndjson-react/composer.json index 518092e7b..71ef75519 100644 --- a/vendor/rector/rector/vendor/clue/ndjson-react/composer.json +++ b/vendor/rector/rector/vendor/clue/ndjson-react/composer.json @@ -27,12 +27,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Clue\\React\\NDJson\\": "src\/" + "RectorPrefix202410\\Clue\\React\\NDJson\\": "src\/" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Clue\\Tests\\React\\NDJson\\": "tests\/" + "RectorPrefix202410\\Clue\\Tests\\React\\NDJson\\": "tests\/" } } } \ No newline at end of file diff --git a/vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php b/vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php index e5427bda7..7aea7bf12 100644 --- a/vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php +++ b/vendor/rector/rector/vendor/clue/ndjson-react/src/Decoder.php @@ -1,11 +1,11 @@ $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PhpDocTextNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PropertyTagValueNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php', + 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PureUnlessCallableIsImpureTagValueNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\RequireExtendsTagValueNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\RequireImplementsTagValueNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\ReturnTagValueNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php', @@ -66,6 +67,7 @@ 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\VarTagValueNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayShapeItemNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayShapeNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php', + 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayShapeUnsealedTypeNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayTypeNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\CallableTypeNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\CallableTypeParameterNode' => $vendorDir . '/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php', @@ -343,635 +345,653 @@ 'PhpParser\\Parser\\Tokens' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', - 'RectorPrefix202405\\Clue\\React\\NDJson\\Decoder' => $vendorDir . '/clue/ndjson-react/src/Decoder.php', - 'RectorPrefix202405\\Clue\\React\\NDJson\\Encoder' => $vendorDir . '/clue/ndjson-react/src/Encoder.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchAllResult' => $vendorDir . '/composer/pcre/src/MatchAllResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchAllStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchAllStrictGroupsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchAllWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchAllWithOffsetsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchResult' => $vendorDir . '/composer/pcre/src/MatchResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchStrictGroupsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchWithOffsetsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\PcreException' => $vendorDir . '/composer/pcre/src/PcreException.php', - 'RectorPrefix202405\\Composer\\Pcre\\Preg' => $vendorDir . '/composer/pcre/src/Preg.php', - 'RectorPrefix202405\\Composer\\Pcre\\Regex' => $vendorDir . '/composer/pcre/src/Regex.php', - 'RectorPrefix202405\\Composer\\Pcre\\ReplaceResult' => $vendorDir . '/composer/pcre/src/ReplaceResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\UnexpectedNullMatchException' => $vendorDir . '/composer/pcre/src/UnexpectedNullMatchException.php', - 'RectorPrefix202405\\Composer\\Semver\\Comparator' => $vendorDir . '/composer/semver/src/Comparator.php', - 'RectorPrefix202405\\Composer\\Semver\\CompilingMatcher' => $vendorDir . '/composer/semver/src/CompilingMatcher.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\Bound' => $vendorDir . '/composer/semver/src/Constraint/Bound.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\Constraint' => $vendorDir . '/composer/semver/src/Constraint/Constraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\ConstraintInterface' => $vendorDir . '/composer/semver/src/Constraint/ConstraintInterface.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\MatchAllConstraint' => $vendorDir . '/composer/semver/src/Constraint/MatchAllConstraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\MatchNoneConstraint' => $vendorDir . '/composer/semver/src/Constraint/MatchNoneConstraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\MultiConstraint' => $vendorDir . '/composer/semver/src/Constraint/MultiConstraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Interval' => $vendorDir . '/composer/semver/src/Interval.php', - 'RectorPrefix202405\\Composer\\Semver\\Intervals' => $vendorDir . '/composer/semver/src/Intervals.php', - 'RectorPrefix202405\\Composer\\Semver\\Semver' => $vendorDir . '/composer/semver/src/Semver.php', - 'RectorPrefix202405\\Composer\\Semver\\VersionParser' => $vendorDir . '/composer/semver/src/VersionParser.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\PhpConfig' => $vendorDir . '/composer/xdebug-handler/src/PhpConfig.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\Process' => $vendorDir . '/composer/xdebug-handler/src/Process.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\Status' => $vendorDir . '/composer/xdebug-handler/src/Status.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\XdebugHandler' => $vendorDir . '/composer/xdebug-handler/src/XdebugHandler.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\CachedWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\GenericLanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Language' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Language.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\LanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\NoopWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Pattern' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Patterns' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Ruleset' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Substitution' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Substitutions' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Transformation' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Transformations' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Word' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\RulesetInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\WordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php', - 'RectorPrefix202405\\Evenement\\EventEmitter' => $vendorDir . '/evenement/evenement/src/EventEmitter.php', - 'RectorPrefix202405\\Evenement\\EventEmitterInterface' => $vendorDir . '/evenement/evenement/src/EventEmitterInterface.php', - 'RectorPrefix202405\\Evenement\\EventEmitterTrait' => $vendorDir . '/evenement/evenement/src/EventEmitterTrait.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\CpuCoreCounter' => $vendorDir . '/fidry/cpu-core-counter/src/CpuCoreCounter.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Diagnoser' => $vendorDir . '/fidry/cpu-core-counter/src/Diagnoser.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Executor\\ProcOpenExecutor' => $vendorDir . '/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Executor\\ProcessExecutor' => $vendorDir . '/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\LscpuLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\LscpuPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\NProcFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/NProcFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\NProcessorFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\NullCpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\OnlyInPowerShellFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\OnlyOnOSFamilyFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\ProcOpenBasedFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\SkipOnOSFamilyFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\WindowsRegistryLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\WmicLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => $vendorDir . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php', - 'RectorPrefix202405\\Illuminate\\Container\\BoundMethod' => $vendorDir . '/illuminate/container/BoundMethod.php', - 'RectorPrefix202405\\Illuminate\\Container\\Container' => $vendorDir . '/illuminate/container/Container.php', - 'RectorPrefix202405\\Illuminate\\Container\\ContextualBindingBuilder' => $vendorDir . '/illuminate/container/ContextualBindingBuilder.php', - 'RectorPrefix202405\\Illuminate\\Container\\EntryNotFoundException' => $vendorDir . '/illuminate/container/EntryNotFoundException.php', - 'RectorPrefix202405\\Illuminate\\Container\\RewindableGenerator' => $vendorDir . '/illuminate/container/RewindableGenerator.php', - 'RectorPrefix202405\\Illuminate\\Container\\Util' => $vendorDir . '/illuminate/container/Util.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Access\\Authorizable' => $vendorDir . '/illuminate/contracts/Auth/Access/Authorizable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Access\\Gate' => $vendorDir . '/illuminate/contracts/Auth/Access/Gate.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Authenticatable' => $vendorDir . '/illuminate/contracts/Auth/Authenticatable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\CanResetPassword' => $vendorDir . '/illuminate/contracts/Auth/CanResetPassword.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Factory' => $vendorDir . '/illuminate/contracts/Auth/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Guard' => $vendorDir . '/illuminate/contracts/Auth/Guard.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => $vendorDir . '/illuminate/contracts/Auth/Middleware/AuthenticatesRequests.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\MustVerifyEmail' => $vendorDir . '/illuminate/contracts/Auth/MustVerifyEmail.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\PasswordBroker' => $vendorDir . '/illuminate/contracts/Auth/PasswordBroker.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => $vendorDir . '/illuminate/contracts/Auth/PasswordBrokerFactory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\StatefulGuard' => $vendorDir . '/illuminate/contracts/Auth/StatefulGuard.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\SupportsBasicAuth' => $vendorDir . '/illuminate/contracts/Auth/SupportsBasicAuth.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\UserProvider' => $vendorDir . '/illuminate/contracts/Auth/UserProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\Broadcaster' => $vendorDir . '/illuminate/contracts/Broadcasting/Broadcaster.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\Factory' => $vendorDir . '/illuminate/contracts/Broadcasting/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel' => $vendorDir . '/illuminate/contracts/Broadcasting/HasBroadcastChannel.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\ShouldBeUnique' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBeUnique.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcast.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Bus\\Dispatcher' => $vendorDir . '/illuminate/contracts/Bus/Dispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Bus\\QueueingDispatcher' => $vendorDir . '/illuminate/contracts/Bus/QueueingDispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Factory' => $vendorDir . '/illuminate/contracts/Cache/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Lock' => $vendorDir . '/illuminate/contracts/Cache/Lock.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\LockProvider' => $vendorDir . '/illuminate/contracts/Cache/LockProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\LockTimeoutException' => $vendorDir . '/illuminate/contracts/Cache/LockTimeoutException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Repository' => $vendorDir . '/illuminate/contracts/Cache/Repository.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Store' => $vendorDir . '/illuminate/contracts/Cache/Store.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Config\\Repository' => $vendorDir . '/illuminate/contracts/Config/Repository.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\Application' => $vendorDir . '/illuminate/contracts/Console/Application.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\Isolatable' => $vendorDir . '/illuminate/contracts/Console/Isolatable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\Kernel' => $vendorDir . '/illuminate/contracts/Console/Kernel.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\PromptsForMissingInput' => $vendorDir . '/illuminate/contracts/Console/PromptsForMissingInput.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\BindingResolutionException' => $vendorDir . '/illuminate/contracts/Container/BindingResolutionException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\CircularDependencyException' => $vendorDir . '/illuminate/contracts/Container/CircularDependencyException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\Container' => $vendorDir . '/illuminate/contracts/Container/Container.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => $vendorDir . '/illuminate/contracts/Container/ContextualBindingBuilder.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cookie\\Factory' => $vendorDir . '/illuminate/contracts/Cookie/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cookie\\QueueingFactory' => $vendorDir . '/illuminate/contracts/Cookie/QueueingFactory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\Builder' => $vendorDir . '/illuminate/contracts/Database/Eloquent/Builder.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\Castable' => $vendorDir . '/illuminate/contracts/Database/Eloquent/Castable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/CastsAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/CastsInboundAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\DeviatesCastableAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\SerializesCastableAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/SerializesCastableAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\SupportsPartialRelations' => $vendorDir . '/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/illuminate/contracts/Database/Events/MigrationEvent.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/illuminate/contracts/Database/ModelIdentifier.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Query\\Builder' => $vendorDir . '/illuminate/contracts/Database/Query/Builder.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Query\\ConditionExpression' => $vendorDir . '/illuminate/contracts/Database/Query/ConditionExpression.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Query\\Expression' => $vendorDir . '/illuminate/contracts/Database/Query/Expression.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/illuminate/contracts/Debug/ExceptionHandler.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\DecryptException' => $vendorDir . '/illuminate/contracts/Encryption/DecryptException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\EncryptException' => $vendorDir . '/illuminate/contracts/Encryption/EncryptException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\Encrypter' => $vendorDir . '/illuminate/contracts/Encryption/Encrypter.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\StringEncrypter' => $vendorDir . '/illuminate/contracts/Encryption/StringEncrypter.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Events\\Dispatcher' => $vendorDir . '/illuminate/contracts/Events/Dispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Events\\ShouldDispatchAfterCommit' => $vendorDir . '/illuminate/contracts/Events/ShouldDispatchAfterCommit.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Events\\ShouldHandleEventsAfterCommit' => $vendorDir . '/illuminate/contracts/Events/ShouldHandleEventsAfterCommit.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\Cloud' => $vendorDir . '/illuminate/contracts/Filesystem/Cloud.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\Factory' => $vendorDir . '/illuminate/contracts/Filesystem/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => $vendorDir . '/illuminate/contracts/Filesystem/FileNotFoundException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\Filesystem' => $vendorDir . '/illuminate/contracts/Filesystem/Filesystem.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\LockTimeoutException' => $vendorDir . '/illuminate/contracts/Filesystem/LockTimeoutException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\Application' => $vendorDir . '/illuminate/contracts/Foundation/Application.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\CachesConfiguration' => $vendorDir . '/illuminate/contracts/Foundation/CachesConfiguration.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\CachesRoutes' => $vendorDir . '/illuminate/contracts/Foundation/CachesRoutes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\ExceptionRenderer' => $vendorDir . '/illuminate/contracts/Foundation/ExceptionRenderer.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\MaintenanceMode' => $vendorDir . '/illuminate/contracts/Foundation/MaintenanceMode.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Hashing\\Hasher' => $vendorDir . '/illuminate/contracts/Hashing/Hasher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Http\\Kernel' => $vendorDir . '/illuminate/contracts/Http/Kernel.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Attachable' => $vendorDir . '/illuminate/contracts/Mail/Attachable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Factory' => $vendorDir . '/illuminate/contracts/Mail/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\MailQueue' => $vendorDir . '/illuminate/contracts/Mail/MailQueue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Mailable' => $vendorDir . '/illuminate/contracts/Mail/Mailable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Mailer' => $vendorDir . '/illuminate/contracts/Mail/Mailer.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Notifications\\Dispatcher' => $vendorDir . '/illuminate/contracts/Notifications/Dispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Notifications\\Factory' => $vendorDir . '/illuminate/contracts/Notifications/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pagination\\CursorPaginator' => $vendorDir . '/illuminate/contracts/Pagination/CursorPaginator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pagination\\LengthAwarePaginator' => $vendorDir . '/illuminate/contracts/Pagination/LengthAwarePaginator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pagination\\Paginator' => $vendorDir . '/illuminate/contracts/Pagination/Paginator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pipeline\\Hub' => $vendorDir . '/illuminate/contracts/Pipeline/Hub.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pipeline\\Pipeline' => $vendorDir . '/illuminate/contracts/Pipeline/Pipeline.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Process\\InvokedProcess' => $vendorDir . '/illuminate/contracts/Process/InvokedProcess.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Process\\ProcessResult' => $vendorDir . '/illuminate/contracts/Process/ProcessResult.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ClearableQueue' => $vendorDir . '/illuminate/contracts/Queue/ClearableQueue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\EntityNotFoundException' => $vendorDir . '/illuminate/contracts/Queue/EntityNotFoundException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\EntityResolver' => $vendorDir . '/illuminate/contracts/Queue/EntityResolver.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Factory' => $vendorDir . '/illuminate/contracts/Queue/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Job' => $vendorDir . '/illuminate/contracts/Queue/Job.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Monitor' => $vendorDir . '/illuminate/contracts/Queue/Monitor.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Queue' => $vendorDir . '/illuminate/contracts/Queue/Queue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\QueueableCollection' => $vendorDir . '/illuminate/contracts/Queue/QueueableCollection.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\QueueableEntity' => $vendorDir . '/illuminate/contracts/Queue/QueueableEntity.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldBeEncrypted' => $vendorDir . '/illuminate/contracts/Queue/ShouldBeEncrypted.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldBeUnique' => $vendorDir . '/illuminate/contracts/Queue/ShouldBeUnique.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldBeUniqueUntilProcessing' => $vendorDir . '/illuminate/contracts/Queue/ShouldBeUniqueUntilProcessing.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldQueue' => $vendorDir . '/illuminate/contracts/Queue/ShouldQueue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldQueueAfterCommit' => $vendorDir . '/illuminate/contracts/Queue/ShouldQueueAfterCommit.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\Connection' => $vendorDir . '/illuminate/contracts/Redis/Connection.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\Connector' => $vendorDir . '/illuminate/contracts/Redis/Connector.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\Factory' => $vendorDir . '/illuminate/contracts/Redis/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => $vendorDir . '/illuminate/contracts/Redis/LimiterTimeoutException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\BindingRegistrar' => $vendorDir . '/illuminate/contracts/Routing/BindingRegistrar.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\Registrar' => $vendorDir . '/illuminate/contracts/Routing/Registrar.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\ResponseFactory' => $vendorDir . '/illuminate/contracts/Routing/ResponseFactory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\UrlGenerator' => $vendorDir . '/illuminate/contracts/Routing/UrlGenerator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\UrlRoutable' => $vendorDir . '/illuminate/contracts/Routing/UrlRoutable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Session\\Middleware\\AuthenticatesSessions' => $vendorDir . '/illuminate/contracts/Session/Middleware/AuthenticatesSessions.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Session\\Session' => $vendorDir . '/illuminate/contracts/Session/Session.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Arrayable' => $vendorDir . '/illuminate/contracts/Support/Arrayable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\CanBeEscapedWhenCastToString' => $vendorDir . '/illuminate/contracts/Support/CanBeEscapedWhenCastToString.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\DeferrableProvider' => $vendorDir . '/illuminate/contracts/Support/DeferrableProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => $vendorDir . '/illuminate/contracts/Support/DeferringDisplayableValue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Htmlable' => $vendorDir . '/illuminate/contracts/Support/Htmlable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Jsonable' => $vendorDir . '/illuminate/contracts/Support/Jsonable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\MessageBag' => $vendorDir . '/illuminate/contracts/Support/MessageBag.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\MessageProvider' => $vendorDir . '/illuminate/contracts/Support/MessageProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Renderable' => $vendorDir . '/illuminate/contracts/Support/Renderable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Responsable' => $vendorDir . '/illuminate/contracts/Support/Responsable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\ValidatedData' => $vendorDir . '/illuminate/contracts/Support/ValidatedData.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Translation\\HasLocalePreference' => $vendorDir . '/illuminate/contracts/Translation/HasLocalePreference.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Translation\\Loader' => $vendorDir . '/illuminate/contracts/Translation/Loader.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Translation\\Translator' => $vendorDir . '/illuminate/contracts/Translation/Translator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\DataAwareRule' => $vendorDir . '/illuminate/contracts/Validation/DataAwareRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\Factory' => $vendorDir . '/illuminate/contracts/Validation/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ImplicitRule' => $vendorDir . '/illuminate/contracts/Validation/ImplicitRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\InvokableRule' => $vendorDir . '/illuminate/contracts/Validation/InvokableRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\Rule' => $vendorDir . '/illuminate/contracts/Validation/Rule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\UncompromisedVerifier' => $vendorDir . '/illuminate/contracts/Validation/UncompromisedVerifier.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ValidatesWhenResolved' => $vendorDir . '/illuminate/contracts/Validation/ValidatesWhenResolved.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ValidationRule' => $vendorDir . '/illuminate/contracts/Validation/ValidationRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\Validator' => $vendorDir . '/illuminate/contracts/Validation/Validator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ValidatorAwareRule' => $vendorDir . '/illuminate/contracts/Validation/ValidatorAwareRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\Engine' => $vendorDir . '/illuminate/contracts/View/Engine.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\Factory' => $vendorDir . '/illuminate/contracts/View/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\View' => $vendorDir . '/illuminate/contracts/View/View.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\ViewCompilationException' => $vendorDir . '/illuminate/contracts/View/ViewCompilationException.php', - 'RectorPrefix202405\\Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\HtmlStringable' => $vendorDir . '/nette/utils/src/HtmlStringable.php', - 'RectorPrefix202405\\Nette\\IOException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\Iterators\\CachingIterator' => $vendorDir . '/nette/utils/src/Iterators/CachingIterator.php', - 'RectorPrefix202405\\Nette\\Iterators\\Mapper' => $vendorDir . '/nette/utils/src/Iterators/Mapper.php', - 'RectorPrefix202405\\Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/compatibility.php', - 'RectorPrefix202405\\Nette\\Localization\\Translator' => $vendorDir . '/nette/utils/src/Translator.php', - 'RectorPrefix202405\\Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\SmartObject' => $vendorDir . '/nette/utils/src/SmartObject.php', - 'RectorPrefix202405\\Nette\\StaticClass' => $vendorDir . '/nette/utils/src/StaticClass.php', - 'RectorPrefix202405\\Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\ArrayHash' => $vendorDir . '/nette/utils/src/Utils/ArrayHash.php', - 'RectorPrefix202405\\Nette\\Utils\\ArrayList' => $vendorDir . '/nette/utils/src/Utils/ArrayList.php', - 'RectorPrefix202405\\Nette\\Utils\\Arrays' => $vendorDir . '/nette/utils/src/Utils/Arrays.php', - 'RectorPrefix202405\\Nette\\Utils\\AssertionException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\Callback' => $vendorDir . '/nette/utils/src/Utils/Callback.php', - 'RectorPrefix202405\\Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php', - 'RectorPrefix202405\\Nette\\Utils\\FileInfo' => $vendorDir . '/nette/utils/src/Utils/FileInfo.php', - 'RectorPrefix202405\\Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php', - 'RectorPrefix202405\\Nette\\Utils\\Finder' => $vendorDir . '/nette/utils/src/Utils/Finder.php', - 'RectorPrefix202405\\Nette\\Utils\\Floats' => $vendorDir . '/nette/utils/src/Utils/Floats.php', - 'RectorPrefix202405\\Nette\\Utils\\Helpers' => $vendorDir . '/nette/utils/src/Utils/Helpers.php', - 'RectorPrefix202405\\Nette\\Utils\\Html' => $vendorDir . '/nette/utils/src/Utils/Html.php', - 'RectorPrefix202405\\Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/compatibility.php', - 'RectorPrefix202405\\Nette\\Utils\\Image' => $vendorDir . '/nette/utils/src/Utils/Image.php', - 'RectorPrefix202405\\Nette\\Utils\\ImageColor' => $vendorDir . '/nette/utils/src/Utils/ImageColor.php', - 'RectorPrefix202405\\Nette\\Utils\\ImageException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\ImageType' => $vendorDir . '/nette/utils/src/Utils/ImageType.php', - 'RectorPrefix202405\\Nette\\Utils\\Iterables' => $vendorDir . '/nette/utils/src/Utils/Iterables.php', - 'RectorPrefix202405\\Nette\\Utils\\Json' => $vendorDir . '/nette/utils/src/Utils/Json.php', - 'RectorPrefix202405\\Nette\\Utils\\JsonException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\ObjectHelpers' => $vendorDir . '/nette/utils/src/Utils/ObjectHelpers.php', - 'RectorPrefix202405\\Nette\\Utils\\Paginator' => $vendorDir . '/nette/utils/src/Utils/Paginator.php', - 'RectorPrefix202405\\Nette\\Utils\\Random' => $vendorDir . '/nette/utils/src/Utils/Random.php', - 'RectorPrefix202405\\Nette\\Utils\\Reflection' => $vendorDir . '/nette/utils/src/Utils/Reflection.php', - 'RectorPrefix202405\\Nette\\Utils\\ReflectionMethod' => $vendorDir . '/nette/utils/src/Utils/ReflectionMethod.php', - 'RectorPrefix202405\\Nette\\Utils\\RegexpException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\Strings' => $vendorDir . '/nette/utils/src/Utils/Strings.php', - 'RectorPrefix202405\\Nette\\Utils\\Type' => $vendorDir . '/nette/utils/src/Utils/Type.php', - 'RectorPrefix202405\\Nette\\Utils\\UnknownImageFileException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\Validators' => $vendorDir . '/nette/utils/src/Utils/Validators.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\CiDetector' => $vendorDir . '/ondram/ci-detector/src/CiDetector.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\CiDetectorInterface' => $vendorDir . '/ondram/ci-detector/src/CiDetectorInterface.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AbstractCi' => $vendorDir . '/ondram/ci-detector/src/Ci/AbstractCi.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AppVeyor' => $vendorDir . '/ondram/ci-detector/src/Ci/AppVeyor.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AwsCodeBuild' => $vendorDir . '/ondram/ci-detector/src/Ci/AwsCodeBuild.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AzurePipelines' => $vendorDir . '/ondram/ci-detector/src/Ci/AzurePipelines.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Bamboo' => $vendorDir . '/ondram/ci-detector/src/Ci/Bamboo.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\BitbucketPipelines' => $vendorDir . '/ondram/ci-detector/src/Ci/BitbucketPipelines.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Buddy' => $vendorDir . '/ondram/ci-detector/src/Ci/Buddy.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\CiInterface' => $vendorDir . '/ondram/ci-detector/src/Ci/CiInterface.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Circle' => $vendorDir . '/ondram/ci-detector/src/Ci/Circle.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Codeship' => $vendorDir . '/ondram/ci-detector/src/Ci/Codeship.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Continuousphp' => $vendorDir . '/ondram/ci-detector/src/Ci/Continuousphp.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Drone' => $vendorDir . '/ondram/ci-detector/src/Ci/Drone.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\GitHubActions' => $vendorDir . '/ondram/ci-detector/src/Ci/GitHubActions.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\GitLab' => $vendorDir . '/ondram/ci-detector/src/Ci/GitLab.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Jenkins' => $vendorDir . '/ondram/ci-detector/src/Ci/Jenkins.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\SourceHut' => $vendorDir . '/ondram/ci-detector/src/Ci/SourceHut.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\TeamCity' => $vendorDir . '/ondram/ci-detector/src/Ci/TeamCity.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Travis' => $vendorDir . '/ondram/ci-detector/src/Ci/Travis.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Wercker' => $vendorDir . '/ondram/ci-detector/src/Ci/Wercker.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Env' => $vendorDir . '/ondram/ci-detector/src/Env.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Exception\\CiNotDetectedException' => $vendorDir . '/ondram/ci-detector/src/Exception/CiNotDetectedException.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\TrinaryLogic' => $vendorDir . '/ondram/ci-detector/src/TrinaryLogic.php', - 'RectorPrefix202405\\Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', - 'RectorPrefix202405\\Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', - 'RectorPrefix202405\\Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', - 'RectorPrefix202405\\Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php', - 'RectorPrefix202405\\Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php', - 'RectorPrefix202405\\Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/src/LoggerAwareInterface.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/src/LoggerAwareTrait.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/src/LoggerInterface.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/src/LoggerTrait.php', - 'RectorPrefix202405\\Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/src/NullLogger.php', - 'RectorPrefix202405\\Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php', - 'RectorPrefix202405\\Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php', - 'RectorPrefix202405\\Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php', - 'RectorPrefix202405\\React\\Cache\\ArrayCache' => $vendorDir . '/react/cache/src/ArrayCache.php', - 'RectorPrefix202405\\React\\Cache\\CacheInterface' => $vendorDir . '/react/cache/src/CacheInterface.php', - 'RectorPrefix202405\\React\\ChildProcess\\Process' => $vendorDir . '/react/child-process/src/Process.php', - 'RectorPrefix202405\\React\\Dns\\BadServerException' => $vendorDir . '/react/dns/src/BadServerException.php', - 'RectorPrefix202405\\React\\Dns\\Config\\Config' => $vendorDir . '/react/dns/src/Config/Config.php', - 'RectorPrefix202405\\React\\Dns\\Config\\HostsFile' => $vendorDir . '/react/dns/src/Config/HostsFile.php', - 'RectorPrefix202405\\React\\Dns\\Model\\Message' => $vendorDir . '/react/dns/src/Model/Message.php', - 'RectorPrefix202405\\React\\Dns\\Model\\Record' => $vendorDir . '/react/dns/src/Model/Record.php', - 'RectorPrefix202405\\React\\Dns\\Protocol\\BinaryDumper' => $vendorDir . '/react/dns/src/Protocol/BinaryDumper.php', - 'RectorPrefix202405\\React\\Dns\\Protocol\\Parser' => $vendorDir . '/react/dns/src/Protocol/Parser.php', - 'RectorPrefix202405\\React\\Dns\\Query\\CachingExecutor' => $vendorDir . '/react/dns/src/Query/CachingExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\CancellationException' => $vendorDir . '/react/dns/src/Query/CancellationException.php', - 'RectorPrefix202405\\React\\Dns\\Query\\CoopExecutor' => $vendorDir . '/react/dns/src/Query/CoopExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\ExecutorInterface' => $vendorDir . '/react/dns/src/Query/ExecutorInterface.php', - 'RectorPrefix202405\\React\\Dns\\Query\\FallbackExecutor' => $vendorDir . '/react/dns/src/Query/FallbackExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\HostsFileExecutor' => $vendorDir . '/react/dns/src/Query/HostsFileExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\Query' => $vendorDir . '/react/dns/src/Query/Query.php', - 'RectorPrefix202405\\React\\Dns\\Query\\RetryExecutor' => $vendorDir . '/react/dns/src/Query/RetryExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\SelectiveTransportExecutor' => $vendorDir . '/react/dns/src/Query/SelectiveTransportExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\TcpTransportExecutor' => $vendorDir . '/react/dns/src/Query/TcpTransportExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\TimeoutException' => $vendorDir . '/react/dns/src/Query/TimeoutException.php', - 'RectorPrefix202405\\React\\Dns\\Query\\TimeoutExecutor' => $vendorDir . '/react/dns/src/Query/TimeoutExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\UdpTransportExecutor' => $vendorDir . '/react/dns/src/Query/UdpTransportExecutor.php', - 'RectorPrefix202405\\React\\Dns\\RecordNotFoundException' => $vendorDir . '/react/dns/src/RecordNotFoundException.php', - 'RectorPrefix202405\\React\\Dns\\Resolver\\Factory' => $vendorDir . '/react/dns/src/Resolver/Factory.php', - 'RectorPrefix202405\\React\\Dns\\Resolver\\Resolver' => $vendorDir . '/react/dns/src/Resolver/Resolver.php', - 'RectorPrefix202405\\React\\Dns\\Resolver\\ResolverInterface' => $vendorDir . '/react/dns/src/Resolver/ResolverInterface.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtEvLoop' => $vendorDir . '/react/event-loop/src/ExtEvLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtEventLoop' => $vendorDir . '/react/event-loop/src/ExtEventLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtLibevLoop' => $vendorDir . '/react/event-loop/src/ExtLibevLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtLibeventLoop' => $vendorDir . '/react/event-loop/src/ExtLibeventLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtUvLoop' => $vendorDir . '/react/event-loop/src/ExtUvLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\Factory' => $vendorDir . '/react/event-loop/src/Factory.php', - 'RectorPrefix202405\\React\\EventLoop\\Loop' => $vendorDir . '/react/event-loop/src/Loop.php', - 'RectorPrefix202405\\React\\EventLoop\\LoopInterface' => $vendorDir . '/react/event-loop/src/LoopInterface.php', - 'RectorPrefix202405\\React\\EventLoop\\SignalsHandler' => $vendorDir . '/react/event-loop/src/SignalsHandler.php', - 'RectorPrefix202405\\React\\EventLoop\\StreamSelectLoop' => $vendorDir . '/react/event-loop/src/StreamSelectLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\Tick\\FutureTickQueue' => $vendorDir . '/react/event-loop/src/Tick/FutureTickQueue.php', - 'RectorPrefix202405\\React\\EventLoop\\TimerInterface' => $vendorDir . '/react/event-loop/src/TimerInterface.php', - 'RectorPrefix202405\\React\\EventLoop\\Timer\\Timer' => $vendorDir . '/react/event-loop/src/Timer/Timer.php', - 'RectorPrefix202405\\React\\EventLoop\\Timer\\Timers' => $vendorDir . '/react/event-loop/src/Timer/Timers.php', - 'RectorPrefix202405\\React\\Promise\\CancellablePromiseInterface' => $vendorDir . '/react/promise/src/CancellablePromiseInterface.php', - 'RectorPrefix202405\\React\\Promise\\CancellationQueue' => $vendorDir . '/react/promise/src/CancellationQueue.php', - 'RectorPrefix202405\\React\\Promise\\Deferred' => $vendorDir . '/react/promise/src/Deferred.php', - 'RectorPrefix202405\\React\\Promise\\Exception\\LengthException' => $vendorDir . '/react/promise/src/Exception/LengthException.php', - 'RectorPrefix202405\\React\\Promise\\ExtendedPromiseInterface' => $vendorDir . '/react/promise/src/ExtendedPromiseInterface.php', - 'RectorPrefix202405\\React\\Promise\\FulfilledPromise' => $vendorDir . '/react/promise/src/FulfilledPromise.php', - 'RectorPrefix202405\\React\\Promise\\LazyPromise' => $vendorDir . '/react/promise/src/LazyPromise.php', - 'RectorPrefix202405\\React\\Promise\\Promise' => $vendorDir . '/react/promise/src/Promise.php', - 'RectorPrefix202405\\React\\Promise\\PromiseInterface' => $vendorDir . '/react/promise/src/PromiseInterface.php', - 'RectorPrefix202405\\React\\Promise\\PromisorInterface' => $vendorDir . '/react/promise/src/PromisorInterface.php', - 'RectorPrefix202405\\React\\Promise\\RejectedPromise' => $vendorDir . '/react/promise/src/RejectedPromise.php', - 'RectorPrefix202405\\React\\Promise\\UnhandledRejectionException' => $vendorDir . '/react/promise/src/UnhandledRejectionException.php', - 'RectorPrefix202405\\React\\Socket\\Connection' => $vendorDir . '/react/socket/src/Connection.php', - 'RectorPrefix202405\\React\\Socket\\ConnectionInterface' => $vendorDir . '/react/socket/src/ConnectionInterface.php', - 'RectorPrefix202405\\React\\Socket\\Connector' => $vendorDir . '/react/socket/src/Connector.php', - 'RectorPrefix202405\\React\\Socket\\ConnectorInterface' => $vendorDir . '/react/socket/src/ConnectorInterface.php', - 'RectorPrefix202405\\React\\Socket\\DnsConnector' => $vendorDir . '/react/socket/src/DnsConnector.php', - 'RectorPrefix202405\\React\\Socket\\FdServer' => $vendorDir . '/react/socket/src/FdServer.php', - 'RectorPrefix202405\\React\\Socket\\FixedUriConnector' => $vendorDir . '/react/socket/src/FixedUriConnector.php', - 'RectorPrefix202405\\React\\Socket\\HappyEyeBallsConnectionBuilder' => $vendorDir . '/react/socket/src/HappyEyeBallsConnectionBuilder.php', - 'RectorPrefix202405\\React\\Socket\\HappyEyeBallsConnector' => $vendorDir . '/react/socket/src/HappyEyeBallsConnector.php', - 'RectorPrefix202405\\React\\Socket\\LimitingServer' => $vendorDir . '/react/socket/src/LimitingServer.php', - 'RectorPrefix202405\\React\\Socket\\SecureConnector' => $vendorDir . '/react/socket/src/SecureConnector.php', - 'RectorPrefix202405\\React\\Socket\\SecureServer' => $vendorDir . '/react/socket/src/SecureServer.php', - 'RectorPrefix202405\\React\\Socket\\Server' => $vendorDir . '/react/socket/src/Server.php', - 'RectorPrefix202405\\React\\Socket\\ServerInterface' => $vendorDir . '/react/socket/src/ServerInterface.php', - 'RectorPrefix202405\\React\\Socket\\SocketServer' => $vendorDir . '/react/socket/src/SocketServer.php', - 'RectorPrefix202405\\React\\Socket\\StreamEncryption' => $vendorDir . '/react/socket/src/StreamEncryption.php', - 'RectorPrefix202405\\React\\Socket\\TcpConnector' => $vendorDir . '/react/socket/src/TcpConnector.php', - 'RectorPrefix202405\\React\\Socket\\TcpServer' => $vendorDir . '/react/socket/src/TcpServer.php', - 'RectorPrefix202405\\React\\Socket\\TimeoutConnector' => $vendorDir . '/react/socket/src/TimeoutConnector.php', - 'RectorPrefix202405\\React\\Socket\\UnixConnector' => $vendorDir . '/react/socket/src/UnixConnector.php', - 'RectorPrefix202405\\React\\Socket\\UnixServer' => $vendorDir . '/react/socket/src/UnixServer.php', - 'RectorPrefix202405\\React\\Stream\\CompositeStream' => $vendorDir . '/react/stream/src/CompositeStream.php', - 'RectorPrefix202405\\React\\Stream\\DuplexResourceStream' => $vendorDir . '/react/stream/src/DuplexResourceStream.php', - 'RectorPrefix202405\\React\\Stream\\DuplexStreamInterface' => $vendorDir . '/react/stream/src/DuplexStreamInterface.php', - 'RectorPrefix202405\\React\\Stream\\ReadableResourceStream' => $vendorDir . '/react/stream/src/ReadableResourceStream.php', - 'RectorPrefix202405\\React\\Stream\\ReadableStreamInterface' => $vendorDir . '/react/stream/src/ReadableStreamInterface.php', - 'RectorPrefix202405\\React\\Stream\\ThroughStream' => $vendorDir . '/react/stream/src/ThroughStream.php', - 'RectorPrefix202405\\React\\Stream\\Util' => $vendorDir . '/react/stream/src/Util.php', - 'RectorPrefix202405\\React\\Stream\\WritableResourceStream' => $vendorDir . '/react/stream/src/WritableResourceStream.php', - 'RectorPrefix202405\\React\\Stream\\WritableStreamInterface' => $vendorDir . '/react/stream/src/WritableStreamInterface.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Attribute\\AsCommand' => $vendorDir . '/symfony/console/Attribute/AsCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CI\\GithubActionReporter' => $vendorDir . '/symfony/console/CI/GithubActionReporter.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Color' => $vendorDir . '/symfony/console/Color.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\CompleteCommand' => $vendorDir . '/symfony/console/Command/CompleteCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => $vendorDir . '/symfony/console/Command/DumpCompletionCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\LazyCommand' => $vendorDir . '/symfony/console/Command/LazyCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => $vendorDir . '/symfony/console/Command/SignalableCommandInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\TraceableCommand' => $vendorDir . '/symfony/console/Command/TraceableCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\CompletionInput' => $vendorDir . '/symfony/console/Completion/CompletionInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => $vendorDir . '/symfony/console/Completion/CompletionSuggestions.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/BashCompletionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => $vendorDir . '/symfony/console/Completion/Output/CompletionOutputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\FishCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/FishCompletionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\ZshCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/ZshCompletionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Suggestion' => $vendorDir . '/symfony/console/Completion/Suggestion.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Cursor' => $vendorDir . '/symfony/console/Cursor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\DataCollector\\CommandDataCollector' => $vendorDir . '/symfony/console/DataCollector/CommandDataCollector.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Debug\\CliRequest' => $vendorDir . '/symfony/console/Debug/CliRequest.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => $vendorDir . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\MissingInputException' => $vendorDir . '/symfony/console/Exception/MissingInputException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => $vendorDir . '/symfony/console/Exception/NamespaceNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\RunCommandFailedException' => $vendorDir . '/symfony/console/Exception/RunCommandFailedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatter.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatterStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\Dumper' => $vendorDir . '/symfony/console/Helper/Dumper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\OutputWrapper' => $vendorDir . '/symfony/console/Helper/OutputWrapper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableCellStyle' => $vendorDir . '/symfony/console/Helper/TableCellStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableRows' => $vendorDir . '/symfony/console/Helper/TableRows.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Messenger\\RunCommandContext' => $vendorDir . '/symfony/console/Messenger/RunCommandContext.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Messenger\\RunCommandMessage' => $vendorDir . '/symfony/console/Messenger/RunCommandMessage.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Messenger\\RunCommandMessageHandler' => $vendorDir . '/symfony/console/Messenger/RunCommandMessageHandler.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\AnsiColorMode' => $vendorDir . '/symfony/console/Output/AnsiColorMode.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => $vendorDir . '/symfony/console/Output/ConsoleSectionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => $vendorDir . '/symfony/console/Output/TrimmedBufferOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\SignalRegistry\\SignalMap' => $vendorDir . '/symfony/console/SignalRegistry/SignalMap.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => $vendorDir . '/symfony/console/SignalRegistry/SignalRegistry.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\SingleCommandApplication' => $vendorDir . '/symfony/console/SingleCommandApplication.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/filesystem/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => $vendorDir . '/symfony/filesystem/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Path' => $vendorDir . '/symfony/filesystem/Path.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $vendorDir . '/symfony/finder/Iterator/LazyIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => $vendorDir . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => $vendorDir . '/symfony/process/Exception/ProcessSignaledException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\RunProcessFailedException' => $vendorDir . '/symfony/process/Exception/RunProcessFailedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\InputStream' => $vendorDir . '/symfony/process/InputStream.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Messenger\\RunProcessContext' => $vendorDir . '/symfony/process/Messenger/RunProcessContext.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Messenger\\RunProcessMessage' => $vendorDir . '/symfony/process/Messenger/RunProcessMessage.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Messenger\\RunProcessMessageHandler' => $vendorDir . '/symfony/process/Messenger/RunProcessMessageHandler.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\PhpSubprocess' => $vendorDir . '/symfony/process/PhpSubprocess.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceCollectionInterface' => $vendorDir . '/symfony/service-contracts/ServiceCollectionInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $vendorDir . '/symfony/service-contracts/ServiceLocatorTrait.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceMethodsSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceMethodsSubscriberTrait.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\CommandLine\\WorkerCommandLineFactory' => $vendorDir . '/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Contract\\SerializableInterface' => $vendorDir . '/symplify/easy-parallel/src/Contract/SerializableInterface.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\CpuCoreCountProvider' => $vendorDir . '/symplify/easy-parallel/src/CpuCoreCountProvider.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\Action' => $vendorDir . '/symplify/easy-parallel/src/Enum/Action.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\Content' => $vendorDir . '/symplify/easy-parallel/src/Enum/Content.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\ReactCommand' => $vendorDir . '/symplify/easy-parallel/src/Enum/ReactCommand.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\ReactEvent' => $vendorDir . '/symplify/easy-parallel/src/Enum/ReactEvent.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Exception\\ParallelShouldNotHappenException' => $vendorDir . '/symplify/easy-parallel/src/Exception/ParallelShouldNotHappenException.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Reflection\\CommandFromReflectionFactory' => $vendorDir . '/symplify/easy-parallel/src/Reflection/CommandFromReflectionFactory.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ScheduleFactory' => $vendorDir . '/symplify/easy-parallel/src/ScheduleFactory.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\EasyParallelConfig' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/EasyParallelConfig.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\ParallelProcess' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/ParallelProcess.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\ProcessPool' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/ProcessPool.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\Schedule' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/Schedule.php', - 'RectorPrefix202405\\Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php', - 'RectorPrefix202405\\Webmozart\\Assert\\InvalidArgumentException' => $vendorDir . '/webmozart/assert/src/InvalidArgumentException.php', - 'RectorPrefix202405\\Webmozart\\Assert\\Mixin' => $vendorDir . '/webmozart/assert/src/Mixin.php', + 'RectorPrefix202410\\Clue\\React\\NDJson\\Decoder' => $vendorDir . '/clue/ndjson-react/src/Decoder.php', + 'RectorPrefix202410\\Clue\\React\\NDJson\\Encoder' => $vendorDir . '/clue/ndjson-react/src/Encoder.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchAllResult' => $vendorDir . '/composer/pcre/src/MatchAllResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchAllStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchAllStrictGroupsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchAllWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchAllWithOffsetsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchResult' => $vendorDir . '/composer/pcre/src/MatchResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchStrictGroupsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchWithOffsetsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => $vendorDir . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregMatchFlags' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchFlags.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => $vendorDir . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php', + 'RectorPrefix202410\\Composer\\Pcre\\PcreException' => $vendorDir . '/composer/pcre/src/PcreException.php', + 'RectorPrefix202410\\Composer\\Pcre\\Preg' => $vendorDir . '/composer/pcre/src/Preg.php', + 'RectorPrefix202410\\Composer\\Pcre\\Regex' => $vendorDir . '/composer/pcre/src/Regex.php', + 'RectorPrefix202410\\Composer\\Pcre\\ReplaceResult' => $vendorDir . '/composer/pcre/src/ReplaceResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\UnexpectedNullMatchException' => $vendorDir . '/composer/pcre/src/UnexpectedNullMatchException.php', + 'RectorPrefix202410\\Composer\\Semver\\Comparator' => $vendorDir . '/composer/semver/src/Comparator.php', + 'RectorPrefix202410\\Composer\\Semver\\CompilingMatcher' => $vendorDir . '/composer/semver/src/CompilingMatcher.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\Bound' => $vendorDir . '/composer/semver/src/Constraint/Bound.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\Constraint' => $vendorDir . '/composer/semver/src/Constraint/Constraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\ConstraintInterface' => $vendorDir . '/composer/semver/src/Constraint/ConstraintInterface.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\MatchAllConstraint' => $vendorDir . '/composer/semver/src/Constraint/MatchAllConstraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\MatchNoneConstraint' => $vendorDir . '/composer/semver/src/Constraint/MatchNoneConstraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\MultiConstraint' => $vendorDir . '/composer/semver/src/Constraint/MultiConstraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Interval' => $vendorDir . '/composer/semver/src/Interval.php', + 'RectorPrefix202410\\Composer\\Semver\\Intervals' => $vendorDir . '/composer/semver/src/Intervals.php', + 'RectorPrefix202410\\Composer\\Semver\\Semver' => $vendorDir . '/composer/semver/src/Semver.php', + 'RectorPrefix202410\\Composer\\Semver\\VersionParser' => $vendorDir . '/composer/semver/src/VersionParser.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\PhpConfig' => $vendorDir . '/composer/xdebug-handler/src/PhpConfig.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\Process' => $vendorDir . '/composer/xdebug-handler/src/Process.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\Status' => $vendorDir . '/composer/xdebug-handler/src/Status.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\XdebugHandler' => $vendorDir . '/composer/xdebug-handler/src/XdebugHandler.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\CachedWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\GenericLanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Language' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Language.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\LanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\NoopWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Pattern' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Patterns' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Ruleset' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Substitution' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Substitutions' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Transformation' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Transformations' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Word' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\RulesetInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\WordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php', + 'RectorPrefix202410\\Evenement\\EventEmitter' => $vendorDir . '/evenement/evenement/src/EventEmitter.php', + 'RectorPrefix202410\\Evenement\\EventEmitterInterface' => $vendorDir . '/evenement/evenement/src/EventEmitterInterface.php', + 'RectorPrefix202410\\Evenement\\EventEmitterTrait' => $vendorDir . '/evenement/evenement/src/EventEmitterTrait.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\CpuCoreCounter' => $vendorDir . '/fidry/cpu-core-counter/src/CpuCoreCounter.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Diagnoser' => $vendorDir . '/fidry/cpu-core-counter/src/Diagnoser.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Executor\\ProcOpenExecutor' => $vendorDir . '/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Executor\\ProcessExecutor' => $vendorDir . '/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\EnvVariableFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\LscpuLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\LscpuPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\NProcFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/NProcFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\NProcessorFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\NullCpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\OnlyInPowerShellFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\OnlyOnOSFamilyFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\ProcOpenBasedFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\SkipOnOSFamilyFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\WindowsRegistryLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\WmicLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => $vendorDir . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\ParallelisationResult' => $vendorDir . '/fidry/cpu-core-counter/src/ParallelisationResult.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Auth' => $vendorDir . '/illuminate/container/Attributes/Auth.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Authenticated' => $vendorDir . '/illuminate/container/Attributes/Authenticated.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Cache' => $vendorDir . '/illuminate/container/Attributes/Cache.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Config' => $vendorDir . '/illuminate/container/Attributes/Config.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\CurrentUser' => $vendorDir . '/illuminate/container/Attributes/CurrentUser.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\DB' => $vendorDir . '/illuminate/container/Attributes/DB.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Database' => $vendorDir . '/illuminate/container/Attributes/Database.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Log' => $vendorDir . '/illuminate/container/Attributes/Log.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Storage' => $vendorDir . '/illuminate/container/Attributes/Storage.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Tag' => $vendorDir . '/illuminate/container/Attributes/Tag.php', + 'RectorPrefix202410\\Illuminate\\Container\\BoundMethod' => $vendorDir . '/illuminate/container/BoundMethod.php', + 'RectorPrefix202410\\Illuminate\\Container\\Container' => $vendorDir . '/illuminate/container/Container.php', + 'RectorPrefix202410\\Illuminate\\Container\\ContextualBindingBuilder' => $vendorDir . '/illuminate/container/ContextualBindingBuilder.php', + 'RectorPrefix202410\\Illuminate\\Container\\EntryNotFoundException' => $vendorDir . '/illuminate/container/EntryNotFoundException.php', + 'RectorPrefix202410\\Illuminate\\Container\\RewindableGenerator' => $vendorDir . '/illuminate/container/RewindableGenerator.php', + 'RectorPrefix202410\\Illuminate\\Container\\Util' => $vendorDir . '/illuminate/container/Util.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Access\\Authorizable' => $vendorDir . '/illuminate/contracts/Auth/Access/Authorizable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Access\\Gate' => $vendorDir . '/illuminate/contracts/Auth/Access/Gate.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Authenticatable' => $vendorDir . '/illuminate/contracts/Auth/Authenticatable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\CanResetPassword' => $vendorDir . '/illuminate/contracts/Auth/CanResetPassword.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Factory' => $vendorDir . '/illuminate/contracts/Auth/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Guard' => $vendorDir . '/illuminate/contracts/Auth/Guard.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => $vendorDir . '/illuminate/contracts/Auth/Middleware/AuthenticatesRequests.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\MustVerifyEmail' => $vendorDir . '/illuminate/contracts/Auth/MustVerifyEmail.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\PasswordBroker' => $vendorDir . '/illuminate/contracts/Auth/PasswordBroker.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => $vendorDir . '/illuminate/contracts/Auth/PasswordBrokerFactory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\StatefulGuard' => $vendorDir . '/illuminate/contracts/Auth/StatefulGuard.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\SupportsBasicAuth' => $vendorDir . '/illuminate/contracts/Auth/SupportsBasicAuth.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\UserProvider' => $vendorDir . '/illuminate/contracts/Auth/UserProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\Broadcaster' => $vendorDir . '/illuminate/contracts/Broadcasting/Broadcaster.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\Factory' => $vendorDir . '/illuminate/contracts/Broadcasting/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel' => $vendorDir . '/illuminate/contracts/Broadcasting/HasBroadcastChannel.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\ShouldBeUnique' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBeUnique.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcast.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Bus\\Dispatcher' => $vendorDir . '/illuminate/contracts/Bus/Dispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Bus\\QueueingDispatcher' => $vendorDir . '/illuminate/contracts/Bus/QueueingDispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Factory' => $vendorDir . '/illuminate/contracts/Cache/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Lock' => $vendorDir . '/illuminate/contracts/Cache/Lock.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\LockProvider' => $vendorDir . '/illuminate/contracts/Cache/LockProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\LockTimeoutException' => $vendorDir . '/illuminate/contracts/Cache/LockTimeoutException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Repository' => $vendorDir . '/illuminate/contracts/Cache/Repository.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Store' => $vendorDir . '/illuminate/contracts/Cache/Store.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Concurrency\\Driver' => $vendorDir . '/illuminate/contracts/Concurrency/Driver.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Config\\Repository' => $vendorDir . '/illuminate/contracts/Config/Repository.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\Application' => $vendorDir . '/illuminate/contracts/Console/Application.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\Isolatable' => $vendorDir . '/illuminate/contracts/Console/Isolatable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\Kernel' => $vendorDir . '/illuminate/contracts/Console/Kernel.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\PromptsForMissingInput' => $vendorDir . '/illuminate/contracts/Console/PromptsForMissingInput.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\BindingResolutionException' => $vendorDir . '/illuminate/contracts/Container/BindingResolutionException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\CircularDependencyException' => $vendorDir . '/illuminate/contracts/Container/CircularDependencyException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\Container' => $vendorDir . '/illuminate/contracts/Container/Container.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\ContextualAttribute' => $vendorDir . '/illuminate/contracts/Container/ContextualAttribute.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => $vendorDir . '/illuminate/contracts/Container/ContextualBindingBuilder.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cookie\\Factory' => $vendorDir . '/illuminate/contracts/Cookie/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cookie\\QueueingFactory' => $vendorDir . '/illuminate/contracts/Cookie/QueueingFactory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\Builder' => $vendorDir . '/illuminate/contracts/Database/Eloquent/Builder.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\Castable' => $vendorDir . '/illuminate/contracts/Database/Eloquent/Castable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/CastsAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/CastsInboundAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\DeviatesCastableAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\SerializesCastableAttributes' => $vendorDir . '/illuminate/contracts/Database/Eloquent/SerializesCastableAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\SupportsPartialRelations' => $vendorDir . '/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/illuminate/contracts/Database/Events/MigrationEvent.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/illuminate/contracts/Database/ModelIdentifier.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Query\\Builder' => $vendorDir . '/illuminate/contracts/Database/Query/Builder.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Query\\ConditionExpression' => $vendorDir . '/illuminate/contracts/Database/Query/ConditionExpression.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Query\\Expression' => $vendorDir . '/illuminate/contracts/Database/Query/Expression.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/illuminate/contracts/Debug/ExceptionHandler.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Debug\\ShouldntReport' => $vendorDir . '/illuminate/contracts/Debug/ShouldntReport.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\DecryptException' => $vendorDir . '/illuminate/contracts/Encryption/DecryptException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\EncryptException' => $vendorDir . '/illuminate/contracts/Encryption/EncryptException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\Encrypter' => $vendorDir . '/illuminate/contracts/Encryption/Encrypter.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\StringEncrypter' => $vendorDir . '/illuminate/contracts/Encryption/StringEncrypter.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Events\\Dispatcher' => $vendorDir . '/illuminate/contracts/Events/Dispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Events\\ShouldDispatchAfterCommit' => $vendorDir . '/illuminate/contracts/Events/ShouldDispatchAfterCommit.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Events\\ShouldHandleEventsAfterCommit' => $vendorDir . '/illuminate/contracts/Events/ShouldHandleEventsAfterCommit.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\Cloud' => $vendorDir . '/illuminate/contracts/Filesystem/Cloud.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\Factory' => $vendorDir . '/illuminate/contracts/Filesystem/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => $vendorDir . '/illuminate/contracts/Filesystem/FileNotFoundException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\Filesystem' => $vendorDir . '/illuminate/contracts/Filesystem/Filesystem.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\LockTimeoutException' => $vendorDir . '/illuminate/contracts/Filesystem/LockTimeoutException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\Application' => $vendorDir . '/illuminate/contracts/Foundation/Application.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\CachesConfiguration' => $vendorDir . '/illuminate/contracts/Foundation/CachesConfiguration.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\CachesRoutes' => $vendorDir . '/illuminate/contracts/Foundation/CachesRoutes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\ExceptionRenderer' => $vendorDir . '/illuminate/contracts/Foundation/ExceptionRenderer.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\MaintenanceMode' => $vendorDir . '/illuminate/contracts/Foundation/MaintenanceMode.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Hashing\\Hasher' => $vendorDir . '/illuminate/contracts/Hashing/Hasher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Http\\Kernel' => $vendorDir . '/illuminate/contracts/Http/Kernel.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Attachable' => $vendorDir . '/illuminate/contracts/Mail/Attachable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Factory' => $vendorDir . '/illuminate/contracts/Mail/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\MailQueue' => $vendorDir . '/illuminate/contracts/Mail/MailQueue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Mailable' => $vendorDir . '/illuminate/contracts/Mail/Mailable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Mailer' => $vendorDir . '/illuminate/contracts/Mail/Mailer.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Notifications\\Dispatcher' => $vendorDir . '/illuminate/contracts/Notifications/Dispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Notifications\\Factory' => $vendorDir . '/illuminate/contracts/Notifications/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pagination\\CursorPaginator' => $vendorDir . '/illuminate/contracts/Pagination/CursorPaginator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pagination\\LengthAwarePaginator' => $vendorDir . '/illuminate/contracts/Pagination/LengthAwarePaginator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pagination\\Paginator' => $vendorDir . '/illuminate/contracts/Pagination/Paginator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pipeline\\Hub' => $vendorDir . '/illuminate/contracts/Pipeline/Hub.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pipeline\\Pipeline' => $vendorDir . '/illuminate/contracts/Pipeline/Pipeline.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Process\\InvokedProcess' => $vendorDir . '/illuminate/contracts/Process/InvokedProcess.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Process\\ProcessResult' => $vendorDir . '/illuminate/contracts/Process/ProcessResult.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ClearableQueue' => $vendorDir . '/illuminate/contracts/Queue/ClearableQueue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\EntityNotFoundException' => $vendorDir . '/illuminate/contracts/Queue/EntityNotFoundException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\EntityResolver' => $vendorDir . '/illuminate/contracts/Queue/EntityResolver.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Factory' => $vendorDir . '/illuminate/contracts/Queue/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Job' => $vendorDir . '/illuminate/contracts/Queue/Job.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Monitor' => $vendorDir . '/illuminate/contracts/Queue/Monitor.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Queue' => $vendorDir . '/illuminate/contracts/Queue/Queue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\QueueableCollection' => $vendorDir . '/illuminate/contracts/Queue/QueueableCollection.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\QueueableEntity' => $vendorDir . '/illuminate/contracts/Queue/QueueableEntity.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldBeEncrypted' => $vendorDir . '/illuminate/contracts/Queue/ShouldBeEncrypted.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldBeUnique' => $vendorDir . '/illuminate/contracts/Queue/ShouldBeUnique.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldBeUniqueUntilProcessing' => $vendorDir . '/illuminate/contracts/Queue/ShouldBeUniqueUntilProcessing.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldQueue' => $vendorDir . '/illuminate/contracts/Queue/ShouldQueue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldQueueAfterCommit' => $vendorDir . '/illuminate/contracts/Queue/ShouldQueueAfterCommit.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\Connection' => $vendorDir . '/illuminate/contracts/Redis/Connection.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\Connector' => $vendorDir . '/illuminate/contracts/Redis/Connector.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\Factory' => $vendorDir . '/illuminate/contracts/Redis/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => $vendorDir . '/illuminate/contracts/Redis/LimiterTimeoutException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\BindingRegistrar' => $vendorDir . '/illuminate/contracts/Routing/BindingRegistrar.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\Registrar' => $vendorDir . '/illuminate/contracts/Routing/Registrar.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\ResponseFactory' => $vendorDir . '/illuminate/contracts/Routing/ResponseFactory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\UrlGenerator' => $vendorDir . '/illuminate/contracts/Routing/UrlGenerator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\UrlRoutable' => $vendorDir . '/illuminate/contracts/Routing/UrlRoutable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Session\\Middleware\\AuthenticatesSessions' => $vendorDir . '/illuminate/contracts/Session/Middleware/AuthenticatesSessions.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Session\\Session' => $vendorDir . '/illuminate/contracts/Session/Session.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Arrayable' => $vendorDir . '/illuminate/contracts/Support/Arrayable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\CanBeEscapedWhenCastToString' => $vendorDir . '/illuminate/contracts/Support/CanBeEscapedWhenCastToString.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\DeferrableProvider' => $vendorDir . '/illuminate/contracts/Support/DeferrableProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => $vendorDir . '/illuminate/contracts/Support/DeferringDisplayableValue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Htmlable' => $vendorDir . '/illuminate/contracts/Support/Htmlable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Jsonable' => $vendorDir . '/illuminate/contracts/Support/Jsonable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\MessageBag' => $vendorDir . '/illuminate/contracts/Support/MessageBag.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\MessageProvider' => $vendorDir . '/illuminate/contracts/Support/MessageProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Renderable' => $vendorDir . '/illuminate/contracts/Support/Renderable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Responsable' => $vendorDir . '/illuminate/contracts/Support/Responsable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\ValidatedData' => $vendorDir . '/illuminate/contracts/Support/ValidatedData.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Translation\\HasLocalePreference' => $vendorDir . '/illuminate/contracts/Translation/HasLocalePreference.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Translation\\Loader' => $vendorDir . '/illuminate/contracts/Translation/Loader.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Translation\\Translator' => $vendorDir . '/illuminate/contracts/Translation/Translator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\DataAwareRule' => $vendorDir . '/illuminate/contracts/Validation/DataAwareRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\Factory' => $vendorDir . '/illuminate/contracts/Validation/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ImplicitRule' => $vendorDir . '/illuminate/contracts/Validation/ImplicitRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\InvokableRule' => $vendorDir . '/illuminate/contracts/Validation/InvokableRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\Rule' => $vendorDir . '/illuminate/contracts/Validation/Rule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\UncompromisedVerifier' => $vendorDir . '/illuminate/contracts/Validation/UncompromisedVerifier.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ValidatesWhenResolved' => $vendorDir . '/illuminate/contracts/Validation/ValidatesWhenResolved.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ValidationRule' => $vendorDir . '/illuminate/contracts/Validation/ValidationRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\Validator' => $vendorDir . '/illuminate/contracts/Validation/Validator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ValidatorAwareRule' => $vendorDir . '/illuminate/contracts/Validation/ValidatorAwareRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\Engine' => $vendorDir . '/illuminate/contracts/View/Engine.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\Factory' => $vendorDir . '/illuminate/contracts/View/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\View' => $vendorDir . '/illuminate/contracts/View/View.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\ViewCompilationException' => $vendorDir . '/illuminate/contracts/View/ViewCompilationException.php', + 'RectorPrefix202410\\Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\HtmlStringable' => $vendorDir . '/nette/utils/src/HtmlStringable.php', + 'RectorPrefix202410\\Nette\\IOException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\Iterators\\CachingIterator' => $vendorDir . '/nette/utils/src/Iterators/CachingIterator.php', + 'RectorPrefix202410\\Nette\\Iterators\\Mapper' => $vendorDir . '/nette/utils/src/Iterators/Mapper.php', + 'RectorPrefix202410\\Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/compatibility.php', + 'RectorPrefix202410\\Nette\\Localization\\Translator' => $vendorDir . '/nette/utils/src/Translator.php', + 'RectorPrefix202410\\Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\SmartObject' => $vendorDir . '/nette/utils/src/SmartObject.php', + 'RectorPrefix202410\\Nette\\StaticClass' => $vendorDir . '/nette/utils/src/StaticClass.php', + 'RectorPrefix202410\\Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\ArrayHash' => $vendorDir . '/nette/utils/src/Utils/ArrayHash.php', + 'RectorPrefix202410\\Nette\\Utils\\ArrayList' => $vendorDir . '/nette/utils/src/Utils/ArrayList.php', + 'RectorPrefix202410\\Nette\\Utils\\Arrays' => $vendorDir . '/nette/utils/src/Utils/Arrays.php', + 'RectorPrefix202410\\Nette\\Utils\\AssertionException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\Callback' => $vendorDir . '/nette/utils/src/Utils/Callback.php', + 'RectorPrefix202410\\Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php', + 'RectorPrefix202410\\Nette\\Utils\\FileInfo' => $vendorDir . '/nette/utils/src/Utils/FileInfo.php', + 'RectorPrefix202410\\Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php', + 'RectorPrefix202410\\Nette\\Utils\\Finder' => $vendorDir . '/nette/utils/src/Utils/Finder.php', + 'RectorPrefix202410\\Nette\\Utils\\Floats' => $vendorDir . '/nette/utils/src/Utils/Floats.php', + 'RectorPrefix202410\\Nette\\Utils\\Helpers' => $vendorDir . '/nette/utils/src/Utils/Helpers.php', + 'RectorPrefix202410\\Nette\\Utils\\Html' => $vendorDir . '/nette/utils/src/Utils/Html.php', + 'RectorPrefix202410\\Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/compatibility.php', + 'RectorPrefix202410\\Nette\\Utils\\Image' => $vendorDir . '/nette/utils/src/Utils/Image.php', + 'RectorPrefix202410\\Nette\\Utils\\ImageColor' => $vendorDir . '/nette/utils/src/Utils/ImageColor.php', + 'RectorPrefix202410\\Nette\\Utils\\ImageException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\ImageType' => $vendorDir . '/nette/utils/src/Utils/ImageType.php', + 'RectorPrefix202410\\Nette\\Utils\\Iterables' => $vendorDir . '/nette/utils/src/Utils/Iterables.php', + 'RectorPrefix202410\\Nette\\Utils\\Json' => $vendorDir . '/nette/utils/src/Utils/Json.php', + 'RectorPrefix202410\\Nette\\Utils\\JsonException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\ObjectHelpers' => $vendorDir . '/nette/utils/src/Utils/ObjectHelpers.php', + 'RectorPrefix202410\\Nette\\Utils\\Paginator' => $vendorDir . '/nette/utils/src/Utils/Paginator.php', + 'RectorPrefix202410\\Nette\\Utils\\Random' => $vendorDir . '/nette/utils/src/Utils/Random.php', + 'RectorPrefix202410\\Nette\\Utils\\Reflection' => $vendorDir . '/nette/utils/src/Utils/Reflection.php', + 'RectorPrefix202410\\Nette\\Utils\\ReflectionMethod' => $vendorDir . '/nette/utils/src/Utils/ReflectionMethod.php', + 'RectorPrefix202410\\Nette\\Utils\\RegexpException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\Strings' => $vendorDir . '/nette/utils/src/Utils/Strings.php', + 'RectorPrefix202410\\Nette\\Utils\\Type' => $vendorDir . '/nette/utils/src/Utils/Type.php', + 'RectorPrefix202410\\Nette\\Utils\\UnknownImageFileException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\Validators' => $vendorDir . '/nette/utils/src/Utils/Validators.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\CiDetector' => $vendorDir . '/ondram/ci-detector/src/CiDetector.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\CiDetectorInterface' => $vendorDir . '/ondram/ci-detector/src/CiDetectorInterface.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AbstractCi' => $vendorDir . '/ondram/ci-detector/src/Ci/AbstractCi.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AppVeyor' => $vendorDir . '/ondram/ci-detector/src/Ci/AppVeyor.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AwsCodeBuild' => $vendorDir . '/ondram/ci-detector/src/Ci/AwsCodeBuild.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AzurePipelines' => $vendorDir . '/ondram/ci-detector/src/Ci/AzurePipelines.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Bamboo' => $vendorDir . '/ondram/ci-detector/src/Ci/Bamboo.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\BitbucketPipelines' => $vendorDir . '/ondram/ci-detector/src/Ci/BitbucketPipelines.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Buddy' => $vendorDir . '/ondram/ci-detector/src/Ci/Buddy.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\CiInterface' => $vendorDir . '/ondram/ci-detector/src/Ci/CiInterface.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Circle' => $vendorDir . '/ondram/ci-detector/src/Ci/Circle.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Codeship' => $vendorDir . '/ondram/ci-detector/src/Ci/Codeship.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Continuousphp' => $vendorDir . '/ondram/ci-detector/src/Ci/Continuousphp.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Drone' => $vendorDir . '/ondram/ci-detector/src/Ci/Drone.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\GitHubActions' => $vendorDir . '/ondram/ci-detector/src/Ci/GitHubActions.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\GitLab' => $vendorDir . '/ondram/ci-detector/src/Ci/GitLab.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Jenkins' => $vendorDir . '/ondram/ci-detector/src/Ci/Jenkins.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\SourceHut' => $vendorDir . '/ondram/ci-detector/src/Ci/SourceHut.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\TeamCity' => $vendorDir . '/ondram/ci-detector/src/Ci/TeamCity.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Travis' => $vendorDir . '/ondram/ci-detector/src/Ci/Travis.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Wercker' => $vendorDir . '/ondram/ci-detector/src/Ci/Wercker.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Env' => $vendorDir . '/ondram/ci-detector/src/Env.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Exception\\CiNotDetectedException' => $vendorDir . '/ondram/ci-detector/src/Exception/CiNotDetectedException.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\TrinaryLogic' => $vendorDir . '/ondram/ci-detector/src/TrinaryLogic.php', + 'RectorPrefix202410\\Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', + 'RectorPrefix202410\\Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', + 'RectorPrefix202410\\Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', + 'RectorPrefix202410\\Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php', + 'RectorPrefix202410\\Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php', + 'RectorPrefix202410\\Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/src/LoggerAwareInterface.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/src/LoggerAwareTrait.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/src/LoggerInterface.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/src/LoggerTrait.php', + 'RectorPrefix202410\\Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/src/NullLogger.php', + 'RectorPrefix202410\\Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php', + 'RectorPrefix202410\\Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php', + 'RectorPrefix202410\\Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php', + 'RectorPrefix202410\\React\\Cache\\ArrayCache' => $vendorDir . '/react/cache/src/ArrayCache.php', + 'RectorPrefix202410\\React\\Cache\\CacheInterface' => $vendorDir . '/react/cache/src/CacheInterface.php', + 'RectorPrefix202410\\React\\ChildProcess\\Process' => $vendorDir . '/react/child-process/src/Process.php', + 'RectorPrefix202410\\React\\Dns\\BadServerException' => $vendorDir . '/react/dns/src/BadServerException.php', + 'RectorPrefix202410\\React\\Dns\\Config\\Config' => $vendorDir . '/react/dns/src/Config/Config.php', + 'RectorPrefix202410\\React\\Dns\\Config\\HostsFile' => $vendorDir . '/react/dns/src/Config/HostsFile.php', + 'RectorPrefix202410\\React\\Dns\\Model\\Message' => $vendorDir . '/react/dns/src/Model/Message.php', + 'RectorPrefix202410\\React\\Dns\\Model\\Record' => $vendorDir . '/react/dns/src/Model/Record.php', + 'RectorPrefix202410\\React\\Dns\\Protocol\\BinaryDumper' => $vendorDir . '/react/dns/src/Protocol/BinaryDumper.php', + 'RectorPrefix202410\\React\\Dns\\Protocol\\Parser' => $vendorDir . '/react/dns/src/Protocol/Parser.php', + 'RectorPrefix202410\\React\\Dns\\Query\\CachingExecutor' => $vendorDir . '/react/dns/src/Query/CachingExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\CancellationException' => $vendorDir . '/react/dns/src/Query/CancellationException.php', + 'RectorPrefix202410\\React\\Dns\\Query\\CoopExecutor' => $vendorDir . '/react/dns/src/Query/CoopExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\ExecutorInterface' => $vendorDir . '/react/dns/src/Query/ExecutorInterface.php', + 'RectorPrefix202410\\React\\Dns\\Query\\FallbackExecutor' => $vendorDir . '/react/dns/src/Query/FallbackExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\HostsFileExecutor' => $vendorDir . '/react/dns/src/Query/HostsFileExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\Query' => $vendorDir . '/react/dns/src/Query/Query.php', + 'RectorPrefix202410\\React\\Dns\\Query\\RetryExecutor' => $vendorDir . '/react/dns/src/Query/RetryExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\SelectiveTransportExecutor' => $vendorDir . '/react/dns/src/Query/SelectiveTransportExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\TcpTransportExecutor' => $vendorDir . '/react/dns/src/Query/TcpTransportExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\TimeoutException' => $vendorDir . '/react/dns/src/Query/TimeoutException.php', + 'RectorPrefix202410\\React\\Dns\\Query\\TimeoutExecutor' => $vendorDir . '/react/dns/src/Query/TimeoutExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\UdpTransportExecutor' => $vendorDir . '/react/dns/src/Query/UdpTransportExecutor.php', + 'RectorPrefix202410\\React\\Dns\\RecordNotFoundException' => $vendorDir . '/react/dns/src/RecordNotFoundException.php', + 'RectorPrefix202410\\React\\Dns\\Resolver\\Factory' => $vendorDir . '/react/dns/src/Resolver/Factory.php', + 'RectorPrefix202410\\React\\Dns\\Resolver\\Resolver' => $vendorDir . '/react/dns/src/Resolver/Resolver.php', + 'RectorPrefix202410\\React\\Dns\\Resolver\\ResolverInterface' => $vendorDir . '/react/dns/src/Resolver/ResolverInterface.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtEvLoop' => $vendorDir . '/react/event-loop/src/ExtEvLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtEventLoop' => $vendorDir . '/react/event-loop/src/ExtEventLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtLibevLoop' => $vendorDir . '/react/event-loop/src/ExtLibevLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtLibeventLoop' => $vendorDir . '/react/event-loop/src/ExtLibeventLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtUvLoop' => $vendorDir . '/react/event-loop/src/ExtUvLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\Factory' => $vendorDir . '/react/event-loop/src/Factory.php', + 'RectorPrefix202410\\React\\EventLoop\\Loop' => $vendorDir . '/react/event-loop/src/Loop.php', + 'RectorPrefix202410\\React\\EventLoop\\LoopInterface' => $vendorDir . '/react/event-loop/src/LoopInterface.php', + 'RectorPrefix202410\\React\\EventLoop\\SignalsHandler' => $vendorDir . '/react/event-loop/src/SignalsHandler.php', + 'RectorPrefix202410\\React\\EventLoop\\StreamSelectLoop' => $vendorDir . '/react/event-loop/src/StreamSelectLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\Tick\\FutureTickQueue' => $vendorDir . '/react/event-loop/src/Tick/FutureTickQueue.php', + 'RectorPrefix202410\\React\\EventLoop\\TimerInterface' => $vendorDir . '/react/event-loop/src/TimerInterface.php', + 'RectorPrefix202410\\React\\EventLoop\\Timer\\Timer' => $vendorDir . '/react/event-loop/src/Timer/Timer.php', + 'RectorPrefix202410\\React\\EventLoop\\Timer\\Timers' => $vendorDir . '/react/event-loop/src/Timer/Timers.php', + 'RectorPrefix202410\\React\\Promise\\Deferred' => $vendorDir . '/react/promise/src/Deferred.php', + 'RectorPrefix202410\\React\\Promise\\Exception\\CompositeException' => $vendorDir . '/react/promise/src/Exception/CompositeException.php', + 'RectorPrefix202410\\React\\Promise\\Exception\\LengthException' => $vendorDir . '/react/promise/src/Exception/LengthException.php', + 'RectorPrefix202410\\React\\Promise\\Internal\\CancellationQueue' => $vendorDir . '/react/promise/src/Internal/CancellationQueue.php', + 'RectorPrefix202410\\React\\Promise\\Internal\\FulfilledPromise' => $vendorDir . '/react/promise/src/Internal/FulfilledPromise.php', + 'RectorPrefix202410\\React\\Promise\\Internal\\RejectedPromise' => $vendorDir . '/react/promise/src/Internal/RejectedPromise.php', + 'RectorPrefix202410\\React\\Promise\\Promise' => $vendorDir . '/react/promise/src/Promise.php', + 'RectorPrefix202410\\React\\Promise\\PromiseInterface' => $vendorDir . '/react/promise/src/PromiseInterface.php', + 'RectorPrefix202410\\React\\Socket\\Connection' => $vendorDir . '/react/socket/src/Connection.php', + 'RectorPrefix202410\\React\\Socket\\ConnectionInterface' => $vendorDir . '/react/socket/src/ConnectionInterface.php', + 'RectorPrefix202410\\React\\Socket\\Connector' => $vendorDir . '/react/socket/src/Connector.php', + 'RectorPrefix202410\\React\\Socket\\ConnectorInterface' => $vendorDir . '/react/socket/src/ConnectorInterface.php', + 'RectorPrefix202410\\React\\Socket\\DnsConnector' => $vendorDir . '/react/socket/src/DnsConnector.php', + 'RectorPrefix202410\\React\\Socket\\FdServer' => $vendorDir . '/react/socket/src/FdServer.php', + 'RectorPrefix202410\\React\\Socket\\FixedUriConnector' => $vendorDir . '/react/socket/src/FixedUriConnector.php', + 'RectorPrefix202410\\React\\Socket\\HappyEyeBallsConnectionBuilder' => $vendorDir . '/react/socket/src/HappyEyeBallsConnectionBuilder.php', + 'RectorPrefix202410\\React\\Socket\\HappyEyeBallsConnector' => $vendorDir . '/react/socket/src/HappyEyeBallsConnector.php', + 'RectorPrefix202410\\React\\Socket\\LimitingServer' => $vendorDir . '/react/socket/src/LimitingServer.php', + 'RectorPrefix202410\\React\\Socket\\SecureConnector' => $vendorDir . '/react/socket/src/SecureConnector.php', + 'RectorPrefix202410\\React\\Socket\\SecureServer' => $vendorDir . '/react/socket/src/SecureServer.php', + 'RectorPrefix202410\\React\\Socket\\Server' => $vendorDir . '/react/socket/src/Server.php', + 'RectorPrefix202410\\React\\Socket\\ServerInterface' => $vendorDir . '/react/socket/src/ServerInterface.php', + 'RectorPrefix202410\\React\\Socket\\SocketServer' => $vendorDir . '/react/socket/src/SocketServer.php', + 'RectorPrefix202410\\React\\Socket\\StreamEncryption' => $vendorDir . '/react/socket/src/StreamEncryption.php', + 'RectorPrefix202410\\React\\Socket\\TcpConnector' => $vendorDir . '/react/socket/src/TcpConnector.php', + 'RectorPrefix202410\\React\\Socket\\TcpServer' => $vendorDir . '/react/socket/src/TcpServer.php', + 'RectorPrefix202410\\React\\Socket\\TimeoutConnector' => $vendorDir . '/react/socket/src/TimeoutConnector.php', + 'RectorPrefix202410\\React\\Socket\\UnixConnector' => $vendorDir . '/react/socket/src/UnixConnector.php', + 'RectorPrefix202410\\React\\Socket\\UnixServer' => $vendorDir . '/react/socket/src/UnixServer.php', + 'RectorPrefix202410\\React\\Stream\\CompositeStream' => $vendorDir . '/react/stream/src/CompositeStream.php', + 'RectorPrefix202410\\React\\Stream\\DuplexResourceStream' => $vendorDir . '/react/stream/src/DuplexResourceStream.php', + 'RectorPrefix202410\\React\\Stream\\DuplexStreamInterface' => $vendorDir . '/react/stream/src/DuplexStreamInterface.php', + 'RectorPrefix202410\\React\\Stream\\ReadableResourceStream' => $vendorDir . '/react/stream/src/ReadableResourceStream.php', + 'RectorPrefix202410\\React\\Stream\\ReadableStreamInterface' => $vendorDir . '/react/stream/src/ReadableStreamInterface.php', + 'RectorPrefix202410\\React\\Stream\\ThroughStream' => $vendorDir . '/react/stream/src/ThroughStream.php', + 'RectorPrefix202410\\React\\Stream\\Util' => $vendorDir . '/react/stream/src/Util.php', + 'RectorPrefix202410\\React\\Stream\\WritableResourceStream' => $vendorDir . '/react/stream/src/WritableResourceStream.php', + 'RectorPrefix202410\\React\\Stream\\WritableStreamInterface' => $vendorDir . '/react/stream/src/WritableStreamInterface.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Attribute\\AsCommand' => $vendorDir . '/symfony/console/Attribute/AsCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CI\\GithubActionReporter' => $vendorDir . '/symfony/console/CI/GithubActionReporter.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Color' => $vendorDir . '/symfony/console/Color.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\CompleteCommand' => $vendorDir . '/symfony/console/Command/CompleteCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => $vendorDir . '/symfony/console/Command/DumpCompletionCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\LazyCommand' => $vendorDir . '/symfony/console/Command/LazyCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => $vendorDir . '/symfony/console/Command/SignalableCommandInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\TraceableCommand' => $vendorDir . '/symfony/console/Command/TraceableCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\CompletionInput' => $vendorDir . '/symfony/console/Completion/CompletionInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => $vendorDir . '/symfony/console/Completion/CompletionSuggestions.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/BashCompletionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => $vendorDir . '/symfony/console/Completion/Output/CompletionOutputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\FishCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/FishCompletionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\ZshCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/ZshCompletionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Suggestion' => $vendorDir . '/symfony/console/Completion/Suggestion.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Cursor' => $vendorDir . '/symfony/console/Cursor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\DataCollector\\CommandDataCollector' => $vendorDir . '/symfony/console/DataCollector/CommandDataCollector.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Debug\\CliRequest' => $vendorDir . '/symfony/console/Debug/CliRequest.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => $vendorDir . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\MissingInputException' => $vendorDir . '/symfony/console/Exception/MissingInputException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => $vendorDir . '/symfony/console/Exception/NamespaceNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\RunCommandFailedException' => $vendorDir . '/symfony/console/Exception/RunCommandFailedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatter.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatterStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\Dumper' => $vendorDir . '/symfony/console/Helper/Dumper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\OutputWrapper' => $vendorDir . '/symfony/console/Helper/OutputWrapper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableCellStyle' => $vendorDir . '/symfony/console/Helper/TableCellStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableRows' => $vendorDir . '/symfony/console/Helper/TableRows.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Messenger\\RunCommandContext' => $vendorDir . '/symfony/console/Messenger/RunCommandContext.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Messenger\\RunCommandMessage' => $vendorDir . '/symfony/console/Messenger/RunCommandMessage.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Messenger\\RunCommandMessageHandler' => $vendorDir . '/symfony/console/Messenger/RunCommandMessageHandler.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\AnsiColorMode' => $vendorDir . '/symfony/console/Output/AnsiColorMode.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => $vendorDir . '/symfony/console/Output/ConsoleSectionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => $vendorDir . '/symfony/console/Output/TrimmedBufferOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\SignalRegistry\\SignalMap' => $vendorDir . '/symfony/console/SignalRegistry/SignalMap.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => $vendorDir . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\SingleCommandApplication' => $vendorDir . '/symfony/console/SingleCommandApplication.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/filesystem/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => $vendorDir . '/symfony/filesystem/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Path' => $vendorDir . '/symfony/filesystem/Path.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $vendorDir . '/symfony/finder/Iterator/LazyIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => $vendorDir . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => $vendorDir . '/symfony/process/Exception/ProcessSignaledException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\RunProcessFailedException' => $vendorDir . '/symfony/process/Exception/RunProcessFailedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\InputStream' => $vendorDir . '/symfony/process/InputStream.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Messenger\\RunProcessContext' => $vendorDir . '/symfony/process/Messenger/RunProcessContext.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Messenger\\RunProcessMessage' => $vendorDir . '/symfony/process/Messenger/RunProcessMessage.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Messenger\\RunProcessMessageHandler' => $vendorDir . '/symfony/process/Messenger/RunProcessMessageHandler.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\PhpSubprocess' => $vendorDir . '/symfony/process/PhpSubprocess.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceCollectionInterface' => $vendorDir . '/symfony/service-contracts/ServiceCollectionInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $vendorDir . '/symfony/service-contracts/ServiceLocatorTrait.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceMethodsSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceMethodsSubscriberTrait.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\CommandLine\\WorkerCommandLineFactory' => $vendorDir . '/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Contract\\SerializableInterface' => $vendorDir . '/symplify/easy-parallel/src/Contract/SerializableInterface.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\CpuCoreCountProvider' => $vendorDir . '/symplify/easy-parallel/src/CpuCoreCountProvider.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\Action' => $vendorDir . '/symplify/easy-parallel/src/Enum/Action.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\Content' => $vendorDir . '/symplify/easy-parallel/src/Enum/Content.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\ReactCommand' => $vendorDir . '/symplify/easy-parallel/src/Enum/ReactCommand.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\ReactEvent' => $vendorDir . '/symplify/easy-parallel/src/Enum/ReactEvent.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Exception\\ParallelShouldNotHappenException' => $vendorDir . '/symplify/easy-parallel/src/Exception/ParallelShouldNotHappenException.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Reflection\\CommandFromReflectionFactory' => $vendorDir . '/symplify/easy-parallel/src/Reflection/CommandFromReflectionFactory.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ScheduleFactory' => $vendorDir . '/symplify/easy-parallel/src/ScheduleFactory.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\EasyParallelConfig' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/EasyParallelConfig.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\ParallelProcess' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/ParallelProcess.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\ProcessPool' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/ProcessPool.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\Schedule' => $vendorDir . '/symplify/easy-parallel/src/ValueObject/Schedule.php', + 'RectorPrefix202410\\Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php', + 'RectorPrefix202410\\Webmozart\\Assert\\InvalidArgumentException' => $vendorDir . '/webmozart/assert/src/InvalidArgumentException.php', + 'RectorPrefix202410\\Webmozart\\Assert\\Mixin' => $vendorDir . '/webmozart/assert/src/Mixin.php', 'Rector\\Application\\ApplicationFileProcessor' => $baseDir . '/src/Application/ApplicationFileProcessor.php', 'Rector\\Application\\ChangedNodeScopeRefresher' => $baseDir . '/src/Application/ChangedNodeScopeRefresher.php', 'Rector\\Application\\FileProcessor' => $baseDir . '/src/Application/FileProcessor.php', + 'Rector\\Application\\Provider\\CurrentFileProvider' => $baseDir . '/src/Application/Provider/CurrentFileProvider.php', 'Rector\\Application\\VersionResolver' => $baseDir . '/src/Application/VersionResolver.php', 'Rector\\Arguments\\ArgumentDefaultValueReplacer' => $baseDir . '/rules/Arguments/ArgumentDefaultValueReplacer.php', 'Rector\\Arguments\\Contract\\ReplaceArgumentDefaultValueInterface' => $baseDir . '/rules/Arguments/Contract/ReplaceArgumentDefaultValueInterface.php', @@ -1042,6 +1062,8 @@ 'Rector\\BetterPhpDocParser\\ValueObject\\Type\\SpacingAwareCallableTypeNode' => $baseDir . '/src/BetterPhpDocParser/ValueObject/Type/SpacingAwareCallableTypeNode.php', 'Rector\\Bootstrap\\ExtensionConfigResolver' => $baseDir . '/src/Bootstrap/ExtensionConfigResolver.php', 'Rector\\Bootstrap\\RectorConfigsResolver' => $baseDir . '/src/Bootstrap/RectorConfigsResolver.php', + 'Rector\\Bridge\\SetProviderCollector' => $baseDir . '/src/Bridge/SetProviderCollector.php', + 'Rector\\Bridge\\SetRectorsResolver' => $baseDir . '/src/Bridge/SetRectorsResolver.php', 'Rector\\Caching\\Cache' => $baseDir . '/src/Caching/Cache.php', 'Rector\\Caching\\CacheFactory' => $baseDir . '/src/Caching/CacheFactory.php', 'Rector\\Caching\\Config\\FileHashComputer' => $baseDir . '/src/Caching/Config/FileHashComputer.php', @@ -1053,8 +1075,11 @@ 'Rector\\Caching\\ValueObject\\CacheItem' => $baseDir . '/src/Caching/ValueObject/CacheItem.php', 'Rector\\Caching\\ValueObject\\Storage\\FileCacheStorage' => $baseDir . '/src/Caching/ValueObject/Storage/FileCacheStorage.php', 'Rector\\Caching\\ValueObject\\Storage\\MemoryCacheStorage' => $baseDir . '/src/Caching/ValueObject/Storage/MemoryCacheStorage.php', - 'Rector\\ChangesReporting\\Annotation\\AnnotationExtractor' => $baseDir . '/src/ChangesReporting/Annotation/AnnotationExtractor.php', - 'Rector\\ChangesReporting\\Annotation\\RectorsChangelogResolver' => $baseDir . '/src/ChangesReporting/Annotation/RectorsChangelogResolver.php', + 'Rector\\Carbon\\NodeFactory\\CarbonCallFactory' => $baseDir . '/rules/Carbon/NodeFactory/CarbonCallFactory.php', + 'Rector\\Carbon\\Rector\\FuncCall\\DateFuncCallToCarbonRector' => $baseDir . '/rules/Carbon/Rector/FuncCall/DateFuncCallToCarbonRector.php', + 'Rector\\Carbon\\Rector\\FuncCall\\TimeFuncCallToCarbonRector' => $baseDir . '/rules/Carbon/Rector/FuncCall/TimeFuncCallToCarbonRector.php', + 'Rector\\Carbon\\Rector\\MethodCall\\DateTimeMethodCallToCarbonRector' => $baseDir . '/rules/Carbon/Rector/MethodCall/DateTimeMethodCallToCarbonRector.php', + 'Rector\\Carbon\\Rector\\New_\\DateTimeInstanceToCarbonRector' => $baseDir . '/rules/Carbon/Rector/New_/DateTimeInstanceToCarbonRector.php', 'Rector\\ChangesReporting\\Contract\\Output\\OutputFormatterInterface' => $baseDir . '/src/ChangesReporting/Contract/Output/OutputFormatterInterface.php', 'Rector\\ChangesReporting\\Output\\ConsoleOutputFormatter' => $baseDir . '/src/ChangesReporting/Output/ConsoleOutputFormatter.php', 'Rector\\ChangesReporting\\Output\\JsonOutputFormatter' => $baseDir . '/src/ChangesReporting/Output/JsonOutputFormatter.php', @@ -1069,7 +1094,6 @@ 'Rector\\CodeQuality\\NodeFactory\\MissingPropertiesFactory' => $baseDir . '/rules/CodeQuality/NodeFactory/MissingPropertiesFactory.php', 'Rector\\CodeQuality\\NodeFactory\\PropertyTypeDecorator' => $baseDir . '/rules/CodeQuality/NodeFactory/PropertyTypeDecorator.php', 'Rector\\CodeQuality\\NodeManipulator\\ExprBoolCaster' => $baseDir . '/rules/CodeQuality/NodeManipulator/ExprBoolCaster.php', - 'Rector\\CodeQuality\\Rector\\Array_\\CallableThisArrayToAnonymousFunctionRector' => $baseDir . '/rules/CodeQuality/Rector/Array_/CallableThisArrayToAnonymousFunctionRector.php', 'Rector\\CodeQuality\\Rector\\Assign\\CombinedAssignRector' => $baseDir . '/rules/CodeQuality/Rector/Assign/CombinedAssignRector.php', 'Rector\\CodeQuality\\Rector\\BooleanAnd\\RemoveUselessIsObjectCheckRector' => $baseDir . '/rules/CodeQuality/Rector/BooleanAnd/RemoveUselessIsObjectCheckRector.php', 'Rector\\CodeQuality\\Rector\\BooleanAnd\\SimplifyEmptyArrayCheckRector' => $baseDir . '/rules/CodeQuality/Rector/BooleanAnd/SimplifyEmptyArrayCheckRector.php', @@ -1095,13 +1119,10 @@ 'Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector' => $baseDir . '/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php', 'Rector\\CodeQuality\\Rector\\Foreach_\\UnusedForeachValueToArrayKeysRector' => $baseDir . '/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\ArrayMergeOfNonArraysToSimpleArrayRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/ArrayMergeOfNonArraysToSimpleArrayRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\BoolvalToTypeCastRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/BoolvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\CallUserFuncWithArrowFunctionToInlineRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\ChangeArrayPushToArrayAssignRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/ChangeArrayPushToArrayAssignRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\CompactToVariablesRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/CompactToVariablesRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\FloatvalToTypeCastRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/FloatvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\InlineIsAInstanceOfRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/InlineIsAInstanceOfRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\IntvalToTypeCastRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/IntvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\IsAWithStringWithThirdArgumentRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/IsAWithStringWithThirdArgumentRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\RemoveSoleValueSprintfRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/RemoveSoleValueSprintfRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\SetTypeToCastRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php', @@ -1110,12 +1131,10 @@ 'Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyRegexPatternRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/SimplifyRegexPatternRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyStrposLowerRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/SimplifyStrposLowerRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\SingleInArrayToCompareRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/SingleInArrayToCompareRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\StrvalToTypeCastRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/StrvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\UnwrapSprintfOneArgumentRector' => $baseDir . '/rules/CodeQuality/Rector/FuncCall/UnwrapSprintfOneArgumentRector.php', 'Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector' => $baseDir . '/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\BooleanNotIdenticalToNotIdenticalRector' => $baseDir . '/rules/CodeQuality/Rector/Identical/BooleanNotIdenticalToNotIdenticalRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\FlipTypeControlToUseExclusiveTypeRector' => $baseDir . '/rules/CodeQuality/Rector/Identical/FlipTypeControlToUseExclusiveTypeRector.php', - 'Rector\\CodeQuality\\Rector\\Identical\\GetClassToInstanceOfRector' => $baseDir . '/rules/CodeQuality/Rector/Identical/GetClassToInstanceOfRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\SimplifyArraySearchRector' => $baseDir . '/rules/CodeQuality/Rector/Identical/SimplifyArraySearchRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\SimplifyBoolIdenticalTrueRector' => $baseDir . '/rules/CodeQuality/Rector/Identical/SimplifyBoolIdenticalTrueRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\SimplifyConditionsRector' => $baseDir . '/rules/CodeQuality/Rector/Identical/SimplifyConditionsRector.php', @@ -1176,15 +1195,16 @@ 'Rector\\CodingStyle\\Rector\\Closure\\StaticClosureRector' => $baseDir . '/rules/CodingStyle/Rector/Closure/StaticClosureRector.php', 'Rector\\CodingStyle\\Rector\\Encapsed\\EncapsedStringsToSprintfRector' => $baseDir . '/rules/CodingStyle/Rector/Encapsed/EncapsedStringsToSprintfRector.php', 'Rector\\CodingStyle\\Rector\\Encapsed\\WrapEncapsedVariableInCurlyBracesRector' => $baseDir . '/rules/CodingStyle/Rector/Encapsed/WrapEncapsedVariableInCurlyBracesRector.php', + 'Rector\\CodingStyle\\Rector\\Foreach_\\MultiDimensionalArrayToArrayDestructRector' => $baseDir . '/rules/CodingStyle/Rector/Foreach_/MultiDimensionalArrayToArrayDestructRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\ArraySpreadInsteadOfArrayMergeRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/ArraySpreadInsteadOfArrayMergeRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\CallUserFuncArrayToVariadicRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/CallUserFuncArrayToVariadicRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\CallUserFuncToMethodCallRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/CallUserFuncToMethodCallRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\ConsistentImplodeRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/ConsistentImplodeRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\CountArrayToEmptyArrayComparisonRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/CountArrayToEmptyArrayComparisonRector.php', + 'Rector\\CodingStyle\\Rector\\FuncCall\\FunctionFirstClassCallableRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\StrictArraySearchRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/StrictArraySearchRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\VersionCompareFuncCallToConstantRector' => $baseDir . '/rules/CodingStyle/Rector/FuncCall/VersionCompareFuncCallToConstantRector.php', 'Rector\\CodingStyle\\Rector\\If_\\NullableCompareToNullRector' => $baseDir . '/rules/CodingStyle/Rector/If_/NullableCompareToNullRector.php', - 'Rector\\CodingStyle\\Rector\\Plus\\UseIncrementAssignRector' => $baseDir . '/rules/CodingStyle/Rector/Plus/UseIncrementAssignRector.php', 'Rector\\CodingStyle\\Rector\\PostInc\\PostIncDecToPreIncDecRector' => $baseDir . '/rules/CodingStyle/Rector/PostInc/PostIncDecToPreIncDecRector.php', 'Rector\\CodingStyle\\Rector\\Property\\SplitGroupedPropertiesRector' => $baseDir . '/rules/CodingStyle/Rector/Property/SplitGroupedPropertiesRector.php', 'Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector' => $baseDir . '/rules/CodingStyle/Rector/Stmt/NewlineAfterStatementRector.php', @@ -1199,12 +1219,16 @@ 'Rector\\Comments\\NodeDocBlock\\DocBlockUpdater' => $baseDir . '/src/Comments/NodeDocBlock/DocBlockUpdater.php', 'Rector\\Comments\\NodeTraverser\\CommentRemovingNodeTraverser' => $baseDir . '/src/Comments/NodeTraverser/CommentRemovingNodeTraverser.php', 'Rector\\Comments\\NodeVisitor\\CommentRemovingNodeVisitor' => $baseDir . '/src/Comments/NodeVisitor/CommentRemovingNodeVisitor.php', + 'Rector\\Composer\\InstalledPackageResolver' => $baseDir . '/src/Composer/InstalledPackageResolver.php', + 'Rector\\Composer\\ValueObject\\InstalledPackage' => $baseDir . '/src/Composer/ValueObject/InstalledPackage.php', + 'Rector\\Config\\Level\\CodeQualityLevel' => $baseDir . '/src/Config/Level/CodeQualityLevel.php', 'Rector\\Config\\Level\\DeadCodeLevel' => $baseDir . '/src/Config/Level/DeadCodeLevel.php', 'Rector\\Config\\Level\\TypeDeclarationLevel' => $baseDir . '/src/Config/Level/TypeDeclarationLevel.php', 'Rector\\Config\\RectorConfig' => $baseDir . '/src/Config/RectorConfig.php', 'Rector\\Config\\RegisteredService' => $baseDir . '/src/Config/RegisteredService.php', 'Rector\\Configuration\\ConfigInitializer' => $baseDir . '/src/Configuration/ConfigInitializer.php', 'Rector\\Configuration\\ConfigurationFactory' => $baseDir . '/src/Configuration/ConfigurationFactory.php', + 'Rector\\Configuration\\Deprecation\\Contract\\DeprecatedInterface' => $baseDir . '/src/Configuration/Deprecation/Contract/DeprecatedInterface.php', 'Rector\\Configuration\\Levels\\LevelRulesResolver' => $baseDir . '/src/Configuration/Levels/LevelRulesResolver.php', 'Rector\\Configuration\\Option' => $baseDir . '/src/Configuration/Option.php', 'Rector\\Configuration\\Parameter\\SimpleParameterProvider' => $baseDir . '/src/Configuration/Parameter/SimpleParameterProvider.php', @@ -1213,7 +1237,6 @@ 'Rector\\Configuration\\RenamedClassesDataCollector' => $baseDir . '/src/Configuration/RenamedClassesDataCollector.php', 'Rector\\Configuration\\VendorMissAnalyseGuard' => $baseDir . '/src/Configuration/VendorMissAnalyseGuard.php', 'Rector\\Console\\Command\\CustomRuleCommand' => $baseDir . '/src/Console/Command/CustomRuleCommand.php', - 'Rector\\Console\\Command\\DetectNodeCommand' => $baseDir . '/src/Console/Command/DetectNodeCommand.php', 'Rector\\Console\\Command\\ListRulesCommand' => $baseDir . '/src/Console/Command/ListRulesCommand.php', 'Rector\\Console\\Command\\ProcessCommand' => $baseDir . '/src/Console/Command/ProcessCommand.php', 'Rector\\Console\\Command\\SetupCICommand' => $baseDir . '/src/Console/Command/SetupCICommand.php', @@ -1222,6 +1245,7 @@ 'Rector\\Console\\ExitCode' => $baseDir . '/src/Console/ExitCode.php', 'Rector\\Console\\Formatter\\ColorConsoleDiffFormatter' => $baseDir . '/src/Console/Formatter/ColorConsoleDiffFormatter.php', 'Rector\\Console\\Formatter\\ConsoleDiffer' => $baseDir . '/src/Console/Formatter/ConsoleDiffer.php', + 'Rector\\Console\\Notifier' => $baseDir . '/src/Console/Notifier.php', 'Rector\\Console\\Output\\OutputFormatterCollector' => $baseDir . '/src/Console/Output/OutputFormatterCollector.php', 'Rector\\Console\\ProcessConfigureDecorator' => $baseDir . '/src/Console/ProcessConfigureDecorator.php', 'Rector\\Console\\Style\\RectorStyle' => $baseDir . '/src/Console/Style/RectorStyle.php', @@ -1243,6 +1267,7 @@ 'Rector\\DeadCode\\NodeAnalyzer\\SafeLeftTypeBooleanAndOrAnalyzer' => $baseDir . '/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php', 'Rector\\DeadCode\\NodeAnalyzer\\UsedVariableNameAnalyzer' => $baseDir . '/rules/DeadCode/NodeAnalyzer/UsedVariableNameAnalyzer.php', 'Rector\\DeadCode\\NodeCollector\\UnusedParameterResolver' => $baseDir . '/rules/DeadCode/NodeCollector/UnusedParameterResolver.php', + 'Rector\\DeadCode\\NodeManipulator\\ClassMethodParamRemover' => $baseDir . '/rules/DeadCode/NodeManipulator/ClassMethodParamRemover.php', 'Rector\\DeadCode\\NodeManipulator\\ControllerClassMethodManipulator' => $baseDir . '/rules/DeadCode/NodeManipulator/ControllerClassMethodManipulator.php', 'Rector\\DeadCode\\NodeManipulator\\CountManipulator' => $baseDir . '/rules/DeadCode/NodeManipulator/CountManipulator.php', 'Rector\\DeadCode\\NodeManipulator\\LivingCodeManipulator' => $baseDir . '/rules/DeadCode/NodeManipulator/LivingCodeManipulator.php', @@ -1267,6 +1292,7 @@ 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodParameterRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPromotedPropertyRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php', + 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPublicMethodParameterRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPublicMethodParameterRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessParamTagRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUselessParamTagRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnExprInConstructRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUselessReturnExprInConstructRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnTagRector' => $baseDir . '/rules/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector.php', @@ -1332,10 +1358,14 @@ 'Rector\\Doctrine\\CodeQuality\\Contract\\ClassAttributeTransformerInterface' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Contract/ClassAttributeTransformerInterface.php', 'Rector\\Doctrine\\CodeQuality\\Contract\\PropertyAttributeTransformerInterface' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Contract/PropertyAttributeTransformerInterface.php', 'Rector\\Doctrine\\CodeQuality\\EntityMappingResolver' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/EntityMappingResolver.php', + 'Rector\\Doctrine\\CodeQuality\\Enum\\CollectionMapping' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Enum/CollectionMapping.php', + 'Rector\\Doctrine\\CodeQuality\\Enum\\DoctrineClass' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Enum/DoctrineClass.php', 'Rector\\Doctrine\\CodeQuality\\Enum\\EntityMappingKey' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Enum/EntityMappingKey.php', - 'Rector\\Doctrine\\CodeQuality\\Enum\\ToManyMappings' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Enum/ToManyMappings.php', + 'Rector\\Doctrine\\CodeQuality\\Enum\\OdmMappingKey' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Enum/OdmMappingKey.php', 'Rector\\Doctrine\\CodeQuality\\Helper\\NodeValueNormalizer' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Helper/NodeValueNormalizer.php', 'Rector\\Doctrine\\CodeQuality\\NodeFactory\\AttributeFactory' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/NodeFactory/AttributeFactory.php', + 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector.php', + 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\ExplicitRelationCollectionRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\InitializeDefaultEntityCollectionRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\MoveCurrentDateTimeDefaultInEntityToConstructorRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/MoveCurrentDateTimeDefaultInEntityToConstructorRector.php', @@ -1344,21 +1374,24 @@ 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\CorrectDefaultTypesOnEntityPropertyRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/CorrectDefaultTypesOnEntityPropertyRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\ImproveDoctrineCollectionDocTypeInEntityRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/ImproveDoctrineCollectionDocTypeInEntityRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\MakeEntityDateTimePropertyDateTimeInterfaceRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/MakeEntityDateTimePropertyDateTimeInterfaceRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\OrderByKeyToClassConstRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/OrderByKeyToClassConstRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromColumnTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromColumnTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromDoctrineCollectionRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToManyRelationTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToManyRelationTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToOneRelationTypeRector' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php', + 'Rector\\Doctrine\\CodeQuality\\SetterCollectionResolver' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php', 'Rector\\Doctrine\\CodeQuality\\Utils\\CaseStringHelper' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/Utils/CaseStringHelper.php', 'Rector\\Doctrine\\CodeQuality\\ValueObject\\EntityMapping' => $vendorDir . '/rector/rector-doctrine/rules/CodeQuality/ValueObject/EntityMapping.php', + 'Rector\\Doctrine\\Collection22\\Rector\\CriteriaOrderingConstantsDeprecationRector' => $vendorDir . '/rector/rector-doctrine/rules/Collection22/Rector/CriteriaOrderingConstantsDeprecationRector.php', 'Rector\\Doctrine\\Dbal211\\Rector\\MethodCall\\ExtractArrayArgOnQueryBuilderSelectRector' => $vendorDir . '/rector/rector-doctrine/rules/Dbal211/Rector/MethodCall/ExtractArrayArgOnQueryBuilderSelectRector.php', 'Rector\\Doctrine\\Dbal211\\Rector\\MethodCall\\ReplaceFetchAllMethodCallRector' => $vendorDir . '/rector/rector-doctrine/rules/Dbal211/Rector/MethodCall/ReplaceFetchAllMethodCallRector.php', 'Rector\\Doctrine\\Dbal40\\Rector\\MethodCall\\ChangeCompositeExpressionAddMultipleWithWithRector' => $vendorDir . '/rector/rector-doctrine/rules/Dbal40/Rector/MethodCall/ChangeCompositeExpressionAddMultipleWithWithRector.php', 'Rector\\Doctrine\\Enum\\MappingClass' => $vendorDir . '/rector/rector-doctrine/src/Enum/MappingClass.php', + 'Rector\\Doctrine\\Enum\\OdmMappingClass' => $vendorDir . '/rector/rector-doctrine/src/Enum/OdmMappingClass.php', 'Rector\\Doctrine\\NodeAnalyzer\\AttributeFinder' => $vendorDir . '/rector/rector-doctrine/src/NodeAnalyzer/AttributeFinder.php', 'Rector\\Doctrine\\NodeAnalyzer\\AttrinationFinder' => $vendorDir . '/rector/rector-doctrine/src/NodeAnalyzer/AttrinationFinder.php', 'Rector\\Doctrine\\NodeAnalyzer\\ConstructorAssignPropertyAnalyzer' => $vendorDir . '/rector/rector-doctrine/src/NodeAnalyzer/ConstructorAssignPropertyAnalyzer.php', 'Rector\\Doctrine\\NodeAnalyzer\\DoctrineEntityDetector' => $vendorDir . '/rector/rector-doctrine/src/NodeAnalyzer/DoctrineEntityDetector.php', + 'Rector\\Doctrine\\NodeAnalyzer\\MethodUniqueReturnedPropertyResolver' => $vendorDir . '/rector/rector-doctrine/src/NodeAnalyzer/MethodUniqueReturnedPropertyResolver.php', 'Rector\\Doctrine\\NodeAnalyzer\\TargetEntityResolver' => $vendorDir . '/rector/rector-doctrine/src/NodeAnalyzer/TargetEntityResolver.php', 'Rector\\Doctrine\\NodeFactory\\ArrayCollectionAssignFactory' => $vendorDir . '/rector/rector-doctrine/src/NodeFactory/ArrayCollectionAssignFactory.php', 'Rector\\Doctrine\\NodeFactory\\ValueAssignFactory' => $vendorDir . '/rector/rector-doctrine/src/NodeFactory/ValueAssignFactory.php', @@ -1372,10 +1405,10 @@ 'Rector\\Doctrine\\PhpDocParser\\DoctrineDocBlockResolver' => $vendorDir . '/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php', 'Rector\\Doctrine\\PhpDoc\\ShortClassExpander' => $vendorDir . '/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php', 'Rector\\Doctrine\\Set\\DoctrineSetList' => $vendorDir . '/rector/rector-doctrine/src/Set/DoctrineSetList.php', + 'Rector\\Doctrine\\Set\\SetProvider\\DoctrineSetProvider' => $vendorDir . '/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php', 'Rector\\Doctrine\\TypeAnalyzer\\CollectionTypeFactory' => $vendorDir . '/rector/rector-doctrine/src/TypeAnalyzer/CollectionTypeFactory.php', 'Rector\\Doctrine\\TypeAnalyzer\\CollectionTypeResolver' => $vendorDir . '/rector/rector-doctrine/src/TypeAnalyzer/CollectionTypeResolver.php', 'Rector\\Doctrine\\TypeAnalyzer\\CollectionVarTagValueNodeResolver' => $vendorDir . '/rector/rector-doctrine/src/TypeAnalyzer/CollectionVarTagValueNodeResolver.php', - 'Rector\\Doctrine\\TypeAnalyzer\\DoctrineCollectionTypeAnalyzer' => $vendorDir . '/rector/rector-doctrine/src/TypeAnalyzer/DoctrineCollectionTypeAnalyzer.php', 'Rector\\DowngradePhp72\\NodeAnalyzer\\BuiltInMethodAnalyzer' => $vendorDir . '/rector/rector-downgrade-php/rules/DowngradePhp72/NodeAnalyzer/BuiltInMethodAnalyzer.php', 'Rector\\DowngradePhp72\\NodeAnalyzer\\OverrideFromAnonymousClassMethodAnalyzer' => $vendorDir . '/rector/rector-downgrade-php/rules/DowngradePhp72/NodeAnalyzer/OverrideFromAnonymousClassMethodAnalyzer.php', 'Rector\\DowngradePhp72\\NodeAnalyzer\\RegexFuncAnalyzer' => $vendorDir . '/rector/rector-downgrade-php/rules/DowngradePhp72/NodeAnalyzer/RegexFuncAnalyzer.php', @@ -1468,12 +1501,8 @@ 'Rector\\DowngradePhp82\\Rector\\Class_\\DowngradeReadonlyClassRector' => $vendorDir . '/rector/rector-downgrade-php/rules/DowngradePhp82/Rector/Class_/DowngradeReadonlyClassRector.php', 'Rector\\DowngradePhp82\\Rector\\FunctionLike\\DowngradeStandaloneNullTrueFalseReturnTypeRector' => $vendorDir . '/rector/rector-downgrade-php/rules/DowngradePhp82/Rector/FunctionLike/DowngradeStandaloneNullTrueFalseReturnTypeRector.php', 'Rector\\DowngradePhp83\\Rector\\ClassConst\\DowngradeTypedClassConstRector' => $vendorDir . '/rector/rector-downgrade-php/rules/DowngradePhp83/Rector/ClassConst/DowngradeTypedClassConstRector.php', - 'Rector\\EarlyReturn\\NodeAnalyzer\\IfAndAnalyzer' => $baseDir . '/rules/EarlyReturn/NodeAnalyzer/IfAndAnalyzer.php', - 'Rector\\EarlyReturn\\NodeAnalyzer\\SimpleScalarAnalyzer' => $baseDir . '/rules/EarlyReturn/NodeAnalyzer/SimpleScalarAnalyzer.php', - 'Rector\\EarlyReturn\\NodeFactory\\InvertedIfFactory' => $baseDir . '/rules/EarlyReturn/NodeFactory/InvertedIfFactory.php', 'Rector\\EarlyReturn\\NodeTransformer\\ConditionInverter' => $baseDir . '/rules/EarlyReturn/NodeTransformer/ConditionInverter.php', 'Rector\\EarlyReturn\\Rector\\Foreach_\\ChangeNestedForeachIfsToEarlyContinueRector' => $baseDir . '/rules/EarlyReturn/Rector/Foreach_/ChangeNestedForeachIfsToEarlyContinueRector.php', - 'Rector\\EarlyReturn\\Rector\\If_\\ChangeAndIfToEarlyReturnRector' => $baseDir . '/rules/EarlyReturn/Rector/If_/ChangeAndIfToEarlyReturnRector.php', 'Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector' => $baseDir . '/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php', 'Rector\\EarlyReturn\\Rector\\If_\\ChangeNestedIfsToEarlyReturnRector' => $baseDir . '/rules/EarlyReturn/Rector/If_/ChangeNestedIfsToEarlyReturnRector.php', 'Rector\\EarlyReturn\\Rector\\If_\\ChangeOrIfContinueToMultiContinueRector' => $baseDir . '/rules/EarlyReturn/Rector/If_/ChangeOrIfContinueToMultiContinueRector.php', @@ -1484,7 +1513,6 @@ 'Rector\\EarlyReturn\\ValueObject\\BareSingleAssignIf' => $baseDir . '/rules/EarlyReturn/ValueObject/BareSingleAssignIf.php', 'Rector\\Enum\\JsonConstant' => $vendorDir . '/rector/rector-downgrade-php/src/Enum/JsonConstant.php', 'Rector\\Enum\\ObjectReference' => $baseDir . '/src/Enum/ObjectReference.php', - 'Rector\\Error\\ExceptionCorrector' => $baseDir . '/src/Error/ExceptionCorrector.php', 'Rector\\Exception\\Cache\\CachingException' => $baseDir . '/src/Exception/Cache/CachingException.php', 'Rector\\Exception\\Configuration\\InvalidConfigurationException' => $baseDir . '/src/Exception/Configuration/InvalidConfigurationException.php', 'Rector\\Exception\\NotImplementedYetException' => $baseDir . '/src/Exception/NotImplementedYetException.php', @@ -1504,9 +1532,6 @@ 'Rector\\Naming\\AssignVariableNameResolver\\NewAssignVariableNameResolver' => $baseDir . '/rules/Naming/AssignVariableNameResolver/NewAssignVariableNameResolver.php', 'Rector\\Naming\\AssignVariableNameResolver\\PropertyFetchAssignVariableNameResolver' => $baseDir . '/rules/Naming/AssignVariableNameResolver/PropertyFetchAssignVariableNameResolver.php', 'Rector\\Naming\\Contract\\AssignVariableNameResolverInterface' => $baseDir . '/rules/Naming/Contract/AssignVariableNameResolverInterface.php', - 'Rector\\Naming\\Contract\\RenameParamValueObjectInterface' => $baseDir . '/rules/Naming/Contract/RenameParamValueObjectInterface.php', - 'Rector\\Naming\\Contract\\RenamePropertyValueObjectInterface' => $baseDir . '/rules/Naming/Contract/RenamePropertyValueObjectInterface.php', - 'Rector\\Naming\\Contract\\RenameValueObjectInterface' => $baseDir . '/rules/Naming/Contract/RenameValueObjectInterface.php', 'Rector\\Naming\\ExpectedNameResolver\\InflectorSingularResolver' => $baseDir . '/rules/Naming/ExpectedNameResolver/InflectorSingularResolver.php', 'Rector\\Naming\\ExpectedNameResolver\\MatchParamTypeExpectedNameResolver' => $baseDir . '/rules/Naming/ExpectedNameResolver/MatchParamTypeExpectedNameResolver.php', 'Rector\\Naming\\ExpectedNameResolver\\MatchPropertyTypeExpectedNameResolver' => $baseDir . '/rules/Naming/ExpectedNameResolver/MatchPropertyTypeExpectedNameResolver.php', @@ -1618,7 +1643,7 @@ 'Rector\\NodeTypeResolver\\NodeTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\CastTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\ClassAndInterfaceTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php', - 'Rector\\NodeTypeResolver\\NodeTypeResolver\\ClassMethodOrClassConstTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php', + 'Rector\\NodeTypeResolver\\NodeTypeResolver\\ClassConstFetchTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/ClassConstFetchTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\IdentifierTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/IdentifierTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\NameTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\NewTypeResolver' => $baseDir . '/src/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php', @@ -1665,7 +1690,6 @@ 'Rector\\PHPStanStaticTypeMapper\\Enum\\TypeKind' => $baseDir . '/src/PHPStanStaticTypeMapper/Enum/TypeKind.php', 'Rector\\PHPStanStaticTypeMapper\\PHPStanStaticTypeMapper' => $baseDir . '/src/PHPStanStaticTypeMapper/PHPStanStaticTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeAnalyzer\\UnionTypeAnalyzer' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeAnalyzer.php', - 'Rector\\PHPStanStaticTypeMapper\\TypeAnalyzer\\UnionTypeCommonTypeNarrower' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeCommonTypeNarrower.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\AccessoryLiteralStringTypeMapper' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeMapper/AccessoryLiteralStringTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\AccessoryNonEmptyStringTypeMapper' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeMapper/AccessoryNonEmptyStringTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\AccessoryNonFalsyStringTypeMapper' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeMapper/AccessoryNonFalsyStringTypeMapper.php', @@ -1704,8 +1728,6 @@ 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\UnionTypeMapper' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\VoidTypeMapper' => $baseDir . '/src/PHPStanStaticTypeMapper/TypeMapper/VoidTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\Utils\\TypeUnwrapper' => $baseDir . '/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php', - 'Rector\\PHPStanStaticTypeMapper\\ValueObject\\UnionTypeAnalysis' => $baseDir . '/src/PHPStanStaticTypeMapper/ValueObject/UnionTypeAnalysis.php', - 'Rector\\PHPStan\\NodeVisitor\\ExprScopeFromStmtNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/ExprScopeFromStmtNodeVisitor.php', 'Rector\\PHPStan\\NodeVisitor\\UnreachableStatementNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php', 'Rector\\PHPStan\\NodeVisitor\\WrappedNodeRestoringNodeVisitor' => $baseDir . '/src/PHPStan/NodeVisitor/WrappedNodeRestoringNodeVisitor.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DataProviderAnnotationToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php', @@ -1714,16 +1736,21 @@ 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\AnnotationWithValueToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/Class_/AnnotationWithValueToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\CoversAnnotationWithValueToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/Class_/CoversAnnotationWithValueToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\TicketAnnotationToAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/Class_/TicketAnnotationToAttributeRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\CreateMockToAnonymousClassRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\DataProviderArrayItemsNewLinedRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/DataProviderArrayItemsNewLinedRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\RemoveEmptyTestMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/RemoveEmptyTestMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\ReplaceTestAnnotationWithPrefixedFunctionRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/ReplaceTestAnnotationWithPrefixedFunctionRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddCoversClassAttributeRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddCoversClassAttributeRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddParentSetupCallOnSetupRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddParentSetupCallOnSetupRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddSeeTestAnnotationRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\ConstructClassMethodToSetUpTestCaseRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/ConstructClassMethodToSetUpTestCaseRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferPHPUnitSelfCallRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferPHPUnitThisCallRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\SetUpBeforeClassToSetUpRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/SetUpBeforeClassToSetUpRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\TestWithToDataProviderRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/TestWithToDataProviderRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\YieldDataProviderRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/YieldDataProviderRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachInstanceOfRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/Foreach_/SimplifyForeachInstanceOfRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertCompareOnCountableWithMethodToAssertCountRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareOnCountableWithMethodToAssertCountRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertCompareToSpecificMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareToSpecificMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertComparisonToSpecificMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertComparisonToSpecificMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertEmptyNullableObjectToAssertInstanceofRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertEmptyNullableObjectToAssertInstanceofRector.php', @@ -1738,9 +1765,16 @@ 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameBoolNullToSpecificMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertSameBoolNullToSpecificMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameTrueFalseToAssertTrueFalseRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertSameTrueFalseToAssertTrueFalseRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertTrueFalseToSpecificMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertTrueFalseToSpecificMethodRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\NarrowIdenticalWithConsecutiveRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowIdenticalWithConsecutiveRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\NarrowSingleWillReturnCallbackRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowSingleWillReturnCallbackRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\RemoveExpectAnyFromMockRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/RemoveExpectAnyFromMockRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\SingleWithConsecutiveToWithRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/SingleWithConsecutiveToWithRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWillMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/UseSpecificWillMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWithMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/UseSpecificWithMethodRector.php', + 'Rector\\PHPUnit\\CodeQuality\\ValueObject\\MatchAndReturnMatch' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/ValueObject/MatchAndReturnMatch.php', + 'Rector\\PHPUnit\\Composer\\ProjectPackageVersionResolver' => $vendorDir . '/rector/rector-phpunit/src/Composer/ProjectPackageVersionResolver.php', + 'Rector\\PHPUnit\\Enum\\AssertMethod' => $vendorDir . '/rector/rector-phpunit/src/Enum/AssertMethod.php', + 'Rector\\PHPUnit\\Enum\\ConsecutiveVariable' => $vendorDir . '/rector/rector-phpunit/src/Enum/ConsecutiveVariable.php', 'Rector\\PHPUnit\\Naming\\TestClassNameResolver' => $vendorDir . '/rector/rector-phpunit/src/Naming/TestClassNameResolver.php', 'Rector\\PHPUnit\\NodeAnalyzer\\ArgumentMover' => $vendorDir . '/rector/rector-phpunit/src/NodeAnalyzer/ArgumentMover.php', 'Rector\\PHPUnit\\NodeAnalyzer\\AssertCallAnalyzer' => $vendorDir . '/rector/rector-phpunit/src/NodeAnalyzer/AssertCallAnalyzer.php', @@ -1749,13 +1783,19 @@ 'Rector\\PHPUnit\\NodeAnalyzer\\SetUpMethodDecorator' => $vendorDir . '/rector/rector-phpunit/src/NodeAnalyzer/SetUpMethodDecorator.php', 'Rector\\PHPUnit\\NodeAnalyzer\\TestsNodeAnalyzer' => $vendorDir . '/rector/rector-phpunit/src/NodeAnalyzer/TestsNodeAnalyzer.php', 'Rector\\PHPUnit\\NodeFactory\\AssertCallFactory' => $vendorDir . '/rector/rector-phpunit/src/NodeFactory/AssertCallFactory.php', + 'Rector\\PHPUnit\\NodeFactory\\ConsecutiveIfsFactory' => $vendorDir . '/rector/rector-phpunit/src/NodeFactory/ConsecutiveIfsFactory.php', 'Rector\\PHPUnit\\NodeFactory\\ExpectExceptionMethodCallFactory' => $vendorDir . '/rector/rector-phpunit/src/NodeFactory/ExpectExceptionMethodCallFactory.php', + 'Rector\\PHPUnit\\NodeFactory\\MatcherInvocationCountMethodCallNodeFactory' => $vendorDir . '/rector/rector-phpunit/src/NodeFactory/MatcherInvocationCountMethodCallNodeFactory.php', + 'Rector\\PHPUnit\\NodeFactory\\UsedVariablesResolver' => $vendorDir . '/rector/rector-phpunit/src/NodeFactory/UsedVariablesResolver.php', + 'Rector\\PHPUnit\\NodeFactory\\WithConsecutiveMatchFactory' => $vendorDir . '/rector/rector-phpunit/src/NodeFactory/WithConsecutiveMatchFactory.php', 'Rector\\PHPUnit\\NodeFinder\\DataProviderClassMethodFinder' => $vendorDir . '/rector/rector-phpunit/src/NodeFinder/DataProviderClassMethodFinder.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\AddProphecyTraitRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/AddProphecyTraitRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\PublicDataProviderClassMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/PublicDataProviderClassMethodRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\StaticDataProviderClassMethodRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/StaticDataProviderClassMethodRector.php', - 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\PropertyExistsWithoutAssertRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/PropertyExistsWithoutAssertRector.php', + 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\AssertIssetToAssertObjectHasPropertyRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\RemoveSetMethodsMethodCallRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php', + 'Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\WithConsecutiveRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php', + 'Rector\\PHPUnit\\PHPUnit110\\Rector\\Class_\\NamedArgumentForDataProviderRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php', 'Rector\\PHPUnit\\PHPUnit50\\Rector\\StaticCall\\GetMockRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit50/Rector/StaticCall/GetMockRector.php', 'Rector\\PHPUnit\\PHPUnit60\\Rector\\ClassMethod\\AddDoesNotPerformAssertionToNonAssertingTestRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit60/Rector/ClassMethod/AddDoesNotPerformAssertionToNonAssertingTestRector.php', 'Rector\\PHPUnit\\PHPUnit60\\Rector\\ClassMethod\\ExceptionAnnotationRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit60/Rector/ClassMethod/ExceptionAnnotationRector.php', @@ -1770,11 +1810,8 @@ 'Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\SpecificAssertContainsWithoutIdentityRector' => $vendorDir . '/rector/rector-phpunit/rules/PHPUnit90/Rector/MethodCall/SpecificAssertContainsWithoutIdentityRector.php', 'Rector\\PHPUnit\\PhpDoc\\DataProviderMethodRenamer' => $vendorDir . '/rector/rector-phpunit/src/PhpDoc/DataProviderMethodRenamer.php', 'Rector\\PHPUnit\\PhpDoc\\PhpDocValueToNodeMapper' => $vendorDir . '/rector/rector-phpunit/src/PhpDoc/PhpDocValueToNodeMapper.php', - 'Rector\\PHPUnit\\Rector\\ClassMethod\\CreateMockToAnonymousClassRector' => $vendorDir . '/rector/rector-phpunit/src/Rector/ClassMethod/CreateMockToAnonymousClassRector.php', - 'Rector\\PHPUnit\\Rector\\Class_\\PreferPHPUnitSelfCallRector' => $vendorDir . '/rector/rector-phpunit/src/Rector/Class_/PreferPHPUnitSelfCallRector.php', - 'Rector\\PHPUnit\\Rector\\StmtsAwareInterface\\WithConsecutiveRector' => $vendorDir . '/rector/rector-phpunit/src/Rector/StmtsAwareInterface/WithConsecutiveRector.php', - 'Rector\\PHPUnit\\Set\\PHPUnitLevelSetList' => $vendorDir . '/rector/rector-phpunit/src/Set/PHPUnitLevelSetList.php', 'Rector\\PHPUnit\\Set\\PHPUnitSetList' => $vendorDir . '/rector/rector-phpunit/src/Set/PHPUnitSetList.php', + 'Rector\\PHPUnit\\Set\\SetProvider\\PHPUnitSetProvider' => $vendorDir . '/rector/rector-phpunit/src/Set/SetProvider/PHPUnitSetProvider.php', 'Rector\\PHPUnit\\ValueObject\\AnnotationWithValueToAttribute' => $vendorDir . '/rector/rector-phpunit/src/ValueObject/AnnotationWithValueToAttribute.php', 'Rector\\PHPUnit\\ValueObject\\BinaryOpWithAssertMethod' => $vendorDir . '/rector/rector-phpunit/src/ValueObject/BinaryOpWithAssertMethod.php', 'Rector\\PHPUnit\\ValueObject\\ConstantWithAssertMethods' => $vendorDir . '/rector/rector-phpunit/src/ValueObject/ConstantWithAssertMethods.php', @@ -1862,8 +1899,10 @@ 'Rector\\Php74\\Rector\\Double\\RealToFloatTypeCastRector' => $baseDir . '/rules/Php74/Rector/Double/RealToFloatTypeCastRector.php', 'Rector\\Php74\\Rector\\FuncCall\\ArrayKeyExistsOnPropertyRector' => $baseDir . '/rules/Php74/Rector/FuncCall/ArrayKeyExistsOnPropertyRector.php', 'Rector\\Php74\\Rector\\FuncCall\\FilterVarToAddSlashesRector' => $baseDir . '/rules/Php74/Rector/FuncCall/FilterVarToAddSlashesRector.php', + 'Rector\\Php74\\Rector\\FuncCall\\HebrevcToNl2brHebrevRector' => $baseDir . '/rules/Php74/Rector/FuncCall/HebrevcToNl2brHebrevRector.php', 'Rector\\Php74\\Rector\\FuncCall\\MbStrrposEncodingArgumentPositionRector' => $baseDir . '/rules/Php74/Rector/FuncCall/MbStrrposEncodingArgumentPositionRector.php', 'Rector\\Php74\\Rector\\FuncCall\\MoneyFormatToNumberFormatRector' => $baseDir . '/rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php', + 'Rector\\Php74\\Rector\\FuncCall\\RestoreIncludePathToIniRestoreRector' => $baseDir . '/rules/Php74/Rector/FuncCall/RestoreIncludePathToIniRestoreRector.php', 'Rector\\Php74\\Rector\\LNumber\\AddLiteralSeparatorToNumberRector' => $baseDir . '/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php', 'Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector' => $baseDir . '/rules/Php74/Rector/Property/RestoreDefaultNullToNullableTypePropertyRector.php', 'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => $baseDir . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php', @@ -1926,7 +1965,6 @@ 'Rector\\Php81\\NodeAnalyzer\\ComplexNewAnalyzer' => $baseDir . '/rules/Php81/NodeAnalyzer/ComplexNewAnalyzer.php', 'Rector\\Php81\\NodeFactory\\EnumFactory' => $baseDir . '/rules/Php81/NodeFactory/EnumFactory.php', 'Rector\\Php81\\Rector\\Array_\\FirstClassCallableRector' => $baseDir . '/rules/Php81/Rector/Array_/FirstClassCallableRector.php', - 'Rector\\Php81\\Rector\\ClassConst\\FinalizePublicClassConstantRector' => $baseDir . '/rules/Php81/Rector/ClassConst/FinalizePublicClassConstantRector.php', 'Rector\\Php81\\Rector\\ClassMethod\\NewInInitializerRector' => $baseDir . '/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php', 'Rector\\Php81\\Rector\\Class_\\MyCLabsClassToEnumRector' => $baseDir . '/rules/Php81/Rector/Class_/MyCLabsClassToEnumRector.php', 'Rector\\Php81\\Rector\\Class_\\SpatieEnumClassToEnumRector' => $baseDir . '/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php', @@ -1955,6 +1993,7 @@ 'Rector\\PhpAttribute\\AttributeArrayNameInliner' => $baseDir . '/src/PhpAttribute/AttributeArrayNameInliner.php', 'Rector\\PhpAttribute\\Contract\\AnnotationToAttributeMapperInterface' => $baseDir . '/src/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php', 'Rector\\PhpAttribute\\Enum\\DocTagNodeState' => $baseDir . '/src/PhpAttribute/Enum/DocTagNodeState.php', + 'Rector\\PhpAttribute\\NodeFactory\\AnnotationToAttributeIntegerValueCaster' => $baseDir . '/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php', 'Rector\\PhpAttribute\\NodeFactory\\AttributeNameFactory' => $baseDir . '/src/PhpAttribute/NodeFactory/AttributeNameFactory.php', 'Rector\\PhpAttribute\\NodeFactory\\NamedArgsFactory' => $baseDir . '/src/PhpAttribute/NodeFactory/NamedArgsFactory.php', 'Rector\\PhpAttribute\\NodeFactory\\PhpAttributeGroupFactory' => $baseDir . '/src/PhpAttribute/NodeFactory/PhpAttributeGroupFactory.php', @@ -1988,20 +2027,22 @@ 'Rector\\PhpParser\\Node\\NodeFactory' => $baseDir . '/src/PhpParser/Node/NodeFactory.php', 'Rector\\PhpParser\\Node\\Value\\ValueResolver' => $baseDir . '/src/PhpParser/Node/Value/ValueResolver.php', 'Rector\\PhpParser\\Parser\\InlineCodeParser' => $baseDir . '/src/PhpParser/Parser/InlineCodeParser.php', + 'Rector\\PhpParser\\Parser\\ParserErrors' => $baseDir . '/src/PhpParser/Parser/ParserErrors.php', 'Rector\\PhpParser\\Parser\\RectorParser' => $baseDir . '/src/PhpParser/Parser/RectorParser.php', 'Rector\\PhpParser\\Parser\\SimplePhpParser' => $baseDir . '/src/PhpParser/Parser/SimplePhpParser.php', 'Rector\\PhpParser\\Printer\\BetterStandardPrinter' => $baseDir . '/src/PhpParser/Printer/BetterStandardPrinter.php', - 'Rector\\PhpParser\\Printer\\FormatPerservingPrinter' => $baseDir . '/src/PhpParser/Printer/FormatPerservingPrinter.php', 'Rector\\PhpParser\\ValueObject\\StmtsAndTokens' => $baseDir . '/src/PhpParser/ValueObject/StmtsAndTokens.php', 'Rector\\Php\\PhpVersionProvider' => $baseDir . '/src/Php/PhpVersionProvider.php', - 'Rector\\Php\\PhpVersionResolver\\ProjectComposerJsonPhpVersionResolver' => $baseDir . '/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php', + 'Rector\\Php\\PhpVersionResolver\\ComposerJsonPhpVersionResolver' => $baseDir . '/src/Php/PhpVersionResolver/ComposerJsonPhpVersionResolver.php', 'Rector\\Php\\PolyfillPackagesProvider' => $baseDir . '/src/Php/PolyfillPackagesProvider.php', 'Rector\\Php\\ReservedKeywordAnalyzer' => $baseDir . '/src/Php/ReservedKeywordAnalyzer.php', 'Rector\\PostRector\\Application\\PostFileProcessor' => $baseDir . '/src/PostRector/Application/PostFileProcessor.php', 'Rector\\PostRector\\Collector\\UseNodesToAddCollector' => $baseDir . '/src/PostRector/Collector/UseNodesToAddCollector.php', 'Rector\\PostRector\\Contract\\Rector\\PostRectorInterface' => $baseDir . '/src/PostRector/Contract/Rector/PostRectorInterface.php', + 'Rector\\PostRector\\Guard\\AddUseStatementGuard' => $baseDir . '/src/PostRector/Guard/AddUseStatementGuard.php', 'Rector\\PostRector\\Rector\\AbstractPostRector' => $baseDir . '/src/PostRector/Rector/AbstractPostRector.php', 'Rector\\PostRector\\Rector\\ClassRenamingPostRector' => $baseDir . '/src/PostRector/Rector/ClassRenamingPostRector.php', + 'Rector\\PostRector\\Rector\\DocblockNameImportingPostRector' => $baseDir . '/src/PostRector/Rector/DocblockNameImportingPostRector.php', 'Rector\\PostRector\\Rector\\NameImportingPostRector' => $baseDir . '/src/PostRector/Rector/NameImportingPostRector.php', 'Rector\\PostRector\\Rector\\UnusedImportRemovingPostRector' => $baseDir . '/src/PostRector/Rector/UnusedImportRemovingPostRector.php', 'Rector\\PostRector\\Rector\\UseAddingPostRector' => $baseDir . '/src/PostRector/Rector/UseAddingPostRector.php', @@ -2010,14 +2051,12 @@ 'Rector\\Privatization\\Guard\\ParentPropertyLookupGuard' => $baseDir . '/rules/Privatization/Guard/ParentPropertyLookupGuard.php', 'Rector\\Privatization\\NodeManipulator\\VisibilityManipulator' => $baseDir . '/rules/Privatization/NodeManipulator/VisibilityManipulator.php', 'Rector\\Privatization\\Rector\\ClassMethod\\PrivatizeFinalClassMethodRector' => $baseDir . '/rules/Privatization/Rector/ClassMethod/PrivatizeFinalClassMethodRector.php', - 'Rector\\Privatization\\Rector\\Class_\\FinalizeClassesWithoutChildrenRector' => $baseDir . '/rules/Privatization/Rector/Class_/FinalizeClassesWithoutChildrenRector.php', 'Rector\\Privatization\\Rector\\Class_\\FinalizeTestCaseClassRector' => $baseDir . '/rules/Privatization/Rector/Class_/FinalizeTestCaseClassRector.php', 'Rector\\Privatization\\Rector\\MethodCall\\PrivatizeLocalGetterToPropertyRector' => $baseDir . '/rules/Privatization/Rector/MethodCall/PrivatizeLocalGetterToPropertyRector.php', 'Rector\\Privatization\\Rector\\Property\\PrivatizeFinalClassPropertyRector' => $baseDir . '/rules/Privatization/Rector/Property/PrivatizeFinalClassPropertyRector.php', 'Rector\\Privatization\\TypeManipulator\\TypeNormalizer' => $baseDir . '/rules/Privatization/TypeManipulator/TypeNormalizer.php', 'Rector\\Privatization\\VisibilityGuard\\ClassMethodVisibilityGuard' => $baseDir . '/rules/Privatization/VisibilityGuard/ClassMethodVisibilityGuard.php', 'Rector\\ProcessAnalyzer\\RectifiedAnalyzer' => $baseDir . '/src/ProcessAnalyzer/RectifiedAnalyzer.php', - 'Rector\\Provider\\CurrentFileProvider' => $baseDir . '/src/Provider/CurrentFileProvider.php', 'Rector\\RectorInstaller\\Filesystem' => $vendorDir . '/rector/extension-installer/src/Filesystem.php', 'Rector\\RectorInstaller\\GeneratedConfig' => $vendorDir . '/rector/extension-installer/src/GeneratedConfig.php', 'Rector\\RectorInstaller\\LocalFilesystem' => $vendorDir . '/rector/extension-installer/src/LocalFilesystem.php', @@ -2045,6 +2084,7 @@ 'Rector\\Renaming\\NodeManipulator\\SwitchManipulator' => $baseDir . '/rules/Renaming/NodeManipulator/SwitchManipulator.php', 'Rector\\Renaming\\Rector\\ClassConstFetch\\RenameClassConstFetchRector' => $baseDir . '/rules/Renaming/Rector/ClassConstFetch/RenameClassConstFetchRector.php', 'Rector\\Renaming\\Rector\\ClassMethod\\RenameAnnotationRector' => $baseDir . '/rules/Renaming/Rector/ClassMethod/RenameAnnotationRector.php', + 'Rector\\Renaming\\Rector\\Class_\\RenameAttributeRector' => $baseDir . '/rules/Renaming/Rector/Class_/RenameAttributeRector.php', 'Rector\\Renaming\\Rector\\ConstFetch\\RenameConstantRector' => $baseDir . '/rules/Renaming/Rector/ConstFetch/RenameConstantRector.php', 'Rector\\Renaming\\Rector\\FuncCall\\RenameFunctionRector' => $baseDir . '/rules/Renaming/Rector/FuncCall/RenameFunctionRector.php', 'Rector\\Renaming\\Rector\\FunctionLike\\RenameFunctionLikeParamWithinCallLikeArgRector' => $baseDir . '/rules/Renaming/Rector/FunctionLike/RenameFunctionLikeParamWithinCallLikeArgRector.php', @@ -2057,17 +2097,27 @@ 'Rector\\Renaming\\ValueObject\\MethodCallRenameWithArrayKey' => $baseDir . '/rules/Renaming/ValueObject/MethodCallRenameWithArrayKey.php', 'Rector\\Renaming\\ValueObject\\RenameAnnotation' => $baseDir . '/rules/Renaming/ValueObject/RenameAnnotation.php', 'Rector\\Renaming\\ValueObject\\RenameAnnotationByType' => $baseDir . '/rules/Renaming/ValueObject/RenameAnnotationByType.php', + 'Rector\\Renaming\\ValueObject\\RenameAttribute' => $baseDir . '/rules/Renaming/ValueObject/RenameAttribute.php', 'Rector\\Renaming\\ValueObject\\RenameClassAndConstFetch' => $baseDir . '/rules/Renaming/ValueObject/RenameClassAndConstFetch.php', 'Rector\\Renaming\\ValueObject\\RenameClassConstFetch' => $baseDir . '/rules/Renaming/ValueObject/RenameClassConstFetch.php', 'Rector\\Renaming\\ValueObject\\RenameFunctionLikeParamWithinCallLikeArg' => $baseDir . '/rules/Renaming/ValueObject/RenameFunctionLikeParamWithinCallLikeArg.php', 'Rector\\Renaming\\ValueObject\\RenameProperty' => $baseDir . '/rules/Renaming/ValueObject/RenameProperty.php', 'Rector\\Renaming\\ValueObject\\RenameStaticMethod' => $baseDir . '/rules/Renaming/ValueObject/RenameStaticMethod.php', + 'Rector\\Reporting\\DeprecatedRulesReporter' => $baseDir . '/src/Reporting/DeprecatedRulesReporter.php', + 'Rector\\Reporting\\MissConfigurationReporter' => $baseDir . '/src/Reporting/MissConfigurationReporter.php', + 'Rector\\Set\\Contract\\SetInterface' => $baseDir . '/src/Set/Contract/SetInterface.php', 'Rector\\Set\\Contract\\SetListInterface' => $baseDir . '/src/Set/Contract/SetListInterface.php', + 'Rector\\Set\\Contract\\SetProviderInterface' => $baseDir . '/src/Set/Contract/SetProviderInterface.php', + 'Rector\\Set\\Enum\\SetGroup' => $baseDir . '/src/Set/Enum/SetGroup.php', + 'Rector\\Set\\SetManager' => $baseDir . '/src/Set/SetManager.php', + 'Rector\\Set\\SetProvider\\CoreSetProvider' => $baseDir . '/src/Set/SetProvider/CoreSetProvider.php', + 'Rector\\Set\\SetProvider\\PHPSetProvider' => $baseDir . '/src/Set/SetProvider/PHPSetProvider.php', + 'Rector\\Set\\ValueObject\\ComposerTriggeredSet' => $baseDir . '/src/Set/ValueObject/ComposerTriggeredSet.php', 'Rector\\Set\\ValueObject\\DowngradeLevelSetList' => $vendorDir . '/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeLevelSetList.php', 'Rector\\Set\\ValueObject\\DowngradeSetList' => $vendorDir . '/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeSetList.php', 'Rector\\Set\\ValueObject\\LevelSetList' => $baseDir . '/src/Set/ValueObject/LevelSetList.php', + 'Rector\\Set\\ValueObject\\Set' => $baseDir . '/src/Set/ValueObject/Set.php', 'Rector\\Set\\ValueObject\\SetList' => $baseDir . '/src/Set/ValueObject/SetList.php', - 'Rector\\Skipper\\Contract\\SkipVoterInterface' => $baseDir . '/src/Skipper/Contract/SkipVoterInterface.php', 'Rector\\Skipper\\FileSystem\\FnMatchPathNormalizer' => $baseDir . '/src/Skipper/FileSystem/FnMatchPathNormalizer.php', 'Rector\\Skipper\\FileSystem\\PathNormalizer' => $baseDir . '/src/Skipper/FileSystem/PathNormalizer.php', 'Rector\\Skipper\\Fnmatcher' => $baseDir . '/src/Skipper/Fnmatcher.php', @@ -2085,10 +2135,10 @@ 'Rector\\StaticTypeMapper\\Mapper\\PhpParserNodeMapper' => $baseDir . '/src/StaticTypeMapper/Mapper/PhpParserNodeMapper.php', 'Rector\\StaticTypeMapper\\Mapper\\ScalarStringToTypeMapper' => $baseDir . '/src/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php', 'Rector\\StaticTypeMapper\\Naming\\NameScopeFactory' => $baseDir . '/src/StaticTypeMapper/Naming/NameScopeFactory.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\IdentifierTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/IdentifierTypeMapper.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\IntersectionTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\NullableTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/NullableTypeMapper.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\UnionTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\IdentifierPhpDocTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/IdentifierPhpDocTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\IntersectionPhpDocTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/IntersectionPhpDocTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\NullablePhpDocTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/NullablePhpDocTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\UnionPhpDocTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDocParser/UnionPhpDocTypeMapper.php', 'Rector\\StaticTypeMapper\\PhpDoc\\PhpDocTypeMapper' => $baseDir . '/src/StaticTypeMapper/PhpDoc/PhpDocTypeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\ExprNodeMapper' => $baseDir . '/src/StaticTypeMapper/PhpParser/ExprNodeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\FullyQualifiedNodeMapper' => $baseDir . '/src/StaticTypeMapper/PhpParser/FullyQualifiedNodeMapper.php', @@ -2124,6 +2174,7 @@ 'Rector\\Symfony\\Bridge\\Symfony\\ContainerServiceProvider' => $vendorDir . '/rector/rector-symfony/src/Bridge/Symfony/ContainerServiceProvider.php', 'Rector\\Symfony\\Bridge\\Symfony\\Routing\\SymfonyRoutesProvider' => $vendorDir . '/rector/rector-symfony/src/Bridge/Symfony/Routing/SymfonyRoutesProvider.php', 'Rector\\Symfony\\BundleClassResolver' => $vendorDir . '/rector/rector-symfony/src/BundleClassResolver.php', + 'Rector\\Symfony\\CodeQuality\\Enum\\ResponseClass' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Enum/ResponseClass.php', 'Rector\\Symfony\\CodeQuality\\NodeFactory\\SymfonyClosureFactory' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/NodeFactory/SymfonyClosureFactory.php', 'Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/BinaryOp/ResponseStatusCodeRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\ActionSuffixRemoverRector' => $vendorDir . '/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ActionSuffixRemoverRector.php', @@ -2142,12 +2193,20 @@ 'Rector\\Symfony\\Configs\\Enum\\DoctrineConfigKey' => $vendorDir . '/rector/rector-symfony/rules/Configs/Enum/DoctrineConfigKey.php', 'Rector\\Symfony\\Configs\\Enum\\GroupingMethods' => $vendorDir . '/rector/rector-symfony/rules/Configs/Enum/GroupingMethods.php', 'Rector\\Symfony\\Configs\\Enum\\SecurityConfigKey' => $vendorDir . '/rector/rector-symfony/rules/Configs/Enum/SecurityConfigKey.php', + 'Rector\\Symfony\\Configs\\NodeAnalyser\\ConfigServiceArgumentsResolver' => $vendorDir . '/rector/rector-symfony/rules/Configs/NodeAnalyser/ConfigServiceArgumentsResolver.php', + 'Rector\\Symfony\\Configs\\NodeAnalyser\\SetServiceClassNameResolver' => $vendorDir . '/rector/rector-symfony/rules/Configs/NodeAnalyser/SetServiceClassNameResolver.php', + 'Rector\\Symfony\\Configs\\NodeFactory\\AutowiredParamFactory' => $vendorDir . '/rector/rector-symfony/rules/Configs/NodeFactory/AutowiredParamFactory.php', + 'Rector\\Symfony\\Configs\\NodeVisitor\\CollectServiceArgumentsNodeVisitor' => $vendorDir . '/rector/rector-symfony/rules/Configs/NodeVisitor/CollectServiceArgumentsNodeVisitor.php', 'Rector\\Symfony\\Configs\\Rector\\ClassMethod\\AddRouteAnnotationRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php', + 'Rector\\Symfony\\Configs\\Rector\\Class_\\AutowireAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Class_/AutowireAttributeRector.php', + 'Rector\\Symfony\\Configs\\Rector\\Class_\\ParameterBagToAutowireAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Class_/ParameterBagToAutowireAttributeRector.php', + 'Rector\\Symfony\\Configs\\Rector\\Closure\\MergeServiceNameTypeRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/MergeServiceNameTypeRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceArgsToServiceNamedArgRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSetStringNameToClassNameRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSetStringNameToClassNameRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSettersToSettersAutodiscoveryRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceTagsToDefaultsAutoconfigureRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceTagsToDefaultsAutoconfigureRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServicesSetNameToSetTypeRector' => $vendorDir . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php', + 'Rector\\Symfony\\Configs\\ValueObject\\ServiceArguments' => $vendorDir . '/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php', 'Rector\\Symfony\\Contract\\Bridge\\Symfony\\Routing\\SymfonyRoutesProviderInterface' => $vendorDir . '/rector/rector-symfony/src/Contract/Bridge/Symfony/Routing/SymfonyRoutesProviderInterface.php', 'Rector\\Symfony\\Contract\\EventReferenceToMethodNameInterface' => $vendorDir . '/rector/rector-symfony/src/Contract/EventReferenceToMethodNameInterface.php', 'Rector\\Symfony\\Contract\\Tag\\TagInterface' => $vendorDir . '/rector/rector-symfony/src/Contract/Tag/TagInterface.php', @@ -2156,6 +2215,7 @@ 'Rector\\Symfony\\DowngradeSymfony70\\Rector\\Class_\\DowngradeSymfonyCommandAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/DowngradeSymfony70/Rector/Class_/DowngradeSymfonyCommandAttributeRector.php', 'Rector\\Symfony\\Enum\\SensioAttribute' => $vendorDir . '/rector/rector-symfony/src/Enum/SensioAttribute.php', 'Rector\\Symfony\\Enum\\SymfonyAnnotation' => $vendorDir . '/rector/rector-symfony/src/Enum/SymfonyAnnotation.php', + 'Rector\\Symfony\\Enum\\SymfonyAttribute' => $vendorDir . '/rector/rector-symfony/src/Enum/SymfonyAttribute.php', 'Rector\\Symfony\\Enum\\SymfonyClass' => $vendorDir . '/rector/rector-symfony/src/Enum/SymfonyClass.php', 'Rector\\Symfony\\Exception\\XmlContainerNotExistsException' => $vendorDir . '/rector/rector-symfony/src/Exception/XmlContainerNotExistsException.php', 'Rector\\Symfony\\FormHelper\\FormTypeStringToTypeProvider' => $vendorDir . '/rector/rector-symfony/src/FormHelper/FormTypeStringToTypeProvider.php', @@ -2167,8 +2227,6 @@ 'Rector\\Symfony\\NodeAnalyzer\\Annotations\\PropertyAnnotationAssertResolver' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/Annotations/PropertyAnnotationAssertResolver.php', 'Rector\\Symfony\\NodeAnalyzer\\Annotations\\StmtMethodCallMatcher' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/Annotations/StmtMethodCallMatcher.php', 'Rector\\Symfony\\NodeAnalyzer\\ClassAnalyzer' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/ClassAnalyzer.php', - 'Rector\\Symfony\\NodeAnalyzer\\Command\\AttributeValueResolver' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/Command/AttributeValueResolver.php', - 'Rector\\Symfony\\NodeAnalyzer\\Command\\SetAliasesMethodCallExtractor' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/Command/SetAliasesMethodCallExtractor.php', 'Rector\\Symfony\\NodeAnalyzer\\DependencyInjectionMethodCallAnalyzer' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/DependencyInjectionMethodCallAnalyzer.php', 'Rector\\Symfony\\NodeAnalyzer\\FormAddMethodCallAnalyzer' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/FormAddMethodCallAnalyzer.php', 'Rector\\Symfony\\NodeAnalyzer\\FormCollectionAnalyzer' => $vendorDir . '/rector/rector-symfony/src/NodeAnalyzer/FormCollectionAnalyzer.php', @@ -2196,14 +2254,16 @@ 'Rector\\Symfony\\NodeManipulator\\ArrayManipulator' => $vendorDir . '/rector/rector-symfony/src/NodeManipulator/ArrayManipulator.php', 'Rector\\Symfony\\NodeManipulator\\ClassManipulator' => $vendorDir . '/rector/rector-symfony/src/NodeManipulator/ClassManipulator.php', 'Rector\\Symfony\\PhpDocNode\\SymfonyRouteTagValueNodeFactory' => $vendorDir . '/rector/rector-symfony/src/PhpDocNode/SymfonyRouteTagValueNodeFactory.php', + 'Rector\\Symfony\\PhpParser\\NamedSimplePhpParser' => $vendorDir . '/rector/rector-symfony/src/PhpParser/NamedSimplePhpParser.php', 'Rector\\Symfony\\Set\\FOSRestSetList' => $vendorDir . '/rector/rector-symfony/src/Set/FOSRestSetList.php', 'Rector\\Symfony\\Set\\JMSSetList' => $vendorDir . '/rector/rector-symfony/src/Set/JMSSetList.php', 'Rector\\Symfony\\Set\\SensiolabsSetList' => $vendorDir . '/rector/rector-symfony/src/Set/SensiolabsSetList.php', + 'Rector\\Symfony\\Set\\SetProvider\\SymfonySetProvider' => $vendorDir . '/rector/rector-symfony/src/Set/SetProvider/SymfonySetProvider.php', + 'Rector\\Symfony\\Set\\SetProvider\\TwigSetProvider' => $vendorDir . '/rector/rector-symfony/src/Set/SetProvider/TwigSetProvider.php', 'Rector\\Symfony\\Set\\SwiftMailerSetList' => $vendorDir . '/rector/rector-symfony/src/Set/SwiftMailerSetList.php', - 'Rector\\Symfony\\Set\\SymfonyLevelSetList' => $vendorDir . '/rector/rector-symfony/src/Set/SymfonyLevelSetList.php', 'Rector\\Symfony\\Set\\SymfonySetList' => $vendorDir . '/rector/rector-symfony/src/Set/SymfonySetList.php', - 'Rector\\Symfony\\Set\\TwigLevelSetList' => $vendorDir . '/rector/rector-symfony/src/Set/TwigLevelSetList.php', 'Rector\\Symfony\\Set\\TwigSetList' => $vendorDir . '/rector/rector-symfony/src/Set/TwigSetList.php', + 'Rector\\Symfony\\SwiftMailer\\Rector\\ClassMethod\\SwiftMessageToEmailRector' => $vendorDir . '/rector/rector-symfony/rules/SwiftMailer/Rector/ClassMethod/SwiftMessageToEmailRector.php', 'Rector\\Symfony\\SwiftMailer\\Rector\\MethodCall\\SwiftCreateMessageToNewEmailRector' => $vendorDir . '/rector/rector-symfony/rules/SwiftMailer/Rector/MethodCall/SwiftCreateMessageToNewEmailRector.php', 'Rector\\Symfony\\SwiftMailer\\Rector\\MethodCall\\SwiftSetBodyToHtmlPlainMethodCallRector' => $vendorDir . '/rector/rector-symfony/rules/SwiftMailer/Rector/MethodCall/SwiftSetBodyToHtmlPlainMethodCallRector.php', 'Rector\\Symfony\\Symfony25\\Rector\\MethodCall\\AddViolationToBuildViolationRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony25/Rector/MethodCall/AddViolationToBuildViolationRector.php', @@ -2259,6 +2319,7 @@ 'Rector\\Symfony\\Symfony53\\Rector\\StaticPropertyFetch\\KernelTestCaseContainerPropertyDeprecationRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony53/Rector/StaticPropertyFetch/KernelTestCaseContainerPropertyDeprecationRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\FuncCall\\ReplaceServiceArgumentRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\MethodCall\\GetHelperControllerToServiceRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony60/Rector/MethodCall/GetHelperControllerToServiceRector.php', + 'Rector\\Symfony\\Symfony61\\Rector\\Class_\\CommandConfigureToAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandConfigureToAttributeRector.php', 'Rector\\Symfony\\Symfony61\\Rector\\Class_\\CommandPropertyToAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandPropertyToAttributeRector.php', 'Rector\\Symfony\\Symfony61\\Rector\\Class_\\MagicClosureTwigExtensionToNativeMethodsRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony61/Rector/Class_/MagicClosureTwigExtensionToNativeMethodsRector.php', 'Rector\\Symfony\\Symfony61\\Rector\\StaticPropertyFetch\\ErrorNamesPropertyToConstantRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony61/Rector/StaticPropertyFetch/ErrorNamesPropertyToConstantRector.php', @@ -2266,7 +2327,9 @@ 'Rector\\Symfony\\Symfony62\\Rector\\ClassMethod\\ParamConverterAttributeToMapEntityAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony62/Rector/ClassMethod/ParamConverterAttributeToMapEntityAttributeRector.php', 'Rector\\Symfony\\Symfony62\\Rector\\Class_\\MessageHandlerInterfaceToAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony62/Rector/Class_/MessageHandlerInterfaceToAttributeRector.php', 'Rector\\Symfony\\Symfony62\\Rector\\Class_\\MessageSubscriberInterfaceToAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony62/Rector/Class_/MessageSubscriberInterfaceToAttributeRector.php', + 'Rector\\Symfony\\Symfony62\\Rector\\Class_\\SecurityAttributeToIsGrantedAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony62/Rector/Class_/SecurityAttributeToIsGrantedAttributeRector.php', 'Rector\\Symfony\\Symfony62\\Rector\\MethodCall\\SimplifyFormRenderingRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony62/Rector/MethodCall/SimplifyFormRenderingRector.php', + 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\ParamAndEnvAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php', 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\SignalableCommandInterfaceReturnTypeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/SignalableCommandInterfaceReturnTypeRector.php', 'Rector\\Symfony\\Symfony64\\Rector\\Class_\\ChangeRouteAttributeFromAnnotationSubnamespaceRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php', 'Rector\\Symfony\\Twig134\\Rector\\Return_\\SimpleFunctionAndFilterRector' => $vendorDir . '/rector/rector-symfony/rules/Twig134/Rector/Return_/SimpleFunctionAndFilterRector.php', @@ -2328,6 +2391,7 @@ 'Rector\\Transform\\Rector\\MethodCall\\MethodCallToStaticCallRector' => $baseDir . '/rules/Transform/Rector/MethodCall/MethodCallToStaticCallRector.php', 'Rector\\Transform\\Rector\\MethodCall\\ReplaceParentCallByPropertyCallRector' => $baseDir . '/rules/Transform/Rector/MethodCall/ReplaceParentCallByPropertyCallRector.php', 'Rector\\Transform\\Rector\\New_\\NewToStaticCallRector' => $baseDir . '/rules/Transform/Rector/New_/NewToStaticCallRector.php', + 'Rector\\Transform\\Rector\\Scalar\\ScalarValueToConstFetchRector' => $baseDir . '/rules/Transform/Rector/Scalar/ScalarValueToConstFetchRector.php', 'Rector\\Transform\\Rector\\StaticCall\\StaticCallToFuncCallRector' => $baseDir . '/rules/Transform/Rector/StaticCall/StaticCallToFuncCallRector.php', 'Rector\\Transform\\Rector\\StaticCall\\StaticCallToMethodCallRector' => $baseDir . '/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php', 'Rector\\Transform\\Rector\\StaticCall\\StaticCallToNewRector' => $baseDir . '/rules/Transform/Rector/StaticCall/StaticCallToNewRector.php', @@ -2346,6 +2410,7 @@ 'Rector\\Transform\\ValueObject\\PropertyAssignToMethodCall' => $baseDir . '/rules/Transform/ValueObject/PropertyAssignToMethodCall.php', 'Rector\\Transform\\ValueObject\\PropertyFetchToMethodCall' => $baseDir . '/rules/Transform/ValueObject/PropertyFetchToMethodCall.php', 'Rector\\Transform\\ValueObject\\ReplaceParentCallByPropertyCall' => $baseDir . '/rules/Transform/ValueObject/ReplaceParentCallByPropertyCall.php', + 'Rector\\Transform\\ValueObject\\ScalarValueToConstFetch' => $baseDir . '/rules/Transform/ValueObject/ScalarValueToConstFetch.php', 'Rector\\Transform\\ValueObject\\StaticCallToFuncCall' => $baseDir . '/rules/Transform/ValueObject/StaticCallToFuncCall.php', 'Rector\\Transform\\ValueObject\\StaticCallToMethodCall' => $baseDir . '/rules/Transform/ValueObject/StaticCallToMethodCall.php', 'Rector\\Transform\\ValueObject\\StaticCallToNew' => $baseDir . '/rules/Transform/ValueObject/StaticCallToNew.php', @@ -2354,7 +2419,6 @@ 'Rector\\TypeDeclaration\\AlreadyAssignDetector\\ConstructorAssignDetector' => $baseDir . '/rules/TypeDeclaration/AlreadyAssignDetector/ConstructorAssignDetector.php', 'Rector\\TypeDeclaration\\AlreadyAssignDetector\\NullTypeAssignDetector' => $baseDir . '/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php', 'Rector\\TypeDeclaration\\AlreadyAssignDetector\\PropertyDefaultAssignDetector' => $baseDir . '/rules/TypeDeclaration/AlreadyAssignDetector/PropertyDefaultAssignDetector.php', - 'Rector\\TypeDeclaration\\Contract\\PHPStan\\TypeWithClassTypeSpecifierInterface' => $baseDir . '/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php', 'Rector\\TypeDeclaration\\FunctionLikeReturnTypeResolver' => $baseDir . '/rules/TypeDeclaration/FunctionLikeReturnTypeResolver.php', 'Rector\\TypeDeclaration\\Guard\\ParamTypeAddGuard' => $baseDir . '/rules/TypeDeclaration/Guard/ParamTypeAddGuard.php', 'Rector\\TypeDeclaration\\Guard\\PropertyTypeOverrideGuard' => $baseDir . '/rules/TypeDeclaration/Guard/PropertyTypeOverrideGuard.php', @@ -2369,53 +2433,70 @@ 'Rector\\TypeDeclaration\\NodeAnalyzer\\ParamAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ParamAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnFilter\\ExclusiveNativeCallLikeReturnMatcher' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnFilter/ExclusiveNativeCallLikeReturnMatcher.php', - 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\AlwaysStrictReturnAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php', - 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictBoolReturnTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictNativeFunctionReturnTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictNativeFunctionReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictReturnNewAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php', - 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictScalarReturnTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictScalarReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\TypeNodeUnwrapper' => $baseDir . '/rules/TypeDeclaration/NodeAnalyzer/TypeNodeUnwrapper.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddNeverReturnType' => $baseDir . '/rules/TypeDeclaration/NodeManipulator/AddNeverReturnType.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddReturnTypeFromCast' => $baseDir . '/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromCast.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddReturnTypeFromParam' => $baseDir . '/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromParam.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddReturnTypeFromStrictNativeCall' => $baseDir . '/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromStrictNativeCall.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddUnionReturnType' => $baseDir . '/rules/TypeDeclaration/NodeManipulator/AddUnionReturnType.php', 'Rector\\TypeDeclaration\\NodeTypeAnalyzer\\DetailedTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/NodeTypeAnalyzer/DetailedTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeTypeAnalyzer\\PropertyTypeDecorator' => $baseDir . '/rules/TypeDeclaration/NodeTypeAnalyzer/PropertyTypeDecorator.php', 'Rector\\TypeDeclaration\\PHPStan\\ObjectTypeSpecifier' => $baseDir . '/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php', - 'Rector\\TypeDeclaration\\PHPStan\\TypeSpecifier\\SameNamespacedTypeSpecifier' => $baseDir . '/rules/TypeDeclaration/PHPStan/TypeSpecifier/SameNamespacedTypeSpecifier.php', - 'Rector\\TypeDeclaration\\PHPStan\\TypeSpecifier\\SelfStaticParentTypeSpecifier' => $baseDir . '/rules/TypeDeclaration/PHPStan/TypeSpecifier/SelfStaticParentTypeSpecifier.php', 'Rector\\TypeDeclaration\\PhpDocParser\\ParamPhpDocNodeFactory' => $baseDir . '/rules/TypeDeclaration/PhpDocParser/ParamPhpDocNodeFactory.php', + 'Rector\\TypeDeclaration\\PhpDocParser\\TypeExpressionFromVarTagResolver' => $baseDir . '/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php', 'Rector\\TypeDeclaration\\Rector\\ArrowFunction\\AddArrowFunctionReturnTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ArrowFunction/AddArrowFunctionReturnTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\BooleanAnd\\BinaryOpNullableToInstanceofRector' => $baseDir . '/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddMethodCallBasedStrictParamTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeBasedOnPHPUnitDataProviderRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeDeclarationRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeFromPropertyTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeFromPropertyTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnArrayDocblockBasedOnArrayMapRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationBasedOnParentClassMethodRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationBasedOnParentClassMethodRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddTypeFromResourceDocblockRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddTypeFromResourceDocblockRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddVoidReturnTypeWhereNoReturnRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php', - 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromStrictScalarReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanStrictReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictScalarReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByParentCallTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNullableTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromMockObjectRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnCastRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnDirectArrayRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnNewRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php', - 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictBoolReturnExprRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictBoolReturnExprRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictConstantReturnRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictFluentReturnRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictFluentReturnRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNativeCallRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNewArrayRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictParamRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php', - 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictScalarReturnExprRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictScalarReturnExprRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedCallRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedPropertyRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromSymfonySerializerRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnUnionTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/StrictArrayParamDimFetchRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictStringParamConcatRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/StrictStringParamConcatRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictScalarReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictStringReturnsRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\AddTestsVoidReturnTypeWhereNoReturnRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/AddTestsVoidReturnTypeWhereNoReturnRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\ChildDoctrineRepositoryClassTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/ChildDoctrineRepositoryClassTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\MergeDateTimePropertyTypeDeclarationRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/MergeDateTimePropertyTypeDeclarationRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\PropertyTypeFromStrictSetterGetterRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/PropertyTypeFromStrictSetterGetterRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\ReturnTypeFromStrictTernaryRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php', + 'Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromCreateMockAssignRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromCreateMockAssignRector.php', + 'Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromJMSSerializerAttributeTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromJMSSerializerAttributeTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureNeverReturnTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureVoidReturnTypeWhereNoReturnRector' => $baseDir . '/rules/TypeDeclaration/Rector/Closure/AddClosureVoidReturnTypeWhereNoReturnRector.php', + 'Rector\\TypeDeclaration\\Rector\\Closure\\ClosureReturnTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/Closure/ClosureReturnTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\Empty_\\EmptyOnNullableObjectToInstanceOfRector' => $baseDir . '/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php', + 'Rector\\TypeDeclaration\\Rector\\Expression\\InlineVarDocTagToAssertRector' => $baseDir . '/rules/TypeDeclaration/Rector/Expression/InlineVarDocTagToAssertRector.php', + 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromArgRector' => $baseDir . '/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromArgRector.php', + 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromObjectRector' => $baseDir . '/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromObjectRector.php', 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector' => $baseDir . '/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector.php', 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddParamTypeSplFixedArrayRector' => $baseDir . '/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeSplFixedArrayRector.php', 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddReturnTypeDeclarationFromYieldsRector' => $baseDir . '/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php', @@ -2427,13 +2508,10 @@ 'Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\DeclareStrictTypesRector' => $baseDir . '/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php', 'Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\IncreaseDeclareStrictTypesRector' => $baseDir . '/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php', 'Rector\\TypeDeclaration\\Rector\\While_\\WhileNullableToInstanceofRector' => $baseDir . '/rules/TypeDeclaration/Rector/While_/WhileNullableToInstanceofRector.php', - 'Rector\\TypeDeclaration\\TypeAnalyzer\\AlwaysStrictBoolExprAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php', - 'Rector\\TypeDeclaration\\TypeAnalyzer\\AlwaysStrictScalarExprAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\GenericClassStringTypeNormalizer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/GenericClassStringTypeNormalizer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\NullableTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/NullableTypeAnalyzer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\PropertyTypeDefaultValueAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/PropertyTypeDefaultValueAnalyzer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\ReturnStrictTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/ReturnStrictTypeAnalyzer.php', - 'Rector\\TypeDeclaration\\TypeAnalyzer\\StrictReturnClassConstReturnTypeAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/StrictReturnClassConstReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\TypeInferer\\AssignToPropertyTypeInferer' => $baseDir . '/rules/TypeDeclaration/TypeInferer/AssignToPropertyTypeInferer.php', 'Rector\\TypeDeclaration\\TypeInferer\\PropertyTypeInferer\\AllAssignNodePropertyTypeInferer' => $baseDir . '/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/AllAssignNodePropertyTypeInferer.php', 'Rector\\TypeDeclaration\\TypeInferer\\PropertyTypeInferer\\GetterTypeDeclarationPropertyTypeInferer' => $baseDir . '/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/GetterTypeDeclarationPropertyTypeInferer.php', @@ -2444,6 +2522,8 @@ 'Rector\\TypeDeclaration\\TypeInferer\\SilentVoidResolver' => $baseDir . '/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php', 'Rector\\TypeDeclaration\\TypeInferer\\SplArrayFixedTypeNarrower' => $baseDir . '/rules/TypeDeclaration/TypeInferer/SplArrayFixedTypeNarrower.php', 'Rector\\TypeDeclaration\\TypeNormalizer' => $baseDir . '/rules/TypeDeclaration/TypeNormalizer.php', + 'Rector\\TypeDeclaration\\ValueObject\\AddClosureParamTypeFromArg' => $baseDir . '/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromArg.php', + 'Rector\\TypeDeclaration\\ValueObject\\AddClosureParamTypeFromObject' => $baseDir . '/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromObject.php', 'Rector\\TypeDeclaration\\ValueObject\\AddParamTypeDeclaration' => $baseDir . '/rules/TypeDeclaration/ValueObject/AddParamTypeDeclaration.php', 'Rector\\TypeDeclaration\\ValueObject\\AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration' => $baseDir . '/rules/TypeDeclaration/ValueObject/AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration.php', 'Rector\\TypeDeclaration\\ValueObject\\AddPropertyTypeDeclaration' => $baseDir . '/rules/TypeDeclaration/ValueObject/AddPropertyTypeDeclaration.php', @@ -2462,7 +2542,6 @@ 'Rector\\Util\\StringUtils' => $baseDir . '/src/Util/StringUtils.php', 'Rector\\Validation\\RectorAssert' => $baseDir . '/src/Validation/RectorAssert.php', 'Rector\\Validation\\RectorConfigValidator' => $baseDir . '/src/Validation/RectorConfigValidator.php', - 'Rector\\ValueObjectFactory\\Application\\FileFactory' => $baseDir . '/src/ValueObjectFactory/Application/FileFactory.php', 'Rector\\ValueObject\\Application\\File' => $baseDir . '/src/ValueObject/Application/File.php', 'Rector\\ValueObject\\Bootstrap\\BootstrapConfigs' => $baseDir . '/src/ValueObject/Bootstrap/BootstrapConfigs.php', 'Rector\\ValueObject\\ClassMethodWillChangeReturnType' => $vendorDir . '/rector/rector-downgrade-php/src/ValueObject/ClassMethodWillChangeReturnType.php', diff --git a/vendor/rector/rector/vendor/composer/autoload_psr4.php b/vendor/rector/rector/vendor/composer/autoload_psr4.php index 533aa09ae..8e441342f 100644 --- a/vendor/rector/rector/vendor/composer/autoload_psr4.php +++ b/vendor/rector/rector/vendor/composer/autoload_psr4.php @@ -14,34 +14,34 @@ 'Rector\\PHPUnit\\' => array($vendorDir . '/rector/rector-phpunit/src', $vendorDir . '/rector/rector-phpunit/rules'), 'Rector\\Doctrine\\' => array($vendorDir . '/rector/rector-doctrine/src', $vendorDir . '/rector/rector-doctrine/rules'), 'Rector\\' => array($baseDir . '/rules', $baseDir . '/src', $vendorDir . '/rector/rector-downgrade-php/src', $vendorDir . '/rector/rector-downgrade-php/rules'), - 'RectorPrefix202405\\Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), - 'RectorPrefix202405\\Symplify\\EasyParallel\\' => array($vendorDir . '/symplify/easy-parallel/src'), - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), - 'RectorPrefix202405\\Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), - 'RectorPrefix202405\\Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), - 'RectorPrefix202405\\Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), - 'RectorPrefix202405\\React\\Stream\\' => array($vendorDir . '/react/stream/src'), - 'RectorPrefix202405\\React\\Socket\\' => array($vendorDir . '/react/socket/src'), - 'RectorPrefix202405\\React\\Promise\\' => array($vendorDir . '/react/promise/src'), - 'RectorPrefix202405\\React\\EventLoop\\' => array($vendorDir . '/react/event-loop/src'), - 'RectorPrefix202405\\React\\Dns\\' => array($vendorDir . '/react/dns/src'), - 'RectorPrefix202405\\React\\ChildProcess\\' => array($vendorDir . '/react/child-process/src'), - 'RectorPrefix202405\\React\\Cache\\' => array($vendorDir . '/react/cache/src'), - 'RectorPrefix202405\\Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), - 'RectorPrefix202405\\Psr\\Log\\' => array($vendorDir . '/psr/log/src'), - 'RectorPrefix202405\\Psr\\Container\\' => array($vendorDir . '/psr/container/src'), - 'RectorPrefix202405\\OndraM\\CiDetector\\' => array($vendorDir . '/ondram/ci-detector/src'), - 'RectorPrefix202405\\Illuminate\\Contracts\\' => array($vendorDir . '/illuminate/contracts'), - 'RectorPrefix202405\\Illuminate\\Container\\' => array($vendorDir . '/illuminate/container'), - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\' => array($vendorDir . '/fidry/cpu-core-counter/src'), - 'RectorPrefix202405\\Evenement\\' => array($vendorDir . '/evenement/evenement/src'), - 'RectorPrefix202405\\Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'), - 'RectorPrefix202405\\Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'), - 'RectorPrefix202405\\Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), - 'RectorPrefix202405\\Composer\\Pcre\\' => array($vendorDir . '/composer/pcre/src'), - 'RectorPrefix202405\\Clue\\React\\NDJson\\' => array($vendorDir . '/clue/ndjson-react/src'), + 'RectorPrefix202410\\Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), + 'RectorPrefix202410\\Symplify\\EasyParallel\\' => array($vendorDir . '/symplify/easy-parallel/src'), + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'RectorPrefix202410\\Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), + 'RectorPrefix202410\\Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), + 'RectorPrefix202410\\Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), + 'RectorPrefix202410\\React\\Stream\\' => array($vendorDir . '/react/stream/src'), + 'RectorPrefix202410\\React\\Socket\\' => array($vendorDir . '/react/socket/src'), + 'RectorPrefix202410\\React\\Promise\\' => array($vendorDir . '/react/promise/src'), + 'RectorPrefix202410\\React\\EventLoop\\' => array($vendorDir . '/react/event-loop/src'), + 'RectorPrefix202410\\React\\Dns\\' => array($vendorDir . '/react/dns/src'), + 'RectorPrefix202410\\React\\ChildProcess\\' => array($vendorDir . '/react/child-process/src'), + 'RectorPrefix202410\\React\\Cache\\' => array($vendorDir . '/react/cache/src'), + 'RectorPrefix202410\\Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), + 'RectorPrefix202410\\Psr\\Log\\' => array($vendorDir . '/psr/log/src'), + 'RectorPrefix202410\\Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'RectorPrefix202410\\OndraM\\CiDetector\\' => array($vendorDir . '/ondram/ci-detector/src'), + 'RectorPrefix202410\\Illuminate\\Contracts\\' => array($vendorDir . '/illuminate/contracts'), + 'RectorPrefix202410\\Illuminate\\Container\\' => array($vendorDir . '/illuminate/container'), + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\' => array($vendorDir . '/fidry/cpu-core-counter/src'), + 'RectorPrefix202410\\Evenement\\' => array($vendorDir . '/evenement/evenement/src'), + 'RectorPrefix202410\\Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'), + 'RectorPrefix202410\\Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'), + 'RectorPrefix202410\\Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), + 'RectorPrefix202410\\Composer\\Pcre\\' => array($vendorDir . '/composer/pcre/src'), + 'RectorPrefix202410\\Clue\\React\\NDJson\\' => array($vendorDir . '/clue/ndjson-react/src'), 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), 'PHPStan\\PhpDocParser\\' => array($vendorDir . '/phpstan/phpdoc-parser/src'), ); diff --git a/vendor/rector/rector/vendor/composer/autoload_real.php b/vendor/rector/rector/vendor/composer/autoload_real.php index 54e8ee141..82f820f61 100644 --- a/vendor/rector/rector/vendor/composer/autoload_real.php +++ b/vendor/rector/rector/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit70e3025dac7e7555f69a9b4ca9e3dfde +class ComposerAutoloaderInit7c12491db1a700dd78980ecb6595c088 { private static $loader; @@ -22,17 +22,17 @@ public static function getLoader() return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit70e3025dac7e7555f69a9b4ca9e3dfde', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit7c12491db1a700dd78980ecb6595c088', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit70e3025dac7e7555f69a9b4ca9e3dfde', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit7c12491db1a700dd78980ecb6595c088', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit7c12491db1a700dd78980ecb6595c088::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInit7c12491db1a700dd78980ecb6595c088::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/vendor/rector/rector/vendor/composer/autoload_static.php b/vendor/rector/rector/vendor/composer/autoload_static.php index c09f620ef..8a5537adf 100644 --- a/vendor/rector/rector/vendor/composer/autoload_static.php +++ b/vendor/rector/rector/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde +class ComposerStaticInit7c12491db1a700dd78980ecb6595c088 { public static $files = array ( 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -27,34 +27,34 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPUnit\\' => 15, 'Rector\\Doctrine\\' => 16, 'Rector\\' => 7, - 'RectorPrefix202405\\Webmozart\\Assert\\' => 36, - 'RectorPrefix202405\\Symplify\\EasyParallel\\' => 41, - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\' => 45, - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\' => 42, - 'RectorPrefix202405\\Symfony\\Component\\Process\\' => 45, - 'RectorPrefix202405\\Symfony\\Component\\Finder\\' => 44, - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\' => 48, - 'RectorPrefix202405\\Symfony\\Component\\Console\\' => 45, - 'RectorPrefix202405\\React\\Stream\\' => 32, - 'RectorPrefix202405\\React\\Socket\\' => 32, - 'RectorPrefix202405\\React\\Promise\\' => 33, - 'RectorPrefix202405\\React\\EventLoop\\' => 35, - 'RectorPrefix202405\\React\\Dns\\' => 29, - 'RectorPrefix202405\\React\\ChildProcess\\' => 38, - 'RectorPrefix202405\\React\\Cache\\' => 31, - 'RectorPrefix202405\\Psr\\SimpleCache\\' => 35, - 'RectorPrefix202405\\Psr\\Log\\' => 27, - 'RectorPrefix202405\\Psr\\Container\\' => 33, - 'RectorPrefix202405\\OndraM\\CiDetector\\' => 37, - 'RectorPrefix202405\\Illuminate\\Contracts\\' => 40, - 'RectorPrefix202405\\Illuminate\\Container\\' => 40, - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\' => 40, - 'RectorPrefix202405\\Evenement\\' => 29, - 'RectorPrefix202405\\Doctrine\\Inflector\\' => 38, - 'RectorPrefix202405\\Composer\\XdebugHandler\\' => 42, - 'RectorPrefix202405\\Composer\\Semver\\' => 35, - 'RectorPrefix202405\\Composer\\Pcre\\' => 33, - 'RectorPrefix202405\\Clue\\React\\NDJson\\' => 37, + 'RectorPrefix202410\\Webmozart\\Assert\\' => 36, + 'RectorPrefix202410\\Symplify\\EasyParallel\\' => 41, + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\' => 45, + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\' => 42, + 'RectorPrefix202410\\Symfony\\Component\\Process\\' => 45, + 'RectorPrefix202410\\Symfony\\Component\\Finder\\' => 44, + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\' => 48, + 'RectorPrefix202410\\Symfony\\Component\\Console\\' => 45, + 'RectorPrefix202410\\React\\Stream\\' => 32, + 'RectorPrefix202410\\React\\Socket\\' => 32, + 'RectorPrefix202410\\React\\Promise\\' => 33, + 'RectorPrefix202410\\React\\EventLoop\\' => 35, + 'RectorPrefix202410\\React\\Dns\\' => 29, + 'RectorPrefix202410\\React\\ChildProcess\\' => 38, + 'RectorPrefix202410\\React\\Cache\\' => 31, + 'RectorPrefix202410\\Psr\\SimpleCache\\' => 35, + 'RectorPrefix202410\\Psr\\Log\\' => 27, + 'RectorPrefix202410\\Psr\\Container\\' => 33, + 'RectorPrefix202410\\OndraM\\CiDetector\\' => 37, + 'RectorPrefix202410\\Illuminate\\Contracts\\' => 40, + 'RectorPrefix202410\\Illuminate\\Container\\' => 40, + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\' => 40, + 'RectorPrefix202410\\Evenement\\' => 29, + 'RectorPrefix202410\\Doctrine\\Inflector\\' => 38, + 'RectorPrefix202410\\Composer\\XdebugHandler\\' => 42, + 'RectorPrefix202410\\Composer\\Semver\\' => 35, + 'RectorPrefix202410\\Composer\\Pcre\\' => 33, + 'RectorPrefix202410\\Clue\\React\\NDJson\\' => 37, ), 'P' => array ( @@ -102,115 +102,115 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 2 => __DIR__ . '/..' . '/rector/rector-downgrade-php/src', 3 => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules', ), - 'RectorPrefix202405\\Webmozart\\Assert\\' => + 'RectorPrefix202410\\Webmozart\\Assert\\' => array ( 0 => __DIR__ . '/..' . '/webmozart/assert/src', ), - 'RectorPrefix202405\\Symplify\\EasyParallel\\' => + 'RectorPrefix202410\\Symplify\\EasyParallel\\' => array ( 0 => __DIR__ . '/..' . '/symplify/easy-parallel/src', ), - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\' => + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\' => array ( 0 => __DIR__ . '/..' . '/symfony/service-contracts', ), - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\' => + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\' => array ( 0 => __DIR__ . '/..' . '/symfony/yaml', ), - 'RectorPrefix202405\\Symfony\\Component\\Process\\' => + 'RectorPrefix202410\\Symfony\\Component\\Process\\' => array ( 0 => __DIR__ . '/..' . '/symfony/process', ), - 'RectorPrefix202405\\Symfony\\Component\\Finder\\' => + 'RectorPrefix202410\\Symfony\\Component\\Finder\\' => array ( 0 => __DIR__ . '/..' . '/symfony/finder', ), - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\' => + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\' => array ( 0 => __DIR__ . '/..' . '/symfony/filesystem', ), - 'RectorPrefix202405\\Symfony\\Component\\Console\\' => + 'RectorPrefix202410\\Symfony\\Component\\Console\\' => array ( 0 => __DIR__ . '/..' . '/symfony/console', ), - 'RectorPrefix202405\\React\\Stream\\' => + 'RectorPrefix202410\\React\\Stream\\' => array ( 0 => __DIR__ . '/..' . '/react/stream/src', ), - 'RectorPrefix202405\\React\\Socket\\' => + 'RectorPrefix202410\\React\\Socket\\' => array ( 0 => __DIR__ . '/..' . '/react/socket/src', ), - 'RectorPrefix202405\\React\\Promise\\' => + 'RectorPrefix202410\\React\\Promise\\' => array ( 0 => __DIR__ . '/..' . '/react/promise/src', ), - 'RectorPrefix202405\\React\\EventLoop\\' => + 'RectorPrefix202410\\React\\EventLoop\\' => array ( 0 => __DIR__ . '/..' . '/react/event-loop/src', ), - 'RectorPrefix202405\\React\\Dns\\' => + 'RectorPrefix202410\\React\\Dns\\' => array ( 0 => __DIR__ . '/..' . '/react/dns/src', ), - 'RectorPrefix202405\\React\\ChildProcess\\' => + 'RectorPrefix202410\\React\\ChildProcess\\' => array ( 0 => __DIR__ . '/..' . '/react/child-process/src', ), - 'RectorPrefix202405\\React\\Cache\\' => + 'RectorPrefix202410\\React\\Cache\\' => array ( 0 => __DIR__ . '/..' . '/react/cache/src', ), - 'RectorPrefix202405\\Psr\\SimpleCache\\' => + 'RectorPrefix202410\\Psr\\SimpleCache\\' => array ( 0 => __DIR__ . '/..' . '/psr/simple-cache/src', ), - 'RectorPrefix202405\\Psr\\Log\\' => + 'RectorPrefix202410\\Psr\\Log\\' => array ( 0 => __DIR__ . '/..' . '/psr/log/src', ), - 'RectorPrefix202405\\Psr\\Container\\' => + 'RectorPrefix202410\\Psr\\Container\\' => array ( 0 => __DIR__ . '/..' . '/psr/container/src', ), - 'RectorPrefix202405\\OndraM\\CiDetector\\' => + 'RectorPrefix202410\\OndraM\\CiDetector\\' => array ( 0 => __DIR__ . '/..' . '/ondram/ci-detector/src', ), - 'RectorPrefix202405\\Illuminate\\Contracts\\' => + 'RectorPrefix202410\\Illuminate\\Contracts\\' => array ( 0 => __DIR__ . '/..' . '/illuminate/contracts', ), - 'RectorPrefix202405\\Illuminate\\Container\\' => + 'RectorPrefix202410\\Illuminate\\Container\\' => array ( 0 => __DIR__ . '/..' . '/illuminate/container', ), - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\' => + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\' => array ( 0 => __DIR__ . '/..' . '/fidry/cpu-core-counter/src', ), - 'RectorPrefix202405\\Evenement\\' => + 'RectorPrefix202410\\Evenement\\' => array ( 0 => __DIR__ . '/..' . '/evenement/evenement/src', ), - 'RectorPrefix202405\\Doctrine\\Inflector\\' => + 'RectorPrefix202410\\Doctrine\\Inflector\\' => array ( 0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector', ), - 'RectorPrefix202405\\Composer\\XdebugHandler\\' => + 'RectorPrefix202410\\Composer\\XdebugHandler\\' => array ( 0 => __DIR__ . '/..' . '/composer/xdebug-handler/src', ), - 'RectorPrefix202405\\Composer\\Semver\\' => + 'RectorPrefix202410\\Composer\\Semver\\' => array ( 0 => __DIR__ . '/..' . '/composer/semver/src', ), - 'RectorPrefix202405\\Composer\\Pcre\\' => + 'RectorPrefix202410\\Composer\\Pcre\\' => array ( 0 => __DIR__ . '/..' . '/composer/pcre/src', ), - 'RectorPrefix202405\\Clue\\React\\NDJson\\' => + 'RectorPrefix202410\\Clue\\React\\NDJson\\' => array ( 0 => __DIR__ . '/..' . '/clue/ndjson-react/src', ), @@ -272,6 +272,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PhpDocTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PhpDocTextNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PropertyTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php', + 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\PureUnlessCallableIsImpureTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\RequireExtendsTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\RequireImplementsTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\ReturnTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php', @@ -285,6 +286,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'PHPStan\\PhpDocParser\\Ast\\PhpDoc\\VarTagValueNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayShapeItemNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayShapeNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php', + 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayShapeUnsealedTypeNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\ArrayTypeNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\CallableTypeNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php', 'PHPStan\\PhpDocParser\\Ast\\Type\\CallableTypeParameterNode' => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php', @@ -562,635 +564,653 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'PhpParser\\Parser\\Tokens' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', - 'RectorPrefix202405\\Clue\\React\\NDJson\\Decoder' => __DIR__ . '/..' . '/clue/ndjson-react/src/Decoder.php', - 'RectorPrefix202405\\Clue\\React\\NDJson\\Encoder' => __DIR__ . '/..' . '/clue/ndjson-react/src/Encoder.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchAllResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchAllStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllStrictGroupsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchAllWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllWithOffsetsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchStrictGroupsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\MatchWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchWithOffsetsResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\PcreException' => __DIR__ . '/..' . '/composer/pcre/src/PcreException.php', - 'RectorPrefix202405\\Composer\\Pcre\\Preg' => __DIR__ . '/..' . '/composer/pcre/src/Preg.php', - 'RectorPrefix202405\\Composer\\Pcre\\Regex' => __DIR__ . '/..' . '/composer/pcre/src/Regex.php', - 'RectorPrefix202405\\Composer\\Pcre\\ReplaceResult' => __DIR__ . '/..' . '/composer/pcre/src/ReplaceResult.php', - 'RectorPrefix202405\\Composer\\Pcre\\UnexpectedNullMatchException' => __DIR__ . '/..' . '/composer/pcre/src/UnexpectedNullMatchException.php', - 'RectorPrefix202405\\Composer\\Semver\\Comparator' => __DIR__ . '/..' . '/composer/semver/src/Comparator.php', - 'RectorPrefix202405\\Composer\\Semver\\CompilingMatcher' => __DIR__ . '/..' . '/composer/semver/src/CompilingMatcher.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\Bound' => __DIR__ . '/..' . '/composer/semver/src/Constraint/Bound.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\Constraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/Constraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\ConstraintInterface' => __DIR__ . '/..' . '/composer/semver/src/Constraint/ConstraintInterface.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\MatchAllConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MatchAllConstraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\MatchNoneConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MatchNoneConstraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Constraint\\MultiConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MultiConstraint.php', - 'RectorPrefix202405\\Composer\\Semver\\Interval' => __DIR__ . '/..' . '/composer/semver/src/Interval.php', - 'RectorPrefix202405\\Composer\\Semver\\Intervals' => __DIR__ . '/..' . '/composer/semver/src/Intervals.php', - 'RectorPrefix202405\\Composer\\Semver\\Semver' => __DIR__ . '/..' . '/composer/semver/src/Semver.php', - 'RectorPrefix202405\\Composer\\Semver\\VersionParser' => __DIR__ . '/..' . '/composer/semver/src/VersionParser.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\PhpConfig' => __DIR__ . '/..' . '/composer/xdebug-handler/src/PhpConfig.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\Process' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Process.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\Status' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Status.php', - 'RectorPrefix202405\\Composer\\XdebugHandler\\XdebugHandler' => __DIR__ . '/..' . '/composer/xdebug-handler/src/XdebugHandler.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\CachedWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\GenericLanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Inflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Language' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Language.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\LanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\NoopWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\English\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\French\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Pattern' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Patterns' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Portuguese\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Ruleset' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Spanish\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Substitution' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Substitutions' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Transformation' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Transformations' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Turkish\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\Rules\\Word' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\RulesetInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php', - 'RectorPrefix202405\\Doctrine\\Inflector\\WordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php', - 'RectorPrefix202405\\Evenement\\EventEmitter' => __DIR__ . '/..' . '/evenement/evenement/src/EventEmitter.php', - 'RectorPrefix202405\\Evenement\\EventEmitterInterface' => __DIR__ . '/..' . '/evenement/evenement/src/EventEmitterInterface.php', - 'RectorPrefix202405\\Evenement\\EventEmitterTrait' => __DIR__ . '/..' . '/evenement/evenement/src/EventEmitterTrait.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\CpuCoreCounter' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/CpuCoreCounter.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Diagnoser' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Diagnoser.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Executor\\ProcOpenExecutor' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Executor\\ProcessExecutor' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\LscpuLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\LscpuPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\NProcFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/NProcFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\NProcessorFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\NullCpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\OnlyInPowerShellFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\OnlyOnOSFamilyFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\ProcOpenBasedFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\SkipOnOSFamilyFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\WindowsRegistryLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\WmicLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php', - 'RectorPrefix202405\\Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php', - 'RectorPrefix202405\\Illuminate\\Container\\BoundMethod' => __DIR__ . '/..' . '/illuminate/container/BoundMethod.php', - 'RectorPrefix202405\\Illuminate\\Container\\Container' => __DIR__ . '/..' . '/illuminate/container/Container.php', - 'RectorPrefix202405\\Illuminate\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/illuminate/container/ContextualBindingBuilder.php', - 'RectorPrefix202405\\Illuminate\\Container\\EntryNotFoundException' => __DIR__ . '/..' . '/illuminate/container/EntryNotFoundException.php', - 'RectorPrefix202405\\Illuminate\\Container\\RewindableGenerator' => __DIR__ . '/..' . '/illuminate/container/RewindableGenerator.php', - 'RectorPrefix202405\\Illuminate\\Container\\Util' => __DIR__ . '/..' . '/illuminate/container/Util.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Access\\Authorizable' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Access/Authorizable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Access\\Gate' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Access/Gate.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Authenticatable' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Authenticatable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\CanResetPassword' => __DIR__ . '/..' . '/illuminate/contracts/Auth/CanResetPassword.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Guard' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Guard.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Middleware/AuthenticatesRequests.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\MustVerifyEmail' => __DIR__ . '/..' . '/illuminate/contracts/Auth/MustVerifyEmail.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\PasswordBroker' => __DIR__ . '/..' . '/illuminate/contracts/Auth/PasswordBroker.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => __DIR__ . '/..' . '/illuminate/contracts/Auth/PasswordBrokerFactory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\StatefulGuard' => __DIR__ . '/..' . '/illuminate/contracts/Auth/StatefulGuard.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\SupportsBasicAuth' => __DIR__ . '/..' . '/illuminate/contracts/Auth/SupportsBasicAuth.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Auth\\UserProvider' => __DIR__ . '/..' . '/illuminate/contracts/Auth/UserProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\Broadcaster' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/Broadcaster.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/HasBroadcastChannel.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\ShouldBeUnique' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/ShouldBeUnique.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/ShouldBroadcast.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Bus\\Dispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Bus/Dispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Bus\\QueueingDispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Bus/QueueingDispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Lock' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Lock.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\LockProvider' => __DIR__ . '/..' . '/illuminate/contracts/Cache/LockProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\LockTimeoutException' => __DIR__ . '/..' . '/illuminate/contracts/Cache/LockTimeoutException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Repository' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Repository.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cache\\Store' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Store.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Config\\Repository' => __DIR__ . '/..' . '/illuminate/contracts/Config/Repository.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\Application' => __DIR__ . '/..' . '/illuminate/contracts/Console/Application.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\Isolatable' => __DIR__ . '/..' . '/illuminate/contracts/Console/Isolatable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\Kernel' => __DIR__ . '/..' . '/illuminate/contracts/Console/Kernel.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Console\\PromptsForMissingInput' => __DIR__ . '/..' . '/illuminate/contracts/Console/PromptsForMissingInput.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\BindingResolutionException' => __DIR__ . '/..' . '/illuminate/contracts/Container/BindingResolutionException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\CircularDependencyException' => __DIR__ . '/..' . '/illuminate/contracts/Container/CircularDependencyException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\Container' => __DIR__ . '/..' . '/illuminate/contracts/Container/Container.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/illuminate/contracts/Container/ContextualBindingBuilder.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cookie\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Cookie/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Cookie\\QueueingFactory' => __DIR__ . '/..' . '/illuminate/contracts/Cookie/QueueingFactory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\Builder' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/Builder.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\Castable' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/Castable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/CastsAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/CastsInboundAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\DeviatesCastableAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\SerializesCastableAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/SerializesCastableAttributes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Eloquent\\SupportsPartialRelations' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => __DIR__ . '/..' . '/illuminate/contracts/Database/Events/MigrationEvent.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\ModelIdentifier' => __DIR__ . '/..' . '/illuminate/contracts/Database/ModelIdentifier.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Query\\Builder' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/Builder.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Query\\ConditionExpression' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/ConditionExpression.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Database\\Query\\Expression' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/Expression.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/illuminate/contracts/Debug/ExceptionHandler.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\DecryptException' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/DecryptException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\EncryptException' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/EncryptException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\Encrypter' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/Encrypter.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Encryption\\StringEncrypter' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/StringEncrypter.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Events\\Dispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Events/Dispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Events\\ShouldDispatchAfterCommit' => __DIR__ . '/..' . '/illuminate/contracts/Events/ShouldDispatchAfterCommit.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Events\\ShouldHandleEventsAfterCommit' => __DIR__ . '/..' . '/illuminate/contracts/Events/ShouldHandleEventsAfterCommit.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\Cloud' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/Cloud.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/FileNotFoundException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/Filesystem.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Filesystem\\LockTimeoutException' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/LockTimeoutException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\Application' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/Application.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\CachesConfiguration' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/CachesConfiguration.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\CachesRoutes' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/CachesRoutes.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\ExceptionRenderer' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/ExceptionRenderer.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Foundation\\MaintenanceMode' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/MaintenanceMode.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Hashing\\Hasher' => __DIR__ . '/..' . '/illuminate/contracts/Hashing/Hasher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Http\\Kernel' => __DIR__ . '/..' . '/illuminate/contracts/Http/Kernel.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Attachable' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Attachable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\MailQueue' => __DIR__ . '/..' . '/illuminate/contracts/Mail/MailQueue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Mailable' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Mailable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Mail\\Mailer' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Mailer.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Notifications\\Dispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Notifications/Dispatcher.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Notifications\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Notifications/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pagination\\CursorPaginator' => __DIR__ . '/..' . '/illuminate/contracts/Pagination/CursorPaginator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pagination\\LengthAwarePaginator' => __DIR__ . '/..' . '/illuminate/contracts/Pagination/LengthAwarePaginator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pagination\\Paginator' => __DIR__ . '/..' . '/illuminate/contracts/Pagination/Paginator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pipeline\\Hub' => __DIR__ . '/..' . '/illuminate/contracts/Pipeline/Hub.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Pipeline\\Pipeline' => __DIR__ . '/..' . '/illuminate/contracts/Pipeline/Pipeline.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Process\\InvokedProcess' => __DIR__ . '/..' . '/illuminate/contracts/Process/InvokedProcess.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Process\\ProcessResult' => __DIR__ . '/..' . '/illuminate/contracts/Process/ProcessResult.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ClearableQueue' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ClearableQueue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\EntityNotFoundException' => __DIR__ . '/..' . '/illuminate/contracts/Queue/EntityNotFoundException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\EntityResolver' => __DIR__ . '/..' . '/illuminate/contracts/Queue/EntityResolver.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Job' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Job.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Monitor' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Monitor.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\Queue' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Queue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\QueueableCollection' => __DIR__ . '/..' . '/illuminate/contracts/Queue/QueueableCollection.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\QueueableEntity' => __DIR__ . '/..' . '/illuminate/contracts/Queue/QueueableEntity.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldBeEncrypted' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldBeEncrypted.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldBeUnique' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldBeUnique.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldBeUniqueUntilProcessing' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldBeUniqueUntilProcessing.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldQueue' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldQueue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Queue\\ShouldQueueAfterCommit' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldQueueAfterCommit.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\Connection' => __DIR__ . '/..' . '/illuminate/contracts/Redis/Connection.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\Connector' => __DIR__ . '/..' . '/illuminate/contracts/Redis/Connector.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Redis/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => __DIR__ . '/..' . '/illuminate/contracts/Redis/LimiterTimeoutException.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\BindingRegistrar' => __DIR__ . '/..' . '/illuminate/contracts/Routing/BindingRegistrar.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\Registrar' => __DIR__ . '/..' . '/illuminate/contracts/Routing/Registrar.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\ResponseFactory' => __DIR__ . '/..' . '/illuminate/contracts/Routing/ResponseFactory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\UrlGenerator' => __DIR__ . '/..' . '/illuminate/contracts/Routing/UrlGenerator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Routing\\UrlRoutable' => __DIR__ . '/..' . '/illuminate/contracts/Routing/UrlRoutable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Session\\Middleware\\AuthenticatesSessions' => __DIR__ . '/..' . '/illuminate/contracts/Session/Middleware/AuthenticatesSessions.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Session\\Session' => __DIR__ . '/..' . '/illuminate/contracts/Session/Session.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Arrayable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Arrayable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\CanBeEscapedWhenCastToString' => __DIR__ . '/..' . '/illuminate/contracts/Support/CanBeEscapedWhenCastToString.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\DeferrableProvider' => __DIR__ . '/..' . '/illuminate/contracts/Support/DeferrableProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => __DIR__ . '/..' . '/illuminate/contracts/Support/DeferringDisplayableValue.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Htmlable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Htmlable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Jsonable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Jsonable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\MessageBag' => __DIR__ . '/..' . '/illuminate/contracts/Support/MessageBag.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\MessageProvider' => __DIR__ . '/..' . '/illuminate/contracts/Support/MessageProvider.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Renderable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Renderable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\Responsable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Responsable.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Support\\ValidatedData' => __DIR__ . '/..' . '/illuminate/contracts/Support/ValidatedData.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Translation\\HasLocalePreference' => __DIR__ . '/..' . '/illuminate/contracts/Translation/HasLocalePreference.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Translation\\Loader' => __DIR__ . '/..' . '/illuminate/contracts/Translation/Loader.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Translation\\Translator' => __DIR__ . '/..' . '/illuminate/contracts/Translation/Translator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\DataAwareRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/DataAwareRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Validation/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ImplicitRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ImplicitRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\InvokableRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/InvokableRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\Rule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/Rule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\UncompromisedVerifier' => __DIR__ . '/..' . '/illuminate/contracts/Validation/UncompromisedVerifier.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ValidatesWhenResolved' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ValidatesWhenResolved.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ValidationRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ValidationRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\Validator' => __DIR__ . '/..' . '/illuminate/contracts/Validation/Validator.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\Validation\\ValidatorAwareRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ValidatorAwareRule.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\Engine' => __DIR__ . '/..' . '/illuminate/contracts/View/Engine.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/View/Factory.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\View' => __DIR__ . '/..' . '/illuminate/contracts/View/View.php', - 'RectorPrefix202405\\Illuminate\\Contracts\\View\\ViewCompilationException' => __DIR__ . '/..' . '/illuminate/contracts/View/ViewCompilationException.php', - 'RectorPrefix202405\\Nette\\ArgumentOutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\DeprecatedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\DirectoryNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\FileNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\HtmlStringable' => __DIR__ . '/..' . '/nette/utils/src/HtmlStringable.php', - 'RectorPrefix202405\\Nette\\IOException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\InvalidArgumentException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\InvalidStateException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\Iterators\\CachingIterator' => __DIR__ . '/..' . '/nette/utils/src/Iterators/CachingIterator.php', - 'RectorPrefix202405\\Nette\\Iterators\\Mapper' => __DIR__ . '/..' . '/nette/utils/src/Iterators/Mapper.php', - 'RectorPrefix202405\\Nette\\Localization\\ITranslator' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php', - 'RectorPrefix202405\\Nette\\Localization\\Translator' => __DIR__ . '/..' . '/nette/utils/src/Translator.php', - 'RectorPrefix202405\\Nette\\MemberAccessException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\NotImplementedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\NotSupportedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\OutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\SmartObject' => __DIR__ . '/..' . '/nette/utils/src/SmartObject.php', - 'RectorPrefix202405\\Nette\\StaticClass' => __DIR__ . '/..' . '/nette/utils/src/StaticClass.php', - 'RectorPrefix202405\\Nette\\UnexpectedValueException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\ArrayHash' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayHash.php', - 'RectorPrefix202405\\Nette\\Utils\\ArrayList' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayList.php', - 'RectorPrefix202405\\Nette\\Utils\\Arrays' => __DIR__ . '/..' . '/nette/utils/src/Utils/Arrays.php', - 'RectorPrefix202405\\Nette\\Utils\\AssertionException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\Callback' => __DIR__ . '/..' . '/nette/utils/src/Utils/Callback.php', - 'RectorPrefix202405\\Nette\\Utils\\DateTime' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTime.php', - 'RectorPrefix202405\\Nette\\Utils\\FileInfo' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileInfo.php', - 'RectorPrefix202405\\Nette\\Utils\\FileSystem' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileSystem.php', - 'RectorPrefix202405\\Nette\\Utils\\Finder' => __DIR__ . '/..' . '/nette/utils/src/Utils/Finder.php', - 'RectorPrefix202405\\Nette\\Utils\\Floats' => __DIR__ . '/..' . '/nette/utils/src/Utils/Floats.php', - 'RectorPrefix202405\\Nette\\Utils\\Helpers' => __DIR__ . '/..' . '/nette/utils/src/Utils/Helpers.php', - 'RectorPrefix202405\\Nette\\Utils\\Html' => __DIR__ . '/..' . '/nette/utils/src/Utils/Html.php', - 'RectorPrefix202405\\Nette\\Utils\\IHtmlString' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php', - 'RectorPrefix202405\\Nette\\Utils\\Image' => __DIR__ . '/..' . '/nette/utils/src/Utils/Image.php', - 'RectorPrefix202405\\Nette\\Utils\\ImageColor' => __DIR__ . '/..' . '/nette/utils/src/Utils/ImageColor.php', - 'RectorPrefix202405\\Nette\\Utils\\ImageException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\ImageType' => __DIR__ . '/..' . '/nette/utils/src/Utils/ImageType.php', - 'RectorPrefix202405\\Nette\\Utils\\Iterables' => __DIR__ . '/..' . '/nette/utils/src/Utils/Iterables.php', - 'RectorPrefix202405\\Nette\\Utils\\Json' => __DIR__ . '/..' . '/nette/utils/src/Utils/Json.php', - 'RectorPrefix202405\\Nette\\Utils\\JsonException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\ObjectHelpers' => __DIR__ . '/..' . '/nette/utils/src/Utils/ObjectHelpers.php', - 'RectorPrefix202405\\Nette\\Utils\\Paginator' => __DIR__ . '/..' . '/nette/utils/src/Utils/Paginator.php', - 'RectorPrefix202405\\Nette\\Utils\\Random' => __DIR__ . '/..' . '/nette/utils/src/Utils/Random.php', - 'RectorPrefix202405\\Nette\\Utils\\Reflection' => __DIR__ . '/..' . '/nette/utils/src/Utils/Reflection.php', - 'RectorPrefix202405\\Nette\\Utils\\ReflectionMethod' => __DIR__ . '/..' . '/nette/utils/src/Utils/ReflectionMethod.php', - 'RectorPrefix202405\\Nette\\Utils\\RegexpException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\Strings' => __DIR__ . '/..' . '/nette/utils/src/Utils/Strings.php', - 'RectorPrefix202405\\Nette\\Utils\\Type' => __DIR__ . '/..' . '/nette/utils/src/Utils/Type.php', - 'RectorPrefix202405\\Nette\\Utils\\UnknownImageFileException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'RectorPrefix202405\\Nette\\Utils\\Validators' => __DIR__ . '/..' . '/nette/utils/src/Utils/Validators.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\CiDetector' => __DIR__ . '/..' . '/ondram/ci-detector/src/CiDetector.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\CiDetectorInterface' => __DIR__ . '/..' . '/ondram/ci-detector/src/CiDetectorInterface.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AbstractCi' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AbstractCi.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AppVeyor' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AppVeyor.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AwsCodeBuild' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AwsCodeBuild.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\AzurePipelines' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AzurePipelines.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Bamboo' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Bamboo.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\BitbucketPipelines' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/BitbucketPipelines.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Buddy' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Buddy.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\CiInterface' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/CiInterface.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Circle' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Circle.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Codeship' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Codeship.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Continuousphp' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Continuousphp.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Drone' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Drone.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\GitHubActions' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/GitHubActions.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\GitLab' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/GitLab.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Jenkins' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Jenkins.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\SourceHut' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/SourceHut.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\TeamCity' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/TeamCity.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Travis' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Travis.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Ci\\Wercker' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Wercker.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Env' => __DIR__ . '/..' . '/ondram/ci-detector/src/Env.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\Exception\\CiNotDetectedException' => __DIR__ . '/..' . '/ondram/ci-detector/src/Exception/CiNotDetectedException.php', - 'RectorPrefix202405\\OndraM\\CiDetector\\TrinaryLogic' => __DIR__ . '/..' . '/ondram/ci-detector/src/TrinaryLogic.php', - 'RectorPrefix202405\\Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', - 'RectorPrefix202405\\Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', - 'RectorPrefix202405\\Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', - 'RectorPrefix202405\\Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php', - 'RectorPrefix202405\\Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php', - 'RectorPrefix202405\\Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareInterface.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareTrait.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerInterface.php', - 'RectorPrefix202405\\Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerTrait.php', - 'RectorPrefix202405\\Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/src/NullLogger.php', - 'RectorPrefix202405\\Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php', - 'RectorPrefix202405\\Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php', - 'RectorPrefix202405\\Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php', - 'RectorPrefix202405\\React\\Cache\\ArrayCache' => __DIR__ . '/..' . '/react/cache/src/ArrayCache.php', - 'RectorPrefix202405\\React\\Cache\\CacheInterface' => __DIR__ . '/..' . '/react/cache/src/CacheInterface.php', - 'RectorPrefix202405\\React\\ChildProcess\\Process' => __DIR__ . '/..' . '/react/child-process/src/Process.php', - 'RectorPrefix202405\\React\\Dns\\BadServerException' => __DIR__ . '/..' . '/react/dns/src/BadServerException.php', - 'RectorPrefix202405\\React\\Dns\\Config\\Config' => __DIR__ . '/..' . '/react/dns/src/Config/Config.php', - 'RectorPrefix202405\\React\\Dns\\Config\\HostsFile' => __DIR__ . '/..' . '/react/dns/src/Config/HostsFile.php', - 'RectorPrefix202405\\React\\Dns\\Model\\Message' => __DIR__ . '/..' . '/react/dns/src/Model/Message.php', - 'RectorPrefix202405\\React\\Dns\\Model\\Record' => __DIR__ . '/..' . '/react/dns/src/Model/Record.php', - 'RectorPrefix202405\\React\\Dns\\Protocol\\BinaryDumper' => __DIR__ . '/..' . '/react/dns/src/Protocol/BinaryDumper.php', - 'RectorPrefix202405\\React\\Dns\\Protocol\\Parser' => __DIR__ . '/..' . '/react/dns/src/Protocol/Parser.php', - 'RectorPrefix202405\\React\\Dns\\Query\\CachingExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/CachingExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\CancellationException' => __DIR__ . '/..' . '/react/dns/src/Query/CancellationException.php', - 'RectorPrefix202405\\React\\Dns\\Query\\CoopExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/CoopExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\ExecutorInterface' => __DIR__ . '/..' . '/react/dns/src/Query/ExecutorInterface.php', - 'RectorPrefix202405\\React\\Dns\\Query\\FallbackExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/FallbackExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\HostsFileExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/HostsFileExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\Query' => __DIR__ . '/..' . '/react/dns/src/Query/Query.php', - 'RectorPrefix202405\\React\\Dns\\Query\\RetryExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/RetryExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\SelectiveTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/SelectiveTransportExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\TcpTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/TcpTransportExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\TimeoutException' => __DIR__ . '/..' . '/react/dns/src/Query/TimeoutException.php', - 'RectorPrefix202405\\React\\Dns\\Query\\TimeoutExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/TimeoutExecutor.php', - 'RectorPrefix202405\\React\\Dns\\Query\\UdpTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/UdpTransportExecutor.php', - 'RectorPrefix202405\\React\\Dns\\RecordNotFoundException' => __DIR__ . '/..' . '/react/dns/src/RecordNotFoundException.php', - 'RectorPrefix202405\\React\\Dns\\Resolver\\Factory' => __DIR__ . '/..' . '/react/dns/src/Resolver/Factory.php', - 'RectorPrefix202405\\React\\Dns\\Resolver\\Resolver' => __DIR__ . '/..' . '/react/dns/src/Resolver/Resolver.php', - 'RectorPrefix202405\\React\\Dns\\Resolver\\ResolverInterface' => __DIR__ . '/..' . '/react/dns/src/Resolver/ResolverInterface.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtEvLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtEvLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtEventLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtEventLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtLibevLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtLibevLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtLibeventLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtLibeventLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\ExtUvLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtUvLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\Factory' => __DIR__ . '/..' . '/react/event-loop/src/Factory.php', - 'RectorPrefix202405\\React\\EventLoop\\Loop' => __DIR__ . '/..' . '/react/event-loop/src/Loop.php', - 'RectorPrefix202405\\React\\EventLoop\\LoopInterface' => __DIR__ . '/..' . '/react/event-loop/src/LoopInterface.php', - 'RectorPrefix202405\\React\\EventLoop\\SignalsHandler' => __DIR__ . '/..' . '/react/event-loop/src/SignalsHandler.php', - 'RectorPrefix202405\\React\\EventLoop\\StreamSelectLoop' => __DIR__ . '/..' . '/react/event-loop/src/StreamSelectLoop.php', - 'RectorPrefix202405\\React\\EventLoop\\Tick\\FutureTickQueue' => __DIR__ . '/..' . '/react/event-loop/src/Tick/FutureTickQueue.php', - 'RectorPrefix202405\\React\\EventLoop\\TimerInterface' => __DIR__ . '/..' . '/react/event-loop/src/TimerInterface.php', - 'RectorPrefix202405\\React\\EventLoop\\Timer\\Timer' => __DIR__ . '/..' . '/react/event-loop/src/Timer/Timer.php', - 'RectorPrefix202405\\React\\EventLoop\\Timer\\Timers' => __DIR__ . '/..' . '/react/event-loop/src/Timer/Timers.php', - 'RectorPrefix202405\\React\\Promise\\CancellablePromiseInterface' => __DIR__ . '/..' . '/react/promise/src/CancellablePromiseInterface.php', - 'RectorPrefix202405\\React\\Promise\\CancellationQueue' => __DIR__ . '/..' . '/react/promise/src/CancellationQueue.php', - 'RectorPrefix202405\\React\\Promise\\Deferred' => __DIR__ . '/..' . '/react/promise/src/Deferred.php', - 'RectorPrefix202405\\React\\Promise\\Exception\\LengthException' => __DIR__ . '/..' . '/react/promise/src/Exception/LengthException.php', - 'RectorPrefix202405\\React\\Promise\\ExtendedPromiseInterface' => __DIR__ . '/..' . '/react/promise/src/ExtendedPromiseInterface.php', - 'RectorPrefix202405\\React\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/react/promise/src/FulfilledPromise.php', - 'RectorPrefix202405\\React\\Promise\\LazyPromise' => __DIR__ . '/..' . '/react/promise/src/LazyPromise.php', - 'RectorPrefix202405\\React\\Promise\\Promise' => __DIR__ . '/..' . '/react/promise/src/Promise.php', - 'RectorPrefix202405\\React\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/react/promise/src/PromiseInterface.php', - 'RectorPrefix202405\\React\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/react/promise/src/PromisorInterface.php', - 'RectorPrefix202405\\React\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/react/promise/src/RejectedPromise.php', - 'RectorPrefix202405\\React\\Promise\\UnhandledRejectionException' => __DIR__ . '/..' . '/react/promise/src/UnhandledRejectionException.php', - 'RectorPrefix202405\\React\\Socket\\Connection' => __DIR__ . '/..' . '/react/socket/src/Connection.php', - 'RectorPrefix202405\\React\\Socket\\ConnectionInterface' => __DIR__ . '/..' . '/react/socket/src/ConnectionInterface.php', - 'RectorPrefix202405\\React\\Socket\\Connector' => __DIR__ . '/..' . '/react/socket/src/Connector.php', - 'RectorPrefix202405\\React\\Socket\\ConnectorInterface' => __DIR__ . '/..' . '/react/socket/src/ConnectorInterface.php', - 'RectorPrefix202405\\React\\Socket\\DnsConnector' => __DIR__ . '/..' . '/react/socket/src/DnsConnector.php', - 'RectorPrefix202405\\React\\Socket\\FdServer' => __DIR__ . '/..' . '/react/socket/src/FdServer.php', - 'RectorPrefix202405\\React\\Socket\\FixedUriConnector' => __DIR__ . '/..' . '/react/socket/src/FixedUriConnector.php', - 'RectorPrefix202405\\React\\Socket\\HappyEyeBallsConnectionBuilder' => __DIR__ . '/..' . '/react/socket/src/HappyEyeBallsConnectionBuilder.php', - 'RectorPrefix202405\\React\\Socket\\HappyEyeBallsConnector' => __DIR__ . '/..' . '/react/socket/src/HappyEyeBallsConnector.php', - 'RectorPrefix202405\\React\\Socket\\LimitingServer' => __DIR__ . '/..' . '/react/socket/src/LimitingServer.php', - 'RectorPrefix202405\\React\\Socket\\SecureConnector' => __DIR__ . '/..' . '/react/socket/src/SecureConnector.php', - 'RectorPrefix202405\\React\\Socket\\SecureServer' => __DIR__ . '/..' . '/react/socket/src/SecureServer.php', - 'RectorPrefix202405\\React\\Socket\\Server' => __DIR__ . '/..' . '/react/socket/src/Server.php', - 'RectorPrefix202405\\React\\Socket\\ServerInterface' => __DIR__ . '/..' . '/react/socket/src/ServerInterface.php', - 'RectorPrefix202405\\React\\Socket\\SocketServer' => __DIR__ . '/..' . '/react/socket/src/SocketServer.php', - 'RectorPrefix202405\\React\\Socket\\StreamEncryption' => __DIR__ . '/..' . '/react/socket/src/StreamEncryption.php', - 'RectorPrefix202405\\React\\Socket\\TcpConnector' => __DIR__ . '/..' . '/react/socket/src/TcpConnector.php', - 'RectorPrefix202405\\React\\Socket\\TcpServer' => __DIR__ . '/..' . '/react/socket/src/TcpServer.php', - 'RectorPrefix202405\\React\\Socket\\TimeoutConnector' => __DIR__ . '/..' . '/react/socket/src/TimeoutConnector.php', - 'RectorPrefix202405\\React\\Socket\\UnixConnector' => __DIR__ . '/..' . '/react/socket/src/UnixConnector.php', - 'RectorPrefix202405\\React\\Socket\\UnixServer' => __DIR__ . '/..' . '/react/socket/src/UnixServer.php', - 'RectorPrefix202405\\React\\Stream\\CompositeStream' => __DIR__ . '/..' . '/react/stream/src/CompositeStream.php', - 'RectorPrefix202405\\React\\Stream\\DuplexResourceStream' => __DIR__ . '/..' . '/react/stream/src/DuplexResourceStream.php', - 'RectorPrefix202405\\React\\Stream\\DuplexStreamInterface' => __DIR__ . '/..' . '/react/stream/src/DuplexStreamInterface.php', - 'RectorPrefix202405\\React\\Stream\\ReadableResourceStream' => __DIR__ . '/..' . '/react/stream/src/ReadableResourceStream.php', - 'RectorPrefix202405\\React\\Stream\\ReadableStreamInterface' => __DIR__ . '/..' . '/react/stream/src/ReadableStreamInterface.php', - 'RectorPrefix202405\\React\\Stream\\ThroughStream' => __DIR__ . '/..' . '/react/stream/src/ThroughStream.php', - 'RectorPrefix202405\\React\\Stream\\Util' => __DIR__ . '/..' . '/react/stream/src/Util.php', - 'RectorPrefix202405\\React\\Stream\\WritableResourceStream' => __DIR__ . '/..' . '/react/stream/src/WritableResourceStream.php', - 'RectorPrefix202405\\React\\Stream\\WritableStreamInterface' => __DIR__ . '/..' . '/react/stream/src/WritableStreamInterface.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', - 'RectorPrefix202405\\SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Attribute\\AsCommand' => __DIR__ . '/..' . '/symfony/console/Attribute/AsCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CI\\GithubActionReporter' => __DIR__ . '/..' . '/symfony/console/CI/GithubActionReporter.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Color' => __DIR__ . '/..' . '/symfony/console/Color.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\CompleteCommand' => __DIR__ . '/..' . '/symfony/console/Command/CompleteCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => __DIR__ . '/..' . '/symfony/console/Command/DumpCompletionCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\LazyCommand' => __DIR__ . '/..' . '/symfony/console/Command/LazyCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => __DIR__ . '/..' . '/symfony/console/Command/SignalableCommandInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Command\\TraceableCommand' => __DIR__ . '/..' . '/symfony/console/Command/TraceableCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\CompletionInput' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionSuggestions.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/BashCompletionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => __DIR__ . '/..' . '/symfony/console/Completion/Output/CompletionOutputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\FishCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/FishCompletionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Output\\ZshCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/ZshCompletionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Completion\\Suggestion' => __DIR__ . '/..' . '/symfony/console/Completion/Suggestion.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Cursor' => __DIR__ . '/..' . '/symfony/console/Cursor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\DataCollector\\CommandDataCollector' => __DIR__ . '/..' . '/symfony/console/DataCollector/CommandDataCollector.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Debug\\CliRequest' => __DIR__ . '/..' . '/symfony/console/Debug/CliRequest.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidOptionException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/console/Exception/LogicException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\MissingInputException' => __DIR__ . '/..' . '/symfony/console/Exception/MissingInputException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/NamespaceNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\RunCommandFailedException' => __DIR__ . '/..' . '/symfony/console/Exception/RunCommandFailedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatter.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatterStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleStack.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DebugFormatterHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DescriptorHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\Dumper' => __DIR__ . '/..' . '/symfony/console/Helper/Dumper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\FormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/FormatterHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\Helper' => __DIR__ . '/..' . '/symfony/console/Helper/Helper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\HelperInterface' => __DIR__ . '/..' . '/symfony/console/Helper/HelperInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\HelperSet' => __DIR__ . '/..' . '/symfony/console/Helper/HelperSet.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\InputAwareHelper' => __DIR__ . '/..' . '/symfony/console/Helper/InputAwareHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\OutputWrapper' => __DIR__ . '/..' . '/symfony/console/Helper/OutputWrapper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\ProcessHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProcessHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\ProgressBar' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressBar.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\ProgressIndicator' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressIndicator.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\QuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/QuestionHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableCellStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableCellStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableRows' => __DIR__ . '/..' . '/symfony/console/Helper/TableRows.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/symfony/console/Input/ArgvInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\ArrayInput' => __DIR__ . '/..' . '/symfony/console/Input/ArrayInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\Input' => __DIR__ . '/..' . '/symfony/console/Input/Input.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputArgument' => __DIR__ . '/..' . '/symfony/console/Input/InputArgument.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputAwareInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputAwareInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputDefinition' => __DIR__ . '/..' . '/symfony/console/Input/InputDefinition.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\InputOption' => __DIR__ . '/..' . '/symfony/console/Input/InputOption.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\StreamableInputInterface' => __DIR__ . '/..' . '/symfony/console/Input/StreamableInputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Input\\StringInput' => __DIR__ . '/..' . '/symfony/console/Input/StringInput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/symfony/console/Logger/ConsoleLogger.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Messenger\\RunCommandContext' => __DIR__ . '/..' . '/symfony/console/Messenger/RunCommandContext.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Messenger\\RunCommandMessage' => __DIR__ . '/..' . '/symfony/console/Messenger/RunCommandMessage.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Messenger\\RunCommandMessageHandler' => __DIR__ . '/..' . '/symfony/console/Messenger/RunCommandMessageHandler.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\AnsiColorMode' => __DIR__ . '/..' . '/symfony/console/Output/AnsiColorMode.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\BufferedOutput' => __DIR__ . '/..' . '/symfony/console/Output/BufferedOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleSectionOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/symfony/console/Output/NullOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\Output' => __DIR__ . '/..' . '/symfony/console/Output/Output.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\OutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/OutputInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\StreamOutput' => __DIR__ . '/..' . '/symfony/console/Output/StreamOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => __DIR__ . '/..' . '/symfony/console/Output/TrimmedBufferOutput.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\SignalRegistry\\SignalMap' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalMap.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalRegistry.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\SingleCommandApplication' => __DIR__ . '/..' . '/symfony/console/SingleCommandApplication.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', - 'RectorPrefix202405\\Symfony\\Component\\Console\\Terminal' => __DIR__ . '/..' . '/symfony/console/Terminal.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php', - 'RectorPrefix202405\\Symfony\\Component\\Filesystem\\Path' => __DIR__ . '/..' . '/symfony/filesystem/Path.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\LazyIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/LazyIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', - 'RectorPrefix202405\\Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/process/Exception/InvalidArgumentException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/process/Exception/LogicException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessFailedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessSignaledException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessTimedOutException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\RunProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/RunProcessFailedException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/process/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\ExecutableFinder' => __DIR__ . '/..' . '/symfony/process/ExecutableFinder.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\InputStream' => __DIR__ . '/..' . '/symfony/process/InputStream.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Messenger\\RunProcessContext' => __DIR__ . '/..' . '/symfony/process/Messenger/RunProcessContext.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Messenger\\RunProcessMessage' => __DIR__ . '/..' . '/symfony/process/Messenger/RunProcessMessage.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Messenger\\RunProcessMessageHandler' => __DIR__ . '/..' . '/symfony/process/Messenger/RunProcessMessageHandler.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\PhpExecutableFinder' => __DIR__ . '/..' . '/symfony/process/PhpExecutableFinder.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\PhpProcess' => __DIR__ . '/..' . '/symfony/process/PhpProcess.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\PhpSubprocess' => __DIR__ . '/..' . '/symfony/process/PhpSubprocess.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\AbstractPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/AbstractPipes.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\PipesInterface' => __DIR__ . '/..' . '/symfony/process/Pipes/PipesInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\UnixPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/UnixPipes.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Pipes\\WindowsPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/WindowsPipes.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\Process' => __DIR__ . '/..' . '/symfony/process/Process.php', - 'RectorPrefix202405\\Symfony\\Component\\Process\\ProcessUtils' => __DIR__ . '/..' . '/symfony/process/ProcessUtils.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php', - 'RectorPrefix202405\\Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceCollectionInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceCollectionInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceLocatorTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceLocatorTrait.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceMethodsSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceMethodsSubscriberTrait.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', - 'RectorPrefix202405\\Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\CommandLine\\WorkerCommandLineFactory' => __DIR__ . '/..' . '/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Contract\\SerializableInterface' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Contract/SerializableInterface.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\CpuCoreCountProvider' => __DIR__ . '/..' . '/symplify/easy-parallel/src/CpuCoreCountProvider.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\Action' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/Action.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\Content' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/Content.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\ReactCommand' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/ReactCommand.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Enum\\ReactEvent' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/ReactEvent.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Exception\\ParallelShouldNotHappenException' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Exception/ParallelShouldNotHappenException.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\Reflection\\CommandFromReflectionFactory' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Reflection/CommandFromReflectionFactory.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ScheduleFactory' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ScheduleFactory.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\EasyParallelConfig' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/EasyParallelConfig.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\ParallelProcess' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/ParallelProcess.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\ProcessPool' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/ProcessPool.php', - 'RectorPrefix202405\\Symplify\\EasyParallel\\ValueObject\\Schedule' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/Schedule.php', - 'RectorPrefix202405\\Webmozart\\Assert\\Assert' => __DIR__ . '/..' . '/webmozart/assert/src/Assert.php', - 'RectorPrefix202405\\Webmozart\\Assert\\InvalidArgumentException' => __DIR__ . '/..' . '/webmozart/assert/src/InvalidArgumentException.php', - 'RectorPrefix202405\\Webmozart\\Assert\\Mixin' => __DIR__ . '/..' . '/webmozart/assert/src/Mixin.php', + 'RectorPrefix202410\\Clue\\React\\NDJson\\Decoder' => __DIR__ . '/..' . '/clue/ndjson-react/src/Decoder.php', + 'RectorPrefix202410\\Clue\\React\\NDJson\\Encoder' => __DIR__ . '/..' . '/clue/ndjson-react/src/Encoder.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchAllResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchAllStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllStrictGroupsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchAllWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllWithOffsetsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchStrictGroupsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\MatchWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchWithOffsetsResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregMatchFlags' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchFlags.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php', + 'RectorPrefix202410\\Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php', + 'RectorPrefix202410\\Composer\\Pcre\\PcreException' => __DIR__ . '/..' . '/composer/pcre/src/PcreException.php', + 'RectorPrefix202410\\Composer\\Pcre\\Preg' => __DIR__ . '/..' . '/composer/pcre/src/Preg.php', + 'RectorPrefix202410\\Composer\\Pcre\\Regex' => __DIR__ . '/..' . '/composer/pcre/src/Regex.php', + 'RectorPrefix202410\\Composer\\Pcre\\ReplaceResult' => __DIR__ . '/..' . '/composer/pcre/src/ReplaceResult.php', + 'RectorPrefix202410\\Composer\\Pcre\\UnexpectedNullMatchException' => __DIR__ . '/..' . '/composer/pcre/src/UnexpectedNullMatchException.php', + 'RectorPrefix202410\\Composer\\Semver\\Comparator' => __DIR__ . '/..' . '/composer/semver/src/Comparator.php', + 'RectorPrefix202410\\Composer\\Semver\\CompilingMatcher' => __DIR__ . '/..' . '/composer/semver/src/CompilingMatcher.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\Bound' => __DIR__ . '/..' . '/composer/semver/src/Constraint/Bound.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\Constraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/Constraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\ConstraintInterface' => __DIR__ . '/..' . '/composer/semver/src/Constraint/ConstraintInterface.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\MatchAllConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MatchAllConstraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\MatchNoneConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MatchNoneConstraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Constraint\\MultiConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MultiConstraint.php', + 'RectorPrefix202410\\Composer\\Semver\\Interval' => __DIR__ . '/..' . '/composer/semver/src/Interval.php', + 'RectorPrefix202410\\Composer\\Semver\\Intervals' => __DIR__ . '/..' . '/composer/semver/src/Intervals.php', + 'RectorPrefix202410\\Composer\\Semver\\Semver' => __DIR__ . '/..' . '/composer/semver/src/Semver.php', + 'RectorPrefix202410\\Composer\\Semver\\VersionParser' => __DIR__ . '/..' . '/composer/semver/src/VersionParser.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\PhpConfig' => __DIR__ . '/..' . '/composer/xdebug-handler/src/PhpConfig.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\Process' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Process.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\Status' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Status.php', + 'RectorPrefix202410\\Composer\\XdebugHandler\\XdebugHandler' => __DIR__ . '/..' . '/composer/xdebug-handler/src/XdebugHandler.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\CachedWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\GenericLanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Inflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Language' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Language.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\LanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\NoopWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\English\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\French\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Pattern' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Patterns' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Portuguese\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Ruleset' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Spanish\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Substitution' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Substitutions' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Transformation' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Transformations' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Turkish\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\Rules\\Word' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\RulesetInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php', + 'RectorPrefix202410\\Doctrine\\Inflector\\WordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php', + 'RectorPrefix202410\\Evenement\\EventEmitter' => __DIR__ . '/..' . '/evenement/evenement/src/EventEmitter.php', + 'RectorPrefix202410\\Evenement\\EventEmitterInterface' => __DIR__ . '/..' . '/evenement/evenement/src/EventEmitterInterface.php', + 'RectorPrefix202410\\Evenement\\EventEmitterTrait' => __DIR__ . '/..' . '/evenement/evenement/src/EventEmitterTrait.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\CpuCoreCounter' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/CpuCoreCounter.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Diagnoser' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Diagnoser.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Executor\\ProcOpenExecutor' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Executor\\ProcessExecutor' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CmiCmdletPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\EnvVariableFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\LscpuLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\LscpuPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\NProcFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/NProcFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\NProcessorFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\NullCpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\OnlyInPowerShellFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\OnlyOnOSFamilyFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\ProcOpenBasedFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\SkipOnOSFamilyFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\WindowsRegistryLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\WmicLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php', + 'RectorPrefix202410\\Fidry\\CpuCoreCounter\\ParallelisationResult' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/ParallelisationResult.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Auth' => __DIR__ . '/..' . '/illuminate/container/Attributes/Auth.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Authenticated' => __DIR__ . '/..' . '/illuminate/container/Attributes/Authenticated.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Cache' => __DIR__ . '/..' . '/illuminate/container/Attributes/Cache.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Config' => __DIR__ . '/..' . '/illuminate/container/Attributes/Config.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\CurrentUser' => __DIR__ . '/..' . '/illuminate/container/Attributes/CurrentUser.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\DB' => __DIR__ . '/..' . '/illuminate/container/Attributes/DB.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Database' => __DIR__ . '/..' . '/illuminate/container/Attributes/Database.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Log' => __DIR__ . '/..' . '/illuminate/container/Attributes/Log.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Storage' => __DIR__ . '/..' . '/illuminate/container/Attributes/Storage.php', + 'RectorPrefix202410\\Illuminate\\Container\\Attributes\\Tag' => __DIR__ . '/..' . '/illuminate/container/Attributes/Tag.php', + 'RectorPrefix202410\\Illuminate\\Container\\BoundMethod' => __DIR__ . '/..' . '/illuminate/container/BoundMethod.php', + 'RectorPrefix202410\\Illuminate\\Container\\Container' => __DIR__ . '/..' . '/illuminate/container/Container.php', + 'RectorPrefix202410\\Illuminate\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/illuminate/container/ContextualBindingBuilder.php', + 'RectorPrefix202410\\Illuminate\\Container\\EntryNotFoundException' => __DIR__ . '/..' . '/illuminate/container/EntryNotFoundException.php', + 'RectorPrefix202410\\Illuminate\\Container\\RewindableGenerator' => __DIR__ . '/..' . '/illuminate/container/RewindableGenerator.php', + 'RectorPrefix202410\\Illuminate\\Container\\Util' => __DIR__ . '/..' . '/illuminate/container/Util.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Access\\Authorizable' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Access/Authorizable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Access\\Gate' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Access/Gate.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Authenticatable' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Authenticatable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\CanResetPassword' => __DIR__ . '/..' . '/illuminate/contracts/Auth/CanResetPassword.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Guard' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Guard.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => __DIR__ . '/..' . '/illuminate/contracts/Auth/Middleware/AuthenticatesRequests.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\MustVerifyEmail' => __DIR__ . '/..' . '/illuminate/contracts/Auth/MustVerifyEmail.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\PasswordBroker' => __DIR__ . '/..' . '/illuminate/contracts/Auth/PasswordBroker.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => __DIR__ . '/..' . '/illuminate/contracts/Auth/PasswordBrokerFactory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\StatefulGuard' => __DIR__ . '/..' . '/illuminate/contracts/Auth/StatefulGuard.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\SupportsBasicAuth' => __DIR__ . '/..' . '/illuminate/contracts/Auth/SupportsBasicAuth.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Auth\\UserProvider' => __DIR__ . '/..' . '/illuminate/contracts/Auth/UserProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\Broadcaster' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/Broadcaster.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\HasBroadcastChannel' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/HasBroadcastChannel.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\ShouldBeUnique' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/ShouldBeUnique.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/ShouldBroadcast.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow' => __DIR__ . '/..' . '/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Bus\\Dispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Bus/Dispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Bus\\QueueingDispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Bus/QueueingDispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Lock' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Lock.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\LockProvider' => __DIR__ . '/..' . '/illuminate/contracts/Cache/LockProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\LockTimeoutException' => __DIR__ . '/..' . '/illuminate/contracts/Cache/LockTimeoutException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Repository' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Repository.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cache\\Store' => __DIR__ . '/..' . '/illuminate/contracts/Cache/Store.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Concurrency\\Driver' => __DIR__ . '/..' . '/illuminate/contracts/Concurrency/Driver.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Config\\Repository' => __DIR__ . '/..' . '/illuminate/contracts/Config/Repository.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\Application' => __DIR__ . '/..' . '/illuminate/contracts/Console/Application.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\Isolatable' => __DIR__ . '/..' . '/illuminate/contracts/Console/Isolatable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\Kernel' => __DIR__ . '/..' . '/illuminate/contracts/Console/Kernel.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Console\\PromptsForMissingInput' => __DIR__ . '/..' . '/illuminate/contracts/Console/PromptsForMissingInput.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\BindingResolutionException' => __DIR__ . '/..' . '/illuminate/contracts/Container/BindingResolutionException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\CircularDependencyException' => __DIR__ . '/..' . '/illuminate/contracts/Container/CircularDependencyException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\Container' => __DIR__ . '/..' . '/illuminate/contracts/Container/Container.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\ContextualAttribute' => __DIR__ . '/..' . '/illuminate/contracts/Container/ContextualAttribute.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/illuminate/contracts/Container/ContextualBindingBuilder.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cookie\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Cookie/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Cookie\\QueueingFactory' => __DIR__ . '/..' . '/illuminate/contracts/Cookie/QueueingFactory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\Builder' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/Builder.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\Castable' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/Castable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/CastsAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/CastsInboundAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\DeviatesCastableAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\SerializesCastableAttributes' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/SerializesCastableAttributes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Eloquent\\SupportsPartialRelations' => __DIR__ . '/..' . '/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => __DIR__ . '/..' . '/illuminate/contracts/Database/Events/MigrationEvent.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\ModelIdentifier' => __DIR__ . '/..' . '/illuminate/contracts/Database/ModelIdentifier.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Query\\Builder' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/Builder.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Query\\ConditionExpression' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/ConditionExpression.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Database\\Query\\Expression' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/Expression.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/illuminate/contracts/Debug/ExceptionHandler.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Debug\\ShouldntReport' => __DIR__ . '/..' . '/illuminate/contracts/Debug/ShouldntReport.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\DecryptException' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/DecryptException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\EncryptException' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/EncryptException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\Encrypter' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/Encrypter.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Encryption\\StringEncrypter' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/StringEncrypter.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Events\\Dispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Events/Dispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Events\\ShouldDispatchAfterCommit' => __DIR__ . '/..' . '/illuminate/contracts/Events/ShouldDispatchAfterCommit.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Events\\ShouldHandleEventsAfterCommit' => __DIR__ . '/..' . '/illuminate/contracts/Events/ShouldHandleEventsAfterCommit.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\Cloud' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/Cloud.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/FileNotFoundException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/Filesystem.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Filesystem\\LockTimeoutException' => __DIR__ . '/..' . '/illuminate/contracts/Filesystem/LockTimeoutException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\Application' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/Application.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\CachesConfiguration' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/CachesConfiguration.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\CachesRoutes' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/CachesRoutes.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\ExceptionRenderer' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/ExceptionRenderer.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Foundation\\MaintenanceMode' => __DIR__ . '/..' . '/illuminate/contracts/Foundation/MaintenanceMode.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Hashing\\Hasher' => __DIR__ . '/..' . '/illuminate/contracts/Hashing/Hasher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Http\\Kernel' => __DIR__ . '/..' . '/illuminate/contracts/Http/Kernel.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Attachable' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Attachable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\MailQueue' => __DIR__ . '/..' . '/illuminate/contracts/Mail/MailQueue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Mailable' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Mailable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Mail\\Mailer' => __DIR__ . '/..' . '/illuminate/contracts/Mail/Mailer.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Notifications\\Dispatcher' => __DIR__ . '/..' . '/illuminate/contracts/Notifications/Dispatcher.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Notifications\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Notifications/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pagination\\CursorPaginator' => __DIR__ . '/..' . '/illuminate/contracts/Pagination/CursorPaginator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pagination\\LengthAwarePaginator' => __DIR__ . '/..' . '/illuminate/contracts/Pagination/LengthAwarePaginator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pagination\\Paginator' => __DIR__ . '/..' . '/illuminate/contracts/Pagination/Paginator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pipeline\\Hub' => __DIR__ . '/..' . '/illuminate/contracts/Pipeline/Hub.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Pipeline\\Pipeline' => __DIR__ . '/..' . '/illuminate/contracts/Pipeline/Pipeline.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Process\\InvokedProcess' => __DIR__ . '/..' . '/illuminate/contracts/Process/InvokedProcess.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Process\\ProcessResult' => __DIR__ . '/..' . '/illuminate/contracts/Process/ProcessResult.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ClearableQueue' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ClearableQueue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\EntityNotFoundException' => __DIR__ . '/..' . '/illuminate/contracts/Queue/EntityNotFoundException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\EntityResolver' => __DIR__ . '/..' . '/illuminate/contracts/Queue/EntityResolver.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Job' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Job.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Monitor' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Monitor.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\Queue' => __DIR__ . '/..' . '/illuminate/contracts/Queue/Queue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\QueueableCollection' => __DIR__ . '/..' . '/illuminate/contracts/Queue/QueueableCollection.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\QueueableEntity' => __DIR__ . '/..' . '/illuminate/contracts/Queue/QueueableEntity.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldBeEncrypted' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldBeEncrypted.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldBeUnique' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldBeUnique.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldBeUniqueUntilProcessing' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldBeUniqueUntilProcessing.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldQueue' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldQueue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Queue\\ShouldQueueAfterCommit' => __DIR__ . '/..' . '/illuminate/contracts/Queue/ShouldQueueAfterCommit.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\Connection' => __DIR__ . '/..' . '/illuminate/contracts/Redis/Connection.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\Connector' => __DIR__ . '/..' . '/illuminate/contracts/Redis/Connector.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Redis/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => __DIR__ . '/..' . '/illuminate/contracts/Redis/LimiterTimeoutException.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\BindingRegistrar' => __DIR__ . '/..' . '/illuminate/contracts/Routing/BindingRegistrar.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\Registrar' => __DIR__ . '/..' . '/illuminate/contracts/Routing/Registrar.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\ResponseFactory' => __DIR__ . '/..' . '/illuminate/contracts/Routing/ResponseFactory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\UrlGenerator' => __DIR__ . '/..' . '/illuminate/contracts/Routing/UrlGenerator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Routing\\UrlRoutable' => __DIR__ . '/..' . '/illuminate/contracts/Routing/UrlRoutable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Session\\Middleware\\AuthenticatesSessions' => __DIR__ . '/..' . '/illuminate/contracts/Session/Middleware/AuthenticatesSessions.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Session\\Session' => __DIR__ . '/..' . '/illuminate/contracts/Session/Session.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Arrayable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Arrayable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\CanBeEscapedWhenCastToString' => __DIR__ . '/..' . '/illuminate/contracts/Support/CanBeEscapedWhenCastToString.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\DeferrableProvider' => __DIR__ . '/..' . '/illuminate/contracts/Support/DeferrableProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => __DIR__ . '/..' . '/illuminate/contracts/Support/DeferringDisplayableValue.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Htmlable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Htmlable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Jsonable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Jsonable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\MessageBag' => __DIR__ . '/..' . '/illuminate/contracts/Support/MessageBag.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\MessageProvider' => __DIR__ . '/..' . '/illuminate/contracts/Support/MessageProvider.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Renderable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Renderable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\Responsable' => __DIR__ . '/..' . '/illuminate/contracts/Support/Responsable.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Support\\ValidatedData' => __DIR__ . '/..' . '/illuminate/contracts/Support/ValidatedData.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Translation\\HasLocalePreference' => __DIR__ . '/..' . '/illuminate/contracts/Translation/HasLocalePreference.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Translation\\Loader' => __DIR__ . '/..' . '/illuminate/contracts/Translation/Loader.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Translation\\Translator' => __DIR__ . '/..' . '/illuminate/contracts/Translation/Translator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\DataAwareRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/DataAwareRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/Validation/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ImplicitRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ImplicitRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\InvokableRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/InvokableRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\Rule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/Rule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\UncompromisedVerifier' => __DIR__ . '/..' . '/illuminate/contracts/Validation/UncompromisedVerifier.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ValidatesWhenResolved' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ValidatesWhenResolved.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ValidationRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ValidationRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\Validator' => __DIR__ . '/..' . '/illuminate/contracts/Validation/Validator.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\Validation\\ValidatorAwareRule' => __DIR__ . '/..' . '/illuminate/contracts/Validation/ValidatorAwareRule.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\Engine' => __DIR__ . '/..' . '/illuminate/contracts/View/Engine.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\Factory' => __DIR__ . '/..' . '/illuminate/contracts/View/Factory.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\View' => __DIR__ . '/..' . '/illuminate/contracts/View/View.php', + 'RectorPrefix202410\\Illuminate\\Contracts\\View\\ViewCompilationException' => __DIR__ . '/..' . '/illuminate/contracts/View/ViewCompilationException.php', + 'RectorPrefix202410\\Nette\\ArgumentOutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\DeprecatedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\DirectoryNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\FileNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\HtmlStringable' => __DIR__ . '/..' . '/nette/utils/src/HtmlStringable.php', + 'RectorPrefix202410\\Nette\\IOException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\InvalidArgumentException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\InvalidStateException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\Iterators\\CachingIterator' => __DIR__ . '/..' . '/nette/utils/src/Iterators/CachingIterator.php', + 'RectorPrefix202410\\Nette\\Iterators\\Mapper' => __DIR__ . '/..' . '/nette/utils/src/Iterators/Mapper.php', + 'RectorPrefix202410\\Nette\\Localization\\ITranslator' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php', + 'RectorPrefix202410\\Nette\\Localization\\Translator' => __DIR__ . '/..' . '/nette/utils/src/Translator.php', + 'RectorPrefix202410\\Nette\\MemberAccessException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\NotImplementedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\NotSupportedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\OutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\SmartObject' => __DIR__ . '/..' . '/nette/utils/src/SmartObject.php', + 'RectorPrefix202410\\Nette\\StaticClass' => __DIR__ . '/..' . '/nette/utils/src/StaticClass.php', + 'RectorPrefix202410\\Nette\\UnexpectedValueException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\ArrayHash' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayHash.php', + 'RectorPrefix202410\\Nette\\Utils\\ArrayList' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayList.php', + 'RectorPrefix202410\\Nette\\Utils\\Arrays' => __DIR__ . '/..' . '/nette/utils/src/Utils/Arrays.php', + 'RectorPrefix202410\\Nette\\Utils\\AssertionException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\Callback' => __DIR__ . '/..' . '/nette/utils/src/Utils/Callback.php', + 'RectorPrefix202410\\Nette\\Utils\\DateTime' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTime.php', + 'RectorPrefix202410\\Nette\\Utils\\FileInfo' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileInfo.php', + 'RectorPrefix202410\\Nette\\Utils\\FileSystem' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileSystem.php', + 'RectorPrefix202410\\Nette\\Utils\\Finder' => __DIR__ . '/..' . '/nette/utils/src/Utils/Finder.php', + 'RectorPrefix202410\\Nette\\Utils\\Floats' => __DIR__ . '/..' . '/nette/utils/src/Utils/Floats.php', + 'RectorPrefix202410\\Nette\\Utils\\Helpers' => __DIR__ . '/..' . '/nette/utils/src/Utils/Helpers.php', + 'RectorPrefix202410\\Nette\\Utils\\Html' => __DIR__ . '/..' . '/nette/utils/src/Utils/Html.php', + 'RectorPrefix202410\\Nette\\Utils\\IHtmlString' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php', + 'RectorPrefix202410\\Nette\\Utils\\Image' => __DIR__ . '/..' . '/nette/utils/src/Utils/Image.php', + 'RectorPrefix202410\\Nette\\Utils\\ImageColor' => __DIR__ . '/..' . '/nette/utils/src/Utils/ImageColor.php', + 'RectorPrefix202410\\Nette\\Utils\\ImageException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\ImageType' => __DIR__ . '/..' . '/nette/utils/src/Utils/ImageType.php', + 'RectorPrefix202410\\Nette\\Utils\\Iterables' => __DIR__ . '/..' . '/nette/utils/src/Utils/Iterables.php', + 'RectorPrefix202410\\Nette\\Utils\\Json' => __DIR__ . '/..' . '/nette/utils/src/Utils/Json.php', + 'RectorPrefix202410\\Nette\\Utils\\JsonException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\ObjectHelpers' => __DIR__ . '/..' . '/nette/utils/src/Utils/ObjectHelpers.php', + 'RectorPrefix202410\\Nette\\Utils\\Paginator' => __DIR__ . '/..' . '/nette/utils/src/Utils/Paginator.php', + 'RectorPrefix202410\\Nette\\Utils\\Random' => __DIR__ . '/..' . '/nette/utils/src/Utils/Random.php', + 'RectorPrefix202410\\Nette\\Utils\\Reflection' => __DIR__ . '/..' . '/nette/utils/src/Utils/Reflection.php', + 'RectorPrefix202410\\Nette\\Utils\\ReflectionMethod' => __DIR__ . '/..' . '/nette/utils/src/Utils/ReflectionMethod.php', + 'RectorPrefix202410\\Nette\\Utils\\RegexpException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\Strings' => __DIR__ . '/..' . '/nette/utils/src/Utils/Strings.php', + 'RectorPrefix202410\\Nette\\Utils\\Type' => __DIR__ . '/..' . '/nette/utils/src/Utils/Type.php', + 'RectorPrefix202410\\Nette\\Utils\\UnknownImageFileException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'RectorPrefix202410\\Nette\\Utils\\Validators' => __DIR__ . '/..' . '/nette/utils/src/Utils/Validators.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\CiDetector' => __DIR__ . '/..' . '/ondram/ci-detector/src/CiDetector.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\CiDetectorInterface' => __DIR__ . '/..' . '/ondram/ci-detector/src/CiDetectorInterface.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AbstractCi' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AbstractCi.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AppVeyor' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AppVeyor.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AwsCodeBuild' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AwsCodeBuild.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\AzurePipelines' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/AzurePipelines.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Bamboo' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Bamboo.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\BitbucketPipelines' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/BitbucketPipelines.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Buddy' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Buddy.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\CiInterface' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/CiInterface.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Circle' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Circle.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Codeship' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Codeship.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Continuousphp' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Continuousphp.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Drone' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Drone.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\GitHubActions' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/GitHubActions.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\GitLab' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/GitLab.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Jenkins' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Jenkins.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\SourceHut' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/SourceHut.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\TeamCity' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/TeamCity.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Travis' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Travis.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Ci\\Wercker' => __DIR__ . '/..' . '/ondram/ci-detector/src/Ci/Wercker.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Env' => __DIR__ . '/..' . '/ondram/ci-detector/src/Env.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\Exception\\CiNotDetectedException' => __DIR__ . '/..' . '/ondram/ci-detector/src/Exception/CiNotDetectedException.php', + 'RectorPrefix202410\\OndraM\\CiDetector\\TrinaryLogic' => __DIR__ . '/..' . '/ondram/ci-detector/src/TrinaryLogic.php', + 'RectorPrefix202410\\Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', + 'RectorPrefix202410\\Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', + 'RectorPrefix202410\\Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', + 'RectorPrefix202410\\Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php', + 'RectorPrefix202410\\Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php', + 'RectorPrefix202410\\Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareInterface.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareTrait.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerInterface.php', + 'RectorPrefix202410\\Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerTrait.php', + 'RectorPrefix202410\\Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/src/NullLogger.php', + 'RectorPrefix202410\\Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php', + 'RectorPrefix202410\\Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php', + 'RectorPrefix202410\\Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php', + 'RectorPrefix202410\\React\\Cache\\ArrayCache' => __DIR__ . '/..' . '/react/cache/src/ArrayCache.php', + 'RectorPrefix202410\\React\\Cache\\CacheInterface' => __DIR__ . '/..' . '/react/cache/src/CacheInterface.php', + 'RectorPrefix202410\\React\\ChildProcess\\Process' => __DIR__ . '/..' . '/react/child-process/src/Process.php', + 'RectorPrefix202410\\React\\Dns\\BadServerException' => __DIR__ . '/..' . '/react/dns/src/BadServerException.php', + 'RectorPrefix202410\\React\\Dns\\Config\\Config' => __DIR__ . '/..' . '/react/dns/src/Config/Config.php', + 'RectorPrefix202410\\React\\Dns\\Config\\HostsFile' => __DIR__ . '/..' . '/react/dns/src/Config/HostsFile.php', + 'RectorPrefix202410\\React\\Dns\\Model\\Message' => __DIR__ . '/..' . '/react/dns/src/Model/Message.php', + 'RectorPrefix202410\\React\\Dns\\Model\\Record' => __DIR__ . '/..' . '/react/dns/src/Model/Record.php', + 'RectorPrefix202410\\React\\Dns\\Protocol\\BinaryDumper' => __DIR__ . '/..' . '/react/dns/src/Protocol/BinaryDumper.php', + 'RectorPrefix202410\\React\\Dns\\Protocol\\Parser' => __DIR__ . '/..' . '/react/dns/src/Protocol/Parser.php', + 'RectorPrefix202410\\React\\Dns\\Query\\CachingExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/CachingExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\CancellationException' => __DIR__ . '/..' . '/react/dns/src/Query/CancellationException.php', + 'RectorPrefix202410\\React\\Dns\\Query\\CoopExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/CoopExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\ExecutorInterface' => __DIR__ . '/..' . '/react/dns/src/Query/ExecutorInterface.php', + 'RectorPrefix202410\\React\\Dns\\Query\\FallbackExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/FallbackExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\HostsFileExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/HostsFileExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\Query' => __DIR__ . '/..' . '/react/dns/src/Query/Query.php', + 'RectorPrefix202410\\React\\Dns\\Query\\RetryExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/RetryExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\SelectiveTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/SelectiveTransportExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\TcpTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/TcpTransportExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\TimeoutException' => __DIR__ . '/..' . '/react/dns/src/Query/TimeoutException.php', + 'RectorPrefix202410\\React\\Dns\\Query\\TimeoutExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/TimeoutExecutor.php', + 'RectorPrefix202410\\React\\Dns\\Query\\UdpTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/UdpTransportExecutor.php', + 'RectorPrefix202410\\React\\Dns\\RecordNotFoundException' => __DIR__ . '/..' . '/react/dns/src/RecordNotFoundException.php', + 'RectorPrefix202410\\React\\Dns\\Resolver\\Factory' => __DIR__ . '/..' . '/react/dns/src/Resolver/Factory.php', + 'RectorPrefix202410\\React\\Dns\\Resolver\\Resolver' => __DIR__ . '/..' . '/react/dns/src/Resolver/Resolver.php', + 'RectorPrefix202410\\React\\Dns\\Resolver\\ResolverInterface' => __DIR__ . '/..' . '/react/dns/src/Resolver/ResolverInterface.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtEvLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtEvLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtEventLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtEventLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtLibevLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtLibevLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtLibeventLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtLibeventLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\ExtUvLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtUvLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\Factory' => __DIR__ . '/..' . '/react/event-loop/src/Factory.php', + 'RectorPrefix202410\\React\\EventLoop\\Loop' => __DIR__ . '/..' . '/react/event-loop/src/Loop.php', + 'RectorPrefix202410\\React\\EventLoop\\LoopInterface' => __DIR__ . '/..' . '/react/event-loop/src/LoopInterface.php', + 'RectorPrefix202410\\React\\EventLoop\\SignalsHandler' => __DIR__ . '/..' . '/react/event-loop/src/SignalsHandler.php', + 'RectorPrefix202410\\React\\EventLoop\\StreamSelectLoop' => __DIR__ . '/..' . '/react/event-loop/src/StreamSelectLoop.php', + 'RectorPrefix202410\\React\\EventLoop\\Tick\\FutureTickQueue' => __DIR__ . '/..' . '/react/event-loop/src/Tick/FutureTickQueue.php', + 'RectorPrefix202410\\React\\EventLoop\\TimerInterface' => __DIR__ . '/..' . '/react/event-loop/src/TimerInterface.php', + 'RectorPrefix202410\\React\\EventLoop\\Timer\\Timer' => __DIR__ . '/..' . '/react/event-loop/src/Timer/Timer.php', + 'RectorPrefix202410\\React\\EventLoop\\Timer\\Timers' => __DIR__ . '/..' . '/react/event-loop/src/Timer/Timers.php', + 'RectorPrefix202410\\React\\Promise\\Deferred' => __DIR__ . '/..' . '/react/promise/src/Deferred.php', + 'RectorPrefix202410\\React\\Promise\\Exception\\CompositeException' => __DIR__ . '/..' . '/react/promise/src/Exception/CompositeException.php', + 'RectorPrefix202410\\React\\Promise\\Exception\\LengthException' => __DIR__ . '/..' . '/react/promise/src/Exception/LengthException.php', + 'RectorPrefix202410\\React\\Promise\\Internal\\CancellationQueue' => __DIR__ . '/..' . '/react/promise/src/Internal/CancellationQueue.php', + 'RectorPrefix202410\\React\\Promise\\Internal\\FulfilledPromise' => __DIR__ . '/..' . '/react/promise/src/Internal/FulfilledPromise.php', + 'RectorPrefix202410\\React\\Promise\\Internal\\RejectedPromise' => __DIR__ . '/..' . '/react/promise/src/Internal/RejectedPromise.php', + 'RectorPrefix202410\\React\\Promise\\Promise' => __DIR__ . '/..' . '/react/promise/src/Promise.php', + 'RectorPrefix202410\\React\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/react/promise/src/PromiseInterface.php', + 'RectorPrefix202410\\React\\Socket\\Connection' => __DIR__ . '/..' . '/react/socket/src/Connection.php', + 'RectorPrefix202410\\React\\Socket\\ConnectionInterface' => __DIR__ . '/..' . '/react/socket/src/ConnectionInterface.php', + 'RectorPrefix202410\\React\\Socket\\Connector' => __DIR__ . '/..' . '/react/socket/src/Connector.php', + 'RectorPrefix202410\\React\\Socket\\ConnectorInterface' => __DIR__ . '/..' . '/react/socket/src/ConnectorInterface.php', + 'RectorPrefix202410\\React\\Socket\\DnsConnector' => __DIR__ . '/..' . '/react/socket/src/DnsConnector.php', + 'RectorPrefix202410\\React\\Socket\\FdServer' => __DIR__ . '/..' . '/react/socket/src/FdServer.php', + 'RectorPrefix202410\\React\\Socket\\FixedUriConnector' => __DIR__ . '/..' . '/react/socket/src/FixedUriConnector.php', + 'RectorPrefix202410\\React\\Socket\\HappyEyeBallsConnectionBuilder' => __DIR__ . '/..' . '/react/socket/src/HappyEyeBallsConnectionBuilder.php', + 'RectorPrefix202410\\React\\Socket\\HappyEyeBallsConnector' => __DIR__ . '/..' . '/react/socket/src/HappyEyeBallsConnector.php', + 'RectorPrefix202410\\React\\Socket\\LimitingServer' => __DIR__ . '/..' . '/react/socket/src/LimitingServer.php', + 'RectorPrefix202410\\React\\Socket\\SecureConnector' => __DIR__ . '/..' . '/react/socket/src/SecureConnector.php', + 'RectorPrefix202410\\React\\Socket\\SecureServer' => __DIR__ . '/..' . '/react/socket/src/SecureServer.php', + 'RectorPrefix202410\\React\\Socket\\Server' => __DIR__ . '/..' . '/react/socket/src/Server.php', + 'RectorPrefix202410\\React\\Socket\\ServerInterface' => __DIR__ . '/..' . '/react/socket/src/ServerInterface.php', + 'RectorPrefix202410\\React\\Socket\\SocketServer' => __DIR__ . '/..' . '/react/socket/src/SocketServer.php', + 'RectorPrefix202410\\React\\Socket\\StreamEncryption' => __DIR__ . '/..' . '/react/socket/src/StreamEncryption.php', + 'RectorPrefix202410\\React\\Socket\\TcpConnector' => __DIR__ . '/..' . '/react/socket/src/TcpConnector.php', + 'RectorPrefix202410\\React\\Socket\\TcpServer' => __DIR__ . '/..' . '/react/socket/src/TcpServer.php', + 'RectorPrefix202410\\React\\Socket\\TimeoutConnector' => __DIR__ . '/..' . '/react/socket/src/TimeoutConnector.php', + 'RectorPrefix202410\\React\\Socket\\UnixConnector' => __DIR__ . '/..' . '/react/socket/src/UnixConnector.php', + 'RectorPrefix202410\\React\\Socket\\UnixServer' => __DIR__ . '/..' . '/react/socket/src/UnixServer.php', + 'RectorPrefix202410\\React\\Stream\\CompositeStream' => __DIR__ . '/..' . '/react/stream/src/CompositeStream.php', + 'RectorPrefix202410\\React\\Stream\\DuplexResourceStream' => __DIR__ . '/..' . '/react/stream/src/DuplexResourceStream.php', + 'RectorPrefix202410\\React\\Stream\\DuplexStreamInterface' => __DIR__ . '/..' . '/react/stream/src/DuplexStreamInterface.php', + 'RectorPrefix202410\\React\\Stream\\ReadableResourceStream' => __DIR__ . '/..' . '/react/stream/src/ReadableResourceStream.php', + 'RectorPrefix202410\\React\\Stream\\ReadableStreamInterface' => __DIR__ . '/..' . '/react/stream/src/ReadableStreamInterface.php', + 'RectorPrefix202410\\React\\Stream\\ThroughStream' => __DIR__ . '/..' . '/react/stream/src/ThroughStream.php', + 'RectorPrefix202410\\React\\Stream\\Util' => __DIR__ . '/..' . '/react/stream/src/Util.php', + 'RectorPrefix202410\\React\\Stream\\WritableResourceStream' => __DIR__ . '/..' . '/react/stream/src/WritableResourceStream.php', + 'RectorPrefix202410\\React\\Stream\\WritableStreamInterface' => __DIR__ . '/..' . '/react/stream/src/WritableStreamInterface.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', + 'RectorPrefix202410\\SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Attribute\\AsCommand' => __DIR__ . '/..' . '/symfony/console/Attribute/AsCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CI\\GithubActionReporter' => __DIR__ . '/..' . '/symfony/console/CI/GithubActionReporter.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Color' => __DIR__ . '/..' . '/symfony/console/Color.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\CompleteCommand' => __DIR__ . '/..' . '/symfony/console/Command/CompleteCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => __DIR__ . '/..' . '/symfony/console/Command/DumpCompletionCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\LazyCommand' => __DIR__ . '/..' . '/symfony/console/Command/LazyCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => __DIR__ . '/..' . '/symfony/console/Command/SignalableCommandInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Command\\TraceableCommand' => __DIR__ . '/..' . '/symfony/console/Command/TraceableCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\CompletionInput' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionSuggestions.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/BashCompletionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => __DIR__ . '/..' . '/symfony/console/Completion/Output/CompletionOutputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\FishCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/FishCompletionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Output\\ZshCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/ZshCompletionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Completion\\Suggestion' => __DIR__ . '/..' . '/symfony/console/Completion/Suggestion.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Cursor' => __DIR__ . '/..' . '/symfony/console/Cursor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\DataCollector\\CommandDataCollector' => __DIR__ . '/..' . '/symfony/console/DataCollector/CommandDataCollector.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Debug\\CliRequest' => __DIR__ . '/..' . '/symfony/console/Debug/CliRequest.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidOptionException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/console/Exception/LogicException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\MissingInputException' => __DIR__ . '/..' . '/symfony/console/Exception/MissingInputException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/NamespaceNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\RunCommandFailedException' => __DIR__ . '/..' . '/symfony/console/Exception/RunCommandFailedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatter.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatterStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleStack.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DebugFormatterHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DescriptorHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\Dumper' => __DIR__ . '/..' . '/symfony/console/Helper/Dumper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\FormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/FormatterHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\Helper' => __DIR__ . '/..' . '/symfony/console/Helper/Helper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\HelperInterface' => __DIR__ . '/..' . '/symfony/console/Helper/HelperInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\HelperSet' => __DIR__ . '/..' . '/symfony/console/Helper/HelperSet.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\InputAwareHelper' => __DIR__ . '/..' . '/symfony/console/Helper/InputAwareHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\OutputWrapper' => __DIR__ . '/..' . '/symfony/console/Helper/OutputWrapper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\ProcessHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProcessHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\ProgressBar' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressBar.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\ProgressIndicator' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressIndicator.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\QuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/QuestionHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableCellStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableCellStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableRows' => __DIR__ . '/..' . '/symfony/console/Helper/TableRows.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/symfony/console/Input/ArgvInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\ArrayInput' => __DIR__ . '/..' . '/symfony/console/Input/ArrayInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\Input' => __DIR__ . '/..' . '/symfony/console/Input/Input.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputArgument' => __DIR__ . '/..' . '/symfony/console/Input/InputArgument.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputAwareInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputAwareInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputDefinition' => __DIR__ . '/..' . '/symfony/console/Input/InputDefinition.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\InputOption' => __DIR__ . '/..' . '/symfony/console/Input/InputOption.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\StreamableInputInterface' => __DIR__ . '/..' . '/symfony/console/Input/StreamableInputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Input\\StringInput' => __DIR__ . '/..' . '/symfony/console/Input/StringInput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/symfony/console/Logger/ConsoleLogger.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Messenger\\RunCommandContext' => __DIR__ . '/..' . '/symfony/console/Messenger/RunCommandContext.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Messenger\\RunCommandMessage' => __DIR__ . '/..' . '/symfony/console/Messenger/RunCommandMessage.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Messenger\\RunCommandMessageHandler' => __DIR__ . '/..' . '/symfony/console/Messenger/RunCommandMessageHandler.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\AnsiColorMode' => __DIR__ . '/..' . '/symfony/console/Output/AnsiColorMode.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\BufferedOutput' => __DIR__ . '/..' . '/symfony/console/Output/BufferedOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleSectionOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/symfony/console/Output/NullOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\Output' => __DIR__ . '/..' . '/symfony/console/Output/Output.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\OutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/OutputInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\StreamOutput' => __DIR__ . '/..' . '/symfony/console/Output/StreamOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => __DIR__ . '/..' . '/symfony/console/Output/TrimmedBufferOutput.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\SignalRegistry\\SignalMap' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalMap.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\SingleCommandApplication' => __DIR__ . '/..' . '/symfony/console/SingleCommandApplication.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', + 'RectorPrefix202410\\Symfony\\Component\\Console\\Terminal' => __DIR__ . '/..' . '/symfony/console/Terminal.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php', + 'RectorPrefix202410\\Symfony\\Component\\Filesystem\\Path' => __DIR__ . '/..' . '/symfony/filesystem/Path.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\LazyIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/LazyIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', + 'RectorPrefix202410\\Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/process/Exception/InvalidArgumentException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/process/Exception/LogicException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessFailedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessSignaledException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessTimedOutException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\RunProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/RunProcessFailedException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/process/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\ExecutableFinder' => __DIR__ . '/..' . '/symfony/process/ExecutableFinder.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\InputStream' => __DIR__ . '/..' . '/symfony/process/InputStream.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Messenger\\RunProcessContext' => __DIR__ . '/..' . '/symfony/process/Messenger/RunProcessContext.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Messenger\\RunProcessMessage' => __DIR__ . '/..' . '/symfony/process/Messenger/RunProcessMessage.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Messenger\\RunProcessMessageHandler' => __DIR__ . '/..' . '/symfony/process/Messenger/RunProcessMessageHandler.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\PhpExecutableFinder' => __DIR__ . '/..' . '/symfony/process/PhpExecutableFinder.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\PhpProcess' => __DIR__ . '/..' . '/symfony/process/PhpProcess.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\PhpSubprocess' => __DIR__ . '/..' . '/symfony/process/PhpSubprocess.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\AbstractPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/AbstractPipes.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\PipesInterface' => __DIR__ . '/..' . '/symfony/process/Pipes/PipesInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\UnixPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/UnixPipes.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Pipes\\WindowsPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/WindowsPipes.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\Process' => __DIR__ . '/..' . '/symfony/process/Process.php', + 'RectorPrefix202410\\Symfony\\Component\\Process\\ProcessUtils' => __DIR__ . '/..' . '/symfony/process/ProcessUtils.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php', + 'RectorPrefix202410\\Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceCollectionInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceCollectionInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceLocatorTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceLocatorTrait.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceMethodsSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceMethodsSubscriberTrait.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', + 'RectorPrefix202410\\Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\CommandLine\\WorkerCommandLineFactory' => __DIR__ . '/..' . '/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Contract\\SerializableInterface' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Contract/SerializableInterface.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\CpuCoreCountProvider' => __DIR__ . '/..' . '/symplify/easy-parallel/src/CpuCoreCountProvider.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\Action' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/Action.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\Content' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/Content.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\ReactCommand' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/ReactCommand.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Enum\\ReactEvent' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Enum/ReactEvent.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Exception\\ParallelShouldNotHappenException' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Exception/ParallelShouldNotHappenException.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\Reflection\\CommandFromReflectionFactory' => __DIR__ . '/..' . '/symplify/easy-parallel/src/Reflection/CommandFromReflectionFactory.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ScheduleFactory' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ScheduleFactory.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\EasyParallelConfig' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/EasyParallelConfig.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\ParallelProcess' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/ParallelProcess.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\ProcessPool' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/ProcessPool.php', + 'RectorPrefix202410\\Symplify\\EasyParallel\\ValueObject\\Schedule' => __DIR__ . '/..' . '/symplify/easy-parallel/src/ValueObject/Schedule.php', + 'RectorPrefix202410\\Webmozart\\Assert\\Assert' => __DIR__ . '/..' . '/webmozart/assert/src/Assert.php', + 'RectorPrefix202410\\Webmozart\\Assert\\InvalidArgumentException' => __DIR__ . '/..' . '/webmozart/assert/src/InvalidArgumentException.php', + 'RectorPrefix202410\\Webmozart\\Assert\\Mixin' => __DIR__ . '/..' . '/webmozart/assert/src/Mixin.php', 'Rector\\Application\\ApplicationFileProcessor' => __DIR__ . '/../..' . '/src/Application/ApplicationFileProcessor.php', 'Rector\\Application\\ChangedNodeScopeRefresher' => __DIR__ . '/../..' . '/src/Application/ChangedNodeScopeRefresher.php', 'Rector\\Application\\FileProcessor' => __DIR__ . '/../..' . '/src/Application/FileProcessor.php', + 'Rector\\Application\\Provider\\CurrentFileProvider' => __DIR__ . '/../..' . '/src/Application/Provider/CurrentFileProvider.php', 'Rector\\Application\\VersionResolver' => __DIR__ . '/../..' . '/src/Application/VersionResolver.php', 'Rector\\Arguments\\ArgumentDefaultValueReplacer' => __DIR__ . '/../..' . '/rules/Arguments/ArgumentDefaultValueReplacer.php', 'Rector\\Arguments\\Contract\\ReplaceArgumentDefaultValueInterface' => __DIR__ . '/../..' . '/rules/Arguments/Contract/ReplaceArgumentDefaultValueInterface.php', @@ -1261,6 +1281,8 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\BetterPhpDocParser\\ValueObject\\Type\\SpacingAwareCallableTypeNode' => __DIR__ . '/../..' . '/src/BetterPhpDocParser/ValueObject/Type/SpacingAwareCallableTypeNode.php', 'Rector\\Bootstrap\\ExtensionConfigResolver' => __DIR__ . '/../..' . '/src/Bootstrap/ExtensionConfigResolver.php', 'Rector\\Bootstrap\\RectorConfigsResolver' => __DIR__ . '/../..' . '/src/Bootstrap/RectorConfigsResolver.php', + 'Rector\\Bridge\\SetProviderCollector' => __DIR__ . '/../..' . '/src/Bridge/SetProviderCollector.php', + 'Rector\\Bridge\\SetRectorsResolver' => __DIR__ . '/../..' . '/src/Bridge/SetRectorsResolver.php', 'Rector\\Caching\\Cache' => __DIR__ . '/../..' . '/src/Caching/Cache.php', 'Rector\\Caching\\CacheFactory' => __DIR__ . '/../..' . '/src/Caching/CacheFactory.php', 'Rector\\Caching\\Config\\FileHashComputer' => __DIR__ . '/../..' . '/src/Caching/Config/FileHashComputer.php', @@ -1272,8 +1294,11 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Caching\\ValueObject\\CacheItem' => __DIR__ . '/../..' . '/src/Caching/ValueObject/CacheItem.php', 'Rector\\Caching\\ValueObject\\Storage\\FileCacheStorage' => __DIR__ . '/../..' . '/src/Caching/ValueObject/Storage/FileCacheStorage.php', 'Rector\\Caching\\ValueObject\\Storage\\MemoryCacheStorage' => __DIR__ . '/../..' . '/src/Caching/ValueObject/Storage/MemoryCacheStorage.php', - 'Rector\\ChangesReporting\\Annotation\\AnnotationExtractor' => __DIR__ . '/../..' . '/src/ChangesReporting/Annotation/AnnotationExtractor.php', - 'Rector\\ChangesReporting\\Annotation\\RectorsChangelogResolver' => __DIR__ . '/../..' . '/src/ChangesReporting/Annotation/RectorsChangelogResolver.php', + 'Rector\\Carbon\\NodeFactory\\CarbonCallFactory' => __DIR__ . '/../..' . '/rules/Carbon/NodeFactory/CarbonCallFactory.php', + 'Rector\\Carbon\\Rector\\FuncCall\\DateFuncCallToCarbonRector' => __DIR__ . '/../..' . '/rules/Carbon/Rector/FuncCall/DateFuncCallToCarbonRector.php', + 'Rector\\Carbon\\Rector\\FuncCall\\TimeFuncCallToCarbonRector' => __DIR__ . '/../..' . '/rules/Carbon/Rector/FuncCall/TimeFuncCallToCarbonRector.php', + 'Rector\\Carbon\\Rector\\MethodCall\\DateTimeMethodCallToCarbonRector' => __DIR__ . '/../..' . '/rules/Carbon/Rector/MethodCall/DateTimeMethodCallToCarbonRector.php', + 'Rector\\Carbon\\Rector\\New_\\DateTimeInstanceToCarbonRector' => __DIR__ . '/../..' . '/rules/Carbon/Rector/New_/DateTimeInstanceToCarbonRector.php', 'Rector\\ChangesReporting\\Contract\\Output\\OutputFormatterInterface' => __DIR__ . '/../..' . '/src/ChangesReporting/Contract/Output/OutputFormatterInterface.php', 'Rector\\ChangesReporting\\Output\\ConsoleOutputFormatter' => __DIR__ . '/../..' . '/src/ChangesReporting/Output/ConsoleOutputFormatter.php', 'Rector\\ChangesReporting\\Output\\JsonOutputFormatter' => __DIR__ . '/../..' . '/src/ChangesReporting/Output/JsonOutputFormatter.php', @@ -1288,7 +1313,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\CodeQuality\\NodeFactory\\MissingPropertiesFactory' => __DIR__ . '/../..' . '/rules/CodeQuality/NodeFactory/MissingPropertiesFactory.php', 'Rector\\CodeQuality\\NodeFactory\\PropertyTypeDecorator' => __DIR__ . '/../..' . '/rules/CodeQuality/NodeFactory/PropertyTypeDecorator.php', 'Rector\\CodeQuality\\NodeManipulator\\ExprBoolCaster' => __DIR__ . '/../..' . '/rules/CodeQuality/NodeManipulator/ExprBoolCaster.php', - 'Rector\\CodeQuality\\Rector\\Array_\\CallableThisArrayToAnonymousFunctionRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Array_/CallableThisArrayToAnonymousFunctionRector.php', 'Rector\\CodeQuality\\Rector\\Assign\\CombinedAssignRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Assign/CombinedAssignRector.php', 'Rector\\CodeQuality\\Rector\\BooleanAnd\\RemoveUselessIsObjectCheckRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/BooleanAnd/RemoveUselessIsObjectCheckRector.php', 'Rector\\CodeQuality\\Rector\\BooleanAnd\\SimplifyEmptyArrayCheckRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/BooleanAnd/SimplifyEmptyArrayCheckRector.php', @@ -1314,13 +1338,10 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php', 'Rector\\CodeQuality\\Rector\\Foreach_\\UnusedForeachValueToArrayKeysRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\ArrayMergeOfNonArraysToSimpleArrayRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/ArrayMergeOfNonArraysToSimpleArrayRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\BoolvalToTypeCastRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/BoolvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\CallUserFuncWithArrowFunctionToInlineRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\ChangeArrayPushToArrayAssignRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/ChangeArrayPushToArrayAssignRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\CompactToVariablesRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/CompactToVariablesRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\FloatvalToTypeCastRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/FloatvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\InlineIsAInstanceOfRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/InlineIsAInstanceOfRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\IntvalToTypeCastRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/IntvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\IsAWithStringWithThirdArgumentRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/IsAWithStringWithThirdArgumentRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\RemoveSoleValueSprintfRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/RemoveSoleValueSprintfRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\SetTypeToCastRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php', @@ -1329,12 +1350,10 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyRegexPatternRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/SimplifyRegexPatternRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyStrposLowerRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/SimplifyStrposLowerRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\SingleInArrayToCompareRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/SingleInArrayToCompareRector.php', - 'Rector\\CodeQuality\\Rector\\FuncCall\\StrvalToTypeCastRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/StrvalToTypeCastRector.php', 'Rector\\CodeQuality\\Rector\\FuncCall\\UnwrapSprintfOneArgumentRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FuncCall/UnwrapSprintfOneArgumentRector.php', 'Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\BooleanNotIdenticalToNotIdenticalRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Identical/BooleanNotIdenticalToNotIdenticalRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\FlipTypeControlToUseExclusiveTypeRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Identical/FlipTypeControlToUseExclusiveTypeRector.php', - 'Rector\\CodeQuality\\Rector\\Identical\\GetClassToInstanceOfRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Identical/GetClassToInstanceOfRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\SimplifyArraySearchRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Identical/SimplifyArraySearchRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\SimplifyBoolIdenticalTrueRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Identical/SimplifyBoolIdenticalTrueRector.php', 'Rector\\CodeQuality\\Rector\\Identical\\SimplifyConditionsRector' => __DIR__ . '/../..' . '/rules/CodeQuality/Rector/Identical/SimplifyConditionsRector.php', @@ -1395,15 +1414,16 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\CodingStyle\\Rector\\Closure\\StaticClosureRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Closure/StaticClosureRector.php', 'Rector\\CodingStyle\\Rector\\Encapsed\\EncapsedStringsToSprintfRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Encapsed/EncapsedStringsToSprintfRector.php', 'Rector\\CodingStyle\\Rector\\Encapsed\\WrapEncapsedVariableInCurlyBracesRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Encapsed/WrapEncapsedVariableInCurlyBracesRector.php', + 'Rector\\CodingStyle\\Rector\\Foreach_\\MultiDimensionalArrayToArrayDestructRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Foreach_/MultiDimensionalArrayToArrayDestructRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\ArraySpreadInsteadOfArrayMergeRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/ArraySpreadInsteadOfArrayMergeRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\CallUserFuncArrayToVariadicRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/CallUserFuncArrayToVariadicRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\CallUserFuncToMethodCallRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/CallUserFuncToMethodCallRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\ConsistentImplodeRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/ConsistentImplodeRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\CountArrayToEmptyArrayComparisonRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/CountArrayToEmptyArrayComparisonRector.php', + 'Rector\\CodingStyle\\Rector\\FuncCall\\FunctionFirstClassCallableRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\StrictArraySearchRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/StrictArraySearchRector.php', 'Rector\\CodingStyle\\Rector\\FuncCall\\VersionCompareFuncCallToConstantRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/FuncCall/VersionCompareFuncCallToConstantRector.php', 'Rector\\CodingStyle\\Rector\\If_\\NullableCompareToNullRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/If_/NullableCompareToNullRector.php', - 'Rector\\CodingStyle\\Rector\\Plus\\UseIncrementAssignRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Plus/UseIncrementAssignRector.php', 'Rector\\CodingStyle\\Rector\\PostInc\\PostIncDecToPreIncDecRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/PostInc/PostIncDecToPreIncDecRector.php', 'Rector\\CodingStyle\\Rector\\Property\\SplitGroupedPropertiesRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Property/SplitGroupedPropertiesRector.php', 'Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector' => __DIR__ . '/../..' . '/rules/CodingStyle/Rector/Stmt/NewlineAfterStatementRector.php', @@ -1418,12 +1438,16 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Comments\\NodeDocBlock\\DocBlockUpdater' => __DIR__ . '/../..' . '/src/Comments/NodeDocBlock/DocBlockUpdater.php', 'Rector\\Comments\\NodeTraverser\\CommentRemovingNodeTraverser' => __DIR__ . '/../..' . '/src/Comments/NodeTraverser/CommentRemovingNodeTraverser.php', 'Rector\\Comments\\NodeVisitor\\CommentRemovingNodeVisitor' => __DIR__ . '/../..' . '/src/Comments/NodeVisitor/CommentRemovingNodeVisitor.php', + 'Rector\\Composer\\InstalledPackageResolver' => __DIR__ . '/../..' . '/src/Composer/InstalledPackageResolver.php', + 'Rector\\Composer\\ValueObject\\InstalledPackage' => __DIR__ . '/../..' . '/src/Composer/ValueObject/InstalledPackage.php', + 'Rector\\Config\\Level\\CodeQualityLevel' => __DIR__ . '/../..' . '/src/Config/Level/CodeQualityLevel.php', 'Rector\\Config\\Level\\DeadCodeLevel' => __DIR__ . '/../..' . '/src/Config/Level/DeadCodeLevel.php', 'Rector\\Config\\Level\\TypeDeclarationLevel' => __DIR__ . '/../..' . '/src/Config/Level/TypeDeclarationLevel.php', 'Rector\\Config\\RectorConfig' => __DIR__ . '/../..' . '/src/Config/RectorConfig.php', 'Rector\\Config\\RegisteredService' => __DIR__ . '/../..' . '/src/Config/RegisteredService.php', 'Rector\\Configuration\\ConfigInitializer' => __DIR__ . '/../..' . '/src/Configuration/ConfigInitializer.php', 'Rector\\Configuration\\ConfigurationFactory' => __DIR__ . '/../..' . '/src/Configuration/ConfigurationFactory.php', + 'Rector\\Configuration\\Deprecation\\Contract\\DeprecatedInterface' => __DIR__ . '/../..' . '/src/Configuration/Deprecation/Contract/DeprecatedInterface.php', 'Rector\\Configuration\\Levels\\LevelRulesResolver' => __DIR__ . '/../..' . '/src/Configuration/Levels/LevelRulesResolver.php', 'Rector\\Configuration\\Option' => __DIR__ . '/../..' . '/src/Configuration/Option.php', 'Rector\\Configuration\\Parameter\\SimpleParameterProvider' => __DIR__ . '/../..' . '/src/Configuration/Parameter/SimpleParameterProvider.php', @@ -1432,7 +1456,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Configuration\\RenamedClassesDataCollector' => __DIR__ . '/../..' . '/src/Configuration/RenamedClassesDataCollector.php', 'Rector\\Configuration\\VendorMissAnalyseGuard' => __DIR__ . '/../..' . '/src/Configuration/VendorMissAnalyseGuard.php', 'Rector\\Console\\Command\\CustomRuleCommand' => __DIR__ . '/../..' . '/src/Console/Command/CustomRuleCommand.php', - 'Rector\\Console\\Command\\DetectNodeCommand' => __DIR__ . '/../..' . '/src/Console/Command/DetectNodeCommand.php', 'Rector\\Console\\Command\\ListRulesCommand' => __DIR__ . '/../..' . '/src/Console/Command/ListRulesCommand.php', 'Rector\\Console\\Command\\ProcessCommand' => __DIR__ . '/../..' . '/src/Console/Command/ProcessCommand.php', 'Rector\\Console\\Command\\SetupCICommand' => __DIR__ . '/../..' . '/src/Console/Command/SetupCICommand.php', @@ -1441,6 +1464,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Console\\ExitCode' => __DIR__ . '/../..' . '/src/Console/ExitCode.php', 'Rector\\Console\\Formatter\\ColorConsoleDiffFormatter' => __DIR__ . '/../..' . '/src/Console/Formatter/ColorConsoleDiffFormatter.php', 'Rector\\Console\\Formatter\\ConsoleDiffer' => __DIR__ . '/../..' . '/src/Console/Formatter/ConsoleDiffer.php', + 'Rector\\Console\\Notifier' => __DIR__ . '/../..' . '/src/Console/Notifier.php', 'Rector\\Console\\Output\\OutputFormatterCollector' => __DIR__ . '/../..' . '/src/Console/Output/OutputFormatterCollector.php', 'Rector\\Console\\ProcessConfigureDecorator' => __DIR__ . '/../..' . '/src/Console/ProcessConfigureDecorator.php', 'Rector\\Console\\Style\\RectorStyle' => __DIR__ . '/../..' . '/src/Console/Style/RectorStyle.php', @@ -1462,6 +1486,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\DeadCode\\NodeAnalyzer\\SafeLeftTypeBooleanAndOrAnalyzer' => __DIR__ . '/../..' . '/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php', 'Rector\\DeadCode\\NodeAnalyzer\\UsedVariableNameAnalyzer' => __DIR__ . '/../..' . '/rules/DeadCode/NodeAnalyzer/UsedVariableNameAnalyzer.php', 'Rector\\DeadCode\\NodeCollector\\UnusedParameterResolver' => __DIR__ . '/../..' . '/rules/DeadCode/NodeCollector/UnusedParameterResolver.php', + 'Rector\\DeadCode\\NodeManipulator\\ClassMethodParamRemover' => __DIR__ . '/../..' . '/rules/DeadCode/NodeManipulator/ClassMethodParamRemover.php', 'Rector\\DeadCode\\NodeManipulator\\ControllerClassMethodManipulator' => __DIR__ . '/../..' . '/rules/DeadCode/NodeManipulator/ControllerClassMethodManipulator.php', 'Rector\\DeadCode\\NodeManipulator\\CountManipulator' => __DIR__ . '/../..' . '/rules/DeadCode/NodeManipulator/CountManipulator.php', 'Rector\\DeadCode\\NodeManipulator\\LivingCodeManipulator' => __DIR__ . '/../..' . '/rules/DeadCode/NodeManipulator/LivingCodeManipulator.php', @@ -1486,6 +1511,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodParameterRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPromotedPropertyRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php', + 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPublicMethodParameterRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPublicMethodParameterRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessParamTagRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUselessParamTagRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnExprInConstructRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUselessReturnExprInConstructRector.php', 'Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnTagRector' => __DIR__ . '/../..' . '/rules/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector.php', @@ -1551,10 +1577,14 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Doctrine\\CodeQuality\\Contract\\ClassAttributeTransformerInterface' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Contract/ClassAttributeTransformerInterface.php', 'Rector\\Doctrine\\CodeQuality\\Contract\\PropertyAttributeTransformerInterface' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Contract/PropertyAttributeTransformerInterface.php', 'Rector\\Doctrine\\CodeQuality\\EntityMappingResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/EntityMappingResolver.php', + 'Rector\\Doctrine\\CodeQuality\\Enum\\CollectionMapping' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Enum/CollectionMapping.php', + 'Rector\\Doctrine\\CodeQuality\\Enum\\DoctrineClass' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Enum/DoctrineClass.php', 'Rector\\Doctrine\\CodeQuality\\Enum\\EntityMappingKey' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Enum/EntityMappingKey.php', - 'Rector\\Doctrine\\CodeQuality\\Enum\\ToManyMappings' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Enum/ToManyMappings.php', + 'Rector\\Doctrine\\CodeQuality\\Enum\\OdmMappingKey' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Enum/OdmMappingKey.php', 'Rector\\Doctrine\\CodeQuality\\Helper\\NodeValueNormalizer' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Helper/NodeValueNormalizer.php', 'Rector\\Doctrine\\CodeQuality\\NodeFactory\\AttributeFactory' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/NodeFactory/AttributeFactory.php', + 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector.php', + 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\ExplicitRelationCollectionRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\InitializeDefaultEntityCollectionRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Class_\\MoveCurrentDateTimeDefaultInEntityToConstructorRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/MoveCurrentDateTimeDefaultInEntityToConstructorRector.php', @@ -1563,21 +1593,24 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\CorrectDefaultTypesOnEntityPropertyRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/CorrectDefaultTypesOnEntityPropertyRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\ImproveDoctrineCollectionDocTypeInEntityRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/ImproveDoctrineCollectionDocTypeInEntityRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\MakeEntityDateTimePropertyDateTimeInterfaceRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/MakeEntityDateTimePropertyDateTimeInterfaceRector.php', - 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\OrderByKeyToClassConstRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/OrderByKeyToClassConstRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromColumnTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromColumnTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromDoctrineCollectionRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToManyRelationTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToManyRelationTypeRector.php', 'Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToOneRelationTypeRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php', + 'Rector\\Doctrine\\CodeQuality\\SetterCollectionResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php', 'Rector\\Doctrine\\CodeQuality\\Utils\\CaseStringHelper' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/Utils/CaseStringHelper.php', 'Rector\\Doctrine\\CodeQuality\\ValueObject\\EntityMapping' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/CodeQuality/ValueObject/EntityMapping.php', + 'Rector\\Doctrine\\Collection22\\Rector\\CriteriaOrderingConstantsDeprecationRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/Collection22/Rector/CriteriaOrderingConstantsDeprecationRector.php', 'Rector\\Doctrine\\Dbal211\\Rector\\MethodCall\\ExtractArrayArgOnQueryBuilderSelectRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/Dbal211/Rector/MethodCall/ExtractArrayArgOnQueryBuilderSelectRector.php', 'Rector\\Doctrine\\Dbal211\\Rector\\MethodCall\\ReplaceFetchAllMethodCallRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/Dbal211/Rector/MethodCall/ReplaceFetchAllMethodCallRector.php', 'Rector\\Doctrine\\Dbal40\\Rector\\MethodCall\\ChangeCompositeExpressionAddMultipleWithWithRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/Dbal40/Rector/MethodCall/ChangeCompositeExpressionAddMultipleWithWithRector.php', 'Rector\\Doctrine\\Enum\\MappingClass' => __DIR__ . '/..' . '/rector/rector-doctrine/src/Enum/MappingClass.php', + 'Rector\\Doctrine\\Enum\\OdmMappingClass' => __DIR__ . '/..' . '/rector/rector-doctrine/src/Enum/OdmMappingClass.php', 'Rector\\Doctrine\\NodeAnalyzer\\AttributeFinder' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeAnalyzer/AttributeFinder.php', 'Rector\\Doctrine\\NodeAnalyzer\\AttrinationFinder' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeAnalyzer/AttrinationFinder.php', 'Rector\\Doctrine\\NodeAnalyzer\\ConstructorAssignPropertyAnalyzer' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeAnalyzer/ConstructorAssignPropertyAnalyzer.php', 'Rector\\Doctrine\\NodeAnalyzer\\DoctrineEntityDetector' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeAnalyzer/DoctrineEntityDetector.php', + 'Rector\\Doctrine\\NodeAnalyzer\\MethodUniqueReturnedPropertyResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeAnalyzer/MethodUniqueReturnedPropertyResolver.php', 'Rector\\Doctrine\\NodeAnalyzer\\TargetEntityResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeAnalyzer/TargetEntityResolver.php', 'Rector\\Doctrine\\NodeFactory\\ArrayCollectionAssignFactory' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeFactory/ArrayCollectionAssignFactory.php', 'Rector\\Doctrine\\NodeFactory\\ValueAssignFactory' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeFactory/ValueAssignFactory.php', @@ -1591,10 +1624,10 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Doctrine\\PhpDocParser\\DoctrineDocBlockResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php', 'Rector\\Doctrine\\PhpDoc\\ShortClassExpander' => __DIR__ . '/..' . '/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php', 'Rector\\Doctrine\\Set\\DoctrineSetList' => __DIR__ . '/..' . '/rector/rector-doctrine/src/Set/DoctrineSetList.php', + 'Rector\\Doctrine\\Set\\SetProvider\\DoctrineSetProvider' => __DIR__ . '/..' . '/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php', 'Rector\\Doctrine\\TypeAnalyzer\\CollectionTypeFactory' => __DIR__ . '/..' . '/rector/rector-doctrine/src/TypeAnalyzer/CollectionTypeFactory.php', 'Rector\\Doctrine\\TypeAnalyzer\\CollectionTypeResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/TypeAnalyzer/CollectionTypeResolver.php', 'Rector\\Doctrine\\TypeAnalyzer\\CollectionVarTagValueNodeResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/TypeAnalyzer/CollectionVarTagValueNodeResolver.php', - 'Rector\\Doctrine\\TypeAnalyzer\\DoctrineCollectionTypeAnalyzer' => __DIR__ . '/..' . '/rector/rector-doctrine/src/TypeAnalyzer/DoctrineCollectionTypeAnalyzer.php', 'Rector\\DowngradePhp72\\NodeAnalyzer\\BuiltInMethodAnalyzer' => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules/DowngradePhp72/NodeAnalyzer/BuiltInMethodAnalyzer.php', 'Rector\\DowngradePhp72\\NodeAnalyzer\\OverrideFromAnonymousClassMethodAnalyzer' => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules/DowngradePhp72/NodeAnalyzer/OverrideFromAnonymousClassMethodAnalyzer.php', 'Rector\\DowngradePhp72\\NodeAnalyzer\\RegexFuncAnalyzer' => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules/DowngradePhp72/NodeAnalyzer/RegexFuncAnalyzer.php', @@ -1687,12 +1720,8 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\DowngradePhp82\\Rector\\Class_\\DowngradeReadonlyClassRector' => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules/DowngradePhp82/Rector/Class_/DowngradeReadonlyClassRector.php', 'Rector\\DowngradePhp82\\Rector\\FunctionLike\\DowngradeStandaloneNullTrueFalseReturnTypeRector' => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules/DowngradePhp82/Rector/FunctionLike/DowngradeStandaloneNullTrueFalseReturnTypeRector.php', 'Rector\\DowngradePhp83\\Rector\\ClassConst\\DowngradeTypedClassConstRector' => __DIR__ . '/..' . '/rector/rector-downgrade-php/rules/DowngradePhp83/Rector/ClassConst/DowngradeTypedClassConstRector.php', - 'Rector\\EarlyReturn\\NodeAnalyzer\\IfAndAnalyzer' => __DIR__ . '/../..' . '/rules/EarlyReturn/NodeAnalyzer/IfAndAnalyzer.php', - 'Rector\\EarlyReturn\\NodeAnalyzer\\SimpleScalarAnalyzer' => __DIR__ . '/../..' . '/rules/EarlyReturn/NodeAnalyzer/SimpleScalarAnalyzer.php', - 'Rector\\EarlyReturn\\NodeFactory\\InvertedIfFactory' => __DIR__ . '/../..' . '/rules/EarlyReturn/NodeFactory/InvertedIfFactory.php', 'Rector\\EarlyReturn\\NodeTransformer\\ConditionInverter' => __DIR__ . '/../..' . '/rules/EarlyReturn/NodeTransformer/ConditionInverter.php', 'Rector\\EarlyReturn\\Rector\\Foreach_\\ChangeNestedForeachIfsToEarlyContinueRector' => __DIR__ . '/../..' . '/rules/EarlyReturn/Rector/Foreach_/ChangeNestedForeachIfsToEarlyContinueRector.php', - 'Rector\\EarlyReturn\\Rector\\If_\\ChangeAndIfToEarlyReturnRector' => __DIR__ . '/../..' . '/rules/EarlyReturn/Rector/If_/ChangeAndIfToEarlyReturnRector.php', 'Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector' => __DIR__ . '/../..' . '/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php', 'Rector\\EarlyReturn\\Rector\\If_\\ChangeNestedIfsToEarlyReturnRector' => __DIR__ . '/../..' . '/rules/EarlyReturn/Rector/If_/ChangeNestedIfsToEarlyReturnRector.php', 'Rector\\EarlyReturn\\Rector\\If_\\ChangeOrIfContinueToMultiContinueRector' => __DIR__ . '/../..' . '/rules/EarlyReturn/Rector/If_/ChangeOrIfContinueToMultiContinueRector.php', @@ -1703,7 +1732,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\EarlyReturn\\ValueObject\\BareSingleAssignIf' => __DIR__ . '/../..' . '/rules/EarlyReturn/ValueObject/BareSingleAssignIf.php', 'Rector\\Enum\\JsonConstant' => __DIR__ . '/..' . '/rector/rector-downgrade-php/src/Enum/JsonConstant.php', 'Rector\\Enum\\ObjectReference' => __DIR__ . '/../..' . '/src/Enum/ObjectReference.php', - 'Rector\\Error\\ExceptionCorrector' => __DIR__ . '/../..' . '/src/Error/ExceptionCorrector.php', 'Rector\\Exception\\Cache\\CachingException' => __DIR__ . '/../..' . '/src/Exception/Cache/CachingException.php', 'Rector\\Exception\\Configuration\\InvalidConfigurationException' => __DIR__ . '/../..' . '/src/Exception/Configuration/InvalidConfigurationException.php', 'Rector\\Exception\\NotImplementedYetException' => __DIR__ . '/../..' . '/src/Exception/NotImplementedYetException.php', @@ -1723,9 +1751,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Naming\\AssignVariableNameResolver\\NewAssignVariableNameResolver' => __DIR__ . '/../..' . '/rules/Naming/AssignVariableNameResolver/NewAssignVariableNameResolver.php', 'Rector\\Naming\\AssignVariableNameResolver\\PropertyFetchAssignVariableNameResolver' => __DIR__ . '/../..' . '/rules/Naming/AssignVariableNameResolver/PropertyFetchAssignVariableNameResolver.php', 'Rector\\Naming\\Contract\\AssignVariableNameResolverInterface' => __DIR__ . '/../..' . '/rules/Naming/Contract/AssignVariableNameResolverInterface.php', - 'Rector\\Naming\\Contract\\RenameParamValueObjectInterface' => __DIR__ . '/../..' . '/rules/Naming/Contract/RenameParamValueObjectInterface.php', - 'Rector\\Naming\\Contract\\RenamePropertyValueObjectInterface' => __DIR__ . '/../..' . '/rules/Naming/Contract/RenamePropertyValueObjectInterface.php', - 'Rector\\Naming\\Contract\\RenameValueObjectInterface' => __DIR__ . '/../..' . '/rules/Naming/Contract/RenameValueObjectInterface.php', 'Rector\\Naming\\ExpectedNameResolver\\InflectorSingularResolver' => __DIR__ . '/../..' . '/rules/Naming/ExpectedNameResolver/InflectorSingularResolver.php', 'Rector\\Naming\\ExpectedNameResolver\\MatchParamTypeExpectedNameResolver' => __DIR__ . '/../..' . '/rules/Naming/ExpectedNameResolver/MatchParamTypeExpectedNameResolver.php', 'Rector\\Naming\\ExpectedNameResolver\\MatchPropertyTypeExpectedNameResolver' => __DIR__ . '/../..' . '/rules/Naming/ExpectedNameResolver/MatchPropertyTypeExpectedNameResolver.php', @@ -1837,7 +1862,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\NodeTypeResolver\\NodeTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\CastTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/CastTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\ClassAndInterfaceTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php', - 'Rector\\NodeTypeResolver\\NodeTypeResolver\\ClassMethodOrClassConstTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/ClassMethodOrClassConstTypeResolver.php', + 'Rector\\NodeTypeResolver\\NodeTypeResolver\\ClassConstFetchTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/ClassConstFetchTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\IdentifierTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/IdentifierTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\NameTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/NameTypeResolver.php', 'Rector\\NodeTypeResolver\\NodeTypeResolver\\NewTypeResolver' => __DIR__ . '/../..' . '/src/NodeTypeResolver/NodeTypeResolver/NewTypeResolver.php', @@ -1884,7 +1909,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPStanStaticTypeMapper\\Enum\\TypeKind' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/Enum/TypeKind.php', 'Rector\\PHPStanStaticTypeMapper\\PHPStanStaticTypeMapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/PHPStanStaticTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeAnalyzer\\UnionTypeAnalyzer' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeAnalyzer.php', - 'Rector\\PHPStanStaticTypeMapper\\TypeAnalyzer\\UnionTypeCommonTypeNarrower' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeAnalyzer/UnionTypeCommonTypeNarrower.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\AccessoryLiteralStringTypeMapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeMapper/AccessoryLiteralStringTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\AccessoryNonEmptyStringTypeMapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeMapper/AccessoryNonEmptyStringTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\AccessoryNonFalsyStringTypeMapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeMapper/AccessoryNonFalsyStringTypeMapper.php', @@ -1923,8 +1947,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\UnionTypeMapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\TypeMapper\\VoidTypeMapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/TypeMapper/VoidTypeMapper.php', 'Rector\\PHPStanStaticTypeMapper\\Utils\\TypeUnwrapper' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/Utils/TypeUnwrapper.php', - 'Rector\\PHPStanStaticTypeMapper\\ValueObject\\UnionTypeAnalysis' => __DIR__ . '/../..' . '/src/PHPStanStaticTypeMapper/ValueObject/UnionTypeAnalysis.php', - 'Rector\\PHPStan\\NodeVisitor\\ExprScopeFromStmtNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/ExprScopeFromStmtNodeVisitor.php', 'Rector\\PHPStan\\NodeVisitor\\UnreachableStatementNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/UnreachableStatementNodeVisitor.php', 'Rector\\PHPStan\\NodeVisitor\\WrappedNodeRestoringNodeVisitor' => __DIR__ . '/../..' . '/src/PHPStan/NodeVisitor/WrappedNodeRestoringNodeVisitor.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DataProviderAnnotationToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php', @@ -1933,16 +1955,21 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\AnnotationWithValueToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/Class_/AnnotationWithValueToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\CoversAnnotationWithValueToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/Class_/CoversAnnotationWithValueToAttributeRector.php', 'Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\TicketAnnotationToAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/AnnotationsToAttributes/Rector/Class_/TicketAnnotationToAttributeRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\CreateMockToAnonymousClassRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\DataProviderArrayItemsNewLinedRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/DataProviderArrayItemsNewLinedRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\RemoveEmptyTestMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/RemoveEmptyTestMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\ReplaceTestAnnotationWithPrefixedFunctionRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/ReplaceTestAnnotationWithPrefixedFunctionRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddCoversClassAttributeRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddCoversClassAttributeRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddParentSetupCallOnSetupRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddParentSetupCallOnSetupRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddSeeTestAnnotationRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\ConstructClassMethodToSetUpTestCaseRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/ConstructClassMethodToSetUpTestCaseRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferPHPUnitSelfCallRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferPHPUnitThisCallRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\SetUpBeforeClassToSetUpRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/SetUpBeforeClassToSetUpRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\TestWithToDataProviderRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/TestWithToDataProviderRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\YieldDataProviderRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/YieldDataProviderRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachInstanceOfRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/Foreach_/SimplifyForeachInstanceOfRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertCompareOnCountableWithMethodToAssertCountRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareOnCountableWithMethodToAssertCountRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertCompareToSpecificMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareToSpecificMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertComparisonToSpecificMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertComparisonToSpecificMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertEmptyNullableObjectToAssertInstanceofRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertEmptyNullableObjectToAssertInstanceofRector.php', @@ -1957,9 +1984,16 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameBoolNullToSpecificMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertSameBoolNullToSpecificMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameTrueFalseToAssertTrueFalseRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertSameTrueFalseToAssertTrueFalseRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertTrueFalseToSpecificMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertTrueFalseToSpecificMethodRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\NarrowIdenticalWithConsecutiveRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowIdenticalWithConsecutiveRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\NarrowSingleWillReturnCallbackRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowSingleWillReturnCallbackRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\RemoveExpectAnyFromMockRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/RemoveExpectAnyFromMockRector.php', + 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\SingleWithConsecutiveToWithRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/SingleWithConsecutiveToWithRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWillMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/UseSpecificWillMethodRector.php', 'Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWithMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/UseSpecificWithMethodRector.php', + 'Rector\\PHPUnit\\CodeQuality\\ValueObject\\MatchAndReturnMatch' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/ValueObject/MatchAndReturnMatch.php', + 'Rector\\PHPUnit\\Composer\\ProjectPackageVersionResolver' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Composer/ProjectPackageVersionResolver.php', + 'Rector\\PHPUnit\\Enum\\AssertMethod' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Enum/AssertMethod.php', + 'Rector\\PHPUnit\\Enum\\ConsecutiveVariable' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Enum/ConsecutiveVariable.php', 'Rector\\PHPUnit\\Naming\\TestClassNameResolver' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Naming/TestClassNameResolver.php', 'Rector\\PHPUnit\\NodeAnalyzer\\ArgumentMover' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeAnalyzer/ArgumentMover.php', 'Rector\\PHPUnit\\NodeAnalyzer\\AssertCallAnalyzer' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeAnalyzer/AssertCallAnalyzer.php', @@ -1968,13 +2002,19 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPUnit\\NodeAnalyzer\\SetUpMethodDecorator' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeAnalyzer/SetUpMethodDecorator.php', 'Rector\\PHPUnit\\NodeAnalyzer\\TestsNodeAnalyzer' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeAnalyzer/TestsNodeAnalyzer.php', 'Rector\\PHPUnit\\NodeFactory\\AssertCallFactory' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFactory/AssertCallFactory.php', + 'Rector\\PHPUnit\\NodeFactory\\ConsecutiveIfsFactory' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFactory/ConsecutiveIfsFactory.php', 'Rector\\PHPUnit\\NodeFactory\\ExpectExceptionMethodCallFactory' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFactory/ExpectExceptionMethodCallFactory.php', + 'Rector\\PHPUnit\\NodeFactory\\MatcherInvocationCountMethodCallNodeFactory' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFactory/MatcherInvocationCountMethodCallNodeFactory.php', + 'Rector\\PHPUnit\\NodeFactory\\UsedVariablesResolver' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFactory/UsedVariablesResolver.php', + 'Rector\\PHPUnit\\NodeFactory\\WithConsecutiveMatchFactory' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFactory/WithConsecutiveMatchFactory.php', 'Rector\\PHPUnit\\NodeFinder\\DataProviderClassMethodFinder' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeFinder/DataProviderClassMethodFinder.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\AddProphecyTraitRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/AddProphecyTraitRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\PublicDataProviderClassMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/PublicDataProviderClassMethodRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\StaticDataProviderClassMethodRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/Class_/StaticDataProviderClassMethodRector.php', - 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\PropertyExistsWithoutAssertRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/PropertyExistsWithoutAssertRector.php', + 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\AssertIssetToAssertObjectHasPropertyRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php', 'Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\RemoveSetMethodsMethodCallRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php', + 'Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\WithConsecutiveRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php', + 'Rector\\PHPUnit\\PHPUnit110\\Rector\\Class_\\NamedArgumentForDataProviderRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php', 'Rector\\PHPUnit\\PHPUnit50\\Rector\\StaticCall\\GetMockRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit50/Rector/StaticCall/GetMockRector.php', 'Rector\\PHPUnit\\PHPUnit60\\Rector\\ClassMethod\\AddDoesNotPerformAssertionToNonAssertingTestRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit60/Rector/ClassMethod/AddDoesNotPerformAssertionToNonAssertingTestRector.php', 'Rector\\PHPUnit\\PHPUnit60\\Rector\\ClassMethod\\ExceptionAnnotationRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit60/Rector/ClassMethod/ExceptionAnnotationRector.php', @@ -1989,11 +2029,8 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\SpecificAssertContainsWithoutIdentityRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/PHPUnit90/Rector/MethodCall/SpecificAssertContainsWithoutIdentityRector.php', 'Rector\\PHPUnit\\PhpDoc\\DataProviderMethodRenamer' => __DIR__ . '/..' . '/rector/rector-phpunit/src/PhpDoc/DataProviderMethodRenamer.php', 'Rector\\PHPUnit\\PhpDoc\\PhpDocValueToNodeMapper' => __DIR__ . '/..' . '/rector/rector-phpunit/src/PhpDoc/PhpDocValueToNodeMapper.php', - 'Rector\\PHPUnit\\Rector\\ClassMethod\\CreateMockToAnonymousClassRector' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Rector/ClassMethod/CreateMockToAnonymousClassRector.php', - 'Rector\\PHPUnit\\Rector\\Class_\\PreferPHPUnitSelfCallRector' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Rector/Class_/PreferPHPUnitSelfCallRector.php', - 'Rector\\PHPUnit\\Rector\\StmtsAwareInterface\\WithConsecutiveRector' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Rector/StmtsAwareInterface/WithConsecutiveRector.php', - 'Rector\\PHPUnit\\Set\\PHPUnitLevelSetList' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Set/PHPUnitLevelSetList.php', 'Rector\\PHPUnit\\Set\\PHPUnitSetList' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Set/PHPUnitSetList.php', + 'Rector\\PHPUnit\\Set\\SetProvider\\PHPUnitSetProvider' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Set/SetProvider/PHPUnitSetProvider.php', 'Rector\\PHPUnit\\ValueObject\\AnnotationWithValueToAttribute' => __DIR__ . '/..' . '/rector/rector-phpunit/src/ValueObject/AnnotationWithValueToAttribute.php', 'Rector\\PHPUnit\\ValueObject\\BinaryOpWithAssertMethod' => __DIR__ . '/..' . '/rector/rector-phpunit/src/ValueObject/BinaryOpWithAssertMethod.php', 'Rector\\PHPUnit\\ValueObject\\ConstantWithAssertMethods' => __DIR__ . '/..' . '/rector/rector-phpunit/src/ValueObject/ConstantWithAssertMethods.php', @@ -2081,8 +2118,10 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Php74\\Rector\\Double\\RealToFloatTypeCastRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Double/RealToFloatTypeCastRector.php', 'Rector\\Php74\\Rector\\FuncCall\\ArrayKeyExistsOnPropertyRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/FuncCall/ArrayKeyExistsOnPropertyRector.php', 'Rector\\Php74\\Rector\\FuncCall\\FilterVarToAddSlashesRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/FuncCall/FilterVarToAddSlashesRector.php', + 'Rector\\Php74\\Rector\\FuncCall\\HebrevcToNl2brHebrevRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/FuncCall/HebrevcToNl2brHebrevRector.php', 'Rector\\Php74\\Rector\\FuncCall\\MbStrrposEncodingArgumentPositionRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/FuncCall/MbStrrposEncodingArgumentPositionRector.php', 'Rector\\Php74\\Rector\\FuncCall\\MoneyFormatToNumberFormatRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/FuncCall/MoneyFormatToNumberFormatRector.php', + 'Rector\\Php74\\Rector\\FuncCall\\RestoreIncludePathToIniRestoreRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/FuncCall/RestoreIncludePathToIniRestoreRector.php', 'Rector\\Php74\\Rector\\LNumber\\AddLiteralSeparatorToNumberRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php', 'Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Property/RestoreDefaultNullToNullableTypePropertyRector.php', 'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php', @@ -2145,7 +2184,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Php81\\NodeAnalyzer\\ComplexNewAnalyzer' => __DIR__ . '/../..' . '/rules/Php81/NodeAnalyzer/ComplexNewAnalyzer.php', 'Rector\\Php81\\NodeFactory\\EnumFactory' => __DIR__ . '/../..' . '/rules/Php81/NodeFactory/EnumFactory.php', 'Rector\\Php81\\Rector\\Array_\\FirstClassCallableRector' => __DIR__ . '/../..' . '/rules/Php81/Rector/Array_/FirstClassCallableRector.php', - 'Rector\\Php81\\Rector\\ClassConst\\FinalizePublicClassConstantRector' => __DIR__ . '/../..' . '/rules/Php81/Rector/ClassConst/FinalizePublicClassConstantRector.php', 'Rector\\Php81\\Rector\\ClassMethod\\NewInInitializerRector' => __DIR__ . '/../..' . '/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php', 'Rector\\Php81\\Rector\\Class_\\MyCLabsClassToEnumRector' => __DIR__ . '/../..' . '/rules/Php81/Rector/Class_/MyCLabsClassToEnumRector.php', 'Rector\\Php81\\Rector\\Class_\\SpatieEnumClassToEnumRector' => __DIR__ . '/../..' . '/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php', @@ -2174,6 +2212,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PhpAttribute\\AttributeArrayNameInliner' => __DIR__ . '/../..' . '/src/PhpAttribute/AttributeArrayNameInliner.php', 'Rector\\PhpAttribute\\Contract\\AnnotationToAttributeMapperInterface' => __DIR__ . '/../..' . '/src/PhpAttribute/Contract/AnnotationToAttributeMapperInterface.php', 'Rector\\PhpAttribute\\Enum\\DocTagNodeState' => __DIR__ . '/../..' . '/src/PhpAttribute/Enum/DocTagNodeState.php', + 'Rector\\PhpAttribute\\NodeFactory\\AnnotationToAttributeIntegerValueCaster' => __DIR__ . '/../..' . '/src/PhpAttribute/NodeFactory/AnnotationToAttributeIntegerValueCaster.php', 'Rector\\PhpAttribute\\NodeFactory\\AttributeNameFactory' => __DIR__ . '/../..' . '/src/PhpAttribute/NodeFactory/AttributeNameFactory.php', 'Rector\\PhpAttribute\\NodeFactory\\NamedArgsFactory' => __DIR__ . '/../..' . '/src/PhpAttribute/NodeFactory/NamedArgsFactory.php', 'Rector\\PhpAttribute\\NodeFactory\\PhpAttributeGroupFactory' => __DIR__ . '/../..' . '/src/PhpAttribute/NodeFactory/PhpAttributeGroupFactory.php', @@ -2207,20 +2246,22 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\PhpParser\\Node\\NodeFactory' => __DIR__ . '/../..' . '/src/PhpParser/Node/NodeFactory.php', 'Rector\\PhpParser\\Node\\Value\\ValueResolver' => __DIR__ . '/../..' . '/src/PhpParser/Node/Value/ValueResolver.php', 'Rector\\PhpParser\\Parser\\InlineCodeParser' => __DIR__ . '/../..' . '/src/PhpParser/Parser/InlineCodeParser.php', + 'Rector\\PhpParser\\Parser\\ParserErrors' => __DIR__ . '/../..' . '/src/PhpParser/Parser/ParserErrors.php', 'Rector\\PhpParser\\Parser\\RectorParser' => __DIR__ . '/../..' . '/src/PhpParser/Parser/RectorParser.php', 'Rector\\PhpParser\\Parser\\SimplePhpParser' => __DIR__ . '/../..' . '/src/PhpParser/Parser/SimplePhpParser.php', 'Rector\\PhpParser\\Printer\\BetterStandardPrinter' => __DIR__ . '/../..' . '/src/PhpParser/Printer/BetterStandardPrinter.php', - 'Rector\\PhpParser\\Printer\\FormatPerservingPrinter' => __DIR__ . '/../..' . '/src/PhpParser/Printer/FormatPerservingPrinter.php', 'Rector\\PhpParser\\ValueObject\\StmtsAndTokens' => __DIR__ . '/../..' . '/src/PhpParser/ValueObject/StmtsAndTokens.php', 'Rector\\Php\\PhpVersionProvider' => __DIR__ . '/../..' . '/src/Php/PhpVersionProvider.php', - 'Rector\\Php\\PhpVersionResolver\\ProjectComposerJsonPhpVersionResolver' => __DIR__ . '/../..' . '/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php', + 'Rector\\Php\\PhpVersionResolver\\ComposerJsonPhpVersionResolver' => __DIR__ . '/../..' . '/src/Php/PhpVersionResolver/ComposerJsonPhpVersionResolver.php', 'Rector\\Php\\PolyfillPackagesProvider' => __DIR__ . '/../..' . '/src/Php/PolyfillPackagesProvider.php', 'Rector\\Php\\ReservedKeywordAnalyzer' => __DIR__ . '/../..' . '/src/Php/ReservedKeywordAnalyzer.php', 'Rector\\PostRector\\Application\\PostFileProcessor' => __DIR__ . '/../..' . '/src/PostRector/Application/PostFileProcessor.php', 'Rector\\PostRector\\Collector\\UseNodesToAddCollector' => __DIR__ . '/../..' . '/src/PostRector/Collector/UseNodesToAddCollector.php', 'Rector\\PostRector\\Contract\\Rector\\PostRectorInterface' => __DIR__ . '/../..' . '/src/PostRector/Contract/Rector/PostRectorInterface.php', + 'Rector\\PostRector\\Guard\\AddUseStatementGuard' => __DIR__ . '/../..' . '/src/PostRector/Guard/AddUseStatementGuard.php', 'Rector\\PostRector\\Rector\\AbstractPostRector' => __DIR__ . '/../..' . '/src/PostRector/Rector/AbstractPostRector.php', 'Rector\\PostRector\\Rector\\ClassRenamingPostRector' => __DIR__ . '/../..' . '/src/PostRector/Rector/ClassRenamingPostRector.php', + 'Rector\\PostRector\\Rector\\DocblockNameImportingPostRector' => __DIR__ . '/../..' . '/src/PostRector/Rector/DocblockNameImportingPostRector.php', 'Rector\\PostRector\\Rector\\NameImportingPostRector' => __DIR__ . '/../..' . '/src/PostRector/Rector/NameImportingPostRector.php', 'Rector\\PostRector\\Rector\\UnusedImportRemovingPostRector' => __DIR__ . '/../..' . '/src/PostRector/Rector/UnusedImportRemovingPostRector.php', 'Rector\\PostRector\\Rector\\UseAddingPostRector' => __DIR__ . '/../..' . '/src/PostRector/Rector/UseAddingPostRector.php', @@ -2229,14 +2270,12 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Privatization\\Guard\\ParentPropertyLookupGuard' => __DIR__ . '/../..' . '/rules/Privatization/Guard/ParentPropertyLookupGuard.php', 'Rector\\Privatization\\NodeManipulator\\VisibilityManipulator' => __DIR__ . '/../..' . '/rules/Privatization/NodeManipulator/VisibilityManipulator.php', 'Rector\\Privatization\\Rector\\ClassMethod\\PrivatizeFinalClassMethodRector' => __DIR__ . '/../..' . '/rules/Privatization/Rector/ClassMethod/PrivatizeFinalClassMethodRector.php', - 'Rector\\Privatization\\Rector\\Class_\\FinalizeClassesWithoutChildrenRector' => __DIR__ . '/../..' . '/rules/Privatization/Rector/Class_/FinalizeClassesWithoutChildrenRector.php', 'Rector\\Privatization\\Rector\\Class_\\FinalizeTestCaseClassRector' => __DIR__ . '/../..' . '/rules/Privatization/Rector/Class_/FinalizeTestCaseClassRector.php', 'Rector\\Privatization\\Rector\\MethodCall\\PrivatizeLocalGetterToPropertyRector' => __DIR__ . '/../..' . '/rules/Privatization/Rector/MethodCall/PrivatizeLocalGetterToPropertyRector.php', 'Rector\\Privatization\\Rector\\Property\\PrivatizeFinalClassPropertyRector' => __DIR__ . '/../..' . '/rules/Privatization/Rector/Property/PrivatizeFinalClassPropertyRector.php', 'Rector\\Privatization\\TypeManipulator\\TypeNormalizer' => __DIR__ . '/../..' . '/rules/Privatization/TypeManipulator/TypeNormalizer.php', 'Rector\\Privatization\\VisibilityGuard\\ClassMethodVisibilityGuard' => __DIR__ . '/../..' . '/rules/Privatization/VisibilityGuard/ClassMethodVisibilityGuard.php', 'Rector\\ProcessAnalyzer\\RectifiedAnalyzer' => __DIR__ . '/../..' . '/src/ProcessAnalyzer/RectifiedAnalyzer.php', - 'Rector\\Provider\\CurrentFileProvider' => __DIR__ . '/../..' . '/src/Provider/CurrentFileProvider.php', 'Rector\\RectorInstaller\\Filesystem' => __DIR__ . '/..' . '/rector/extension-installer/src/Filesystem.php', 'Rector\\RectorInstaller\\GeneratedConfig' => __DIR__ . '/..' . '/rector/extension-installer/src/GeneratedConfig.php', 'Rector\\RectorInstaller\\LocalFilesystem' => __DIR__ . '/..' . '/rector/extension-installer/src/LocalFilesystem.php', @@ -2264,6 +2303,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Renaming\\NodeManipulator\\SwitchManipulator' => __DIR__ . '/../..' . '/rules/Renaming/NodeManipulator/SwitchManipulator.php', 'Rector\\Renaming\\Rector\\ClassConstFetch\\RenameClassConstFetchRector' => __DIR__ . '/../..' . '/rules/Renaming/Rector/ClassConstFetch/RenameClassConstFetchRector.php', 'Rector\\Renaming\\Rector\\ClassMethod\\RenameAnnotationRector' => __DIR__ . '/../..' . '/rules/Renaming/Rector/ClassMethod/RenameAnnotationRector.php', + 'Rector\\Renaming\\Rector\\Class_\\RenameAttributeRector' => __DIR__ . '/../..' . '/rules/Renaming/Rector/Class_/RenameAttributeRector.php', 'Rector\\Renaming\\Rector\\ConstFetch\\RenameConstantRector' => __DIR__ . '/../..' . '/rules/Renaming/Rector/ConstFetch/RenameConstantRector.php', 'Rector\\Renaming\\Rector\\FuncCall\\RenameFunctionRector' => __DIR__ . '/../..' . '/rules/Renaming/Rector/FuncCall/RenameFunctionRector.php', 'Rector\\Renaming\\Rector\\FunctionLike\\RenameFunctionLikeParamWithinCallLikeArgRector' => __DIR__ . '/../..' . '/rules/Renaming/Rector/FunctionLike/RenameFunctionLikeParamWithinCallLikeArgRector.php', @@ -2276,17 +2316,27 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Renaming\\ValueObject\\MethodCallRenameWithArrayKey' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/MethodCallRenameWithArrayKey.php', 'Rector\\Renaming\\ValueObject\\RenameAnnotation' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameAnnotation.php', 'Rector\\Renaming\\ValueObject\\RenameAnnotationByType' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameAnnotationByType.php', + 'Rector\\Renaming\\ValueObject\\RenameAttribute' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameAttribute.php', 'Rector\\Renaming\\ValueObject\\RenameClassAndConstFetch' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameClassAndConstFetch.php', 'Rector\\Renaming\\ValueObject\\RenameClassConstFetch' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameClassConstFetch.php', 'Rector\\Renaming\\ValueObject\\RenameFunctionLikeParamWithinCallLikeArg' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameFunctionLikeParamWithinCallLikeArg.php', 'Rector\\Renaming\\ValueObject\\RenameProperty' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameProperty.php', 'Rector\\Renaming\\ValueObject\\RenameStaticMethod' => __DIR__ . '/../..' . '/rules/Renaming/ValueObject/RenameStaticMethod.php', + 'Rector\\Reporting\\DeprecatedRulesReporter' => __DIR__ . '/../..' . '/src/Reporting/DeprecatedRulesReporter.php', + 'Rector\\Reporting\\MissConfigurationReporter' => __DIR__ . '/../..' . '/src/Reporting/MissConfigurationReporter.php', + 'Rector\\Set\\Contract\\SetInterface' => __DIR__ . '/../..' . '/src/Set/Contract/SetInterface.php', 'Rector\\Set\\Contract\\SetListInterface' => __DIR__ . '/../..' . '/src/Set/Contract/SetListInterface.php', + 'Rector\\Set\\Contract\\SetProviderInterface' => __DIR__ . '/../..' . '/src/Set/Contract/SetProviderInterface.php', + 'Rector\\Set\\Enum\\SetGroup' => __DIR__ . '/../..' . '/src/Set/Enum/SetGroup.php', + 'Rector\\Set\\SetManager' => __DIR__ . '/../..' . '/src/Set/SetManager.php', + 'Rector\\Set\\SetProvider\\CoreSetProvider' => __DIR__ . '/../..' . '/src/Set/SetProvider/CoreSetProvider.php', + 'Rector\\Set\\SetProvider\\PHPSetProvider' => __DIR__ . '/../..' . '/src/Set/SetProvider/PHPSetProvider.php', + 'Rector\\Set\\ValueObject\\ComposerTriggeredSet' => __DIR__ . '/../..' . '/src/Set/ValueObject/ComposerTriggeredSet.php', 'Rector\\Set\\ValueObject\\DowngradeLevelSetList' => __DIR__ . '/..' . '/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeLevelSetList.php', 'Rector\\Set\\ValueObject\\DowngradeSetList' => __DIR__ . '/..' . '/rector/rector-downgrade-php/src/Set/ValueObject/DowngradeSetList.php', 'Rector\\Set\\ValueObject\\LevelSetList' => __DIR__ . '/../..' . '/src/Set/ValueObject/LevelSetList.php', + 'Rector\\Set\\ValueObject\\Set' => __DIR__ . '/../..' . '/src/Set/ValueObject/Set.php', 'Rector\\Set\\ValueObject\\SetList' => __DIR__ . '/../..' . '/src/Set/ValueObject/SetList.php', - 'Rector\\Skipper\\Contract\\SkipVoterInterface' => __DIR__ . '/../..' . '/src/Skipper/Contract/SkipVoterInterface.php', 'Rector\\Skipper\\FileSystem\\FnMatchPathNormalizer' => __DIR__ . '/../..' . '/src/Skipper/FileSystem/FnMatchPathNormalizer.php', 'Rector\\Skipper\\FileSystem\\PathNormalizer' => __DIR__ . '/../..' . '/src/Skipper/FileSystem/PathNormalizer.php', 'Rector\\Skipper\\Fnmatcher' => __DIR__ . '/../..' . '/src/Skipper/Fnmatcher.php', @@ -2304,10 +2354,10 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\StaticTypeMapper\\Mapper\\PhpParserNodeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/Mapper/PhpParserNodeMapper.php', 'Rector\\StaticTypeMapper\\Mapper\\ScalarStringToTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php', 'Rector\\StaticTypeMapper\\Naming\\NameScopeFactory' => __DIR__ . '/../..' . '/src/StaticTypeMapper/Naming/NameScopeFactory.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\IdentifierTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/IdentifierTypeMapper.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\IntersectionTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/IntersectionTypeMapper.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\NullableTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/NullableTypeMapper.php', - 'Rector\\StaticTypeMapper\\PhpDocParser\\UnionTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/UnionTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\IdentifierPhpDocTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/IdentifierPhpDocTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\IntersectionPhpDocTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/IntersectionPhpDocTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\NullablePhpDocTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/NullablePhpDocTypeMapper.php', + 'Rector\\StaticTypeMapper\\PhpDocParser\\UnionPhpDocTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDocParser/UnionPhpDocTypeMapper.php', 'Rector\\StaticTypeMapper\\PhpDoc\\PhpDocTypeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpDoc/PhpDocTypeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\ExprNodeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpParser/ExprNodeMapper.php', 'Rector\\StaticTypeMapper\\PhpParser\\FullyQualifiedNodeMapper' => __DIR__ . '/../..' . '/src/StaticTypeMapper/PhpParser/FullyQualifiedNodeMapper.php', @@ -2343,6 +2393,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\Bridge\\Symfony\\ContainerServiceProvider' => __DIR__ . '/..' . '/rector/rector-symfony/src/Bridge/Symfony/ContainerServiceProvider.php', 'Rector\\Symfony\\Bridge\\Symfony\\Routing\\SymfonyRoutesProvider' => __DIR__ . '/..' . '/rector/rector-symfony/src/Bridge/Symfony/Routing/SymfonyRoutesProvider.php', 'Rector\\Symfony\\BundleClassResolver' => __DIR__ . '/..' . '/rector/rector-symfony/src/BundleClassResolver.php', + 'Rector\\Symfony\\CodeQuality\\Enum\\ResponseClass' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Enum/ResponseClass.php', 'Rector\\Symfony\\CodeQuality\\NodeFactory\\SymfonyClosureFactory' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/NodeFactory/SymfonyClosureFactory.php', 'Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/BinaryOp/ResponseStatusCodeRector.php', 'Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\ActionSuffixRemoverRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ActionSuffixRemoverRector.php', @@ -2361,12 +2412,20 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\Configs\\Enum\\DoctrineConfigKey' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Enum/DoctrineConfigKey.php', 'Rector\\Symfony\\Configs\\Enum\\GroupingMethods' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Enum/GroupingMethods.php', 'Rector\\Symfony\\Configs\\Enum\\SecurityConfigKey' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Enum/SecurityConfigKey.php', + 'Rector\\Symfony\\Configs\\NodeAnalyser\\ConfigServiceArgumentsResolver' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/NodeAnalyser/ConfigServiceArgumentsResolver.php', + 'Rector\\Symfony\\Configs\\NodeAnalyser\\SetServiceClassNameResolver' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/NodeAnalyser/SetServiceClassNameResolver.php', + 'Rector\\Symfony\\Configs\\NodeFactory\\AutowiredParamFactory' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/NodeFactory/AutowiredParamFactory.php', + 'Rector\\Symfony\\Configs\\NodeVisitor\\CollectServiceArgumentsNodeVisitor' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/NodeVisitor/CollectServiceArgumentsNodeVisitor.php', 'Rector\\Symfony\\Configs\\Rector\\ClassMethod\\AddRouteAnnotationRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php', + 'Rector\\Symfony\\Configs\\Rector\\Class_\\AutowireAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Class_/AutowireAttributeRector.php', + 'Rector\\Symfony\\Configs\\Rector\\Class_\\ParameterBagToAutowireAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Class_/ParameterBagToAutowireAttributeRector.php', + 'Rector\\Symfony\\Configs\\Rector\\Closure\\MergeServiceNameTypeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/MergeServiceNameTypeRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceArgsToServiceNamedArgRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSetStringNameToClassNameRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSetStringNameToClassNameRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSettersToSettersAutodiscoveryRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceTagsToDefaultsAutoconfigureRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceTagsToDefaultsAutoconfigureRector.php', 'Rector\\Symfony\\Configs\\Rector\\Closure\\ServicesSetNameToSetTypeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php', + 'Rector\\Symfony\\Configs\\ValueObject\\ServiceArguments' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php', 'Rector\\Symfony\\Contract\\Bridge\\Symfony\\Routing\\SymfonyRoutesProviderInterface' => __DIR__ . '/..' . '/rector/rector-symfony/src/Contract/Bridge/Symfony/Routing/SymfonyRoutesProviderInterface.php', 'Rector\\Symfony\\Contract\\EventReferenceToMethodNameInterface' => __DIR__ . '/..' . '/rector/rector-symfony/src/Contract/EventReferenceToMethodNameInterface.php', 'Rector\\Symfony\\Contract\\Tag\\TagInterface' => __DIR__ . '/..' . '/rector/rector-symfony/src/Contract/Tag/TagInterface.php', @@ -2375,6 +2434,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\DowngradeSymfony70\\Rector\\Class_\\DowngradeSymfonyCommandAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/DowngradeSymfony70/Rector/Class_/DowngradeSymfonyCommandAttributeRector.php', 'Rector\\Symfony\\Enum\\SensioAttribute' => __DIR__ . '/..' . '/rector/rector-symfony/src/Enum/SensioAttribute.php', 'Rector\\Symfony\\Enum\\SymfonyAnnotation' => __DIR__ . '/..' . '/rector/rector-symfony/src/Enum/SymfonyAnnotation.php', + 'Rector\\Symfony\\Enum\\SymfonyAttribute' => __DIR__ . '/..' . '/rector/rector-symfony/src/Enum/SymfonyAttribute.php', 'Rector\\Symfony\\Enum\\SymfonyClass' => __DIR__ . '/..' . '/rector/rector-symfony/src/Enum/SymfonyClass.php', 'Rector\\Symfony\\Exception\\XmlContainerNotExistsException' => __DIR__ . '/..' . '/rector/rector-symfony/src/Exception/XmlContainerNotExistsException.php', 'Rector\\Symfony\\FormHelper\\FormTypeStringToTypeProvider' => __DIR__ . '/..' . '/rector/rector-symfony/src/FormHelper/FormTypeStringToTypeProvider.php', @@ -2386,8 +2446,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\NodeAnalyzer\\Annotations\\PropertyAnnotationAssertResolver' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/Annotations/PropertyAnnotationAssertResolver.php', 'Rector\\Symfony\\NodeAnalyzer\\Annotations\\StmtMethodCallMatcher' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/Annotations/StmtMethodCallMatcher.php', 'Rector\\Symfony\\NodeAnalyzer\\ClassAnalyzer' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/ClassAnalyzer.php', - 'Rector\\Symfony\\NodeAnalyzer\\Command\\AttributeValueResolver' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/Command/AttributeValueResolver.php', - 'Rector\\Symfony\\NodeAnalyzer\\Command\\SetAliasesMethodCallExtractor' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/Command/SetAliasesMethodCallExtractor.php', 'Rector\\Symfony\\NodeAnalyzer\\DependencyInjectionMethodCallAnalyzer' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/DependencyInjectionMethodCallAnalyzer.php', 'Rector\\Symfony\\NodeAnalyzer\\FormAddMethodCallAnalyzer' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/FormAddMethodCallAnalyzer.php', 'Rector\\Symfony\\NodeAnalyzer\\FormCollectionAnalyzer' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeAnalyzer/FormCollectionAnalyzer.php', @@ -2415,14 +2473,16 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\NodeManipulator\\ArrayManipulator' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeManipulator/ArrayManipulator.php', 'Rector\\Symfony\\NodeManipulator\\ClassManipulator' => __DIR__ . '/..' . '/rector/rector-symfony/src/NodeManipulator/ClassManipulator.php', 'Rector\\Symfony\\PhpDocNode\\SymfonyRouteTagValueNodeFactory' => __DIR__ . '/..' . '/rector/rector-symfony/src/PhpDocNode/SymfonyRouteTagValueNodeFactory.php', + 'Rector\\Symfony\\PhpParser\\NamedSimplePhpParser' => __DIR__ . '/..' . '/rector/rector-symfony/src/PhpParser/NamedSimplePhpParser.php', 'Rector\\Symfony\\Set\\FOSRestSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/FOSRestSetList.php', 'Rector\\Symfony\\Set\\JMSSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/JMSSetList.php', 'Rector\\Symfony\\Set\\SensiolabsSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/SensiolabsSetList.php', + 'Rector\\Symfony\\Set\\SetProvider\\SymfonySetProvider' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/SetProvider/SymfonySetProvider.php', + 'Rector\\Symfony\\Set\\SetProvider\\TwigSetProvider' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/SetProvider/TwigSetProvider.php', 'Rector\\Symfony\\Set\\SwiftMailerSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/SwiftMailerSetList.php', - 'Rector\\Symfony\\Set\\SymfonyLevelSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/SymfonyLevelSetList.php', 'Rector\\Symfony\\Set\\SymfonySetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/SymfonySetList.php', - 'Rector\\Symfony\\Set\\TwigLevelSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/TwigLevelSetList.php', 'Rector\\Symfony\\Set\\TwigSetList' => __DIR__ . '/..' . '/rector/rector-symfony/src/Set/TwigSetList.php', + 'Rector\\Symfony\\SwiftMailer\\Rector\\ClassMethod\\SwiftMessageToEmailRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/SwiftMailer/Rector/ClassMethod/SwiftMessageToEmailRector.php', 'Rector\\Symfony\\SwiftMailer\\Rector\\MethodCall\\SwiftCreateMessageToNewEmailRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/SwiftMailer/Rector/MethodCall/SwiftCreateMessageToNewEmailRector.php', 'Rector\\Symfony\\SwiftMailer\\Rector\\MethodCall\\SwiftSetBodyToHtmlPlainMethodCallRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/SwiftMailer/Rector/MethodCall/SwiftSetBodyToHtmlPlainMethodCallRector.php', 'Rector\\Symfony\\Symfony25\\Rector\\MethodCall\\AddViolationToBuildViolationRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony25/Rector/MethodCall/AddViolationToBuildViolationRector.php', @@ -2478,6 +2538,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\Symfony53\\Rector\\StaticPropertyFetch\\KernelTestCaseContainerPropertyDeprecationRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony53/Rector/StaticPropertyFetch/KernelTestCaseContainerPropertyDeprecationRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\FuncCall\\ReplaceServiceArgumentRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php', 'Rector\\Symfony\\Symfony60\\Rector\\MethodCall\\GetHelperControllerToServiceRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony60/Rector/MethodCall/GetHelperControllerToServiceRector.php', + 'Rector\\Symfony\\Symfony61\\Rector\\Class_\\CommandConfigureToAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandConfigureToAttributeRector.php', 'Rector\\Symfony\\Symfony61\\Rector\\Class_\\CommandPropertyToAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandPropertyToAttributeRector.php', 'Rector\\Symfony\\Symfony61\\Rector\\Class_\\MagicClosureTwigExtensionToNativeMethodsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony61/Rector/Class_/MagicClosureTwigExtensionToNativeMethodsRector.php', 'Rector\\Symfony\\Symfony61\\Rector\\StaticPropertyFetch\\ErrorNamesPropertyToConstantRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony61/Rector/StaticPropertyFetch/ErrorNamesPropertyToConstantRector.php', @@ -2485,7 +2546,9 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Symfony\\Symfony62\\Rector\\ClassMethod\\ParamConverterAttributeToMapEntityAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony62/Rector/ClassMethod/ParamConverterAttributeToMapEntityAttributeRector.php', 'Rector\\Symfony\\Symfony62\\Rector\\Class_\\MessageHandlerInterfaceToAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony62/Rector/Class_/MessageHandlerInterfaceToAttributeRector.php', 'Rector\\Symfony\\Symfony62\\Rector\\Class_\\MessageSubscriberInterfaceToAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony62/Rector/Class_/MessageSubscriberInterfaceToAttributeRector.php', + 'Rector\\Symfony\\Symfony62\\Rector\\Class_\\SecurityAttributeToIsGrantedAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony62/Rector/Class_/SecurityAttributeToIsGrantedAttributeRector.php', 'Rector\\Symfony\\Symfony62\\Rector\\MethodCall\\SimplifyFormRenderingRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony62/Rector/MethodCall/SimplifyFormRenderingRector.php', + 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\ParamAndEnvAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php', 'Rector\\Symfony\\Symfony63\\Rector\\Class_\\SignalableCommandInterfaceReturnTypeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony63/Rector/Class_/SignalableCommandInterfaceReturnTypeRector.php', 'Rector\\Symfony\\Symfony64\\Rector\\Class_\\ChangeRouteAttributeFromAnnotationSubnamespaceRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php', 'Rector\\Symfony\\Twig134\\Rector\\Return_\\SimpleFunctionAndFilterRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Twig134/Rector/Return_/SimpleFunctionAndFilterRector.php', @@ -2547,6 +2610,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Transform\\Rector\\MethodCall\\MethodCallToStaticCallRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/MethodCall/MethodCallToStaticCallRector.php', 'Rector\\Transform\\Rector\\MethodCall\\ReplaceParentCallByPropertyCallRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/MethodCall/ReplaceParentCallByPropertyCallRector.php', 'Rector\\Transform\\Rector\\New_\\NewToStaticCallRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/New_/NewToStaticCallRector.php', + 'Rector\\Transform\\Rector\\Scalar\\ScalarValueToConstFetchRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/Scalar/ScalarValueToConstFetchRector.php', 'Rector\\Transform\\Rector\\StaticCall\\StaticCallToFuncCallRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/StaticCall/StaticCallToFuncCallRector.php', 'Rector\\Transform\\Rector\\StaticCall\\StaticCallToMethodCallRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/StaticCall/StaticCallToMethodCallRector.php', 'Rector\\Transform\\Rector\\StaticCall\\StaticCallToNewRector' => __DIR__ . '/../..' . '/rules/Transform/Rector/StaticCall/StaticCallToNewRector.php', @@ -2565,6 +2629,7 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Transform\\ValueObject\\PropertyAssignToMethodCall' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/PropertyAssignToMethodCall.php', 'Rector\\Transform\\ValueObject\\PropertyFetchToMethodCall' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/PropertyFetchToMethodCall.php', 'Rector\\Transform\\ValueObject\\ReplaceParentCallByPropertyCall' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/ReplaceParentCallByPropertyCall.php', + 'Rector\\Transform\\ValueObject\\ScalarValueToConstFetch' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/ScalarValueToConstFetch.php', 'Rector\\Transform\\ValueObject\\StaticCallToFuncCall' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/StaticCallToFuncCall.php', 'Rector\\Transform\\ValueObject\\StaticCallToMethodCall' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/StaticCallToMethodCall.php', 'Rector\\Transform\\ValueObject\\StaticCallToNew' => __DIR__ . '/../..' . '/rules/Transform/ValueObject/StaticCallToNew.php', @@ -2573,7 +2638,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\TypeDeclaration\\AlreadyAssignDetector\\ConstructorAssignDetector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/AlreadyAssignDetector/ConstructorAssignDetector.php', 'Rector\\TypeDeclaration\\AlreadyAssignDetector\\NullTypeAssignDetector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php', 'Rector\\TypeDeclaration\\AlreadyAssignDetector\\PropertyDefaultAssignDetector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/AlreadyAssignDetector/PropertyDefaultAssignDetector.php', - 'Rector\\TypeDeclaration\\Contract\\PHPStan\\TypeWithClassTypeSpecifierInterface' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php', 'Rector\\TypeDeclaration\\FunctionLikeReturnTypeResolver' => __DIR__ . '/../..' . '/rules/TypeDeclaration/FunctionLikeReturnTypeResolver.php', 'Rector\\TypeDeclaration\\Guard\\ParamTypeAddGuard' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Guard/ParamTypeAddGuard.php', 'Rector\\TypeDeclaration\\Guard\\PropertyTypeOverrideGuard' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Guard/PropertyTypeOverrideGuard.php', @@ -2588,53 +2652,70 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\TypeDeclaration\\NodeAnalyzer\\ParamAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ParamAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnFilter\\ExclusiveNativeCallLikeReturnMatcher' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnFilter/ExclusiveNativeCallLikeReturnMatcher.php', - 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\AlwaysStrictReturnAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/AlwaysStrictReturnAnalyzer.php', - 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictBoolReturnTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictNativeFunctionReturnTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictNativeFunctionReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictReturnNewAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php', - 'Rector\\TypeDeclaration\\NodeAnalyzer\\ReturnTypeAnalyzer\\StrictScalarReturnTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictScalarReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeAnalyzer\\TypeNodeUnwrapper' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeAnalyzer/TypeNodeUnwrapper.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddNeverReturnType' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeManipulator/AddNeverReturnType.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddReturnTypeFromCast' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromCast.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddReturnTypeFromParam' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromParam.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddReturnTypeFromStrictNativeCall' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeManipulator/AddReturnTypeFromStrictNativeCall.php', + 'Rector\\TypeDeclaration\\NodeManipulator\\AddUnionReturnType' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeManipulator/AddUnionReturnType.php', 'Rector\\TypeDeclaration\\NodeTypeAnalyzer\\DetailedTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeTypeAnalyzer/DetailedTypeAnalyzer.php', 'Rector\\TypeDeclaration\\NodeTypeAnalyzer\\PropertyTypeDecorator' => __DIR__ . '/../..' . '/rules/TypeDeclaration/NodeTypeAnalyzer/PropertyTypeDecorator.php', 'Rector\\TypeDeclaration\\PHPStan\\ObjectTypeSpecifier' => __DIR__ . '/../..' . '/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php', - 'Rector\\TypeDeclaration\\PHPStan\\TypeSpecifier\\SameNamespacedTypeSpecifier' => __DIR__ . '/../..' . '/rules/TypeDeclaration/PHPStan/TypeSpecifier/SameNamespacedTypeSpecifier.php', - 'Rector\\TypeDeclaration\\PHPStan\\TypeSpecifier\\SelfStaticParentTypeSpecifier' => __DIR__ . '/../..' . '/rules/TypeDeclaration/PHPStan/TypeSpecifier/SelfStaticParentTypeSpecifier.php', 'Rector\\TypeDeclaration\\PhpDocParser\\ParamPhpDocNodeFactory' => __DIR__ . '/../..' . '/rules/TypeDeclaration/PhpDocParser/ParamPhpDocNodeFactory.php', + 'Rector\\TypeDeclaration\\PhpDocParser\\TypeExpressionFromVarTagResolver' => __DIR__ . '/../..' . '/rules/TypeDeclaration/PhpDocParser/TypeExpressionFromVarTagResolver.php', 'Rector\\TypeDeclaration\\Rector\\ArrowFunction\\AddArrowFunctionReturnTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ArrowFunction/AddArrowFunctionReturnTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\BooleanAnd\\BinaryOpNullableToInstanceofRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddMethodCallBasedStrictParamTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeBasedOnPHPUnitDataProviderRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeDeclarationRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeFromPropertyTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeFromPropertyTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnArrayDocblockBasedOnArrayMapRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationBasedOnParentClassMethodRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationBasedOnParentClassMethodRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddTypeFromResourceDocblockRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddTypeFromResourceDocblockRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddVoidReturnTypeWhereNoReturnRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php', - 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromStrictScalarReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanConstReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanStrictReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictReturnsRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictScalarReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/NumericReturnTypeFromStrictScalarReturnsRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByParentCallTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNullableTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnNullableTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromMockObjectRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnCastRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnCastRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnDirectArrayRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnDirectArrayRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnNewRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php', - 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictBoolReturnExprRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictBoolReturnExprRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictConstantReturnRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictConstantReturnRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictFluentReturnRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictFluentReturnRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNativeCallRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNativeCallRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNewArrayRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictParamRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictParamRector.php', - 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictScalarReturnExprRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictScalarReturnExprRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedCallRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedPropertyRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromSymfonySerializerRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromSymfonySerializerRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnUnionTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnUnionTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/StrictArrayParamDimFetchRector.php', 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictStringParamConcatRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/StrictStringParamConcatRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictScalarReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictScalarReturnsRector.php', + 'Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictStringReturnsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/StringReturnTypeFromStrictStringReturnsRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\AddTestsVoidReturnTypeWhereNoReturnRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/AddTestsVoidReturnTypeWhereNoReturnRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\ChildDoctrineRepositoryClassTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/ChildDoctrineRepositoryClassTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\MergeDateTimePropertyTypeDeclarationRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/MergeDateTimePropertyTypeDeclarationRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\PropertyTypeFromStrictSetterGetterRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/PropertyTypeFromStrictSetterGetterRector.php', 'Rector\\TypeDeclaration\\Rector\\Class_\\ReturnTypeFromStrictTernaryRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php', + 'Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromCreateMockAssignRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromCreateMockAssignRector.php', + 'Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromJMSSerializerAttributeTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Class_/TypedPropertyFromJMSSerializerAttributeTypeRector.php', + 'Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureNeverReturnTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Closure/AddClosureNeverReturnTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureVoidReturnTypeWhereNoReturnRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Closure/AddClosureVoidReturnTypeWhereNoReturnRector.php', + 'Rector\\TypeDeclaration\\Rector\\Closure\\ClosureReturnTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Closure/ClosureReturnTypeRector.php', 'Rector\\TypeDeclaration\\Rector\\Empty_\\EmptyOnNullableObjectToInstanceOfRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Empty_/EmptyOnNullableObjectToInstanceOfRector.php', + 'Rector\\TypeDeclaration\\Rector\\Expression\\InlineVarDocTagToAssertRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Expression/InlineVarDocTagToAssertRector.php', + 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromArgRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromArgRector.php', + 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromObjectRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/FunctionLike/AddClosureParamTypeFromObjectRector.php', 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector.php', 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddParamTypeSplFixedArrayRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/FunctionLike/AddParamTypeSplFixedArrayRector.php', 'Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddReturnTypeDeclarationFromYieldsRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/FunctionLike/AddReturnTypeDeclarationFromYieldsRector.php', @@ -2646,13 +2727,10 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\DeclareStrictTypesRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php', 'Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\IncreaseDeclareStrictTypesRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php', 'Rector\\TypeDeclaration\\Rector\\While_\\WhileNullableToInstanceofRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/While_/WhileNullableToInstanceofRector.php', - 'Rector\\TypeDeclaration\\TypeAnalyzer\\AlwaysStrictBoolExprAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php', - 'Rector\\TypeDeclaration\\TypeAnalyzer\\AlwaysStrictScalarExprAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictScalarExprAnalyzer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\GenericClassStringTypeNormalizer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/GenericClassStringTypeNormalizer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\NullableTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/NullableTypeAnalyzer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\PropertyTypeDefaultValueAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/PropertyTypeDefaultValueAnalyzer.php', 'Rector\\TypeDeclaration\\TypeAnalyzer\\ReturnStrictTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/ReturnStrictTypeAnalyzer.php', - 'Rector\\TypeDeclaration\\TypeAnalyzer\\StrictReturnClassConstReturnTypeAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/StrictReturnClassConstReturnTypeAnalyzer.php', 'Rector\\TypeDeclaration\\TypeInferer\\AssignToPropertyTypeInferer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeInferer/AssignToPropertyTypeInferer.php', 'Rector\\TypeDeclaration\\TypeInferer\\PropertyTypeInferer\\AllAssignNodePropertyTypeInferer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/AllAssignNodePropertyTypeInferer.php', 'Rector\\TypeDeclaration\\TypeInferer\\PropertyTypeInferer\\GetterTypeDeclarationPropertyTypeInferer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeInferer/PropertyTypeInferer/GetterTypeDeclarationPropertyTypeInferer.php', @@ -2663,6 +2741,8 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\TypeDeclaration\\TypeInferer\\SilentVoidResolver' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeInferer/SilentVoidResolver.php', 'Rector\\TypeDeclaration\\TypeInferer\\SplArrayFixedTypeNarrower' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeInferer/SplArrayFixedTypeNarrower.php', 'Rector\\TypeDeclaration\\TypeNormalizer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeNormalizer.php', + 'Rector\\TypeDeclaration\\ValueObject\\AddClosureParamTypeFromArg' => __DIR__ . '/../..' . '/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromArg.php', + 'Rector\\TypeDeclaration\\ValueObject\\AddClosureParamTypeFromObject' => __DIR__ . '/../..' . '/rules/TypeDeclaration/ValueObject/AddClosureParamTypeFromObject.php', 'Rector\\TypeDeclaration\\ValueObject\\AddParamTypeDeclaration' => __DIR__ . '/../..' . '/rules/TypeDeclaration/ValueObject/AddParamTypeDeclaration.php', 'Rector\\TypeDeclaration\\ValueObject\\AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration' => __DIR__ . '/../..' . '/rules/TypeDeclaration/ValueObject/AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration.php', 'Rector\\TypeDeclaration\\ValueObject\\AddPropertyTypeDeclaration' => __DIR__ . '/../..' . '/rules/TypeDeclaration/ValueObject/AddPropertyTypeDeclaration.php', @@ -2681,7 +2761,6 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde 'Rector\\Util\\StringUtils' => __DIR__ . '/../..' . '/src/Util/StringUtils.php', 'Rector\\Validation\\RectorAssert' => __DIR__ . '/../..' . '/src/Validation/RectorAssert.php', 'Rector\\Validation\\RectorConfigValidator' => __DIR__ . '/../..' . '/src/Validation/RectorConfigValidator.php', - 'Rector\\ValueObjectFactory\\Application\\FileFactory' => __DIR__ . '/../..' . '/src/ValueObjectFactory/Application/FileFactory.php', 'Rector\\ValueObject\\Application\\File' => __DIR__ . '/../..' . '/src/ValueObject/Application/File.php', 'Rector\\ValueObject\\Bootstrap\\BootstrapConfigs' => __DIR__ . '/../..' . '/src/ValueObject/Bootstrap/BootstrapConfigs.php', 'Rector\\ValueObject\\ClassMethodWillChangeReturnType' => __DIR__ . '/..' . '/rector/rector-downgrade-php/src/ValueObject/ClassMethodWillChangeReturnType.php', @@ -2729,9 +2808,9 @@ class ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit70e3025dac7e7555f69a9b4ca9e3dfde::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit7c12491db1a700dd78980ecb6595c088::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit7c12491db1a700dd78980ecb6595c088::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit7c12491db1a700dd78980ecb6595c088::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/rector/rector/vendor/composer/installed.json b/vendor/rector/rector/vendor/composer/installed.json index 69c383478..6f7a29d19 100644 --- a/vendor/rector/rector/vendor/composer/installed.json +++ b/vendor/rector/rector/vendor/composer/installed.json @@ -28,7 +28,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Clue\\React\\NDJson\\": "src\/" + "RectorPrefix202410\\Clue\\React\\NDJson\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -69,38 +69,46 @@ }, { "name": "composer\/pcre", - "version": "3.1.3", - "version_normalized": "3.1.3.0", + "version": "3.3.1", + "version_normalized": "3.3.1.0", "source": { "type": "git", "url": "https:\/\/github.com\/composer\/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/composer\/pcre\/zipball\/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https:\/\/api.github.com\/repos\/composer\/pcre\/zipball\/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan\/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan\/phpstan": "^1.3", + "phpstan\/phpstan": "^1.11.10", "phpstan\/phpstan-strict-rules": "^1.1", - "symfony\/phpunit-bridge": "^5" + "phpunit\/phpunit": "^8 || ^9" }, - "time": "2024-03-19T10:26:25+00:00", + "time": "2024-08-27T18:44:43+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Composer\\Pcre\\": "src" + "RectorPrefix202410\\Composer\\Pcre\\": "src" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -123,7 +131,7 @@ ], "support": { "issues": "https:\/\/github.com\/composer\/pcre\/issues", - "source": "https:\/\/github.com\/composer\/pcre\/tree\/3.1.3" + "source": "https:\/\/github.com\/composer\/pcre\/tree\/3.3.1" }, "funding": [ { @@ -143,27 +151,27 @@ }, { "name": "composer\/semver", - "version": "3.4.0", - "version_normalized": "3.4.0.0", + "version": "3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", "url": "https:\/\/github.com\/composer\/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/composer\/semver\/zipball\/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "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.4", - "symfony\/phpunit-bridge": "^4.2 || ^5" + "phpstan\/phpstan": "^1.11", + "symfony\/phpunit-bridge": "^3 || ^7" }, - "time": "2023-08-31T09:50:34+00:00", + "time": "2024-09-19T14:15:21+00:00", "type": "library", "extra": { "branch-alias": { @@ -173,7 +181,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Composer\\Semver\\": "src" + "RectorPrefix202410\\Composer\\Semver\\": "src" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -207,7 +215,7 @@ "support": { "irc": "ircs:\/\/irc.libera.chat:6697\/composer", "issues": "https:\/\/github.com\/composer\/semver\/issues", - "source": "https:\/\/github.com\/composer\/semver\/tree\/3.4.0" + "source": "https:\/\/github.com\/composer\/semver\/tree\/3.4.3" }, "funding": [ { @@ -255,7 +263,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Composer\\XdebugHandler\\": "src" + "RectorPrefix202410\\Composer\\XdebugHandler\\": "src" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -325,7 +333,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Doctrine\\Inflector\\": "lib\/Doctrine\/Inflector" + "RectorPrefix202410\\Doctrine\\Inflector\\": "lib\/Doctrine\/Inflector" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -414,7 +422,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Evenement\\": "src\/" + "RectorPrefix202410\\Evenement\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -440,17 +448,17 @@ }, { "name": "fidry\/cpu-core-counter", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "version": "1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/theofidry\/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/theofidry\/cpu-core-counter\/zipball\/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https:\/\/api.github.com\/repos\/theofidry\/cpu-core-counter\/zipball\/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { @@ -467,12 +475,12 @@ "phpunit\/phpunit": "^8.5.31 || ^9.5.26", "webmozarts\/strict-phpunit": "^7.5" }, - "time": "2024-02-07T09:43:46+00:00", + "time": "2024-08-06T10:04:20+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Fidry\\CpuCoreCounter\\": "src\/" + "RectorPrefix202410\\Fidry\\CpuCoreCounter\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -492,7 +500,7 @@ ], "support": { "issues": "https:\/\/github.com\/theofidry\/cpu-core-counter\/issues", - "source": "https:\/\/github.com\/theofidry\/cpu-core-counter\/tree\/1.1.0" + "source": "https:\/\/github.com\/theofidry\/cpu-core-counter\/tree\/1.2.0" }, "funding": [ { @@ -504,32 +512,32 @@ }, { "name": "illuminate\/container", - "version": "v10.48.10", - "version_normalized": "10.48.10.0", + "version": "v11.26.0", + "version_normalized": "11.26.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/illuminate\/container.git", - "reference": "ddc26273085fad3c471b2602ad820e0097ff7939" + "reference": "d6aca7c315d68cb6807c139facd7ea134b4f5104" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/illuminate\/container\/zipball\/ddc26273085fad3c471b2602ad820e0097ff7939", - "reference": "ddc26273085fad3c471b2602ad820e0097ff7939", + "url": "https:\/\/api.github.com\/repos\/illuminate\/container\/zipball\/d6aca7c315d68cb6807c139facd7ea134b4f5104", + "reference": "d6aca7c315d68cb6807c139facd7ea134b4f5104", "shasum": "" }, "require": { - "illuminate\/contracts": "^10.0", - "php": "^8.1", + "illuminate\/contracts": "^11.0", + "php": "^8.2", "psr\/container": "^1.1.1|^2.0.1" }, "provide": { "psr\/container-implementation": "1.1|2.0" }, - "time": "2023-06-18T09:12:03+00:00", + "time": "2024-09-20T12:51:05+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "11.x-dev" }, "patches_applied": [ "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/illuminate-container-container-php.patch" @@ -538,7 +546,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Illuminate\\Container\\": "" + "RectorPrefix202410\\Illuminate\\Container\\": "" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -561,35 +569,35 @@ }, { "name": "illuminate\/contracts", - "version": "v10.48.10", - "version_normalized": "10.48.10.0", + "version": "v11.26.0", + "version_normalized": "11.26.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/illuminate\/contracts.git", - "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac" + "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/illuminate\/contracts\/zipball\/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", - "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", + "url": "https:\/\/api.github.com\/repos\/illuminate\/contracts\/zipball\/56312862af937bd6da8e6dc8bbd88188dfb478f8", + "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8", "shasum": "" }, "require": { - "php": "^8.1", + "php": "^8.2", "psr\/container": "^1.1.1|^2.0.1", "psr\/simple-cache": "^1.0|^2.0|^3.0" }, - "time": "2024-01-15T18:52:32+00:00", + "time": "2024-09-22T15:08:08+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "11.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Illuminate\\Contracts\\": "" + "RectorPrefix202410\\Illuminate\\Contracts\\": "" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -612,21 +620,21 @@ }, { "name": "nette\/utils", - "version": "v4.0.4", - "version_normalized": "4.0.4.0", + "version": "v4.0.5", + "version_normalized": "4.0.5.0", "source": { "type": "git", "url": "https:\/\/github.com\/nette\/utils.git", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/nette\/utils\/zipball\/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "url": "https:\/\/api.github.com\/repos\/nette\/utils\/zipball\/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", "shasum": "" }, "require": { - "php": ">=8.0 <8.4" + "php": "8.0 - 8.4" }, "conflict": { "nette\/finder": "<3", @@ -646,7 +654,7 @@ "ext-mbstring": "to use Strings::lower() etc...", "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" }, - "time": "2024-01-17T16:50:36+00:00", + "time": "2024-08-07T15:39:19+00:00", "type": "library", "extra": { "branch-alias": { @@ -695,23 +703,23 @@ ], "support": { "issues": "https:\/\/github.com\/nette\/utils\/issues", - "source": "https:\/\/github.com\/nette\/utils\/tree\/v4.0.4" + "source": "https:\/\/github.com\/nette\/utils\/tree\/v4.0.5" }, "install-path": "..\/nette\/utils" }, { "name": "nikic\/php-parser", - "version": "v4.19.1", - "version_normalized": "4.19.1.0", + "version": "v4.19.4", + "version_normalized": "4.19.4.0", "source": { "type": "git", "url": "https:\/\/github.com\/nikic\/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/nikic\/PHP-Parser\/zipball\/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https:\/\/api.github.com\/repos\/nikic\/PHP-Parser\/zipball\/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { @@ -720,9 +728,9 @@ }, "require-dev": { "ircmaxell\/php-yacc": "^0.0.7", - "phpunit\/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit\/phpunit": "^7.0 || ^8.0 || ^9.0" }, - "time": "2024-03-17T08:10:35+00:00", + "time": "2024-09-29T15:01:53+00:00", "bin": [ "bin\/php-parse" ], @@ -746,7 +754,8 @@ "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/nikic-php-parser-lib-phpparser-node-stmt-if-php.patch", "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/nikic-php-parser-lib-phpparser-node-stmt-case-php.patch", "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/nikic-php-parser-lib-phpparser-node-stmt-elseif-php.patch", - "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/nikic-php-parser-lib-phpparser-node-stmt-namespace-php.patch" + "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/nikic-php-parser-lib-phpparser-node-stmt-namespace-php.patch", + "https:\/\/raw.githubusercontent.com\/rectorphp\/vendor-patches\/main\/patches\/nikic-php-parser-lib-phpparser-nodetraverser-php.patch" ] }, "installation-source": "dist", @@ -771,7 +780,7 @@ ], "support": { "issues": "https:\/\/github.com\/nikic\/PHP-Parser\/issues", - "source": "https:\/\/github.com\/nikic\/PHP-Parser\/tree\/v4.19.1" + "source": "https:\/\/github.com\/nikic\/PHP-Parser\/tree\/v4.19.4" }, "install-path": "..\/nikic\/php-parser" }, @@ -807,7 +816,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\OndraM\\CiDetector\\": "src\/" + "RectorPrefix202410\\OndraM\\CiDetector\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -858,17 +867,17 @@ }, { "name": "phpstan\/phpdoc-parser", - "version": "1.29.0", - "version_normalized": "1.29.0.0", + "version": "1.32.0", + "version_normalized": "1.32.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/phpstan\/phpdoc-parser.git", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc" + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/phpstan\/phpdoc-parser\/zipball\/536889f2b340489d328f5ffb7b02bb6b183ddedc", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc", + "url": "https:\/\/api.github.com\/repos\/phpstan\/phpdoc-parser\/zipball\/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", "shasum": "" }, "require": { @@ -885,7 +894,7 @@ "phpunit\/phpunit": "^9.5", "symfony\/process": "^5.2" }, - "time": "2024-05-06T12:04:23+00:00", + "time": "2024-09-26T07:23:32+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -902,7 +911,7 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https:\/\/github.com\/phpstan\/phpdoc-parser\/issues", - "source": "https:\/\/github.com\/phpstan\/phpdoc-parser\/tree\/1.29.0" + "source": "https:\/\/github.com\/phpstan\/phpdoc-parser\/tree\/1.32.0" }, "install-path": "..\/phpstan\/phpdoc-parser" }, @@ -934,7 +943,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Psr\\Container\\": "src\/" + "RectorPrefix202410\\Psr\\Container\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -964,23 +973,23 @@ }, { "name": "psr\/log", - "version": "3.0.0", - "version_normalized": "3.0.0.0", + "version": "3.0.2", + "version_normalized": "3.0.2.0", "source": { "type": "git", "url": "https:\/\/github.com\/php-fig\/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "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\/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { "php": ">=8.0.0" }, - "time": "2021-07-14T16:46:02+00:00", + "time": "2024-09-11T13:17:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -990,7 +999,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Psr\\Log\\": "src" + "RectorPrefix202410\\Psr\\Log\\": "src" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1011,7 +1020,7 @@ "psr-3" ], "support": { - "source": "https:\/\/github.com\/php-fig\/log\/tree\/3.0.0" + "source": "https:\/\/github.com\/php-fig\/log\/tree\/3.0.2" }, "install-path": "..\/psr\/log" }, @@ -1043,7 +1052,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Psr\\SimpleCache\\": "src\/" + "RectorPrefix202410\\Psr\\SimpleCache\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1096,7 +1105,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Cache\\": "src\/" + "RectorPrefix202410\\React\\Cache\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1175,7 +1184,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\React\\ChildProcess\\": "src" + "RectorPrefix202410\\React\\ChildProcess\\": "src" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1228,36 +1237,36 @@ }, { "name": "react\/dns", - "version": "v1.12.0", - "version_normalized": "1.12.0.0", + "version": "v1.13.0", + "version_normalized": "1.13.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/reactphp\/dns.git", - "reference": "c134600642fa615b46b41237ef243daa65bb64ec" + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/reactphp\/dns\/zipball\/c134600642fa615b46b41237ef243daa65bb64ec", - "reference": "c134600642fa615b46b41237ef243daa65bb64ec", + "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.0 || ^2.7 || ^1.2.1" + "react\/promise": "^3.2 || ^2.7 || ^1.2.1" }, "require-dev": { "phpunit\/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react\/async": "^4 || ^3 || ^2", - "react\/promise-timer": "^1.9" + "react\/async": "^4.3 || ^3 || ^2", + "react\/promise-timer": "^1.11" }, - "time": "2023-11-29T12:41:06+00:00", + "time": "2024-06-13T14:18:03+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Dns\\": "src\/" + "RectorPrefix202410\\React\\Dns\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1295,7 +1304,7 @@ ], "support": { "issues": "https:\/\/github.com\/reactphp\/dns\/issues", - "source": "https:\/\/github.com\/reactphp\/dns\/tree\/v1.12.0" + "source": "https:\/\/github.com\/reactphp\/dns\/tree\/v1.13.0" }, "funding": [ { @@ -1334,7 +1343,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\React\\EventLoop\\": "src\/" + "RectorPrefix202410\\React\\EventLoop\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1382,26 +1391,27 @@ }, { "name": "react\/promise", - "version": "v2.11.0", - "version_normalized": "2.11.0.0", + "version": "v3.2.0", + "version_normalized": "3.2.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/reactphp\/promise.git", - "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831" + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/reactphp\/promise\/zipball\/1a8460931ea36dc5c76838fec5734d55c88c6831", - "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831", + "url": "https:\/\/api.github.com\/repos\/reactphp\/promise\/zipball\/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit\/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "phpstan\/phpstan": "1.10.39 || 1.4.10", + "phpunit\/phpunit": "^9.6 || ^7.5" }, - "time": "2023-11-16T16:16:50+00:00", + "time": "2024-05-24T10:39:05+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1409,7 +1419,7 @@ "src\/functions_include.php" ], "psr-4": { - "RectorPrefix202405\\React\\Promise\\": "src\/" + "RectorPrefix202410\\React\\Promise\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1445,7 +1455,7 @@ ], "support": { "issues": "https:\/\/github.com\/reactphp\/promise\/issues", - "source": "https:\/\/github.com\/reactphp\/promise\/tree\/v2.11.0" + "source": "https:\/\/github.com\/reactphp\/promise\/tree\/v3.2.0" }, "funding": [ { @@ -1457,39 +1467,39 @@ }, { "name": "react\/socket", - "version": "v1.15.0", - "version_normalized": "1.15.0.0", + "version": "v1.16.0", + "version_normalized": "1.16.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/reactphp\/socket.git", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/reactphp\/socket\/zipball\/216d3aec0b87f04a40ca04f481e6af01bdd1d038", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "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.11", + "react\/dns": "^1.13", "react\/event-loop": "^1.2", - "react\/promise": "^3 || ^2.6 || ^1.2.1", - "react\/stream": "^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 || ^2", + "react\/async": "^4.3 || ^3.3 || ^2", "react\/promise-stream": "^1.4", - "react\/promise-timer": "^1.10" + "react\/promise-timer": "^1.11" }, - "time": "2023-12-15T11:02:10+00:00", + "time": "2024-07-26T10:38:09+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Socket\\": "src\/" + "RectorPrefix202410\\React\\Socket\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1528,7 +1538,7 @@ ], "support": { "issues": "https:\/\/github.com\/reactphp\/socket\/issues", - "source": "https:\/\/github.com\/reactphp\/socket\/tree\/v1.15.0" + "source": "https:\/\/github.com\/reactphp\/socket\/tree\/v1.16.0" }, "funding": [ { @@ -1540,17 +1550,17 @@ }, { "name": "react\/stream", - "version": "v1.3.0", - "version_normalized": "1.3.0.0", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/reactphp\/stream.git", - "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66" + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/reactphp\/stream\/zipball\/6fbc9672905c7d5a885f2da2fc696f65840f4a66", - "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66", + "url": "https:\/\/api.github.com\/repos\/reactphp\/stream\/zipball\/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { @@ -1560,14 +1570,14 @@ }, "require-dev": { "clue\/stream-filter": "~1.2", - "phpunit\/phpunit": "^9.5 || ^5.7 || ^4.8.35" + "phpunit\/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, - "time": "2023-06-16T10:52:11+00:00", + "time": "2024-06-11T12:45:25+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Stream\\": "src\/" + "RectorPrefix202410\\React\\Stream\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -1609,7 +1619,7 @@ ], "support": { "issues": "https:\/\/github.com\/reactphp\/stream\/issues", - "source": "https:\/\/github.com\/reactphp\/stream\/tree\/v1.3.0" + "source": "https:\/\/github.com\/reactphp\/stream\/tree\/v1.4.0" }, "funding": [ { @@ -1679,37 +1689,37 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-doctrine.git", - "reference": "364e273976d869506f40126ea6b69330df69a45e" + "reference": "e75008c293679e0bb0637bf09cf6dd43ff34526a" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/364e273976d869506f40126ea6b69330df69a45e", - "reference": "364e273976d869506f40126ea6b69330df69a45e", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/e75008c293679e0bb0637bf09cf6dd43ff34526a", + "reference": "e75008c293679e0bb0637bf09cf6dd43ff34526a", "shasum": "" }, "require": { "php": ">=8.2", - "symfony\/yaml": "^6.4" + "symfony\/yaml": "^7.1" }, "require-dev": { - "doctrine\/doctrine-bundle": "^2.11", - "doctrine\/orm": "^2.18", - "phpstan\/extension-installer": "^1.3", - "phpstan\/phpstan": "^1.10.57", + "doctrine\/doctrine-bundle": "^2.12", + "doctrine\/orm": "^2.19", + "phpstan\/extension-installer": "^1.4", + "phpstan\/phpstan": "^1.11", + "phpstan\/phpstan-deprecation-rules": "^1.2", "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", - "rector\/rector-generator": "^0.7.10", "rector\/rector-src": "dev-main", - "symplify\/easy-coding-standard": "^12.1", + "rector\/type-perfect": "^0.2", + "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.4", - "symplify\/phpstan-rules": "^11.4", - "symplify\/rule-doc-generator": "^12.1", + "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2.13", - "tomasvotruba\/unused-public": "^0.3", + "tomasvotruba\/class-leak": "^0.2.15", + "tomasvotruba\/unused-public": "^0.4", "tracy\/tracy": "^2.10" }, - "time": "2024-04-29T12:43:39+00:00", + "time": "2024-09-18T08:20:56+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1742,12 +1752,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-downgrade-php.git", - "reference": "4228a7305efbd92687cf7f6cbf7b683a28412eb1" + "reference": "d9cef571617b93e642b3ac45981b7092e1a2e89a" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-downgrade-php\/zipball\/4228a7305efbd92687cf7f6cbf7b683a28412eb1", - "reference": "4228a7305efbd92687cf7f6cbf7b683a28412eb1", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-downgrade-php\/zipball\/d9cef571617b93e642b3ac45981b7092e1a2e89a", + "reference": "d9cef571617b93e642b3ac45981b7092e1a2e89a", "shasum": "" }, "require": { @@ -1757,19 +1767,18 @@ "phpstan\/extension-installer": "^1.3", "phpstan\/phpstan": "^1.10", "phpstan\/phpstan-webmozart-assert": "^1.2", - "phpunit\/phpunit": "^10.3", - "rector\/phpstan-rules": "^0.7.4", - "rector\/rector-generator": "^0.7.3", + "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "symplify\/easy-coding-standard": "^12.0", - "symplify\/phpstan-extensions": "^11.3", - "symplify\/phpstan-rules": "^12.4", - "symplify\/rule-doc-generator": "^12.0", - "symplify\/vendor-patches": "^11.2", + "rector\/type-perfect": "^0.1.8", + "symplify\/easy-coding-standard": "^12.3", + "symplify\/phpstan-extensions": "^11.4", + "symplify\/phpstan-rules": "^13.0", + "symplify\/rule-doc-generator": "^12.2", + "symplify\/vendor-patches": "^11.3", "tomasvotruba\/class-leak": "^0.2.13", "tracy\/tracy": "^2.10" }, - "time": "2024-04-29T12:46:18+00:00", + "time": "2024-09-26T16:45:00+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1802,12 +1811,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-phpunit.git", - "reference": "d075c4f212255cbdeeb8ff837dd41762fbfce931" + "reference": "3e592ec6ce25d67c26faf78c91a8ac11fb310d25" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/d075c4f212255cbdeeb8ff837dd41762fbfce931", - "reference": "d075c4f212255cbdeeb8ff837dd41762fbfce931", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/3e592ec6ce25d67c26faf78c91a8ac11fb310d25", + "reference": "3e592ec6ce25d67c26faf78c91a8ac11fb310d25", "shasum": "" }, "require": { @@ -1817,20 +1826,21 @@ "rector\/rector": "<0.11" }, "require-dev": { - "phpstan\/extension-installer": "^1.3", - "phpstan\/phpstan": "^1.10.56", + "phpstan\/extension-installer": "^1.4", + "phpstan\/phpstan": "^1.11", "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "symplify\/easy-coding-standard": "^12.1", + "rector\/swiss-knife": "^0.2.35", + "rector\/type-perfect": "^0.2", + "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.2", - "symplify\/phpstan-rules": "^12.0", - "symplify\/rule-doc-generator": "^12.0", + "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.2", - "tomasvotruba\/class-leak": "^0.2.13", + "tomasvotruba\/class-leak": "^0.2", "tracy\/tracy": "^2.10" }, - "time": "2024-05-02T19:17:47+00:00", + "time": "2024-09-30T08:22:49+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1866,12 +1876,12 @@ "source": { "type": "git", "url": "https:\/\/github.com\/rectorphp\/rector-symfony.git", - "reference": "040014c3af8a300dadfc1d9a0f09043572dfd79b" + "reference": "14fcc873fdd271467bc7d9d9aec4d0cd4359d360" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/040014c3af8a300dadfc1d9a0f09043572dfd79b", - "reference": "040014c3af8a300dadfc1d9a0f09043572dfd79b", + "url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/14fcc873fdd271467bc7d9d9aec4d0cd4359d360", + "reference": "14fcc873fdd271467bc7d9d9aec4d0cd4359d360", "shasum": "" }, "require": { @@ -1879,28 +1889,28 @@ "php": ">=8.2" }, "require-dev": { - "phpstan\/extension-installer": "^1.3", - "phpstan\/phpstan": "^1.10.57", + "phpstan\/extension-installer": "^1.4", + "phpstan\/phpstan": "^1.11", "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", - "rector\/rector-generator": "^0.7", "rector\/rector-src": "dev-main", - "symfony\/config": "^6.3", - "symfony\/dependency-injection": "^6.3", - "symfony\/http-kernel": "~6.2.0", - "symfony\/routing": "^6.2", - "symfony\/security-core": "^6.2", - "symfony\/security-http": "^6.1", - "symfony\/validator": "^6.2", - "symplify\/easy-coding-standard": "^12.1", - "symplify\/phpstan-extensions": "^11.1", - "symplify\/phpstan-rules": "^12.0", - "symplify\/rule-doc-generator": "^12.0", - "symplify\/vendor-patches": "^11.2", - "tomasvotruba\/class-leak": "^0.2.13", + "rector\/type-perfect": "^0.1.8", + "symfony\/config": "^6.4", + "symfony\/dependency-injection": "^6.4", + "symfony\/http-kernel": "~6.3", + "symfony\/routing": "^6.4", + "symfony\/security-core": "^6.4", + "symfony\/security-http": "^6.4", + "symfony\/validator": "^6.4", + "symplify\/easy-coding-standard": "^12.3", + "symplify\/phpstan-extensions": "^11.4", + "symplify\/phpstan-rules": "^13.0", + "symplify\/vendor-patches": "^11.3", + "tomasvotruba\/class-leak": "^0.2", + "tomasvotruba\/unused-public": "^0.4", "tracy\/tracy": "^2.10" }, - "time": "2024-04-29T12:43:48+00:00", + "time": "2024-09-27T14:39:18+00:00", "default-branch": true, "type": "rector-extension", "extra": { @@ -1998,17 +2008,17 @@ }, { "name": "symfony\/console", - "version": "v6.4.7", - "version_normalized": "6.4.7.0", + "version": "v6.4.12", + "version_normalized": "6.4.12.0", "source": { "type": "git", "url": "https:\/\/github.com\/symfony\/console.git", - "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f" + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/symfony\/console\/zipball\/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", - "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f", + "url": "https:\/\/api.github.com\/repos\/symfony\/console\/zipball\/72d080eb9edf80e36c19be61f72c98ed8273b765", + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", "shasum": "" }, "require": { @@ -2041,7 +2051,7 @@ "symfony\/stopwatch": "^5.4|^6.0|^7.0", "symfony\/var-dumper": "^5.4|^6.0|^7.0" }, - "time": "2024-04-18T09:22:46+00:00", + "time": "2024-09-20T08:15:52+00:00", "type": "library", "extra": { "patches_applied": [ @@ -2051,7 +2061,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Console\\": "" + "RectorPrefix202410\\Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "\/Tests\/" @@ -2080,7 +2090,7 @@ "terminal" ], "support": { - "source": "https:\/\/github.com\/symfony\/console\/tree\/v6.4.7" + "source": "https:\/\/github.com\/symfony\/console\/tree\/v6.4.12" }, "funding": [ { @@ -2170,31 +2180,33 @@ }, { "name": "symfony\/filesystem", - "version": "v6.4.7", - "version_normalized": "6.4.7.0", + "version": "v6.4.12", + "version_normalized": "6.4.12.0", "source": { "type": "git", "url": "https:\/\/github.com\/symfony\/filesystem.git", - "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4" + "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/symfony\/filesystem\/zipball\/78dde75f8f6dbbca4ec436a4b0087f7af02076d4", - "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4", + "url": "https:\/\/api.github.com\/repos\/symfony\/filesystem\/zipball\/f810e3cbdf7fdc35983968523d09f349fa9ada12", + "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12", "shasum": "" }, "require": { "php": ">=8.1", "symfony\/polyfill-ctype": "~1.8", - "symfony\/polyfill-mbstring": "~1.8", - "symfony\/process": "^5.4|^6.4" + "symfony\/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony\/process": "^5.4|^6.4|^7.0" }, - "time": "2024-04-18T09:22:46+00:00", + "time": "2024-09-16T16:01:33+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Filesystem\\": "" + "RectorPrefix202410\\Symfony\\Component\\Filesystem\\": "" }, "exclude-from-classmap": [ "\/Tests\/" @@ -2217,7 +2229,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https:\/\/symfony.com", "support": { - "source": "https:\/\/github.com\/symfony\/filesystem\/tree\/v6.4.7" + "source": "https:\/\/github.com\/symfony\/filesystem\/tree\/v6.4.12" }, "funding": [ { @@ -2237,17 +2249,17 @@ }, { "name": "symfony\/finder", - "version": "v6.4.7", - "version_normalized": "6.4.7.0", + "version": "v6.4.11", + "version_normalized": "6.4.11.0", "source": { "type": "git", "url": "https:\/\/github.com\/symfony\/finder.git", - "reference": "511c48990be17358c23bf45c5d71ab85d40fb764" + "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/symfony\/finder\/zipball\/511c48990be17358c23bf45c5d71ab85d40fb764", - "reference": "511c48990be17358c23bf45c5d71ab85d40fb764", + "url": "https:\/\/api.github.com\/repos\/symfony\/finder\/zipball\/d7eb6daf8cd7e9ac4976e9576b32042ef7253453", + "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453", "shasum": "" }, "require": { @@ -2256,12 +2268,12 @@ "require-dev": { "symfony\/filesystem": "^6.0|^7.0" }, - "time": "2024-04-23T10:36:43+00:00", + "time": "2024-08-13T14:27:37+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Finder\\": "" + "RectorPrefix202410\\Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "\/Tests\/" @@ -2284,7 +2296,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https:\/\/symfony.com", "support": { - "source": "https:\/\/github.com\/symfony\/finder\/tree\/v6.4.7" + "source": "https:\/\/github.com\/symfony\/finder\/tree\/v6.4.11" }, "funding": [ { @@ -2304,21 +2316,21 @@ }, { "name": "symfony\/polyfill-mbstring", - "version": "v1.29.0", - "version_normalized": "1.29.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https:\/\/github.com\/symfony\/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/symfony\/polyfill-mbstring\/zipball\/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https:\/\/api.github.com\/repos\/symfony\/polyfill-mbstring\/zipball\/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -2326,7 +2338,7 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2024-01-29T20:11:03+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -2367,7 +2379,7 @@ "shim" ], "support": { - "source": "https:\/\/github.com\/symfony\/polyfill-mbstring\/tree\/v1.29.0" + "source": "https:\/\/github.com\/symfony\/polyfill-mbstring\/tree\/v1.31.0" }, "funding": [ { @@ -2387,28 +2399,28 @@ }, { "name": "symfony\/process", - "version": "v6.4.7", - "version_normalized": "6.4.7.0", + "version": "v6.4.12", + "version_normalized": "6.4.12.0", "source": { "type": "git", "url": "https:\/\/github.com\/symfony\/process.git", - "reference": "cdb1c81c145fd5aa9b0038bab694035020943381" + "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/symfony\/process\/zipball\/cdb1c81c145fd5aa9b0038bab694035020943381", - "reference": "cdb1c81c145fd5aa9b0038bab694035020943381", + "url": "https:\/\/api.github.com\/repos\/symfony\/process\/zipball\/3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2024-04-18T09:22:46+00:00", + "time": "2024-09-17T12:47:12+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Process\\": "" + "RectorPrefix202410\\Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "\/Tests\/" @@ -2431,7 +2443,7 @@ "description": "Executes commands in sub-processes", "homepage": "https:\/\/symfony.com", "support": { - "source": "https:\/\/github.com\/symfony\/process\/tree\/v6.4.7" + "source": "https:\/\/github.com\/symfony\/process\/tree\/v6.4.12" }, "funding": [ { @@ -2486,7 +2498,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Contracts\\Service\\": "" + "RectorPrefix202410\\Symfony\\Contracts\\Service\\": "" }, "exclude-from-classmap": [ "\/Test\/" @@ -2537,31 +2549,30 @@ }, { "name": "symfony\/yaml", - "version": "v6.4.7", - "version_normalized": "6.4.7.0", + "version": "v7.1.5", + "version_normalized": "7.1.5.0", "source": { "type": "git", "url": "https:\/\/github.com\/symfony\/yaml.git", - "reference": "53e8b1ef30a65f78eac60fddc5ee7ebbbdb1dee0" + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" }, "dist": { "type": "zip", - "url": "https:\/\/api.github.com\/repos\/symfony\/yaml\/zipball\/53e8b1ef30a65f78eac60fddc5ee7ebbbdb1dee0", - "reference": "53e8b1ef30a65f78eac60fddc5ee7ebbbdb1dee0", + "url": "https:\/\/api.github.com\/repos\/symfony\/yaml\/zipball\/4e561c316e135e053bd758bf3b3eb291d9919de4", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony\/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony\/polyfill-ctype": "^1.8" }, "conflict": { - "symfony\/console": "<5.4" + "symfony\/console": "<6.4" }, "require-dev": { - "symfony\/console": "^5.4|^6.0|^7.0" + "symfony\/console": "^6.4|^7.0" }, - "time": "2024-04-28T10:28:08+00:00", + "time": "2024-09-17T12:49:58+00:00", "bin": [ "Resources\/bin\/yaml-lint" ], @@ -2569,7 +2580,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Yaml\\": "" + "RectorPrefix202410\\Symfony\\Component\\Yaml\\": "" }, "exclude-from-classmap": [ "\/Tests\/" @@ -2592,7 +2603,7 @@ "description": "Loads and dumps YAML files", "homepage": "https:\/\/symfony.com", "support": { - "source": "https:\/\/github.com\/symfony\/yaml\/tree\/v6.4.7" + "source": "https:\/\/github.com\/symfony\/yaml\/tree\/v7.1.5" }, "funding": [ { @@ -2646,7 +2657,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Symplify\\EasyParallel\\": "src" + "RectorPrefix202410\\Symplify\\EasyParallel\\": "src" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", @@ -2768,7 +2779,7 @@ "installation-source": "dist", "autoload": { "psr-4": { - "RectorPrefix202405\\Webmozart\\Assert\\": "src\/" + "RectorPrefix202410\\Webmozart\\Assert\\": "src\/" } }, "notification-url": "https:\/\/packagist.org\/downloads\/", diff --git a/vendor/rector/rector/vendor/composer/installed.php b/vendor/rector/rector/vendor/composer/installed.php index 6e1a45a09..a6c872d92 100644 --- a/vendor/rector/rector/vendor/composer/installed.php +++ b/vendor/rector/rector/vendor/composer/installed.php @@ -1,5 +1,5 @@ array('name' => 'rector/rector-src', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('clue/ndjson-react' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '392dc165fce93b5bb5c637b67e59619223c931b0', 'type' => 'library', 'install_path' => __DIR__ . '/../clue/ndjson-react', 'aliases' => array(), 'dev_requirement' => \false), 'composer/pcre' => array('pretty_version' => '3.1.3', 'version' => '3.1.3.0', 'reference' => '5b16e25a5355f1f3afdfc2f954a0a80aec4826a8', 'type' => 'library', 'install_path' => __DIR__ . '/./pcre', 'aliases' => array(), 'dev_requirement' => \false), 'composer/semver' => array('pretty_version' => '3.4.0', 'version' => '3.4.0.0', 'reference' => '35e8d0af4486141bc745f23a29cc2091eb624a32', 'type' => 'library', 'install_path' => __DIR__ . '/./semver', 'aliases' => array(), 'dev_requirement' => \false), 'composer/xdebug-handler' => array('pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => '6c1925561632e83d60a44492e0b344cf48ab85ef', 'type' => 'library', 'install_path' => __DIR__ . '/./xdebug-handler', 'aliases' => array(), 'dev_requirement' => \false), 'doctrine/inflector' => array('pretty_version' => '2.0.10', 'version' => '2.0.10.0', 'reference' => '5817d0659c5b50c9b950feb9af7b9668e2c436bc', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), 'dev_requirement' => \false), 'evenement/evenement' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', 'type' => 'library', 'install_path' => __DIR__ . '/../evenement/evenement', 'aliases' => array(), 'dev_requirement' => \false), 'fidry/cpu-core-counter' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => 'f92996c4d5c1a696a6a970e20f7c4216200fcc42', 'type' => 'library', 'install_path' => __DIR__ . '/../fidry/cpu-core-counter', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/container' => array('pretty_version' => 'v10.48.10', 'version' => '10.48.10.0', 'reference' => 'ddc26273085fad3c471b2602ad820e0097ff7939', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/contracts' => array('pretty_version' => 'v10.48.10', 'version' => '10.48.10.0', 'reference' => '8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.4', 'version' => '4.0.4.0', 'reference' => 'd3ad0aa3b9f934602cb3e3902ebccf10be34d218', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'nikic/php-parser' => array('pretty_version' => 'v4.19.1', 'version' => '4.19.1.0', 'reference' => '4e1b88d21c69391150ace211e9eaf05810858d0b', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/php-parser', 'aliases' => array(), 'dev_requirement' => \false), 'ondram/ci-detector' => array('pretty_version' => '4.2.0', 'version' => '4.2.0.0', 'reference' => '8b0223b5ed235fd377c75fdd1bfcad05c0f168b8', 'type' => 'library', 'install_path' => __DIR__ . '/../ondram/ci-detector', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpdoc-parser' => array('pretty_version' => '1.29.0', 'version' => '1.29.0.0', 'reference' => '536889f2b340489d328f5ffb7b02bb6b183ddedc', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpstan' => array('dev_requirement' => \false, 'replaced' => array(0 => '^1.10.57')), 'psr/container' => array('pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.1|2.0')), 'psr/log' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'psr/log-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0|2.0|3.0')), 'psr/simple-cache' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/simple-cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/cache' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd47c472b64aa5608225f47965a484b75c7817d5b', 'type' => 'library', 'install_path' => __DIR__ . '/../react/cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/child-process' => array('pretty_version' => 'v0.6.5', 'version' => '0.6.5.0', 'reference' => 'e71eb1aa55f057c7a4a0d08d06b0b0a484bead43', 'type' => 'library', 'install_path' => __DIR__ . '/../react/child-process', 'aliases' => array(), 'dev_requirement' => \false), 'react/dns' => array('pretty_version' => 'v1.12.0', 'version' => '1.12.0.0', 'reference' => 'c134600642fa615b46b41237ef243daa65bb64ec', 'type' => 'library', 'install_path' => __DIR__ . '/../react/dns', 'aliases' => array(), 'dev_requirement' => \false), 'react/event-loop' => array('pretty_version' => 'v1.5.0', 'version' => '1.5.0.0', 'reference' => 'bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354', 'type' => 'library', 'install_path' => __DIR__ . '/../react/event-loop', 'aliases' => array(), 'dev_requirement' => \false), 'react/promise' => array('pretty_version' => 'v2.11.0', 'version' => '2.11.0.0', 'reference' => '1a8460931ea36dc5c76838fec5734d55c88c6831', 'type' => 'library', 'install_path' => __DIR__ . '/../react/promise', 'aliases' => array(), 'dev_requirement' => \false), 'react/socket' => array('pretty_version' => 'v1.15.0', 'version' => '1.15.0.0', 'reference' => '216d3aec0b87f04a40ca04f481e6af01bdd1d038', 'type' => 'library', 'install_path' => __DIR__ . '/../react/socket', 'aliases' => array(), 'dev_requirement' => \false), 'react/stream' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '6fbc9672905c7d5a885f2da2fc696f65840f4a66', 'type' => 'library', 'install_path' => __DIR__ . '/../react/stream', 'aliases' => array(), 'dev_requirement' => \false), 'rector/extension-installer' => array('pretty_version' => '0.11.2', 'version' => '0.11.2.0', 'reference' => '05544e9b195863b8571ae2a3b903cbec7fa062e0', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../rector/extension-installer', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector' => array('dev_requirement' => \false, 'replaced' => array(0 => 'dev-main')), 'rector/rector-doctrine' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '364e273976d869506f40126ea6b69330df69a45e', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-doctrine', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-downgrade-php' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '4228a7305efbd92687cf7f6cbf7b683a28412eb1', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-downgrade-php', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-phpunit' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'd075c4f212255cbdeeb8ff837dd41762fbfce931', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-phpunit', 'aliases' => array(0 => '0.11.x-dev'), 'dev_requirement' => \false), 'rector/rector-src' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector-symfony' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '040014c3af8a300dadfc1d9a0f09043572dfd79b', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-symfony', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'sebastian/diff' => array('pretty_version' => '5.1.1', 'version' => '5.1.1.0', 'reference' => 'c41e007b4b62af48218231d6c2275e4c9b975b2e', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/diff', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/console' => array('pretty_version' => 'v6.4.7', 'version' => '6.4.7.0', 'reference' => 'a170e64ae10d00ba89e2acbb590dc2e54da8ad8f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/filesystem' => array('pretty_version' => 'v6.4.7', 'version' => '6.4.7.0', 'reference' => '78dde75f8f6dbbca4ec436a4b0087f7af02076d4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/finder' => array('pretty_version' => 'v6.4.7', 'version' => '6.4.7.0', 'reference' => '511c48990be17358c23bf45c5d71ab85d40fb764', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-ctype' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-intl-grapheme' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.29.0', 'version' => '1.29.0.0', 'reference' => '9773676c8a1bb1f8d4340a62efe641cf76eda7ec', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/process' => array('pretty_version' => 'v6.4.7', 'version' => '6.4.7.0', 'reference' => 'cdb1c81c145fd5aa9b0038bab694035020943381', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/service-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/string' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/yaml' => array('pretty_version' => 'v6.4.7', 'version' => '6.4.7.0', 'reference' => '53e8b1ef30a65f78eac60fddc5ee7ebbbdb1dee0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/yaml', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/easy-parallel' => array('pretty_version' => '11.2.2', 'version' => '11.2.2.0', 'reference' => '8586c18bb8efb31cd192a4e5cc94ae7813f72ed9', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/easy-parallel', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/rule-doc-generator-contracts' => array('pretty_version' => '11.2.0', 'version' => '11.2.0.0', 'reference' => '479cfcfd46047f80624aba931d9789e50475b5c6', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/rule-doc-generator-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'webmozart/assert' => array('pretty_version' => '1.11.0', 'version' => '1.11.0.0', 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', 'type' => 'library', 'install_path' => __DIR__ . '/../webmozart/assert', 'aliases' => array(), 'dev_requirement' => \false))); +return array('root' => array('name' => 'rector/rector-src', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('clue/ndjson-react' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '392dc165fce93b5bb5c637b67e59619223c931b0', 'type' => 'library', 'install_path' => __DIR__ . '/../clue/ndjson-react', 'aliases' => array(), 'dev_requirement' => \false), 'composer/pcre' => array('pretty_version' => '3.3.1', 'version' => '3.3.1.0', 'reference' => '63aaeac21d7e775ff9bc9d45021e1745c97521c4', 'type' => 'library', 'install_path' => __DIR__ . '/./pcre', 'aliases' => array(), 'dev_requirement' => \false), 'composer/semver' => array('pretty_version' => '3.4.3', 'version' => '3.4.3.0', 'reference' => '4313d26ada5e0c4edfbd1dc481a92ff7bff91f12', 'type' => 'library', 'install_path' => __DIR__ . '/./semver', 'aliases' => array(), 'dev_requirement' => \false), 'composer/xdebug-handler' => array('pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'reference' => '6c1925561632e83d60a44492e0b344cf48ab85ef', 'type' => 'library', 'install_path' => __DIR__ . '/./xdebug-handler', 'aliases' => array(), 'dev_requirement' => \false), 'doctrine/inflector' => array('pretty_version' => '2.0.10', 'version' => '2.0.10.0', 'reference' => '5817d0659c5b50c9b950feb9af7b9668e2c436bc', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), 'dev_requirement' => \false), 'evenement/evenement' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => '0a16b0d71ab13284339abb99d9d2bd813640efbc', 'type' => 'library', 'install_path' => __DIR__ . '/../evenement/evenement', 'aliases' => array(), 'dev_requirement' => \false), 'fidry/cpu-core-counter' => array('pretty_version' => '1.2.0', 'version' => '1.2.0.0', 'reference' => '8520451a140d3f46ac33042715115e290cf5785f', 'type' => 'library', 'install_path' => __DIR__ . '/../fidry/cpu-core-counter', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/container' => array('pretty_version' => 'v11.26.0', 'version' => '11.26.0.0', 'reference' => 'd6aca7c315d68cb6807c139facd7ea134b4f5104', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => \false), 'illuminate/contracts' => array('pretty_version' => 'v11.26.0', 'version' => '11.26.0.0', 'reference' => '56312862af937bd6da8e6dc8bbd88188dfb478f8', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.5', 'version' => '4.0.5.0', 'reference' => '736c567e257dbe0fcf6ce81b4d6dbe05c6899f96', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'nikic/php-parser' => array('pretty_version' => 'v4.19.4', 'version' => '4.19.4.0', 'reference' => '715f4d25e225bc47b293a8b997fe6ce99bf987d2', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/php-parser', 'aliases' => array(), 'dev_requirement' => \false), 'ondram/ci-detector' => array('pretty_version' => '4.2.0', 'version' => '4.2.0.0', 'reference' => '8b0223b5ed235fd377c75fdd1bfcad05c0f168b8', 'type' => 'library', 'install_path' => __DIR__ . '/../ondram/ci-detector', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpdoc-parser' => array('pretty_version' => '1.32.0', 'version' => '1.32.0.0', 'reference' => '6ca22b154efdd9e3c68c56f5d94670920a1c19a4', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', 'aliases' => array(), 'dev_requirement' => \false), 'phpstan/phpstan' => array('dev_requirement' => \false, 'replaced' => array(0 => '1.12.5')), 'psr/container' => array('pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.1|2.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'psr/log-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0|2.0|3.0')), 'psr/simple-cache' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/simple-cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/cache' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd47c472b64aa5608225f47965a484b75c7817d5b', 'type' => 'library', 'install_path' => __DIR__ . '/../react/cache', 'aliases' => array(), 'dev_requirement' => \false), 'react/child-process' => array('pretty_version' => 'v0.6.5', 'version' => '0.6.5.0', 'reference' => 'e71eb1aa55f057c7a4a0d08d06b0b0a484bead43', 'type' => 'library', 'install_path' => __DIR__ . '/../react/child-process', 'aliases' => array(), 'dev_requirement' => \false), 'react/dns' => array('pretty_version' => 'v1.13.0', 'version' => '1.13.0.0', 'reference' => 'eb8ae001b5a455665c89c1df97f6fb682f8fb0f5', 'type' => 'library', 'install_path' => __DIR__ . '/../react/dns', 'aliases' => array(), 'dev_requirement' => \false), 'react/event-loop' => array('pretty_version' => 'v1.5.0', 'version' => '1.5.0.0', 'reference' => 'bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354', 'type' => 'library', 'install_path' => __DIR__ . '/../react/event-loop', 'aliases' => array(), 'dev_requirement' => \false), 'react/promise' => array('pretty_version' => 'v3.2.0', 'version' => '3.2.0.0', 'reference' => '8a164643313c71354582dc850b42b33fa12a4b63', 'type' => 'library', 'install_path' => __DIR__ . '/../react/promise', 'aliases' => array(), 'dev_requirement' => \false), 'react/socket' => array('pretty_version' => 'v1.16.0', 'version' => '1.16.0.0', 'reference' => '23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1', 'type' => 'library', 'install_path' => __DIR__ . '/../react/socket', 'aliases' => array(), 'dev_requirement' => \false), 'react/stream' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '1e5b0acb8fe55143b5b426817155190eb6f5b18d', 'type' => 'library', 'install_path' => __DIR__ . '/../react/stream', 'aliases' => array(), 'dev_requirement' => \false), 'rector/extension-installer' => array('pretty_version' => '0.11.2', 'version' => '0.11.2.0', 'reference' => '05544e9b195863b8571ae2a3b903cbec7fa062e0', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../rector/extension-installer', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector' => array('dev_requirement' => \false, 'replaced' => array(0 => 'dev-main')), 'rector/rector-doctrine' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'e75008c293679e0bb0637bf09cf6dd43ff34526a', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-doctrine', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-downgrade-php' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'd9cef571617b93e642b3ac45981b7092e1a2e89a', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-downgrade-php', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'rector/rector-phpunit' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '3e592ec6ce25d67c26faf78c91a8ac11fb310d25', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-phpunit', 'aliases' => array(0 => '0.11.x-dev'), 'dev_requirement' => \false), 'rector/rector-src' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'rector/rector-symfony' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '14fcc873fdd271467bc7d9d9aec4d0cd4359d360', 'type' => 'rector-extension', 'install_path' => __DIR__ . '/../rector/rector-symfony', 'aliases' => array(0 => '9999999-dev'), 'dev_requirement' => \false), 'sebastian/diff' => array('pretty_version' => '5.1.1', 'version' => '5.1.1.0', 'reference' => 'c41e007b4b62af48218231d6c2275e4c9b975b2e', 'type' => 'library', 'install_path' => __DIR__ . '/../sebastian/diff', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/console' => array('pretty_version' => 'v6.4.12', 'version' => '6.4.12.0', 'reference' => '72d080eb9edf80e36c19be61f72c98ed8273b765', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/filesystem' => array('pretty_version' => 'v6.4.12', 'version' => '6.4.12.0', 'reference' => 'f810e3cbdf7fdc35983968523d09f349fa9ada12', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/finder' => array('pretty_version' => 'v6.4.11', 'version' => '6.4.11.0', 'reference' => 'd7eb6daf8cd7e9ac4976e9576b32042ef7253453', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-ctype' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-intl-grapheme' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/process' => array('pretty_version' => 'v6.4.12', 'version' => '6.4.12.0', 'reference' => '3f94e5f13ff58df371a7ead461b6e8068900fbb3', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/service-contracts' => array('pretty_version' => 'v3.5.0', 'version' => '3.5.0.0', 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/string' => array('dev_requirement' => \false, 'replaced' => array(0 => '*')), 'symfony/yaml' => array('pretty_version' => 'v7.1.5', 'version' => '7.1.5.0', 'reference' => '4e561c316e135e053bd758bf3b3eb291d9919de4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/yaml', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/easy-parallel' => array('pretty_version' => '11.2.2', 'version' => '11.2.2.0', 'reference' => '8586c18bb8efb31cd192a4e5cc94ae7813f72ed9', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/easy-parallel', 'aliases' => array(), 'dev_requirement' => \false), 'symplify/rule-doc-generator-contracts' => array('pretty_version' => '11.2.0', 'version' => '11.2.0.0', 'reference' => '479cfcfd46047f80624aba931d9789e50475b5c6', 'type' => 'library', 'install_path' => __DIR__ . '/../symplify/rule-doc-generator-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'webmozart/assert' => array('pretty_version' => '1.11.0', 'version' => '1.11.0.0', 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', 'type' => 'library', 'install_path' => __DIR__ . '/../webmozart/assert', 'aliases' => array(), 'dev_requirement' => \false))); diff --git a/vendor/rector/rector/vendor/composer/pcre/README.md b/vendor/rector/rector/vendor/composer/pcre/README.md index 973b17d8d..490651499 100644 --- a/vendor/rector/rector/vendor/composer/pcre/README.md +++ b/vendor/rector/rector/vendor/composer/pcre/README.md @@ -12,7 +12,8 @@ to understand the implications. It thus makes it easier to work with static analysis tools like PHPStan or Psalm as it simplifies and reduces the possible return values from all the `preg_*` functions which -are quite packed with edge cases. +are quite packed with edge cases. As of v2.2.0 / v3.2.0 the library also comes with a +[PHPStan extension](#phpstan-extension) for parsing regular expressions and giving you even better output types. This library is a thin wrapper around `preg_*` functions with [some limitations](#restrictions--limitations). If you are looking for a richer API to handle regular expressions have a look at @@ -175,6 +176,13 @@ preg_match('/(a)(b)*(c)(d)*/', 'ac', $matches, $flags); | group 2 (any unmatched group preceding one that matched) is set to `''`. You cannot tell if it matched an empty string or did not match at all | group 2 is `null` when unmatched and a string if it matched, easy to check for | | group 4 (any optional group without a matching one following) is missing altogether. So you have to check with `isset()`, but really you want `isset($m[4]) && $m[4] !== ''` for safety unless you are very careful to check that a non-optional group follows it | group 4 is always set, and null in this case as there was no match, easy to check for with `$m[4] !== null` | +PHPStan Extension +----------------- + +To use the PHPStan extension if you do not use `phpstan/extension-installer` you can include `vendor/composer/pcre/extension.neon` in your PHPStan config. + +The extension provides much better type information for $matches as well as regex validation where possible. + License ------- diff --git a/vendor/rector/rector/vendor/composer/pcre/composer.json b/vendor/rector/rector/vendor/composer/pcre/composer.json index ddda47e0e..ebe3fe8d2 100644 --- a/vendor/rector/rector/vendor/composer/pcre/composer.json +++ b/vendor/rector/rector/vendor/composer/pcre/composer.json @@ -20,27 +20,35 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "symfony\/phpunit-bridge": "^5", - "phpstan\/phpstan": "^1.3", + "phpunit\/phpunit": "^8 || ^9", + "phpstan\/phpstan": "^1.11.10", "phpstan\/phpstan-strict-rules": "^1.1" }, + "conflict": { + "phpstan\/phpstan": "<1.11.10" + }, "autoload": { "psr-4": { - "RectorPrefix202405\\Composer\\Pcre\\": "src" + "RectorPrefix202410\\Composer\\Pcre\\": "src" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Composer\\Pcre\\": "tests" + "RectorPrefix202410\\Composer\\Pcre\\": "tests" } }, "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "scripts": { - "test": "vendor\/bin\/simple-phpunit", - "phpstan": "phpstan analyse" + "test": "@php vendor\/bin\/phpunit", + "phpstan": "@php phpstan analyse" } } \ No newline at end of file diff --git a/vendor/rector/rector/vendor/composer/pcre/extension.neon b/vendor/rector/rector/vendor/composer/pcre/extension.neon new file mode 100644 index 000000000..b9cea113f --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/extension.neon @@ -0,0 +1,22 @@ +# composer/pcre PHPStan extensions +# +# These can be reused by third party packages by including 'vendor/composer/pcre/extension.neon' +# in your phpstan config + +services: + - + class: Composer\Pcre\PHPStan\PregMatchParameterOutTypeExtension + tags: + - phpstan.staticMethodParameterOutTypeExtension + - + class: Composer\Pcre\PHPStan\PregMatchTypeSpecifyingExtension + tags: + - phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension + - + class: Composer\Pcre\PHPStan\PregReplaceCallbackClosureTypeExtension + tags: + - phpstan.staticMethodParameterClosureTypeExtension + +rules: + - Composer\Pcre\PHPStan\UnsafeStrictGroupsCallRule + - Composer\Pcre\PHPStan\InvalidRegexPatternRule diff --git a/vendor/rector/rector/vendor/composer/pcre/src/MatchAllResult.php b/vendor/rector/rector/vendor/composer/pcre/src/MatchAllResult.php index 998c9339f..511d96e16 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/MatchAllResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/MatchAllResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class MatchAllResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/MatchAllStrictGroupsResult.php b/vendor/rector/rector/vendor/composer/pcre/src/MatchAllStrictGroupsResult.php index ba10da5b4..4658c18f1 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/MatchAllStrictGroupsResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/MatchAllStrictGroupsResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class MatchAllStrictGroupsResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/MatchAllWithOffsetsResult.php b/vendor/rector/rector/vendor/composer/pcre/src/MatchAllWithOffsetsResult.php index 6b57bb51e..eacd1090c 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/MatchAllWithOffsetsResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/MatchAllWithOffsetsResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class MatchAllWithOffsetsResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/MatchResult.php b/vendor/rector/rector/vendor/composer/pcre/src/MatchResult.php index 2b5bef515..d5af0fd93 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/MatchResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/MatchResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class MatchResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/MatchStrictGroupsResult.php b/vendor/rector/rector/vendor/composer/pcre/src/MatchStrictGroupsResult.php index adacd26c9..315309ba7 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/MatchStrictGroupsResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/MatchStrictGroupsResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class MatchStrictGroupsResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/MatchWithOffsetsResult.php b/vendor/rector/rector/vendor/composer/pcre/src/MatchWithOffsetsResult.php index be73e44dc..4260bfc8c 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/MatchWithOffsetsResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/MatchWithOffsetsResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class MatchWithOffsetsResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php new file mode 100644 index 000000000..e5fa71c72 --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php @@ -0,0 +1,116 @@ + + */ +class InvalidRegexPatternRule implements Rule +{ + public function getNodeType() : string + { + return StaticCall::class; + } + public function processNode(Node $node, Scope $scope) : array + { + $patterns = $this->extractPatterns($node, $scope); + $errors = []; + foreach ($patterns as $pattern) { + $errorMessage = $this->validatePattern($pattern); + if ($errorMessage === null) { + continue; + } + $errors[] = RuleErrorBuilder::message(sprintf('Regex pattern is invalid: %s', $errorMessage))->identifier('regexp.pattern')->build(); + } + return $errors; + } + /** + * @return string[] + */ + private function extractPatterns(StaticCall $node, Scope $scope) : array + { + if (!$node->class instanceof FullyQualified) { + return []; + } + $isRegex = $node->class->toString() === Regex::class; + $isPreg = $node->class->toString() === Preg::class; + if (!$isRegex && !$isPreg) { + return []; + } + if (!$node->name instanceof Node\Identifier || !Preg::isMatch('{^(match|isMatch|grep|replace|split)}', $node->name->name)) { + return []; + } + $functionName = $node->name->name; + if (!isset($node->getArgs()[0])) { + return []; + } + $patternNode = $node->getArgs()[0]->value; + $patternType = $scope->getType($patternNode); + $patternStrings = []; + foreach ($patternType->getConstantStrings() as $constantStringType) { + if ($functionName === 'replaceCallbackArray') { + continue; + } + $patternStrings[] = $constantStringType->getValue(); + } + foreach ($patternType->getConstantArrays() as $constantArrayType) { + if (in_array($functionName, ['replace', 'replaceCallback'], \true)) { + foreach ($constantArrayType->getValueTypes() as $arrayKeyType) { + foreach ($arrayKeyType->getConstantStrings() as $constantString) { + $patternStrings[] = $constantString->getValue(); + } + } + } + if ($functionName !== 'replaceCallbackArray') { + continue; + } + foreach ($constantArrayType->getKeyTypes() as $arrayKeyType) { + foreach ($arrayKeyType->getConstantStrings() as $constantString) { + $patternStrings[] = $constantString->getValue(); + } + } + } + return $patternStrings; + } + private function validatePattern(string $pattern) : ?string + { + try { + $msg = null; + $prev = \set_error_handler(function (int $severity, string $message, string $file) use(&$msg) : bool { + $msg = \preg_replace("#^preg_match(_all)?\\(.*?\\): #", '', $message); + return \true; + }); + if ($pattern === '') { + return 'Empty string is not a valid regular expression'; + } + Preg::match($pattern, ''); + if ($msg !== null) { + return $msg; + } + } catch (PcreException $e) { + if ($e->getCode() === \PREG_INTERNAL_ERROR && $msg !== null) { + return $msg; + } + return \preg_replace('{.*? failed executing ".*": }', '', $e->getMessage()); + } finally { + \restore_error_handler(); + } + return null; + } +} diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchFlags.php b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchFlags.php new file mode 100644 index 000000000..77e3f8235 --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchFlags.php @@ -0,0 +1,55 @@ +getType($flagsArg->value); + $constantScalars = $flagsType->getConstantScalarValues(); + if ($constantScalars === []) { + return null; + } + $internalFlagsTypes = []; + foreach ($flagsType->getConstantScalarValues() as $constantScalarValue) { + if (!\is_int($constantScalarValue)) { + return null; + } + $internalFlagsTypes[] = new ConstantIntegerType($constantScalarValue | \PREG_UNMATCHED_AS_NULL); + } + return TypeCombinator::union(...$internalFlagsTypes); + } + public static function removeNullFromMatches(Type $matchesType) : Type + { + return TypeTraverser::map($matchesType, static function (Type $type, callable $traverse) : Type { + if ($type instanceof UnionType || $type instanceof IntersectionType) { + return $traverse($type); + } + if ($type instanceof ConstantArrayType) { + return new ConstantArrayType($type->getKeyTypes(), \array_map(static function (Type $valueType) use($traverse) : Type { + return $traverse($valueType); + }, $type->getValueTypes()), $type->getNextAutoIndexes(), [], $type->isList()); + } + if ($type instanceof ArrayType) { + return new ArrayType($type->getKeyType(), $traverse($type->getItemType())); + } + return TypeCombinator::removeNull($type); + }); + } +} diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php new file mode 100644 index 000000000..9665cfaf1 --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php @@ -0,0 +1,47 @@ +regexShapeMatcher = $regexShapeMatcher; + } + public function isStaticMethodSupported(MethodReflection $methodReflection, ParameterReflection $parameter) : bool + { + return $methodReflection->getDeclaringClass()->getName() === Preg::class && \in_array($methodReflection->getName(), ['match', 'isMatch', 'matchStrictGroups', 'isMatchStrictGroups', 'matchAll', 'isMatchAll', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], \true) && $parameter->getName() === 'matches'; + } + public function getParameterOutTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, ParameterReflection $parameter, Scope $scope) : ?Type + { + $args = $methodCall->getArgs(); + $patternArg = $args[0] ?? null; + $matchesArg = $args[2] ?? null; + $flagsArg = $args[3] ?? null; + if ($patternArg === null || $matchesArg === null) { + return null; + } + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + if ($flagsType === null) { + return null; + } + if (\stripos($methodReflection->getName(), 'matchAll') !== \false) { + return $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, TrinaryLogic::createMaybe(), $scope); + } + return $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createMaybe(), $scope); + } +} diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php new file mode 100644 index 000000000..d56627952 --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php @@ -0,0 +1,77 @@ +regexShapeMatcher = $regexShapeMatcher; + } + public function setTypeSpecifier(TypeSpecifier $typeSpecifier) : void + { + $this->typeSpecifier = $typeSpecifier; + } + public function getClass() : string + { + return Preg::class; + } + public function isStaticMethodSupported(MethodReflection $methodReflection, StaticCall $node, TypeSpecifierContext $context) : bool + { + return \in_array($methodReflection->getName(), ['match', 'isMatch', 'matchStrictGroups', 'isMatchStrictGroups', 'matchAll', 'isMatchAll', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], \true) && !$context->null(); + } + public function specifyTypes(MethodReflection $methodReflection, StaticCall $node, Scope $scope, TypeSpecifierContext $context) : SpecifiedTypes + { + $args = $node->getArgs(); + $patternArg = $args[0] ?? null; + $matchesArg = $args[2] ?? null; + $flagsArg = $args[3] ?? null; + if ($patternArg === null || $matchesArg === null) { + return new SpecifiedTypes(); + } + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + if ($flagsType === null) { + return new SpecifiedTypes(); + } + if (\stripos($methodReflection->getName(), 'matchAll') !== \false) { + $matchedType = $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, TrinaryLogic::createFromBoolean($context->true()), $scope); + } else { + $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createFromBoolean($context->true()), $scope); + } + if ($matchedType === null) { + return new SpecifiedTypes(); + } + if (\in_array($methodReflection->getName(), ['matchStrictGroups', 'isMatchStrictGroups', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], \true)) { + $matchedType = PregMatchFlags::removeNullFromMatches($matchedType); + } + $overwrite = \false; + if ($context->false()) { + $overwrite = \true; + $context = $context->negate(); + } + return $this->typeSpecifier->create($matchesArg->value, $matchedType, $context, $overwrite, $scope, $node); + } +} diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php new file mode 100644 index 000000000..6640ce30a --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php @@ -0,0 +1,62 @@ +regexShapeMatcher = $regexShapeMatcher; + } + public function isStaticMethodSupported(MethodReflection $methodReflection, ParameterReflection $parameter) : bool + { + return \in_array($methodReflection->getDeclaringClass()->getName(), [Preg::class, Regex::class], \true) && \in_array($methodReflection->getName(), ['replaceCallback', 'replaceCallbackStrictGroups'], \true) && $parameter->getName() === 'replacement'; + } + public function getTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, ParameterReflection $parameter, Scope $scope) : ?Type + { + $args = $methodCall->getArgs(); + $patternArg = $args[0] ?? null; + $flagsArg = $args[5] ?? null; + if ($patternArg === null) { + return null; + } + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + $matchesType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope); + if ($matchesType === null) { + return null; + } + if ($methodReflection->getName() === 'replaceCallbackStrictGroups' && \count($matchesType->getConstantArrays()) === 1) { + $matchesType = $matchesType->getConstantArrays()[0]; + $matchesType = new ConstantArrayType($matchesType->getKeyTypes(), \array_map(static function (Type $valueType) : Type { + if (\count($valueType->getConstantArrays()) === 1) { + $valueTypeArray = $valueType->getConstantArrays()[0]; + return new ConstantArrayType($valueTypeArray->getKeyTypes(), \array_map(static function (Type $valueType) : Type { + return TypeCombinator::removeNull($valueType); + }, $valueTypeArray->getValueTypes()), $valueTypeArray->getNextAutoIndexes(), [], $valueTypeArray->isList()); + } + return TypeCombinator::removeNull($valueType); + }, $matchesType->getValueTypes()), $matchesType->getNextAutoIndexes(), [], $matchesType->isList()); + } + return new ClosureType([new NativeParameterReflection($parameter->getName(), $parameter->isOptional(), $matchesType, $parameter->passedByReference(), $parameter->isVariadic(), $parameter->getDefaultValue())], new StringType()); + } +} diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php new file mode 100644 index 000000000..6e3d3dfe7 --- /dev/null +++ b/vendor/rector/rector/vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php @@ -0,0 +1,90 @@ + + */ +final class UnsafeStrictGroupsCallRule implements Rule +{ + /** + * @var RegexArrayShapeMatcher + */ + private $regexShapeMatcher; + public function __construct(RegexArrayShapeMatcher $regexShapeMatcher) + { + $this->regexShapeMatcher = $regexShapeMatcher; + } + public function getNodeType() : string + { + return StaticCall::class; + } + public function processNode(Node $node, Scope $scope) : array + { + if (!$node->class instanceof FullyQualified) { + return []; + } + $isRegex = $node->class->toString() === Regex::class; + $isPreg = $node->class->toString() === Preg::class; + if (!$isRegex && !$isPreg) { + return []; + } + if (!$node->name instanceof Node\Identifier || !\in_array($node->name->name, ['matchStrictGroups', 'isMatchStrictGroups', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], \true)) { + return []; + } + $args = $node->getArgs(); + if (!isset($args[0])) { + return []; + } + $patternArg = $args[0] ?? null; + if ($isPreg) { + if (!isset($args[2])) { + // no matches set, skip as the matches won't be used anyway + return []; + } + $flagsArg = $args[3] ?? null; + } else { + $flagsArg = $args[2] ?? null; + } + if ($patternArg === null) { + return []; + } + $flagsType = PregMatchFlags::getType($flagsArg, $scope); + if ($flagsType === null) { + return []; + } + $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope); + if ($matchedType === null) { + return [RuleErrorBuilder::message(sprintf('The %s call is potentially unsafe as $matches\' type could not be inferred.', $node->name->name))->identifier('composerPcre.maybeUnsafeStrictGroups')->build()]; + } + if (\count($matchedType->getConstantArrays()) === 1) { + $matchedType = $matchedType->getConstantArrays()[0]; + $nullableGroups = []; + foreach ($matchedType->getValueTypes() as $index => $type) { + if (TypeCombinator::containsNull($type)) { + $nullableGroups[] = $matchedType->getKeyTypes()[$index]->getValue(); + } + } + if (\count($nullableGroups) > 0) { + return [RuleErrorBuilder::message(sprintf('The %s call is unsafe as match group%s "%s" %s optional and may be null.', $node->name->name, \count($nullableGroups) > 1 ? 's' : '', \implode('", "', $nullableGroups), \count($nullableGroups) > 1 ? 'are' : 'is'))->identifier('composerPcre.unsafeStrictGroups')->build()]; + } + } + return []; + } +} diff --git a/vendor/rector/rector/vendor/composer/pcre/src/PcreException.php b/vendor/rector/rector/vendor/composer/pcre/src/PcreException.php index 1e0889945..3ab33f2f8 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/PcreException.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/PcreException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; class PcreException extends \RuntimeException { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/Preg.php b/vendor/rector/rector/vendor/composer/pcre/src/Preg.php index b5e30cb43..1957ef828 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/Preg.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/Preg.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; class Preg { @@ -180,7 +180,7 @@ public static function replaceCallback($pattern, callable $replacement, $subject * * @param-out int<0, max> $count */ - public static function replaceCallbackStrictGroups(string $pattern, callable $replacement, $subject, int $limit = -1, int &$count = null, int $flags = 0) : string + public static function replaceCallbackStrictGroups(string $pattern, callable $replacement, $subject, int $limit = -1, ?int &$count = null, int $flags = 0) : string { return self::replaceCallback($pattern, function (array $matches) use($pattern, $replacement) { return $replacement(self::enforceNonNullMatches($pattern, $matches, 'replaceCallback')); diff --git a/vendor/rector/rector/vendor/composer/pcre/src/Regex.php b/vendor/rector/rector/vendor/composer/pcre/src/Regex.php index ce14908e7..cfc9ed21b 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/Regex.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/Regex.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; class Regex { @@ -38,6 +38,7 @@ public static function match(string $pattern, string $subject, int $flags = 0, i */ public static function matchStrictGroups(string $pattern, string $subject, int $flags = 0, int $offset = 0) : MatchStrictGroupsResult { + // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups $count = Preg::matchStrictGroups($pattern, $subject, $matches, $flags, $offset); return new MatchStrictGroupsResult($count, $matches); } @@ -74,6 +75,7 @@ public static function matchAllStrictGroups(string $pattern, string $subject, in { self::checkOffsetCapture($flags, 'matchAllWithOffsets'); self::checkSetOrder($flags); + // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups $count = Preg::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset); return new MatchAllStrictGroupsResult($count, $matches); } diff --git a/vendor/rector/rector/vendor/composer/pcre/src/ReplaceResult.php b/vendor/rector/rector/vendor/composer/pcre/src/ReplaceResult.php index ed12f9e2e..2ea35941d 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/ReplaceResult.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/ReplaceResult.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; final class ReplaceResult { diff --git a/vendor/rector/rector/vendor/composer/pcre/src/UnexpectedNullMatchException.php b/vendor/rector/rector/vendor/composer/pcre/src/UnexpectedNullMatchException.php index 00b58a210..4ba65fea1 100644 --- a/vendor/rector/rector/vendor/composer/pcre/src/UnexpectedNullMatchException.php +++ b/vendor/rector/rector/vendor/composer/pcre/src/UnexpectedNullMatchException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Pcre; +namespace RectorPrefix202410\Composer\Pcre; class UnexpectedNullMatchException extends PcreException { diff --git a/vendor/rector/rector/vendor/composer/semver/composer.json b/vendor/rector/rector/vendor/composer/semver/composer.json index 8adef73de..c44b6f924 100644 --- a/vendor/rector/rector/vendor/composer/semver/composer.json +++ b/vendor/rector/rector/vendor/composer/semver/composer.json @@ -34,17 +34,17 @@ "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "symfony\/phpunit-bridge": "^4.2 || ^5", - "phpstan\/phpstan": "^1.4" + "symfony\/phpunit-bridge": "^3 || ^7", + "phpstan\/phpstan": "^1.11" }, "autoload": { "psr-4": { - "RectorPrefix202405\\Composer\\Semver\\": "src" + "RectorPrefix202410\\Composer\\Semver\\": "src" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Composer\\Semver\\": "tests" + "RectorPrefix202410\\Composer\\Semver\\": "tests" } }, "extra": { diff --git a/vendor/rector/rector/vendor/composer/semver/phpstan-baseline.neon b/vendor/rector/rector/vendor/composer/semver/phpstan-baseline.neon deleted file mode 100644 index 933cf2031..000000000 --- a/vendor/rector/rector/vendor/composer/semver/phpstan-baseline.neon +++ /dev/null @@ -1,11 +0,0 @@ -parameters: - ignoreErrors: - - - message: "#^Parameter \\#1 \\$operator of class Composer\\\\Semver\\\\Constraint\\\\Constraint constructor expects '\\!\\='\\|'\\<'\\|'\\<\\='\\|'\\<\\>'\\|'\\='\\|'\\=\\='\\|'\\>'\\|'\\>\\=', non\\-falsy\\-string given\\.$#" - count: 1 - path: src/VersionParser.php - - - - message: "#^Strict comparison using \\=\\=\\= between null and non\\-empty\\-string will always evaluate to false\\.$#" - count: 2 - path: src/VersionParser.php diff --git a/vendor/rector/rector/vendor/composer/semver/src/Comparator.php b/vendor/rector/rector/vendor/composer/semver/src/Comparator.php index 275307097..856c0bef9 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Comparator.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Comparator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver; +namespace RectorPrefix202410\Composer\Semver; -use RectorPrefix202405\Composer\Semver\Constraint\Constraint; +use RectorPrefix202410\Composer\Semver\Constraint\Constraint; class Comparator { /** diff --git a/vendor/rector/rector/vendor/composer/semver/src/CompilingMatcher.php b/vendor/rector/rector/vendor/composer/semver/src/CompilingMatcher.php index 799c2c163..92dc4ac99 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/CompilingMatcher.php +++ b/vendor/rector/rector/vendor/composer/semver/src/CompilingMatcher.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver; +namespace RectorPrefix202410\Composer\Semver; -use RectorPrefix202405\Composer\Semver\Constraint\Constraint; -use RectorPrefix202405\Composer\Semver\Constraint\ConstraintInterface; +use RectorPrefix202410\Composer\Semver\Constraint\Constraint; +use RectorPrefix202410\Composer\Semver\Constraint\ConstraintInterface; /** * Helper class to evaluate constraint by compiling and reusing the code to evaluate */ @@ -51,7 +51,7 @@ public static function clear() * @phpstan-param Constraint::OP_* $operator * @param string $version * - * @return mixed + * @return bool */ public static function match(ConstraintInterface $constraint, $operator, $version) { diff --git a/vendor/rector/rector/vendor/composer/semver/src/Constraint/Bound.php b/vendor/rector/rector/vendor/composer/semver/src/Constraint/Bound.php index cd4d0d74b..4a65dae9a 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Constraint/Bound.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Constraint/Bound.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver\Constraint; +namespace RectorPrefix202410\Composer\Semver\Constraint; class Bound { diff --git a/vendor/rector/rector/vendor/composer/semver/src/Constraint/Constraint.php b/vendor/rector/rector/vendor/composer/semver/src/Constraint/Constraint.php index 40e35a342..378afd5a9 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Constraint/Constraint.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Constraint/Constraint.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver\Constraint; +namespace RectorPrefix202410\Composer\Semver\Constraint; /** * Defines a constraint. diff --git a/vendor/rector/rector/vendor/composer/semver/src/Constraint/ConstraintInterface.php b/vendor/rector/rector/vendor/composer/semver/src/Constraint/ConstraintInterface.php index 2fbac32dc..ad561acd2 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Constraint/ConstraintInterface.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Constraint/ConstraintInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver\Constraint; +namespace RectorPrefix202410\Composer\Semver\Constraint; /** * DO NOT IMPLEMENT this interface. It is only meant for usage as a type hint diff --git a/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchAllConstraint.php b/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchAllConstraint.php index c247829eb..ec569b1a2 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchAllConstraint.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchAllConstraint.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver\Constraint; +namespace RectorPrefix202410\Composer\Semver\Constraint; /** * Defines the absence of a constraint. diff --git a/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php b/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php index 819ad64d6..4972e6701 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver\Constraint; +namespace RectorPrefix202410\Composer\Semver\Constraint; /** * Blackhole of constraints, nothing escapes it diff --git a/vendor/rector/rector/vendor/composer/semver/src/Constraint/MultiConstraint.php b/vendor/rector/rector/vendor/composer/semver/src/Constraint/MultiConstraint.php index aeb0e8f54..ff371d14a 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Constraint/MultiConstraint.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Constraint/MultiConstraint.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver\Constraint; +namespace RectorPrefix202410\Composer\Semver\Constraint; /** * Defines a conjunctive or disjunctive set of constraints. diff --git a/vendor/rector/rector/vendor/composer/semver/src/Interval.php b/vendor/rector/rector/vendor/composer/semver/src/Interval.php index f67d79424..c44fc2fcf 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Interval.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Interval.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver; +namespace RectorPrefix202410\Composer\Semver; -use RectorPrefix202405\Composer\Semver\Constraint\Constraint; +use RectorPrefix202410\Composer\Semver\Constraint\Constraint; class Interval { /** @var Constraint */ diff --git a/vendor/rector/rector/vendor/composer/semver/src/Intervals.php b/vendor/rector/rector/vendor/composer/semver/src/Intervals.php index 672bdf0df..b4961d13d 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Intervals.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Intervals.php @@ -8,13 +8,13 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver; +namespace RectorPrefix202410\Composer\Semver; -use RectorPrefix202405\Composer\Semver\Constraint\Constraint; -use RectorPrefix202405\Composer\Semver\Constraint\ConstraintInterface; -use RectorPrefix202405\Composer\Semver\Constraint\MatchAllConstraint; -use RectorPrefix202405\Composer\Semver\Constraint\MatchNoneConstraint; -use RectorPrefix202405\Composer\Semver\Constraint\MultiConstraint; +use RectorPrefix202410\Composer\Semver\Constraint\Constraint; +use RectorPrefix202410\Composer\Semver\Constraint\ConstraintInterface; +use RectorPrefix202410\Composer\Semver\Constraint\MatchAllConstraint; +use RectorPrefix202410\Composer\Semver\Constraint\MatchNoneConstraint; +use RectorPrefix202410\Composer\Semver\Constraint\MultiConstraint; /** * Helper class generating intervals from constraints * diff --git a/vendor/rector/rector/vendor/composer/semver/src/Semver.php b/vendor/rector/rector/vendor/composer/semver/src/Semver.php index cdbdcfddd..efe51fc1d 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/Semver.php +++ b/vendor/rector/rector/vendor/composer/semver/src/Semver.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver; +namespace RectorPrefix202410\Composer\Semver; -use RectorPrefix202405\Composer\Semver\Constraint\Constraint; +use RectorPrefix202410\Composer\Semver\Constraint\Constraint; class Semver { const SORT_ASC = 1; diff --git a/vendor/rector/rector/vendor/composer/semver/src/VersionParser.php b/vendor/rector/rector/vendor/composer/semver/src/VersionParser.php index 6aa06ae5e..29cc5a0e0 100644 --- a/vendor/rector/rector/vendor/composer/semver/src/VersionParser.php +++ b/vendor/rector/rector/vendor/composer/semver/src/VersionParser.php @@ -8,12 +8,12 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\Semver; +namespace RectorPrefix202410\Composer\Semver; -use RectorPrefix202405\Composer\Semver\Constraint\ConstraintInterface; -use RectorPrefix202405\Composer\Semver\Constraint\MatchAllConstraint; -use RectorPrefix202405\Composer\Semver\Constraint\MultiConstraint; -use RectorPrefix202405\Composer\Semver\Constraint\Constraint; +use RectorPrefix202410\Composer\Semver\Constraint\ConstraintInterface; +use RectorPrefix202410\Composer\Semver\Constraint\MatchAllConstraint; +use RectorPrefix202410\Composer\Semver\Constraint\MultiConstraint; +use RectorPrefix202410\Composer\Semver\Constraint\Constraint; /** * Version parser. * @@ -72,10 +72,14 @@ public static function parseStability($version) * @param string $stability * * @return string + * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev' */ public static function normalizeStability($stability) { $stability = \strtolower((string) $stability); + if (!\in_array($stability, array('stable', 'rc', 'beta', 'alpha', 'dev'), \true)) { + throw new \InvalidArgumentException('Invalid stability string "' . $stability . '", expected one of stable, RC, beta, alpha or dev'); + } return $stability === 'rc' ? 'RC' : $stability; } /** diff --git a/vendor/rector/rector/vendor/composer/xdebug-handler/composer.json b/vendor/rector/rector/vendor/composer/xdebug-handler/composer.json index 15ef001d7..e7cd6b230 100644 --- a/vendor/rector/rector/vendor/composer/xdebug-handler/composer.json +++ b/vendor/rector/rector/vendor/composer/xdebug-handler/composer.json @@ -29,12 +29,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Composer\\XdebugHandler\\": "src" + "RectorPrefix202410\\Composer\\XdebugHandler\\": "src" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Composer\\XdebugHandler\\Tests\\": "tests" + "RectorPrefix202410\\Composer\\XdebugHandler\\Tests\\": "tests" } }, "scripts": { diff --git a/vendor/rector/rector/vendor/composer/xdebug-handler/src/PhpConfig.php b/vendor/rector/rector/vendor/composer/xdebug-handler/src/PhpConfig.php index 4c58e9aee..33f66af01 100644 --- a/vendor/rector/rector/vendor/composer/xdebug-handler/src/PhpConfig.php +++ b/vendor/rector/rector/vendor/composer/xdebug-handler/src/PhpConfig.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ -namespace RectorPrefix202405\Composer\XdebugHandler; +namespace RectorPrefix202410\Composer\XdebugHandler; /** * @author John Stevenson diff --git a/vendor/rector/rector/vendor/composer/xdebug-handler/src/Process.php b/vendor/rector/rector/vendor/composer/xdebug-handler/src/Process.php index 645c436e6..353ff21c4 100644 --- a/vendor/rector/rector/vendor/composer/xdebug-handler/src/Process.php +++ b/vendor/rector/rector/vendor/composer/xdebug-handler/src/Process.php @@ -9,9 +9,9 @@ * the LICENSE file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Composer\XdebugHandler; +namespace RectorPrefix202410\Composer\XdebugHandler; -use RectorPrefix202405\Composer\Pcre\Preg; +use RectorPrefix202410\Composer\Pcre\Preg; /** * Process utility functions * diff --git a/vendor/rector/rector/vendor/composer/xdebug-handler/src/Status.php b/vendor/rector/rector/vendor/composer/xdebug-handler/src/Status.php index 7e5358e02..ff9c7ef24 100644 --- a/vendor/rector/rector/vendor/composer/xdebug-handler/src/Status.php +++ b/vendor/rector/rector/vendor/composer/xdebug-handler/src/Status.php @@ -9,10 +9,10 @@ * the LICENSE file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Composer\XdebugHandler; +namespace RectorPrefix202410\Composer\XdebugHandler; -use RectorPrefix202405\Psr\Log\LoggerInterface; -use RectorPrefix202405\Psr\Log\LogLevel; +use RectorPrefix202410\Psr\Log\LoggerInterface; +use RectorPrefix202410\Psr\Log\LogLevel; /** * @author John Stevenson * @internal diff --git a/vendor/rector/rector/vendor/composer/xdebug-handler/src/XdebugHandler.php b/vendor/rector/rector/vendor/composer/xdebug-handler/src/XdebugHandler.php index af9a07697..27ddc2c29 100644 --- a/vendor/rector/rector/vendor/composer/xdebug-handler/src/XdebugHandler.php +++ b/vendor/rector/rector/vendor/composer/xdebug-handler/src/XdebugHandler.php @@ -9,10 +9,10 @@ * the LICENSE file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Composer\XdebugHandler; +namespace RectorPrefix202410\Composer\XdebugHandler; -use RectorPrefix202405\Composer\Pcre\Preg; -use RectorPrefix202405\Psr\Log\LoggerInterface; +use RectorPrefix202410\Composer\Pcre\Preg; +use RectorPrefix202410\Psr\Log\LoggerInterface; /** * @author John Stevenson * diff --git a/vendor/rector/rector/vendor/doctrine/inflector/composer.json b/vendor/rector/rector/vendor/doctrine/inflector/composer.json index 0f31ef5b8..4ccec43f9 100644 --- a/vendor/rector/rector/vendor/doctrine/inflector/composer.json +++ b/vendor/rector/rector/vendor/doctrine/inflector/composer.json @@ -51,12 +51,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Doctrine\\Inflector\\": "lib\/Doctrine\/Inflector" + "RectorPrefix202410\\Doctrine\\Inflector\\": "lib\/Doctrine\/Inflector" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Doctrine\\Tests\\Inflector\\": "tests\/Doctrine\/Tests\/Inflector" + "RectorPrefix202410\\Doctrine\\Tests\\Inflector\\": "tests\/Doctrine\/Tests\/Inflector" } }, "config": { diff --git a/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php b/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php index bbd7d7970..2a2594329 100644 --- a/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php +++ b/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php @@ -1,7 +1,7 @@ ' ', '/([A-Z]+)([A-Z][a-z])/' => 'RectorPrefix202405\\1_\\2', '/([a-z\\d])([A-Z])/' => 'RectorPrefix202405\\1_\\2', '/[^A-Z^a-z^0-9^\\/]+/' => '-']; + $replacements = ['/\\W/' => ' ', '/([A-Z]+)([A-Z][a-z])/' => 'RectorPrefix202410\\1_\\2', '/([a-z\\d])([A-Z])/' => 'RectorPrefix202410\\1_\\2', '/[^A-Z^a-z^0-9^\\/]+/' => '-']; $urlized = $lowered; foreach ($replacements as $pattern => $replacement) { $replaced = preg_replace($pattern, $replacement, $urlized); diff --git a/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php b/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php index fc2388b13..c3b53f1b4 100644 --- a/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php +++ b/vendor/rector/rector/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php @@ -1,14 +1,14 @@ getAvailableForParallelisation()->availableCpus; + +// Get the number of CPU cores (by default it will use the logical cores count): try { $counter->getCount(); // e.g. 8 } catch (NumberOfCpuCoreNotFound) { @@ -29,6 +33,10 @@ $counter = new CpuCoreCounter([ new DummyCpuCoreFinder(1), // Fallback value ]); +// A type-safe alternative form: +$counter->getCountWithFallback(1); + +// Note that the result is memoized. $counter->getCount(); // e.g. 8 ``` @@ -68,30 +76,46 @@ $cores = (new CpuCoreCounter($finders))->getCount(); `FinderRegistry` provides two helpful entries: - `::getDefaultLogicalFinders()`: gives an ordered list of finders that will - look for the _logical_ CPU cores count + look for the _logical_ CPU cores count. - `::getDefaultPhysicalFinders()`: gives an ordered list of finders that will - look for the _physical_ CPU cores count + look for the _physical_ CPU cores count. -By default when using `CpuCoreCounter`, it will use the logical finders since +By default, when using `CpuCoreCounter`, it will use the logical finders since it is more likely what you are looking for and is what is used by PHP source to build the PHP binary. ### Checks what finders find what on your system -You have two commands available that provides insight about what the finders +You have three scrips available that provides insight about what the finders can find: -``` -$ make diagnose # From this repository -$ ./vendor/fidry/cpu-core-counter/bin/diagnose.php # From the library +```shell +# Checks what each given finder will find on your system with details about the +# information it had. +make diagnose # From this repository +./vendor/fidry/cpu-core-counter/bin/diagnose.php # From the library ``` And: +```shell +# Execute all finders and display the result they found. +make execute # From this repository +./vendor/fidry/cpu-core-counter/bin/execute.php # From the library ``` -$ make execute # From this repository -$ ./vendor/fidry/cpu-core-counter/bin/execute.php # From the library -``` + + +### Debug the results found + +You have 3 methods available to help you find out what happened: + +1. If you are using the default configuration of finder registries, you can check + the previous section which will provide plenty of information. +2. If what you are interested in is how many CPU cores were found, you can use + the `CpuCoreCounter::trace()` method. +3. If what you are interested in is how the calculation of CPU cores available + for parallelisation was done, you can inspect the values of `ParallelisationResult` + returned by `CpuCoreCounter::getAvailableForParallelisation()`. ## Backward Compatibility Promise (BCP) diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/diagnose.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/diagnose.php index c15e4a0bb..2d6702277 100755 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/diagnose.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/diagnose.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405; +namespace RectorPrefix202410; -use RectorPrefix202405\Fidry\CpuCoreCounter\Diagnoser; -use RectorPrefix202405\Fidry\CpuCoreCounter\Finder\FinderRegistry; +use RectorPrefix202410\Fidry\CpuCoreCounter\Diagnoser; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\FinderRegistry; require_once __DIR__ . '/../vendor/autoload.php'; echo 'Running diagnosis...' . \PHP_EOL . \PHP_EOL; echo Diagnoser::diagnose(FinderRegistry::getAllVariants()) . \PHP_EOL; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/execute.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/execute.php index c3c79f617..201268d5f 100755 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/execute.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/execute.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405; +namespace RectorPrefix202410; -use RectorPrefix202405\Fidry\CpuCoreCounter\Diagnoser; -use RectorPrefix202405\Fidry\CpuCoreCounter\Finder\FinderRegistry; +use RectorPrefix202410\Fidry\CpuCoreCounter\Diagnoser; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\FinderRegistry; require_once __DIR__ . '/../vendor/autoload.php'; echo 'Executing finders...' . \PHP_EOL . \PHP_EOL; echo Diagnoser::execute(FinderRegistry::getAllVariants()) . \PHP_EOL; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/trace.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/trace.php new file mode 100755 index 000000000..6c4381c60 --- /dev/null +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/bin/trace.php @@ -0,0 +1,26 @@ +#!/usr/bin/env php + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +declare (strict_types=1); +namespace RectorPrefix202410; + +use RectorPrefix202410\Fidry\CpuCoreCounter\CpuCoreCounter; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\FinderRegistry; +require_once __DIR__ . '/../vendor/autoload.php'; +$separator = \str_repeat('–', 80); +echo 'With all finders...' . \PHP_EOL . \PHP_EOL; +echo (new CpuCoreCounter(FinderRegistry::getAllVariants()))->trace() . \PHP_EOL; +echo $separator . \PHP_EOL . \PHP_EOL; +echo 'Logical CPU cores finders...' . \PHP_EOL . \PHP_EOL; +echo (new CpuCoreCounter(FinderRegistry::getDefaultLogicalFinders()))->trace() . \PHP_EOL; +echo $separator . \PHP_EOL . \PHP_EOL; +echo 'Physical CPU cores finders...' . \PHP_EOL . \PHP_EOL; +echo (new CpuCoreCounter(FinderRegistry::getDefaultPhysicalFinders()))->trace() . \PHP_EOL; +echo $separator . \PHP_EOL . \PHP_EOL; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/composer.json b/vendor/rector/rector/vendor/fidry/cpu-core-counter/composer.json index eea5f0d6b..10a6e2fbc 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/composer.json +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/composer.json @@ -29,12 +29,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Fidry\\CpuCoreCounter\\": "src\/" + "RectorPrefix202410\\Fidry\\CpuCoreCounter\\": "src\/" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Fidry\\CpuCoreCounter\\Test\\": "tests\/" + "RectorPrefix202410\\Fidry\\CpuCoreCounter\\Test\\": "tests\/" } }, "config": { diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php index 5ed06ea7f..03c757901 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php @@ -9,10 +9,17 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter; +namespace RectorPrefix202410\Fidry\CpuCoreCounter; -use RectorPrefix202405\Fidry\CpuCoreCounter\Finder\CpuCoreFinder; -use RectorPrefix202405\Fidry\CpuCoreCounter\Finder\FinderRegistry; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\CpuCoreFinder; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\EnvVariableFinder; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\FinderRegistry; +use InvalidArgumentException; +use function implode; +use function max; +use function sprintf; +use function sys_getloadavg; +use const PHP_EOL; final class CpuCoreCounter { /** @@ -30,6 +37,62 @@ public function __construct(?array $finders = null) { $this->finders = $finders ?? FinderRegistry::getDefaultLogicalFinders(); } + /** + * @param positive-int|0 $reservedCpus Number of CPUs to reserve. This is useful when you want + * to reserve some CPUs for other processes. If the main + * process is going to be busy still, you may want to set + * this value to 1. + * @param non-zero-int|null $countLimit The maximum number of CPUs to return. If not provided, it + * may look for a limit in the environment variables, e.g. + * KUBERNETES_CPU_LIMIT. If negative, the limit will be + * the total number of cores found minus the absolute value. + * For instance if the system has 10 cores and countLimit=-2, + * then the effective limit considered will be 8. + * @param float|null $loadLimit Element of [0., 1.]. Percentage representing the + * amount of cores that should be used among the available + * resources. For instance, if set to 0.7, it will use 70% + * of the available cores, i.e. if 1 core is reserved, 11 + * cores are available and 5 are busy, it will use 70% + * of (11-1-5)=5 cores, so 3 cores. Set this parameter to null + * to skip this check. Beware that 1 does not mean "no limit", + * but 100% of the _available_ resources, i.e. with the + * previous example, it will return 5 cores. How busy is + * the system is determined by the system load average + * (see $systemLoadAverage). + * @param float|null $systemLoadAverage The system load average. If passed, it will use + * this information to limit the available cores based + * on the _available_ resources. For instance, if there + * is 10 cores but 3 are busy, then only 7 cores will + * be considered for further calculation. If set to + * `null`, it will use `sys_getloadavg()` to check the + * load of the system in the past minute. You can + * otherwise pass an arbitrary value. Should be a + * positive float. + * + * @see https://php.net/manual/en/function.sys-getloadavg.php + */ + public function getAvailableForParallelisation(int $reservedCpus = 0, ?int $countLimit = null, ?float $loadLimit = null, ?float $systemLoadAverage = 0.0) : ParallelisationResult + { + self::checkCountLimit($countLimit); + self::checkLoadLimit($loadLimit); + self::checkSystemLoadAverage($systemLoadAverage); + $totalCoreCount = $this->getCountWithFallback(1); + $availableCores = max(1, $totalCoreCount - $reservedCpus); + // Adjust available CPUs based on current load + if (null !== $loadLimit) { + $correctedSystemLoadAverage = null === $systemLoadAverage ? sys_getloadavg()[0] ?? 0.0 : $systemLoadAverage; + $availableCores = max(1, $loadLimit * ($availableCores - $correctedSystemLoadAverage)); + } + if (null === $countLimit) { + $correctedCountLimit = self::getKubernetesLimit(); + } else { + $correctedCountLimit = $countLimit > 0 ? $countLimit : max(1, $totalCoreCount + $countLimit); + } + if (null !== $correctedCountLimit && $availableCores > $correctedCountLimit) { + $availableCores = $correctedCountLimit; + } + return new ParallelisationResult($reservedCpus, $countLimit, $loadLimit, $systemLoadAverage, $correctedCountLimit, $correctedSystemLoadAverage ?? $systemLoadAverage, $totalCoreCount, (int) $availableCores); + } /** * @throws NumberOfCpuCoreNotFound * @@ -43,6 +106,37 @@ public function getCount() : int } return $this->count; } + /** + * @param positive-int $fallback + * + * @return positive-int + */ + public function getCountWithFallback(int $fallback) : int + { + try { + return $this->getCount(); + } catch (NumberOfCpuCoreNotFound $exception) { + return $fallback; + } + } + /** + * This method is mostly for debugging purposes. + */ + public function trace() : string + { + $output = []; + foreach ($this->finders as $finder) { + $output[] = sprintf('Executing the finder "%s":', $finder->toString()); + $output[] = $finder->diagnose(); + $cores = $finder->find(); + if (null !== $cores) { + $output[] = 'Result found: ' . $cores; + break; + } + $output[] = '–––'; + } + return implode(PHP_EOL, $output); + } /** * @throws NumberOfCpuCoreNotFound * @@ -73,4 +167,33 @@ public function getFinderAndCores() : array } throw NumberOfCpuCoreNotFound::create(); } + /** + * @return positive-int|null + */ + public static function getKubernetesLimit() : ?int + { + $finder = new EnvVariableFinder('KUBERNETES_CPU_LIMIT'); + return $finder->find(); + } + private static function checkCountLimit(?int $countLimit) : void + { + if (0 === $countLimit) { + throw new InvalidArgumentException('The count limit must be a non zero integer. Got "0".'); + } + } + private static function checkLoadLimit(?float $loadLimit) : void + { + if (null === $loadLimit) { + return; + } + if ($loadLimit < 0.0 || $loadLimit > 1.0) { + throw new InvalidArgumentException(sprintf('The load limit must be in the range [0., 1.], got "%s".', $loadLimit)); + } + } + private static function checkSystemLoadAverage(?float $systemLoadAverage) : void + { + if (null !== $systemLoadAverage && $systemLoadAverage < 0.0) { + throw new InvalidArgumentException(sprintf('The system load average must be a positive float, got "%s".', $systemLoadAverage)); + } + } } diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Diagnoser.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Diagnoser.php index 9b3894236..777a15740 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Diagnoser.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Diagnoser.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter; +namespace RectorPrefix202410\Fidry\CpuCoreCounter; -use RectorPrefix202405\Fidry\CpuCoreCounter\Finder\CpuCoreFinder; +use RectorPrefix202410\Fidry\CpuCoreCounter\Finder\CpuCoreFinder; use function array_map; use function explode; use function implode; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php index 98f2f513d..f7d9b21ad 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Executor; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Executor; use function fclose; use function function_exists; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php index d0498375d..a964afb35 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Executor; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Executor; interface ProcessExecutor { diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php index 2c16029aa..c525eb6e0 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletLogicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function preg_match; /** diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php index 28c815fe9..2ac3b1a8f 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CmiCmdletPhysicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function preg_match; /** diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php index c31b8cec9..c8c5165d0 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; interface CpuCoreFinder { diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php index a3c56e262..6b88db441 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function file_get_contents; use function is_file; @@ -35,7 +35,7 @@ public function diagnose() : string if (\false === $cpuInfo) { return sprintf('Could not get the content of the file "%s".', self::CPU_INFO_PATH); } - return sprintf('Found the file "%s" with the content:%s%s', self::CPU_INFO_PATH, PHP_EOL, $cpuInfo); + return sprintf('Found the file "%s" with the content:%s%s%sWill return "%s".', self::CPU_INFO_PATH, PHP_EOL, $cpuInfo, PHP_EOL, self::countCpuCores($cpuInfo)); } /** * @return positive-int|null diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php index 1428831c9..f98c9fe13 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function sprintf; /** diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php new file mode 100644 index 000000000..978b2faaa --- /dev/null +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +declare (strict_types=1); +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; + +use function getenv; +use function preg_match; +use function sprintf; +use function var_export; +final class EnvVariableFinder implements CpuCoreFinder +{ + /** @var string */ + private $environmentVariableName; + public function __construct(string $environmentVariableName) + { + $this->environmentVariableName = $environmentVariableName; + } + public function diagnose() : string + { + $value = getenv($this->environmentVariableName); + return sprintf('parse(getenv(%s)=%s)=%s', $this->environmentVariableName, var_export($value, \true), self::isPositiveInteger($value) ? $value : 'null'); + } + public function find() : ?int + { + $value = getenv($this->environmentVariableName); + return self::isPositiveInteger($value) ? (int) $value : null; + } + public function toString() : string + { + return sprintf('getenv(%s)', $this->environmentVariableName); + } + /** + * @param string|false $value + */ + private static function isPositiveInteger($value) : bool + { + return \false !== $value && 1 === preg_match('/^\\d+$/', $value) && (int) $value > 0; + } +} diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php index 41d859ac0..8eca4725d 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; final class FinderRegistry { diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php index 5ba1c6828..a2e115cd5 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; /** * Find the number of logical CPU cores for Linux, BSD and OSX. diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php index 9e862335a..d38806541 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; /** * Find the number of physical CPU cores for Linux, BSD and OSX. diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php index 16ff0fc91..1bb0e9d0e 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function count; use function explode; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php index d0842984d..1813ea5f6 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function count; use function explode; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php index 36a6d5b06..c0cc8958a 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php @@ -9,9 +9,9 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; -use RectorPrefix202405\Fidry\CpuCoreCounter\Executor\ProcessExecutor; +use RectorPrefix202410\Fidry\CpuCoreCounter\Executor\ProcessExecutor; use function sprintf; /** * The number of (logical) cores. @@ -26,9 +26,12 @@ final class NProcFinder extends ProcOpenBasedFinder */ private $all; /** - * @param bool $all If disabled will give the number of cores available for the current process only. + * @param bool $all If disabled will give the number of cores available for the current process + * only. This is disabled by default as it is known to be "buggy" on virtual + * environments as the virtualization tool, e.g. VMWare, might over-commit + * resources by default. */ - public function __construct(bool $all = \true, ?ProcessExecutor $executor = null) + public function __construct(bool $all = \false, ?ProcessExecutor $executor = null) { parent::__construct($executor); $this->all = $all; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php index 047e13eb7..5c91cd3c1 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; /** * Find the number of logical CPU cores for FreeSBD, Solaris and the likes. diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php index af02cdc8e..e06e063e3 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; /** * This finder returns whatever value you gave to it. This is useful for testing. diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php index d6585786e..b7312e75b 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyInPowerShellFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function getenv; use function sprintf; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php index b2437b098..d9085cdb6 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function implode; use function sprintf; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php index 2419ff5b6..d700b2150 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php @@ -9,10 +9,10 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; -use RectorPrefix202405\Fidry\CpuCoreCounter\Executor\ProcessExecutor; -use RectorPrefix202405\Fidry\CpuCoreCounter\Executor\ProcOpenExecutor; +use RectorPrefix202410\Fidry\CpuCoreCounter\Executor\ProcessExecutor; +use RectorPrefix202410\Fidry\CpuCoreCounter\Executor\ProcOpenExecutor; use function filter_var; use function function_exists; use function is_int; @@ -42,7 +42,7 @@ public function diagnose() : string } [$stdout, $stderr] = $output; $failed = '' !== trim($stderr); - return $failed ? sprintf('Executed the command "%s" which wrote the following output to the STDERR:%s%s', $command, PHP_EOL, $stderr) : sprintf('Executed the command "%s" and got the following (STDOUT) output:%s%s', $command, PHP_EOL, $stdout); + return $failed ? sprintf('Executed the command "%s" which wrote the following output to the STDERR:%s%s%sWill return "null".', $command, PHP_EOL, $stderr, PHP_EOL) : sprintf('Executed the command "%s" and got the following (STDOUT) output:%s%s%sWill return "%s".', $command, PHP_EOL, $stdout, PHP_EOL, $this->countCpuCores($stdout) ?? 'null'); } /** * @return positive-int|null diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php index 55b465142..7a183856f 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function implode; use function in_array; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php index 083f08628..f6765e553 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WindowsRegistryLogicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function array_filter; use function count; diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php index b05e0743d..007c33013 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function preg_match; /** diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php index 447a10ec6..a7e8b3b72 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; use function preg_match; /** diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php index f7e8356da..96bf9994d 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter\Finder; +namespace RectorPrefix202410\Fidry\CpuCoreCounter\Finder; /** * Find the number of logical CPU cores for Linux and the likes. diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php index 25aa3bda4..c81547617 100644 --- a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ declare (strict_types=1); -namespace RectorPrefix202405\Fidry\CpuCoreCounter; +namespace RectorPrefix202410\Fidry\CpuCoreCounter; use RuntimeException; final class NumberOfCpuCoreNotFound extends RuntimeException diff --git a/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/ParallelisationResult.php b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/ParallelisationResult.php new file mode 100644 index 000000000..6dca45755 --- /dev/null +++ b/vendor/rector/rector/vendor/fidry/cpu-core-counter/src/ParallelisationResult.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +declare (strict_types=1); +namespace RectorPrefix202410\Fidry\CpuCoreCounter; + +/** + * @readonly + */ +final class ParallelisationResult +{ + /** + * @var positive-int|0 + */ + public $passedReservedCpus; + /** + * @var non-zero-int|null + */ + public $passedCountLimit; + /** + * @var float|null + */ + public $passedLoadLimit; + /** + * @var float|null + */ + public $passedSystemLoadAverage; + /** + * @var non-zero-int|null + */ + public $correctedCountLimit; + /** + * @var float|null + */ + public $correctedSystemLoadAverage; + /** + * @var positive-int + */ + public $totalCoresCount; + /** + * @var positive-int + */ + public $availableCpus; + /** + * @param positive-int|0 $passedReservedCpus + * @param non-zero-int|null $passedCountLimit + * @param non-zero-int|null $correctedCountLimit + * @param positive-int $totalCoresCount + * @param positive-int $availableCpus + */ + public function __construct(int $passedReservedCpus, ?int $passedCountLimit, ?float $passedLoadLimit, ?float $passedSystemLoadAverage, ?int $correctedCountLimit, ?float $correctedSystemLoadAverage, int $totalCoresCount, int $availableCpus) + { + $this->passedReservedCpus = $passedReservedCpus; + $this->passedCountLimit = $passedCountLimit; + $this->passedLoadLimit = $passedLoadLimit; + $this->passedSystemLoadAverage = $passedSystemLoadAverage; + $this->correctedCountLimit = $correctedCountLimit; + $this->correctedSystemLoadAverage = $correctedSystemLoadAverage; + $this->totalCoresCount = $totalCoresCount; + $this->availableCpus = $availableCpus; + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Auth.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Auth.php new file mode 100644 index 000000000..05e8e9f03 --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Auth.php @@ -0,0 +1,33 @@ +guard = $guard; + } + /** + * Resolve the authentication guard. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('auth')->guard($attribute->guard); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Authenticated.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Authenticated.php new file mode 100644 index 000000000..16c8caf8a --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Authenticated.php @@ -0,0 +1,33 @@ +guard = $guard; + } + /** + * Resolve the currently authenticated user. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return \Illuminate\Contracts\Auth\Authenticatable|null + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('auth')->guard($attribute->guard)->user(); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Cache.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Cache.php new file mode 100644 index 000000000..5ff86b582 --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Cache.php @@ -0,0 +1,33 @@ +store = $store; + } + /** + * Resolve the cache store. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return \Illuminate\Contracts\Cache\Repository + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('cache')->store($attribute->store); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Config.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Config.php new file mode 100644 index 000000000..5143ba0b6 --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Config.php @@ -0,0 +1,39 @@ +key = $key; + $this->default = $default; + } + /** + * Resolve the configuration value. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return mixed + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('config')->get($attribute->key, $attribute->default); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/CurrentUser.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/CurrentUser.php new file mode 100644 index 000000000..6590d8c8c --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/CurrentUser.php @@ -0,0 +1,10 @@ +connection = $connection; + } + /** + * Resolve the database connection. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return \Illuminate\Database\Connection + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('db')->connection($attribute->connection); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Log.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Log.php new file mode 100644 index 000000000..a39087e71 --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Log.php @@ -0,0 +1,33 @@ +channel = $channel; + } + /** + * Resolve the log channel. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return \Psr\Log\LoggerInterface + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('log')->channel($attribute->channel); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Storage.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Storage.php new file mode 100644 index 000000000..a71b3e3e8 --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Storage.php @@ -0,0 +1,33 @@ +disk = $disk; + } + /** + * Resolve the storage disk. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return \Illuminate\Contracts\Filesystem\Filesystem + */ + public static function resolve(self $attribute, Container $container) + { + return $container->make('filesystem')->disk($attribute->disk); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/Attributes/Tag.php b/vendor/rector/rector/vendor/illuminate/container/Attributes/Tag.php new file mode 100644 index 000000000..c5cd0c7bc --- /dev/null +++ b/vendor/rector/rector/vendor/illuminate/container/Attributes/Tag.php @@ -0,0 +1,31 @@ +tag = $tag; + } + /** + * Resolve the tag. + * + * @param self $attribute + * @param \Illuminate\Contracts\Container\Container $container + * @return mixed + */ + public static function resolve(self $attribute, Container $container) + { + return $container->tagged($attribute->tag); + } +} diff --git a/vendor/rector/rector/vendor/illuminate/container/BoundMethod.php b/vendor/rector/rector/vendor/illuminate/container/BoundMethod.php index 2e440bf50..ae4dc3d33 100644 --- a/vendor/rector/rector/vendor/illuminate/container/BoundMethod.php +++ b/vendor/rector/rector/vendor/illuminate/container/BoundMethod.php @@ -1,9 +1,9 @@ getName(), $parameters)) { - $dependencies[] = $parameters[$paramName]; + $pendingDependencies[] = $parameters[$paramName]; unset($parameters[$paramName]); + } elseif ($attribute = Util::getContextualAttributeFromDependency($parameter)) { + $pendingDependencies[] = $container->resolveFromAttribute($attribute); } elseif (!\is_null($className = Util::getParameterClassName($parameter))) { if (\array_key_exists($className, $parameters)) { - $dependencies[] = $parameters[$className]; + $pendingDependencies[] = $parameters[$className]; unset($parameters[$className]); } elseif ($parameter->isVariadic()) { $variadicDependencies = $container->make($className); - $dependencies = \array_merge($dependencies, \is_array($variadicDependencies) ? $variadicDependencies : [$variadicDependencies]); + $pendingDependencies = \array_merge($pendingDependencies, \is_array($variadicDependencies) ? $variadicDependencies : [$variadicDependencies]); } else { - $dependencies[] = $container->make($className); + $pendingDependencies[] = $container->make($className); } } elseif ($parameter->isDefaultValueAvailable()) { - $dependencies[] = $parameter->getDefaultValue(); + $pendingDependencies[] = $parameter->getDefaultValue(); } elseif (!$parameter->isOptional() && !\array_key_exists($paramName, $parameters)) { $message = "Unable to resolve dependency [{$parameter}] in class {$parameter->getDeclaringClass()->getName()}"; throw new BindingResolutionException($message); } + foreach ($pendingDependencies as $dependency) { + $container->fireAfterResolvingAttributeCallbacks(\method_exists($parameter, 'getAttributes') ? $parameter->getAttributes() : [], $dependency); + } + $dependencies = \array_merge($dependencies, $pendingDependencies); } /** * Determine if the given string is in Class@method syntax. diff --git a/vendor/rector/rector/vendor/illuminate/container/Container.php b/vendor/rector/rector/vendor/illuminate/container/Container.php index 2b723405d..fc30f551b 100755 --- a/vendor/rector/rector/vendor/illuminate/container/Container.php +++ b/vendor/rector/rector/vendor/illuminate/container/Container.php @@ -1,14 +1,16 @@ contextualAttributes[$attribute] = $handler; + } /** * Determine if the given abstract type has been bound. * @@ -584,16 +609,10 @@ public function call($callback, array $parameters = [], $defaultMethod = null) */ protected function getClassForCallable($callback) { - if (\PHP_VERSION_ID >= 80200) { - if (\is_callable($callback) && !($reflector = new ReflectionFunction(\Closure::fromCallable($callback)))->isAnonymous()) { - return $reflector->getClosureScopeClass()->name ?? \false; - } - return \false; - } - if (!\is_array($callback)) { - return \false; + if (\is_callable($callback) && !($reflector = new ReflectionFunction(\Closure::fromCallable($callback)))->isAnonymous()) { + return $reflector->getClosureScopeClass()->name ?? \false; } - return \is_string($callback[0]) ? $callback[0] : \get_class($callback[0]); + return \false; } /** * Get a closure to resolve the given type from the container. @@ -623,7 +642,7 @@ public function makeWith($abstract, array $parameters = []) /** * Resolve the given type from the container. * - * @param string|callable $abstract + * @param string $abstract * @param array $parameters * @return mixed * @@ -782,7 +801,12 @@ public function build($concrete) // hand back the results of the functions, which allows functions to be // used as resolvers for more fine-tuned resolution of these objects. if ($concrete instanceof Closure) { - return $concrete($this, $this->getLastParameterOverride()); + $this->buildStack[] = \spl_object_hash($concrete); + try { + return $concrete($this, $this->getLastParameterOverride()); + } finally { + \array_pop($this->buildStack); + } } try { $reflector = new ReflectionClass($concrete); @@ -802,7 +826,8 @@ public function build($concrete) // resolving any other types or dependencies out of these containers. if (\is_null($constructor)) { \array_pop($this->buildStack); - return new $concrete(); + $this->fireAfterResolvingAttributeCallbacks(\method_exists($reflector, 'getAttributes') ? $reflector->getAttributes() : [], $instance = new $concrete()); + return $instance; } $dependencies = $constructor->getParameters(); // Once we have all the constructor's parameters we can create each of the @@ -815,7 +840,8 @@ public function build($concrete) throw $e; } \array_pop($this->buildStack); - return $reflector->newInstanceArgs($instances); + $this->fireAfterResolvingAttributeCallbacks(\method_exists($reflector, 'getAttributes') ? $reflector->getAttributes() : [], $instance = $reflector->newInstanceArgs($instances)); + return $instance; } /** * Resolve all of the dependencies from the ReflectionParameters. @@ -836,10 +862,15 @@ protected function resolveDependencies(array $dependencies) $results[] = $this->getParameterOverride($dependency); continue; } + $result = null; + if (!\is_null($attribute = Util::getContextualAttributeFromDependency($dependency))) { + $result = $this->resolveFromAttribute($attribute); + } // If the class is null, it means the dependency is a string or some other // primitive type which we can not resolve since it is not a class and // we will just bomb out with an error since we have no-where to go. - $result = \is_null(Util::getParameterClassName($dependency)) ? $this->resolvePrimitive($dependency) : $this->resolveClass($dependency); + $result = $result ?? (\is_null(Util::getParameterClassName($dependency)) ? $this->resolvePrimitive($dependency) : $this->resolveClass($dependency)); + $this->fireAfterResolvingAttributeCallbacks(\method_exists($dependency, 'getAttributes') ? $dependency->getAttributes() : [], $result); if ($dependency->isVariadic()) { $results = \array_merge($results, $result); } else { @@ -896,6 +927,9 @@ protected function resolvePrimitive(ReflectionParameter $parameter) if ($parameter->isVariadic()) { return []; } + if ($parameter->hasType() && $parameter->allowsNull()) { + return null; + } $this->unresolvablePrimitive($parameter); } /** @@ -939,6 +973,24 @@ protected function resolveVariadicClass(ReflectionParameter $parameter) return $this->resolve($abstract); }, $concrete); } + /** + * Resolve a dependency based on an attribute. + * + * @param \ReflectionAttribute $attribute + * @return mixed + */ + public function resolveFromAttribute(ReflectionAttribute $attribute) + { + $handler = $this->contextualAttributes[$attribute->getName()] ?? null; + $instance = $attribute->newInstance(); + if (\is_null($handler) && \method_exists($instance, 'resolve')) { + $handler = \Closure::fromCallable([$instance, 'resolve']); + } + if (\is_null($handler)) { + throw new BindingResolutionException("Contextual binding attribute [{$attribute->getName()}] has no registered handler."); + } + return $handler($instance, $this); + } /** * Throw an exception that the concrete is not instantiable. * @@ -977,7 +1029,7 @@ protected function unresolvablePrimitive(ReflectionParameter $parameter) * @param \Closure|null $callback * @return void */ - public function beforeResolving($abstract, Closure $callback = null) + public function beforeResolving($abstract, ?Closure $callback = null) { if (\is_string($abstract)) { $abstract = $this->getAlias($abstract); @@ -995,7 +1047,7 @@ public function beforeResolving($abstract, Closure $callback = null) * @param \Closure|null $callback * @return void */ - public function resolving($abstract, Closure $callback = null) + public function resolving($abstract, ?Closure $callback = null) { if (\is_string($abstract)) { $abstract = $this->getAlias($abstract); @@ -1013,7 +1065,7 @@ public function resolving($abstract, Closure $callback = null) * @param \Closure|null $callback * @return void */ - public function afterResolving($abstract, Closure $callback = null) + public function afterResolving($abstract, ?Closure $callback = null) { if (\is_string($abstract)) { $abstract = $this->getAlias($abstract); @@ -1024,6 +1076,17 @@ public function afterResolving($abstract, Closure $callback = null) $this->afterResolvingCallbacks[$abstract][] = $callback; } } + /** + * Register a new after resolving attribute callback for all types. + * + * @param string $attribute + * @param \Closure $callback + * @return void + */ + public function afterResolvingAttribute(string $attribute, \Closure $callback) + { + $this->afterResolvingAttributeCallbacks[$attribute][] = $callback; + } /** * Fire all of the before resolving callbacks. * @@ -1079,6 +1142,28 @@ protected function fireAfterResolvingCallbacks($abstract, $object) $this->fireCallbackArray($object, $this->globalAfterResolvingCallbacks); $this->fireCallbackArray($object, $this->getCallbacksForType($abstract, $object, $this->afterResolvingCallbacks)); } + /** + * Fire all of the after resolving attribute callbacks. + * + * @param \ReflectionAttribute[] $abstract + * @param mixed $object + * @return void + */ + public function fireAfterResolvingAttributeCallbacks(array $attributes, $object) + { + foreach ($attributes as $attribute) { + if (\is_a($attribute->getName(), ContextualAttribute::class, \true)) { + $instance = $attribute->newInstance(); + if (\method_exists($instance, 'after')) { + $instance->after($instance, $object, $this); + } + } + $callbacks = $this->getCallbacksForType($attribute->getName(), $object, $this->afterResolvingAttributeCallbacks); + foreach ($callbacks as $callback) { + $callback($attribute->newInstance(), $object, $this); + } + } + } /** * Get all callbacks for a given type. * @@ -1210,10 +1295,7 @@ public function flush() */ public static function getInstance() { - if (\is_null(static::$instance)) { - static::$instance = new static(); - } - return static::$instance; + return static::$instance = static::$instance ?? new static(); } /** * Set the shared instance of the container. @@ -1221,7 +1303,7 @@ public static function getInstance() * @param \Illuminate\Contracts\Container\Container|null $container * @return \Illuminate\Contracts\Container\Container|static */ - public static function setInstance(ContainerContract $container = null) + public static function setInstance(?ContainerContract $container = null) { return static::$instance = $container; } diff --git a/vendor/rector/rector/vendor/illuminate/container/ContextualBindingBuilder.php b/vendor/rector/rector/vendor/illuminate/container/ContextualBindingBuilder.php index 37ac1f401..336a5b6e2 100644 --- a/vendor/rector/rector/vendor/illuminate/container/ContextualBindingBuilder.php +++ b/vendor/rector/rector/vendor/illuminate/container/ContextualBindingBuilder.php @@ -1,9 +1,9 @@ getAttributes(ContextualAttribute::class, ReflectionAttribute::IS_INSTANCEOF) : [])[0] ?? null; + } } diff --git a/vendor/rector/rector/vendor/illuminate/container/composer.json b/vendor/rector/rector/vendor/illuminate/container/composer.json index f4213082a..e1dd2f1bf 100755 --- a/vendor/rector/rector/vendor/illuminate/container/composer.json +++ b/vendor/rector/rector/vendor/illuminate/container/composer.json @@ -14,8 +14,8 @@ } ], "require": { - "php": "^8.1", - "illuminate\/contracts": "^10.0", + "php": "^8.2", + "illuminate\/contracts": "^11.0", "psr\/container": "^1.1.1|^2.0.1" }, "provide": { @@ -23,12 +23,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Illuminate\\Container\\": "" + "RectorPrefix202410\\Illuminate\\Container\\": "" } }, "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "11.x-dev" } }, "config": { diff --git a/vendor/rector/rector/vendor/illuminate/contracts/Auth/Access/Authorizable.php b/vendor/rector/rector/vendor/illuminate/contracts/Auth/Access/Authorizable.php index f0010341a..2872792a7 100644 --- a/vendor/rector/rector/vendor/illuminate/contracts/Auth/Access/Authorizable.php +++ b/vendor/rector/rector/vendor/illuminate/contracts/Auth/Access/Authorizable.php @@ -1,6 +1,6 @@ $attributes * @return mixed */ public function set(Model $model, string $key, $value, array $attributes); diff --git a/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php b/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php index c950c08a0..fe6efb388 100644 --- a/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php +++ b/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php @@ -1,6 +1,6 @@ $attributes * @return mixed */ public function serialize(Model $model, string $key, $value, array $attributes); diff --git a/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php b/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php index c0f929a8f..9017a4735 100644 --- a/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php +++ b/vendor/rector/rector/vendor/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php @@ -1,6 +1,6 @@ =8.0 <8.4" + "php": "8.0 - 8.4" }, "require-dev": { "nette\/tester": "^2.5", diff --git a/vendor/rector/rector/vendor/nette/utils/readme.md b/vendor/rector/rector/vendor/nette/utils/readme.md index 530915f8f..0038f534f 100644 --- a/vendor/rector/rector/vendor/nette/utils/readme.md +++ b/vendor/rector/rector/vendor/nette/utils/readme.md @@ -1,5 +1,4 @@ -Nette Utility Classes -===================== +[![Nette Utils](https://github.com/nette/utils/assets/194960/c33fdb74-0652-4cad-ac6e-c1ce0d29e32a)](https://doc.nette.org/en/utils) [![Downloads this Month](https://img.shields.io/packagist/dm/nette/utils.svg)](https://packagist.org/packages/nette/utils) [![Tests](https://github.com/nette/utils/workflows/Tests/badge.svg?branch=master)](https://github.com/nette/utils/actions) @@ -11,25 +10,27 @@ Nette Utility Classes Introduction ------------ -In package nette/utils you will find a set of [useful classes](https://doc.nette.org/utils) for everyday use: - -- [Arrays](https://doc.nette.org/utils/arrays) - manipulate arrays -- [Callback](https://doc.nette.org/utils/callback) - PHP callbacks -- [Date and Time](https://doc.nette.org/utils/datetime) - modify times and dates -- [Filesystem](https://doc.nette.org/utils/filesystem) - copying, renaming, … -- [Finder](https://doc.nette.org/utils/finder) - finds files and directories -- [Helper Functions](https://doc.nette.org/utils/helpers) -- [HTML elements](https://doc.nette.org/utils/html-elements) - generate HTML -- [Images](https://doc.nette.org/utils/images) - crop, resize, rotate images -- [JSON](https://doc.nette.org/utils/json) - encoding and decoding -- [Generating Random Strings](https://doc.nette.org/utils/random) -- [Paginator](https://doc.nette.org/utils/paginator) - pagination math -- [PHP Reflection](https://doc.nette.org/utils/reflection) -- [Strings](https://doc.nette.org/utils/strings) - useful text functions -- [SmartObject](https://doc.nette.org/utils/smartobject) - PHP object enhancements -- [Validation](https://doc.nette.org/utils/validators) - validate inputs -- [Type](https://doc.nette.org/utils/type) - PHP data type - +In package nette/utils you will find a set of useful classes for everyday use: + +✅ [Arrays](https://doc.nette.org/utils/arrays)
+✅ [Callback](https://doc.nette.org/utils/callback) - PHP callbacks
+✅ [Filesystem](https://doc.nette.org/utils/filesystem) - copying, renaming, …
+✅ [Finder](https://doc.nette.org/utils/finder) - finds files and directories
+✅ [Floats](https://doc.nette.org/utils/floats) - floating point numbers
+✅ [Helper Functions](https://doc.nette.org/utils/helpers)
+✅ [HTML elements](https://doc.nette.org/utils/html-elements) - generate HTML
+✅ [Images](https://doc.nette.org/utils/images) - crop, resize, rotate images
+✅ [Iterables](https://doc.nette.org/utils/iterables)
+✅ [JSON](https://doc.nette.org/utils/json) - encoding and decoding
+✅ [Generating Random Strings](https://doc.nette.org/utils/random)
+✅ [Paginator](https://doc.nette.org/utils/paginator) - pagination math
+✅ [PHP Reflection](https://doc.nette.org/utils/reflection)
+✅ [Strings](https://doc.nette.org/utils/strings) - useful text functions
+✅ [SmartObject](https://doc.nette.org/utils/smartobject) - PHP object enhancements
+✅ [Type](https://doc.nette.org/utils/type) - PHP data type
+✅ [Validation](https://doc.nette.org/utils/validators) - validate inputs
+ +  Installation ------------ @@ -40,11 +41,9 @@ The recommended way to install is via Composer: composer require nette/utils ``` -- Nette Utils 4.0 is compatible with PHP 8.0 to 8.3 -- Nette Utils 3.2 is compatible with PHP 7.2 to 8.3 -- Nette Utils 3.1 is compatible with PHP 7.1 to 8.0 -- Nette Utils 3.0 is compatible with PHP 7.1 to 8.0 -- Nette Utils 2.5 is compatible with PHP 5.6 to 8.0 +Nette Utils 4.0 is compatible with PHP 8.0 to 8.4. + +  [Support Me](https://github.com/sponsors/dg) -------------------------------------------- diff --git a/vendor/rector/rector/vendor/nette/utils/src/HtmlStringable.php b/vendor/rector/rector/vendor/nette/utils/src/HtmlStringable.php index a0b7cdafe..5aff8732e 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/HtmlStringable.php +++ b/vendor/rector/rector/vendor/nette/utils/src/HtmlStringable.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette; +namespace RectorPrefix202410\Nette; interface HtmlStringable { diff --git a/vendor/rector/rector/vendor/nette/utils/src/Iterators/CachingIterator.php b/vendor/rector/rector/vendor/nette/utils/src/Iterators/CachingIterator.php index a8365747a..e285fb70b 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Iterators/CachingIterator.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Iterators/CachingIterator.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Iterators; +namespace RectorPrefix202410\Nette\Iterators; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Smarter caching iterator. * @@ -27,22 +27,13 @@ class CachingIterator extends \CachingIterator implements \Countable * @var int */ private $counter = 0; - public function __construct($iterator) + /** + * @param iterable|\stdClass $iterable + */ + public function __construct($iterable) { - if (\is_array($iterator) || $iterator instanceof \stdClass) { - $iterator = new \ArrayIterator($iterator); - } elseif ($iterator instanceof \IteratorAggregate) { - do { - $iterator = $iterator->getIterator(); - } while ($iterator instanceof \IteratorAggregate); - \assert($iterator instanceof \Iterator); - } elseif ($iterator instanceof \Iterator) { - } elseif ($iterator instanceof \Traversable) { - $iterator = new \IteratorIterator($iterator); - } else { - throw new Nette\InvalidArgumentException(\sprintf('Invalid argument passed to %s; array or Traversable expected, %s given.', self::class, \get_debug_type($iterator))); - } - parent::__construct($iterator, 0); + $iterable = $iterable instanceof \stdClass ? new \ArrayIterator($iterable) : Nette\Utils\Iterables::toIterator($iterable); + parent::__construct($iterable, 0); } /** * Is the current element the first one? diff --git a/vendor/rector/rector/vendor/nette/utils/src/Iterators/Mapper.php b/vendor/rector/rector/vendor/nette/utils/src/Iterators/Mapper.php index c7b52c028..9a7a5c8ed 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Iterators/Mapper.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Iterators/Mapper.php @@ -5,10 +5,10 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Iterators; +namespace RectorPrefix202410\Nette\Iterators; /** - * Applies the callback to the elements of the inner iterator. + * @deprecated use Nette\Utils\Iterables::map() */ class Mapper extends \IteratorIterator { diff --git a/vendor/rector/rector/vendor/nette/utils/src/SmartObject.php b/vendor/rector/rector/vendor/nette/utils/src/SmartObject.php index 5692e15c5..d7c382505 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/SmartObject.php +++ b/vendor/rector/rector/vendor/nette/utils/src/SmartObject.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette; +namespace RectorPrefix202410\Nette; -use RectorPrefix202405\Nette\Utils\ObjectHelpers; +use RectorPrefix202410\Nette\Utils\ObjectHelpers; /** * Strict class for better experience. * - 'did you mean' hints diff --git a/vendor/rector/rector/vendor/nette/utils/src/StaticClass.php b/vendor/rector/rector/vendor/nette/utils/src/StaticClass.php index 01cb33c2d..72003961b 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/StaticClass.php +++ b/vendor/rector/rector/vendor/nette/utils/src/StaticClass.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette; +namespace RectorPrefix202410\Nette; /** * Static class. diff --git a/vendor/rector/rector/vendor/nette/utils/src/Translator.php b/vendor/rector/rector/vendor/nette/utils/src/Translator.php index 4f6b3037b..cf5ce3aa4 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Translator.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Translator.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Localization; +namespace RectorPrefix202410\Nette\Localization; /** * Translator adapter. diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayHash.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayHash.php index b36a85153..593e24da5 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayHash.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayHash.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Provides objects to work as array. * @template T diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayList.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayList.php index 3ec63e7f3..df748b3b2 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayList.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/ArrayList.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Provides the base class for a generic list (items can be accessed by index). * @template T diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Arrays.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Arrays.php index ac88431c1..f3b5ae31c 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Arrays.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Arrays.php @@ -5,10 +5,10 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\JetBrains\PhpStorm\Language; -use RectorPrefix202405\Nette; +use RectorPrefix202410\JetBrains\PhpStorm\Language; +use RectorPrefix202410\Nette; use function is_array, is_int, is_object, count; /** * Array tools library. @@ -103,10 +103,11 @@ public static function contains(array $array, $value) : bool } /** * Returns the first item (matching the specified predicate if given). If there is no such item, it returns result of invoking $else or null. - * The $predicate has the signature `function (mixed $value, int|string $key, array $array): bool`. - * @template T - * @param array $array - * @return ?T + * @template K of int|string + * @template V + * @param array $array + * @param ?callable(V, K, array): bool $predicate + * @return ?V */ public static function first(array $array, ?callable $predicate = null, ?callable $else = null) { @@ -115,10 +116,11 @@ public static function first(array $array, ?callable $predicate = null, ?callabl } /** * Returns the last item (matching the specified predicate if given). If there is no such item, it returns result of invoking $else or null. - * The $predicate has the signature `function (mixed $value, int|string $key, array $array): bool`. - * @template T - * @param array $array - * @return ?T + * @template K of int|string + * @template V + * @param array $array + * @param ?callable(V, K, array): bool $predicate + * @return ?V */ public static function last(array $array, ?callable $predicate = null, ?callable $else = null) { @@ -127,8 +129,11 @@ public static function last(array $array, ?callable $predicate = null, ?callable } /** * Returns the key of first item (matching the specified predicate if given) or null if there is no such item. - * The $predicate has the signature `function (mixed $value, int|string $key, array $array): bool`. - * @return int|string|null + * @template K of int|string + * @template V + * @param array $array + * @param ?callable(V, K, array): bool $predicate + * @return ?K */ public static function firstKey(array $array, ?callable $predicate = null) { @@ -145,8 +150,11 @@ public static function firstKey(array $array, ?callable $predicate = null) } /** * Returns the key of last item (matching the specified predicate if given) or null if there is no such item. - * The $predicate has the signature `function (mixed $value, int|string $key, array $array): bool`. - * @return int|string|null + * @template K of int|string + * @template V + * @param array $array + * @param ?callable(V, K, array): bool $predicate + * @return ?K */ public static function lastKey(array $array, ?callable $predicate = null) { @@ -328,12 +336,11 @@ public static function pick(array &$array, $key, $default = null) } } /** - * Tests whether at least one element in the array passes the test implemented by the provided function, - * which has the signature `function ($value, $key, array $array): bool`. - * @template K + * Tests whether at least one element in the array passes the test implemented by the provided function. + * @template K of int|string * @template V - * @param iterable $array - * @param callable(V, K, ($array is array ? array : iterable)): bool $predicate + * @param array $array + * @param callable(V, K, array): bool $predicate */ public static function some(iterable $array, callable $predicate) : bool { @@ -345,12 +352,11 @@ public static function some(iterable $array, callable $predicate) : bool return \false; } /** - * Tests whether all elements in the array pass the test implemented by the provided function, - * which has the signature `function ($value, $key, array $array): bool`. - * @template K + * Tests whether all elements in the array pass the test implemented by the provided function. + * @template K of int|string * @template V - * @param iterable $array - * @param callable(V, K, ($array is array ? array : iterable)): bool $predicate + * @param array $array + * @param callable(V, K, array): bool $predicate */ public static function every(iterable $array, callable $predicate) : bool { @@ -363,11 +369,10 @@ public static function every(iterable $array, callable $predicate) : bool } /** * Returns a new array containing all key-value pairs matching the given $predicate. - * The callback has the signature `function (mixed $value, int|string $key, array $array): bool`. - * @template K of array-key + * @template K of int|string * @template V - * @param array $array - * @param callable(V, K, array): bool $predicate + * @param array $array + * @param callable(V, K, array): bool $predicate * @return array */ public static function filter(array $array, callable $predicate) : array @@ -382,12 +387,11 @@ public static function filter(array $array, callable $predicate) : array } /** * Returns an array containing the original keys and results of applying the given transform function to each element. - * The function has signature `function ($value, $key, array $array): mixed`. - * @template K of array-key + * @template K of int|string * @template V * @template R - * @param iterable $array - * @param callable(V, K, ($array is array ? array : iterable)): R $transformer + * @param array $array + * @param callable(V, K, array): R $transformer * @return array */ public static function map(iterable $array, callable $transformer) : array @@ -398,6 +402,28 @@ public static function map(iterable $array, callable $transformer) : array } return $res; } + /** + * Returns an array containing new keys and values generated by applying the given transform function to each element. + * If the function returns null, the element is skipped. + * @template K of int|string + * @template V + * @template ResK of int|string + * @template ResV + * @param array $array + * @param callable(V, K, array): ?array{ResK, ResV} $transformer + * @return array + */ + public static function mapWithKeys(array $array, callable $transformer) : array + { + $res = []; + foreach ($array as $k => $v) { + $pair = $transformer($v, $k, $array); + if ($pair) { + $res[$pair[0]] = $pair[1]; + } + } + return $res; + } /** * Invokes all callbacks and returns array of results. * @param callable[] $callbacks diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Callback.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Callback.php index 237e7c45a..9fc9fde6c 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Callback.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Callback.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; use function is_array, is_object, is_string; /** * PHP callable tools. @@ -77,7 +77,7 @@ public static function toReflection($callable) $callable = self::unwrap($callable); } if (is_string($callable) && \strpos($callable, '::') !== \false) { - return new ReflectionMethod($callable); + return new ReflectionMethod(...\explode('::', $callable, 2)); } elseif (is_array($callable)) { return new ReflectionMethod($callable[0], $callable[1]); } elseif (is_object($callable) && !$callable instanceof \Closure) { diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/DateTime.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/DateTime.php index 10e8c0952..f5f466e39 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/DateTime.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/DateTime.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * DateTime. */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/FileInfo.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/FileInfo.php index d76a2bb39..505771d31 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/FileInfo.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/FileInfo.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Represents the file or directory returned by the Finder. * @internal do not create instances directly diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/FileSystem.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/FileSystem.php index e4f178d6d..eaf7246c9 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/FileSystem.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/FileSystem.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * File system tool. */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Finder.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Finder.php index a99f6a690..a92c0c9f4 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Finder.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Finder.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Finder allows searching through directory trees using iterator. * diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Floats.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Floats.php index fc0c0ac85..78bab203c 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Floats.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Floats.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Floating-point numbers comparison. */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Helpers.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Helpers.php index aad77787a..16730d8bd 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Helpers.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Helpers.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; class Helpers { /** diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Html.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Html.php index 418cdf9fe..dc8a1a108 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Html.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Html.php @@ -5,10 +5,10 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; -use RectorPrefix202405\Nette\HtmlStringable; +use RectorPrefix202410\Nette; +use RectorPrefix202410\Nette\HtmlStringable; use function is_array, is_float, is_object, is_string; /** * HTML helper. diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Image.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Image.php index 57605da14..ccb2a1806 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Image.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Image.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Basic manipulation with images. Supported types are JPEG, PNG, GIF, WEBP, AVIF and BMP. * @@ -133,9 +133,7 @@ public static function rgb(int $red, int $green, int $blue, int $transparency = */ public static function fromFile(string $file, ?int &$type = null) { - if (!\extension_loaded('gd')) { - throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); - } + self::ensureExtension(); $type = self::detectTypeFromFile($file); if (!$type) { throw new UnknownImageFileException(\is_file($file) ? "Unknown type of file '{$file}'." : "File '{$file}' not found."); @@ -150,9 +148,7 @@ public static function fromFile(string $file, ?int &$type = null) */ public static function fromString(string $s, ?int &$type = null) { - if (!\extension_loaded('gd')) { - throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); - } + self::ensureExtension(); $type = self::detectTypeFromString($s); if (!$type) { throw new UnknownImageFileException('Unknown type of image.'); @@ -185,9 +181,7 @@ private static function invokeSafe(string $func, string $arg, string $message, s */ public static function fromBlank(int $width, int $height, $color = null) { - if (!\extension_loaded('gd')) { - throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); - } + self::ensureExtension(); if ($width < 1 || $height < 1) { throw new Nette\InvalidArgumentException('Image width and height must be greater than zero.'); } @@ -257,6 +251,7 @@ public static function typeToMimeType(int $type) : string */ public static function isTypeSupported(int $type) : bool { + self::ensureExtension(); switch ($type) { case ImageType::JPEG: return \IMG_JPG; @@ -277,6 +272,7 @@ public static function isTypeSupported(int $type) : bool /** @return ImageType[] */ public static function getSupportedTypes() : array { + self::ensureExtension(); $flag = \imagetypes(); return \array_filter([ $flag & \IMG_GIF ? ImageType::GIF : null, @@ -526,6 +522,7 @@ public function place(self $image, $left = 0, $top = 0, int $opacity = 100) */ public static function calculateTextBox(string $text, string $fontFile, float $size, float $angle = 0, array $options = []) : array { + self::ensureExtension(); $box = \imagettfbbox($size, $angle, $fontFile, $text, $options); return ['left' => $minX = \min([$box[0], $box[2], $box[4], $box[6]]), 'top' => $minY = \min([$box[1], $box[3], $box[5], $box[7]]), 'width' => \max([$box[0], $box[2], $box[4], $box[6]]) - $minX + 1, 'height' => \max([$box[1], $box[3], $box[5], $box[7]]) - $minY + 1]; } @@ -684,4 +681,10 @@ public function resolveColor($color) : int $color = $color instanceof ImageColor ? $color->toRGBA() : \array_values($color); return \imagecolorallocatealpha($this->image, ...$color) ?: \imagecolorresolvealpha($this->image, ...$color); } + private static function ensureExtension() : void + { + if (!\extension_loaded('gd')) { + throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); + } + } } diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageColor.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageColor.php index 9194b7803..42fc9e082 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageColor.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageColor.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Represent RGB color (0..255) with opacity (0..1). */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageType.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageType.php index 7654a0169..a4c521312 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageType.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/ImageType.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; /** * Type of image file. diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Iterables.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Iterables.php index 07d97f14c..da58b591e 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Iterables.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Iterables.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Utilities for iterables. */ @@ -42,10 +42,11 @@ public static function containsKey(iterable $iterable, $key) : bool } /** * Returns the first item (matching the specified predicate if given). If there is no such item, it returns result of invoking $else or null. - * The $predicate has the signature `function (mixed $value, mixed $key, iterable $iterable): bool`. - * @template T - * @param iterable $iterable - * @return ?T + * @template K + * @template V + * @param iterable $iterable + * @param ?callable(V, K, iterable): bool $predicate + * @return ?V */ public static function first(iterable $iterable, ?callable $predicate = null, ?callable $else = null) { @@ -58,10 +59,11 @@ public static function first(iterable $iterable, ?callable $predicate = null, ?c } /** * Returns the key of first item (matching the specified predicate if given). If there is no such item, it returns result of invoking $else or null. - * The $predicate has the signature `function (mixed $value, mixed $key, iterable $iterable): bool`. - * @template T - * @param iterable $iterable - * @return ?T + * @template K + * @template V + * @param iterable $iterable + * @param ?callable(V, K, iterable): bool $predicate + * @return ?K */ public static function firstKey(iterable $iterable, ?callable $predicate = null, ?callable $else = null) { @@ -73,11 +75,10 @@ public static function firstKey(iterable $iterable, ?callable $predicate = null, return $else ? $else() : null; } /** - * Tests whether at least one element in the iterator passes the test implemented by the - * provided callback with signature `function (mixed $value, mixed $key, iterable $iterable): bool`. + * Tests whether at least one element in the iterator passes the test implemented by the provided function. * @template K * @template V - * @param iterable $iterable + * @param iterable $iterable * @param callable(V, K, iterable): bool $predicate */ public static function some(iterable $iterable, callable $predicate) : bool @@ -90,11 +91,10 @@ public static function some(iterable $iterable, callable $predicate) : bool return \false; } /** - * Tests whether all elements in the iterator pass the test implemented by the provided function, - * which has the signature `function (mixed $value, mixed $key, iterable $iterable): bool`. + * Tests whether all elements in the iterator pass the test implemented by the provided function. * @template K * @template V - * @param iterable $iterable + * @param iterable $iterable * @param callable(V, K, iterable): bool $predicate */ public static function every(iterable $iterable, callable $predicate) : bool @@ -108,11 +108,10 @@ public static function every(iterable $iterable, callable $predicate) : bool } /** * Iterator that filters elements according to a given $predicate. Maintains original keys. - * The callback has the signature `function (mixed $value, mixed $key, iterable $iterable): bool`. * @template K * @template V - * @param iterable $iterable - * @param callable(V, K, iterable): bool $predicate + * @param iterable $iterable + * @param callable(V, K, iterable): bool $predicate * @return \Generator */ public static function filter(iterable $iterable, callable $predicate) : \Generator @@ -125,12 +124,11 @@ public static function filter(iterable $iterable, callable $predicate) : \Genera } /** * Iterator that transforms values by calling $transformer. Maintains original keys. - * The callback has the signature `function (mixed $value, mixed $key, iterable $iterable): bool`. * @template K * @template V * @template R - * @param iterable $iterable - * @param callable(V, K, iterable): R $transformer + * @param iterable $iterable + * @param callable(V, K, iterable): R $transformer * @return \Generator */ public static function map(iterable $iterable, callable $transformer) : \Generator @@ -139,4 +137,89 @@ public static function map(iterable $iterable, callable $transformer) : \Generat (yield $k => $transformer($v, $k, $iterable)); } } + /** + * Iterator that transforms keys and values by calling $transformer. If it returns null, the element is skipped. + * @template K + * @template V + * @template ResV + * @template ResK + * @param iterable $iterable + * @param callable(V, K, iterable): ?array{ResV, ResK} $transformer + * @return \Generator + */ + public static function mapWithKeys(iterable $iterable, callable $transformer) : \Generator + { + foreach ($iterable as $k => $v) { + $pair = $transformer($v, $k, $iterable); + if ($pair) { + (yield $pair[0] => $pair[1]); + } + } + } + /** + * Wraps around iterator and caches its keys and values during iteration. + * This allows the data to be re-iterated multiple times. + * @template K + * @template V + * @param iterable $iterable + * @return \IteratorAggregate + */ + public static function memoize(iterable $iterable) : iterable + { + return new class(self::toIterator($iterable)) implements \IteratorAggregate + { + /** + * @var \Iterator + */ + private $iterator; + /** + * @var mixed[] + */ + private $cache = []; + public function __construct(\Iterator $iterator, array $cache = []) + { + $this->iterator = $iterator; + $this->cache = $cache; + } + public function getIterator() : \Generator + { + if (!$this->cache) { + $this->iterator->rewind(); + } + $i = 0; + while (\true) { + if (isset($this->cache[$i])) { + [$k, $v] = $this->cache[$i]; + } elseif ($this->iterator->valid()) { + $k = $this->iterator->key(); + $v = $this->iterator->current(); + $this->iterator->next(); + $this->cache[$i] = [$k, $v]; + } else { + break; + } + (yield $k => $v); + $i++; + } + } + }; + } + /** + * Creates an iterator from anything that is iterable. + * @template K + * @template V + * @param iterable $iterable + * @return \Iterator + */ + public static function toIterator(iterable $iterable) : \Iterator + { + switch (\true) { + case $iterable instanceof \Iterator: + return $iterable; + case $iterable instanceof \IteratorAggregate: + return self::toIterator($iterable->getIterator()); + case \is_array($iterable): + return new \ArrayIterator($iterable); + } + } } diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Json.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Json.php index a1f58bde9..24608ea37 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Json.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Json.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * JSON encoder and decoder. */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/ObjectHelpers.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/ObjectHelpers.php index 122f93e7d..edad04521 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/ObjectHelpers.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/ObjectHelpers.php @@ -5,10 +5,10 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; -use RectorPrefix202405\Nette\MemberAccessException; +use RectorPrefix202410\Nette; +use RectorPrefix202410\Nette\MemberAccessException; /** * Nette\SmartObject helpers. * @internal diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Paginator.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Paginator.php index 8ea6bf980..bea1c463c 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Paginator.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Paginator.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Paginating math. * diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Random.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Random.php index 2cd0d8a8d..70d7ee5fa 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Random.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Random.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; use Random\Randomizer; /** * Secure random string generator. diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Reflection.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Reflection.php index 21fbb73b3..9e11d7471 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Reflection.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Reflection.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * PHP reflection helpers. */ @@ -75,7 +75,7 @@ public static function getMethodDeclaringMethod(\ReflectionMethod $method) : \Re return $method; } $hash = [$method->getFileName(), $method->getStartLine(), $method->getEndLine()]; - if (($alias = $decl->getTraitAliases()[$method->name] ?? null) && ($m = new \ReflectionMethod($alias)) && $hash === [$m->getFileName(), $m->getStartLine(), $m->getEndLine()]) { + if (($alias = $decl->getTraitAliases()[$method->name] ?? null) && ($m = new \ReflectionMethod(...\explode('::', $alias, 2))) && $hash === [$m->getFileName(), $m->getStartLine(), $m->getEndLine()]) { return self::getMethodDeclaringMethod($m); } foreach ($decl->getTraits() as $trait) { @@ -91,7 +91,7 @@ public static function getMethodDeclaringMethod(\ReflectionMethod $method) : \Re public static function areCommentsAvailable() : bool { static $res; - return $res ?? ($res = (bool) (new \ReflectionMethod(__METHOD__))->getDocComment()); + return $res ?? ($res = (bool) (new \ReflectionMethod(self::class, __FUNCTION__))->getDocComment()); } public static function toString(\Reflector $ref) : string { @@ -100,7 +100,7 @@ public static function toString(\Reflector $ref) : string } elseif ($ref instanceof \ReflectionMethod) { return $ref->getDeclaringClass()->name . '::' . $ref->name . '()'; } elseif ($ref instanceof \ReflectionFunction) { - return $ref->name . '()'; + return \PHP_VERSION_ID >= 80200 && $ref->isAnonymous() ? '{closure}()' : $ref->name . '()'; } elseif ($ref instanceof \ReflectionProperty) { return self::getPropertyDeclaringClass($ref)->name . '::$' . $ref->name; } elseif ($ref instanceof \ReflectionParameter) { diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/ReflectionMethod.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/ReflectionMethod.php index 6025eb55b..e65b7cbc3 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/ReflectionMethod.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/ReflectionMethod.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; /** * ReflectionMethod preserving the original class name. diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Strings.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Strings.php index 09807fdf3..cc29a932e 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Strings.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Strings.php @@ -5,10 +5,10 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\JetBrains\PhpStorm\Language; -use RectorPrefix202405\Nette; +use RectorPrefix202410\JetBrains\PhpStorm\Language; +use RectorPrefix202410\Nette; use function is_array, is_object, strlen; /** * String tools library. @@ -486,6 +486,7 @@ public static function match( /** * Searches the string for all occurrences matching the regular expression and * returns an array of arrays containing the found expression and each subexpression. + * @return ($lazy is true ? \Generator : array[]) * @param bool|int $captureOffset */ public static function matchAll( @@ -498,17 +499,35 @@ public static function matchAll( int $offset = 0, bool $unmatchedAsNull = \false, bool $patternOrder = \false, - bool $utf8 = \false - ) : array + bool $utf8 = \false, + bool $lazy = \false + ) { - $flags = \is_int($captureOffset) ? $captureOffset : ($captureOffset ? \PREG_OFFSET_CAPTURE : 0) | ($unmatchedAsNull ? \PREG_UNMATCHED_AS_NULL : 0) | ($patternOrder ? \PREG_PATTERN_ORDER : 0); if ($utf8) { $offset = strlen(self::substring($subject, 0, $offset)); $pattern .= 'u'; } + if ($lazy) { + $flags = \PREG_OFFSET_CAPTURE | ($unmatchedAsNull ? \PREG_UNMATCHED_AS_NULL : 0); + return (function () use($utf8, $captureOffset, $flags, $subject, $pattern, $offset) { + $counter = 0; + while ($offset <= strlen($subject) - ($counter ? 1 : 0) && self::pcre('preg_match', [$pattern, $subject, &$m, $flags, $offset])) { + $offset = $m[0][1] + \max(1, strlen($m[0][0])); + if (!$captureOffset) { + $m = \array_map(function ($item) { + return $item[0]; + }, $m); + } elseif ($utf8) { + $m = self::bytesToChars($subject, [$m])[0]; + } + (yield $counter++ => $m); + } + })(); + } if ($offset > strlen($subject)) { return []; } + $flags = \is_int($captureOffset) ? $captureOffset : ($captureOffset ? \PREG_OFFSET_CAPTURE : 0) | ($unmatchedAsNull ? \PREG_UNMATCHED_AS_NULL : 0) | ($patternOrder ? \PREG_PATTERN_ORDER : 0); self::pcre('preg_match_all', [$pattern, $subject, &$m, $flags & \PREG_PATTERN_ORDER ? $flags : $flags | \PREG_SET_ORDER, $offset]); return $utf8 && $captureOffset ? self::bytesToChars($subject, $m) : $m; } diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Type.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Type.php index 4565d38e1..c89b17456 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Type.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Type.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * PHP type reflection. */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/Validators.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/Validators.php index 545477703..20122a6a7 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/Validators.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/Validators.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; /** * Validation utilities. */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/Utils/exceptions.php b/vendor/rector/rector/vendor/nette/utils/src/Utils/exceptions.php index c5b9729c4..e3ce4eb7e 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/Utils/exceptions.php +++ b/vendor/rector/rector/vendor/nette/utils/src/Utils/exceptions.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; /** * The exception that is thrown when an image error occurs. diff --git a/vendor/rector/rector/vendor/nette/utils/src/compatibility.php b/vendor/rector/rector/vendor/nette/utils/src/compatibility.php index 590dbb5ff..7573196c5 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/compatibility.php +++ b/vendor/rector/rector/vendor/nette/utils/src/compatibility.php @@ -5,9 +5,9 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette\Utils; +namespace RectorPrefix202410\Nette\Utils; -use RectorPrefix202405\Nette; +use RectorPrefix202410\Nette; if (\false) { /** @deprecated use Nette\HtmlStringable */ interface IHtmlString extends Nette\HtmlStringable @@ -16,7 +16,7 @@ interface IHtmlString extends Nette\HtmlStringable } elseif (!\interface_exists(IHtmlString::class)) { \class_alias(Nette\HtmlStringable::class, IHtmlString::class); } -namespace RectorPrefix202405\Nette\Localization; +namespace RectorPrefix202410\Nette\Localization; if (\false) { /** @deprecated use Nette\Localization\Translator */ diff --git a/vendor/rector/rector/vendor/nette/utils/src/exceptions.php b/vendor/rector/rector/vendor/nette/utils/src/exceptions.php index cfa90f2bc..b24bc6117 100644 --- a/vendor/rector/rector/vendor/nette/utils/src/exceptions.php +++ b/vendor/rector/rector/vendor/nette/utils/src/exceptions.php @@ -5,7 +5,7 @@ * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ declare (strict_types=1); -namespace RectorPrefix202405\Nette; +namespace RectorPrefix202410\Nette; /** * The exception that is thrown when the value of an argument is diff --git a/vendor/rector/rector/vendor/nikic/php-parser/PATCHES.txt b/vendor/rector/rector/vendor/nikic/php-parser/PATCHES.txt index 03f744076..5719846b6 100644 --- a/vendor/rector/rector/vendor/nikic/php-parser/PATCHES.txt +++ b/vendor/rector/rector/vendor/nikic/php-parser/PATCHES.txt @@ -61,3 +61,7 @@ Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/ Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-namespace-php.patch +15 +Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-nodetraverser-php.patch + + diff --git a/vendor/rector/rector/vendor/nikic/php-parser/bin/php-parse b/vendor/rector/rector/vendor/nikic/php-parser/bin/php-parse index 14cbc88b9..5050b6680 100755 --- a/vendor/rector/rector/vendor/nikic/php-parser/bin/php-parse +++ b/vendor/rector/rector/vendor/nikic/php-parser/bin/php-parse @@ -1,6 +1,6 @@ #!/usr/bin/env php name)); + } throw new \LogicException('Invalid value'); } /** diff --git a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php index 165b8367d..56d22cccb 100644 --- a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +++ b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php @@ -109,7 +109,8 @@ protected function traverseNode(\PhpParser\Node $node) : \PhpParser\Node } elseif ($subNode instanceof \PhpParser\Node) { $traverseChildren = \true; $breakVisitorIndex = null; - foreach ($this->visitors as $visitorIndex => $visitor) { + $visitors = $this->getVisitorsForNode($subNode); + foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->enterNode($subNode); if (null !== $return) { if ($return instanceof \PhpParser\Node) { @@ -135,7 +136,7 @@ protected function traverseNode(\PhpParser\Node $node) : \PhpParser\Node break; } } - foreach ($this->visitors as $visitorIndex => $visitor) { + foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->leaveNode($subNode); if (null !== $return) { if ($return instanceof \PhpParser\Node) { @@ -172,7 +173,8 @@ protected function traverseArray(array $nodes) : array if ($node instanceof \PhpParser\Node) { $traverseChildren = \true; $breakVisitorIndex = null; - foreach ($this->visitors as $visitorIndex => $visitor) { + $visitors = $this->getVisitorsForNode($node); + foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->enterNode($node); if (null !== $return) { if ($return instanceof \PhpParser\Node) { @@ -198,7 +200,7 @@ protected function traverseArray(array $nodes) : array break; } } - foreach ($this->visitors as $visitorIndex => $visitor) { + foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->leaveNode($node); if (null !== $return) { if ($return instanceof \PhpParser\Node) { @@ -234,6 +236,13 @@ protected function traverseArray(array $nodes) : array } return $nodes; } + /** + * @return NodeVisitor[] + */ + public function getVisitorsForNode(\PhpParser\Node $node) + { + return $this->visitors; + } private function ensureReplacementReasonable($old, $new) { if ($old instanceof \PhpParser\Node\Stmt && $new instanceof \PhpParser\Node\Expr) { diff --git a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php index d2b38cdbc..187660dd3 100644 --- a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php +++ b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php @@ -24,19 +24,19 @@ class Php5 extends \PhpParser\ParserAbstract protected $defaultAction = -32766; protected $unexpectedTokenRule = 32767; protected $YY2TBLSTATE = 415; - protected $numNonLeafStates = 663; + protected $numNonLeafStates = 664; protected $symbolToName = array("EOF", "error", "T_THROW", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", "T_LOGICAL_AND", "T_PRINT", "T_YIELD", "T_DOUBLE_ARROW", "T_YIELD_FROM", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", "T_POW_EQUAL", "T_COALESCE_EQUAL", "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", "'^'", "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG", "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", "'>'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "';'", "'{'", "'}'", "'('", "')'", "'\$'", "'`'", "']'", "'\"'", "T_ENUM", "T_NULLSAFE_OBJECT_OPERATOR", "T_ATTRIBUTE"); protected $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 164, 168, 161, 55, 168, 168, 159, 160, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 156, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 163, 36, 168, 162, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 157, 35, 158, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 165, 131, 132, 133, 166, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 167); - protected $action = array(700, 670, 671, 672, 673, 674, 286, 675, 676, 677, 713, 714, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 0, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 245, 246, 242, 243, 244, -32766, -32766, 678, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 1229, 245, 246, 1230, 679, 680, 681, 682, 683, 684, 685, 899, 900, 747, -32766, -32766, -32766, -32766, -32766, -32766, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 716, 739, 717, 718, 719, 720, 708, 709, 710, 738, 711, 712, 697, 698, 699, 701, 702, 703, 741, 742, 743, 744, 745, 746, 875, 704, 705, 706, 707, 737, 728, 726, 727, 723, 724, 1046, 715, 721, 722, 729, 730, 732, 731, 733, 734, 55, 56, 425, 57, 58, 725, 736, 735, 755, 59, 60, -226, 61, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 337, -32767, -32767, -32767, -32767, 29, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 620, -32766, -32766, -32766, -32766, 62, 63, 1046, -32766, -32766, -32766, 64, 419, 65, 294, 295, 66, 67, 68, 69, 70, 71, 72, 73, 823, 25, 302, 74, 418, 984, 986, 669, 668, 1100, 1101, 1078, 755, 755, 767, 1220, 768, 470, -32766, -32766, -32766, 341, 749, 824, 54, -32767, -32767, -32767, -32767, 98, 99, 100, 101, 102, 220, 221, 222, 362, 876, -32766, 27, -32766, -32766, -32766, -32766, -32766, 1046, 493, 126, 1080, 1079, 1081, 370, 1068, 930, 207, 478, 479, 952, 953, 954, 951, 950, 949, 128, 480, 481, 803, 1106, 1107, 1108, 1109, 1103, 1104, 319, 32, 297, 10, 211, -515, 1110, 1105, 669, 668, 1080, 1079, 1081, 220, 221, 222, 41, 364, 341, 334, 421, 336, 426, -128, -128, -128, 313, 1046, 469, -4, 824, 54, 812, 770, 207, 40, 21, 427, -128, 471, -128, 472, -128, 473, -128, 1046, 428, 220, 221, 222, -32766, 33, 34, 429, 361, 327, 52, 35, 474, -32766, -32766, -32766, 342, 357, 358, 475, 476, 48, 207, 249, 669, 668, 477, 443, 300, 795, 846, 430, 431, 28, -32766, 814, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 952, 953, 954, 951, 950, 949, 422, 755, 424, 426, 826, 634, -128, -32766, -32766, 469, 824, 54, 288, 812, 1151, 755, 40, 21, 427, 317, 471, 345, 472, 129, 473, 9, 1186, 428, 769, 360, 324, 905, 33, 34, 429, 361, 1046, 415, 35, 474, 944, 1068, 315, 125, 357, 358, 475, 476, -32766, -32766, -32766, 926, 302, 477, 121, 1068, 759, 846, 430, 431, 669, 668, 423, 755, 1152, 809, 1046, 480, 766, -32766, 805, -32766, -32766, -32766, -32766, -261, 127, 347, 436, 841, 341, 1078, 1200, 426, 446, 826, 634, -4, 807, 469, 824, 54, 436, 812, 341, 755, 40, 21, 427, 444, 471, 130, 472, 1068, 473, 346, 767, 428, 768, -211, -211, -211, 33, 34, 429, 361, 308, 1076, 35, 474, -32766, -32766, -32766, 1046, 357, 358, 475, 476, -32766, -32766, -32766, 906, 120, 477, 539, 1068, 795, 846, 430, 431, 436, -32766, 341, -32766, -32766, -32766, 1046, 480, 810, -32766, 925, -32766, -32766, 754, 1080, 1079, 1081, 49, -32766, -32766, -32766, 749, 751, 426, 1201, 826, 634, -211, 30, 469, 669, 668, 436, 812, 341, 75, 40, 21, 427, -32766, 471, 1064, 472, 124, 473, 669, 668, 428, 212, -210, -210, -210, 33, 34, 429, 361, 51, 1186, 35, 474, 755, -32766, -32766, -32766, 357, 358, 475, 476, 213, 824, 54, 221, 222, 477, 20, 581, 795, 846, 430, 431, 220, 221, 222, 755, 222, 247, 78, 79, 80, 81, 341, 207, 517, 103, 104, 105, 752, 307, 131, 637, 1068, 207, 341, 207, 122, 826, 634, -210, 36, 106, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 1112, 307, 346, 436, 214, 341, 824, 54, 426, 123, 250, 129, 134, 106, 469, -32766, 572, 1112, 812, 245, 246, 40, 21, 427, 251, 471, 252, 472, 341, 473, 453, 22, 428, 207, 899, 900, 638, 33, 34, 429, 824, 54, -86, 35, 474, 220, 221, 222, 314, 357, 358, 100, 101, 102, 239, 240, 241, 645, 477, -230, 458, 589, 135, 374, 596, 597, 207, 760, 640, 648, 642, 941, 654, 929, 662, 822, 133, 307, 837, 426, -32766, 106, 749, 43, 44, 469, 45, 442, 46, 812, 826, 634, 40, 21, 427, 47, 471, 50, 472, 53, 473, 132, 608, 428, 302, 604, -280, -32766, 33, 34, 429, 824, 54, 426, 35, 474, 755, 957, -84, 469, 357, 358, 521, 812, 628, 363, 40, 21, 427, 477, 471, 575, 472, -515, 473, 847, 616, 428, -423, -32766, 11, 646, 33, 34, 429, 824, 54, 445, 35, 474, 462, 285, 578, 1111, 357, 358, 593, 369, 848, 594, 290, 826, 634, 477, 0, 0, 532, 0, 0, 325, 0, 0, 0, 0, 0, 651, 0, 0, 0, 322, 326, 0, 0, 0, 426, 0, 0, 0, 0, 323, 469, 316, 318, -516, 812, 862, 634, 40, 21, 427, 0, 471, 0, 472, 0, 473, 1158, 0, 428, 0, -414, 6, 7, 33, 34, 429, 824, 54, 426, 35, 474, 12, 14, 373, 469, 357, 358, -424, 812, 563, 754, 40, 21, 427, 477, 471, 248, 472, 839, 473, 38, 39, 428, 657, 658, 765, 813, 33, 34, 429, 821, 800, 815, 35, 474, 215, 216, 878, 869, 357, 358, 217, 870, 218, 798, 863, 826, 634, 477, 860, 858, 936, 937, 934, 820, 209, 804, 806, 808, 811, 933, 763, 764, 1100, 1101, 935, 659, 78, 335, 426, 359, 1102, 635, 639, 641, 469, 643, 644, 647, 812, 826, 634, 40, 21, 427, 649, 471, 650, 472, 652, 473, 653, 636, 428, 796, 1226, 1228, 762, 33, 34, 429, 215, 216, 845, 35, 474, 761, 217, 844, 218, 357, 358, 1227, 843, 1060, 831, 1048, 842, 1049, 477, 559, 209, 1106, 1107, 1108, 1109, 1103, 1104, 398, 1100, 1101, 829, 942, 867, 1110, 1105, 868, 1102, 457, 1225, 1194, 1192, 1177, 1157, 219, 1190, 1091, 917, 1198, 1188, 0, 826, 634, 24, -433, 26, 31, 37, 42, 76, 77, 210, 287, 292, 293, 308, 309, 310, 311, 339, 356, 416, 0, -227, -226, 16, 17, 18, 393, 454, 461, 463, 467, 553, 625, 1051, 559, 1054, 1106, 1107, 1108, 1109, 1103, 1104, 398, 907, 1116, 1050, 1026, 564, 1110, 1105, 1025, 1093, 1055, 0, 1044, 0, 1057, 1056, 219, 1059, 1058, 1075, 0, 1191, 1176, 1172, 1189, 1090, 1223, 1117, 1171, 600); - protected $actionCheck = array(2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, 11, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 69, 70, 53, 54, 55, 9, 10, 57, 30, 116, 32, 33, 34, 35, 36, 37, 38, 80, 69, 70, 83, 71, 72, 73, 74, 75, 76, 77, 135, 136, 80, 33, 34, 35, 36, 37, 38, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 31, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 13, 134, 135, 136, 137, 138, 139, 140, 141, 142, 3, 4, 5, 6, 7, 148, 149, 150, 82, 12, 13, 160, 15, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 8, 44, 45, 46, 47, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 80, 33, 34, 35, 36, 50, 51, 13, 9, 10, 11, 56, 128, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 59, 60, 37, 38, 78, 79, 80, 82, 82, 106, 85, 108, 86, 9, 10, 11, 161, 80, 1, 2, 44, 45, 46, 47, 48, 49, 50, 51, 52, 9, 10, 11, 106, 156, 30, 8, 32, 33, 34, 35, 36, 13, 116, 8, 153, 154, 155, 8, 122, 158, 30, 125, 126, 116, 117, 118, 119, 120, 121, 31, 134, 135, 156, 137, 138, 139, 140, 141, 142, 143, 145, 146, 8, 8, 133, 149, 150, 37, 38, 153, 154, 155, 9, 10, 11, 159, 8, 161, 162, 8, 164, 74, 75, 76, 77, 8, 13, 80, 0, 1, 2, 84, 158, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 13, 98, 9, 10, 11, 9, 103, 104, 105, 106, 8, 70, 109, 110, 9, 10, 11, 8, 115, 116, 117, 118, 70, 30, 31, 37, 38, 124, 31, 8, 127, 128, 129, 130, 8, 30, 156, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 116, 117, 118, 119, 120, 121, 8, 82, 8, 74, 156, 157, 158, 33, 34, 80, 1, 2, 8, 84, 163, 82, 87, 88, 89, 133, 91, 70, 93, 152, 95, 108, 82, 98, 158, 8, 113, 160, 103, 104, 105, 106, 13, 108, 109, 110, 123, 122, 113, 157, 115, 116, 117, 118, 9, 10, 11, 156, 71, 124, 157, 122, 127, 128, 129, 130, 37, 38, 8, 82, 160, 156, 13, 134, 156, 30, 156, 32, 33, 34, 35, 158, 157, 148, 159, 122, 161, 80, 1, 74, 133, 156, 157, 158, 156, 80, 1, 2, 159, 84, 161, 82, 87, 88, 89, 157, 91, 157, 93, 122, 95, 161, 106, 98, 108, 100, 101, 102, 103, 104, 105, 106, 159, 116, 109, 110, 9, 10, 11, 13, 115, 116, 117, 118, 9, 10, 11, 160, 16, 124, 81, 122, 127, 128, 129, 130, 159, 30, 161, 32, 33, 34, 13, 134, 156, 30, 156, 32, 33, 153, 153, 154, 155, 70, 9, 10, 11, 80, 80, 74, 160, 156, 157, 158, 14, 80, 37, 38, 159, 84, 161, 152, 87, 88, 89, 30, 91, 160, 93, 14, 95, 37, 38, 98, 16, 100, 101, 102, 103, 104, 105, 106, 70, 82, 109, 110, 82, 33, 34, 35, 115, 116, 117, 118, 16, 1, 2, 10, 11, 124, 160, 85, 127, 128, 129, 130, 9, 10, 11, 82, 11, 14, 157, 9, 10, 11, 161, 30, 85, 53, 54, 55, 154, 57, 157, 31, 122, 30, 161, 30, 157, 156, 157, 158, 30, 69, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 144, 57, 161, 159, 16, 161, 1, 2, 74, 157, 16, 152, 157, 69, 80, 116, 161, 144, 84, 69, 70, 87, 88, 89, 16, 91, 16, 93, 161, 95, 75, 76, 98, 30, 135, 136, 31, 103, 104, 105, 1, 2, 31, 109, 110, 9, 10, 11, 31, 115, 116, 50, 51, 52, 50, 51, 52, 31, 124, 160, 75, 76, 101, 102, 111, 112, 30, 156, 157, 31, 31, 156, 157, 156, 157, 31, 31, 57, 38, 74, 33, 69, 80, 70, 70, 80, 70, 89, 70, 84, 156, 157, 87, 88, 89, 70, 91, 70, 93, 70, 95, 70, 96, 98, 71, 77, 82, 85, 103, 104, 105, 1, 2, 74, 109, 110, 82, 82, 97, 80, 115, 116, 85, 84, 92, 106, 87, 88, 89, 124, 91, 90, 93, 133, 95, 128, 94, 98, 147, 116, 97, 31, 103, 104, 105, 1, 2, 97, 109, 110, 97, 97, 100, 144, 115, 116, 100, 106, 128, 113, 161, 156, 157, 124, -1, -1, 151, -1, -1, 114, -1, -1, -1, -1, -1, 31, -1, -1, -1, 131, 131, -1, -1, -1, 74, -1, -1, -1, -1, 132, 80, 133, 133, 133, 84, 156, 157, 87, 88, 89, -1, 91, -1, 93, -1, 95, 144, -1, 98, -1, 147, 147, 147, 103, 104, 105, 1, 2, 74, 109, 110, 147, 147, 147, 80, 115, 116, 147, 84, 151, 153, 87, 88, 89, 124, 91, 31, 93, 152, 95, 156, 156, 98, 156, 156, 156, 156, 103, 104, 105, 156, 156, 156, 109, 110, 50, 51, 156, 156, 115, 116, 56, 156, 58, 156, 156, 156, 157, 124, 156, 156, 156, 156, 156, 156, 70, 156, 156, 156, 156, 156, 156, 156, 78, 79, 156, 158, 157, 157, 74, 157, 86, 157, 157, 157, 80, 157, 157, 157, 84, 156, 157, 87, 88, 89, 157, 91, 157, 93, 157, 95, 157, 157, 98, 158, 158, 158, 158, 103, 104, 105, 50, 51, 158, 109, 110, 158, 56, 158, 58, 115, 116, 158, 158, 158, 158, 158, 158, 158, 124, 135, 70, 137, 138, 139, 140, 141, 142, 143, 78, 79, 158, 158, 158, 149, 150, 158, 86, 158, 158, 158, 158, 158, 164, 159, 158, 158, 158, 158, 158, -1, 156, 157, 159, 162, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, -1, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 135, 160, 137, 138, 139, 140, 141, 142, 143, 160, 160, 160, 160, 160, 149, 150, 160, 160, 163, -1, 162, -1, 163, 163, 159, 163, 163, 163, -1, 163, 163, 163, 163, 163, 163, 163, 163, 163); - protected $actionBase = array(0, 229, 310, 390, 470, 103, 325, 325, 784, -2, -2, 149, -2, -2, -2, 660, 765, 799, 765, 589, 694, 870, 870, 870, 252, 404, 404, 404, 514, 177, 177, 918, 434, 118, 295, 313, 240, 491, 491, 491, 491, 138, 138, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 89, 206, 773, 550, 535, 775, 776, 777, 912, 709, 913, 856, 857, 700, 858, 859, 862, 863, 864, 855, 865, 935, 866, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 322, 592, 285, 319, 232, 44, 691, 691, 691, 691, 691, 691, 691, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 582, 530, 530, 530, 594, 860, 658, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 500, -21, -21, 492, 702, 420, 355, 216, 549, 151, 26, 26, 331, 331, 331, 331, 331, 46, 46, 5, 5, 5, 5, 153, 188, 188, 188, 188, 121, 121, 121, 121, 314, 314, 394, 394, 362, 300, 298, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 67, 656, 656, 659, 659, 522, 554, 554, 554, 554, 679, -59, -59, 381, 462, 462, 462, 528, 717, 854, 382, 382, 382, 382, 382, 382, 561, 561, 561, -3, -3, -3, 692, 115, 137, 115, 137, 678, 732, 450, 732, 338, 677, -15, 510, 810, 468, 707, 850, 711, 853, 572, 735, 267, 529, 654, 674, 463, 529, 529, 529, 529, 654, 610, 640, 608, 463, 529, 463, 718, 323, 496, 89, 570, 507, 675, 778, 293, 670, 780, 290, 373, 332, 566, 278, 435, 733, 781, 914, 917, 385, 715, 675, 675, 675, 352, 511, 278, -8, 605, 605, 605, 605, 156, 605, 605, 605, 605, 251, 276, 375, 402, 779, 657, 657, 690, 872, 869, 869, 657, 689, 657, 690, 874, 874, 874, 874, 657, 657, 657, 657, 869, 869, 869, 688, 869, 239, 703, 704, 704, 874, 742, 743, 657, 657, 712, 869, 869, 869, 712, 695, 874, 701, 741, 277, 869, 874, 672, 689, 672, 657, 701, 672, 689, 689, 672, 22, 666, 668, 873, 875, 887, 790, 662, 685, 879, 880, 876, 878, 871, 699, 744, 745, 497, 669, 671, 673, 680, 719, 682, 713, 674, 667, 667, 667, 655, 720, 655, 667, 667, 667, 667, 667, 667, 667, 667, 916, 646, 731, 714, 653, 749, 553, 573, 791, 664, 811, 900, 893, 867, 919, 881, 898, 655, 920, 739, 247, 643, 882, 783, 786, 655, 883, 655, 792, 655, 902, 812, 686, 813, 814, 667, 910, 921, 923, 924, 925, 927, 928, 929, 930, 684, 931, 750, 696, 894, 299, 877, 718, 729, 705, 788, 751, 820, 328, 932, 823, 655, 655, 794, 785, 655, 795, 756, 740, 890, 757, 895, 933, 664, 708, 896, 655, 706, 825, 934, 328, 681, 683, 888, 661, 761, 886, 911, 885, 796, 649, 663, 829, 830, 831, 693, 763, 891, 892, 889, 764, 803, 665, 805, 697, 832, 807, 884, 768, 833, 834, 899, 676, 730, 710, 698, 687, 809, 835, 897, 769, 770, 771, 848, 772, 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, -2, -2, -2, -2, 0, 0, -2, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, -21, -21, -21, -21, 599, -21, -21, -21, -21, -21, -21, -21, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, -21, 599, 599, 599, -21, 382, -21, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 599, 0, 0, 599, -21, 599, -21, 599, -21, -21, 599, 599, 599, 599, 599, 599, 599, -21, -21, -21, -21, -21, -21, 0, 561, 561, 561, 561, -21, -21, -21, -21, 382, 382, 382, 382, 382, 382, 259, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 561, 561, -3, -3, 382, 382, 382, 382, 382, 259, 382, 382, 463, 689, 689, 689, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 463, 0, 463, 0, 382, 463, 689, 463, 657, 137, 689, 689, 463, 869, 616, 616, 616, 616, 328, 278, 0, 0, 689, 689, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 667, 247, 0, 705, 335, 0, 0, 0, 0, 0, 0, 705, 335, 347, 347, 0, 684, 667, 667, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328); - protected $actionDefault = array(3, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 544, 544, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 299, 299, 299, 32767, 32767, 32767, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 32767, 32767, 32767, 32767, 32767, 32767, 383, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 389, 549, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 364, 365, 367, 368, 298, 552, 533, 247, 390, 548, 297, 249, 327, 503, 32767, 32767, 32767, 329, 122, 258, 203, 502, 125, 296, 234, 382, 384, 328, 303, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 302, 458, 361, 360, 359, 460, 32767, 459, 496, 496, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 325, 487, 486, 326, 456, 330, 457, 333, 461, 464, 331, 332, 349, 350, 347, 348, 351, 462, 463, 480, 481, 478, 479, 301, 352, 353, 354, 355, 482, 483, 484, 485, 32767, 32767, 543, 543, 32767, 32767, 282, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 340, 341, 471, 472, 32767, 238, 238, 238, 238, 283, 238, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 335, 336, 334, 466, 467, 465, 432, 32767, 32767, 32767, 434, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 504, 32767, 32767, 32767, 32767, 32767, 517, 421, 171, 32767, 413, 32767, 171, 171, 171, 171, 32767, 222, 224, 167, 32767, 171, 32767, 490, 32767, 32767, 32767, 32767, 522, 345, 32767, 32767, 116, 32767, 32767, 32767, 559, 32767, 517, 32767, 116, 32767, 32767, 32767, 32767, 358, 337, 338, 339, 32767, 32767, 521, 515, 474, 475, 476, 477, 32767, 468, 469, 470, 473, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 429, 435, 435, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 520, 519, 32767, 414, 498, 188, 186, 186, 32767, 208, 208, 32767, 32767, 190, 491, 510, 32767, 190, 173, 32767, 400, 175, 498, 32767, 32767, 240, 32767, 240, 32767, 400, 240, 32767, 32767, 240, 32767, 415, 439, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 379, 380, 493, 506, 32767, 507, 32767, 413, 343, 344, 346, 322, 32767, 324, 369, 370, 371, 372, 373, 374, 375, 377, 32767, 419, 32767, 422, 32767, 32767, 32767, 257, 32767, 557, 32767, 32767, 306, 557, 32767, 32767, 32767, 551, 32767, 32767, 300, 32767, 32767, 32767, 32767, 253, 32767, 169, 32767, 541, 32767, 558, 32767, 515, 32767, 342, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 516, 32767, 32767, 32767, 32767, 229, 32767, 452, 32767, 116, 32767, 32767, 32767, 189, 32767, 32767, 304, 248, 32767, 32767, 550, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 114, 32767, 170, 32767, 32767, 32767, 191, 32767, 32767, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 295, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 515, 32767, 32767, 233, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 415, 32767, 276, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 127, 127, 3, 127, 127, 260, 3, 260, 127, 260, 260, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 216, 219, 208, 208, 164, 127, 127, 268); - protected $goto = array(166, 140, 140, 140, 166, 187, 168, 144, 147, 141, 142, 143, 149, 163, 163, 163, 163, 144, 144, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 138, 159, 160, 161, 162, 184, 139, 185, 494, 495, 377, 496, 500, 501, 502, 503, 504, 505, 506, 507, 970, 164, 145, 146, 148, 171, 176, 186, 203, 253, 256, 258, 260, 263, 264, 265, 266, 267, 268, 269, 277, 278, 279, 280, 303, 304, 328, 329, 330, 394, 395, 396, 543, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 150, 151, 152, 167, 153, 169, 154, 204, 170, 155, 156, 157, 205, 158, 136, 621, 561, 757, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1113, 629, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 758, 520, 531, 509, 656, 556, 1183, 750, 509, 592, 786, 1183, 888, 612, 613, 884, 617, 618, 624, 626, 631, 633, 817, 855, 855, 855, 855, 850, 856, 174, 891, 891, 1205, 1205, 177, 178, 179, 401, 402, 403, 404, 173, 202, 206, 208, 257, 259, 261, 262, 270, 271, 272, 273, 274, 275, 281, 282, 283, 284, 305, 306, 331, 332, 333, 406, 407, 408, 409, 175, 180, 254, 255, 181, 182, 183, 498, 498, 498, 498, 498, 498, 861, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 510, 586, 538, 601, 602, 510, 545, 546, 547, 548, 549, 550, 551, 552, 554, 587, 1209, 560, 350, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 400, 607, 537, 537, 569, 533, 909, 535, 535, 497, 499, 525, 541, 570, 573, 584, 591, 298, 296, 296, 296, 298, 289, 299, 611, 378, 511, 614, 595, 947, 375, 511, 437, 437, 437, 437, 437, 437, 1163, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 1077, 948, 338, 1175, 321, 1077, 898, 898, 898, 898, 606, 898, 898, 1217, 1217, 1202, 753, 576, 605, 756, 1077, 1077, 1077, 1077, 1077, 1077, 1069, 384, 384, 384, 391, 1217, 877, 859, 857, 859, 655, 466, 512, 886, 881, 753, 384, 753, 384, 968, 384, 895, 385, 588, 353, 414, 384, 1231, 1019, 542, 1197, 1197, 1197, 568, 1094, 386, 386, 386, 904, 915, 515, 1029, 19, 15, 372, 389, 915, 940, 448, 450, 632, 340, 1216, 1216, 1114, 615, 938, 840, 555, 775, 386, 913, 1070, 1073, 1074, 399, 1069, 1182, 660, 23, 1216, 773, 1182, 544, 603, 1066, 1219, 1071, 1174, 1071, 519, 1199, 1199, 1199, 1089, 1088, 1072, 343, 523, 534, 519, 519, 772, 351, 352, 13, 579, 583, 627, 1061, 388, 782, 562, 771, 515, 783, 1181, 3, 4, 918, 956, 865, 451, 574, 1160, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 529, 0, 0, 0, 0, 514, 0, 529, 0, 0, 0, 0, 610, 513, 516, 439, 440, 1067, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 1224, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301); - protected $gotoCheck = array(43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 57, 69, 15, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 128, 9, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 16, 102, 32, 69, 32, 32, 120, 6, 69, 32, 29, 120, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 50, 69, 69, 69, 69, 69, 69, 27, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 119, 119, 119, 119, 119, 119, 33, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 67, 110, 67, 67, 119, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 142, 57, 72, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 51, 51, 51, 51, 51, 51, 84, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5, 5, 5, 5, 5, 5, 5, 63, 46, 124, 63, 129, 98, 63, 124, 57, 57, 57, 57, 57, 57, 133, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 98, 127, 82, 127, 57, 57, 57, 57, 57, 49, 57, 57, 144, 144, 140, 11, 40, 40, 14, 57, 57, 57, 57, 57, 57, 82, 13, 13, 13, 48, 144, 14, 14, 14, 14, 14, 57, 14, 14, 14, 11, 13, 11, 13, 102, 13, 79, 11, 70, 70, 70, 13, 13, 103, 2, 9, 9, 9, 2, 34, 125, 125, 125, 81, 13, 13, 34, 34, 34, 34, 17, 13, 8, 8, 8, 8, 18, 143, 143, 8, 8, 8, 9, 34, 25, 125, 85, 82, 82, 82, 125, 82, 121, 74, 34, 143, 24, 121, 47, 34, 116, 143, 82, 82, 82, 47, 121, 121, 121, 126, 126, 82, 58, 58, 58, 47, 47, 23, 72, 72, 58, 62, 62, 62, 114, 12, 23, 12, 23, 13, 26, 121, 30, 30, 86, 100, 71, 65, 66, 132, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, 9, -1, 9, -1, -1, -1, -1, 13, 9, 9, 9, 9, 13, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); - protected $gotoBase = array(0, 0, -172, 0, 0, 353, 201, 0, 477, 149, 0, 110, 195, 117, 426, 112, 203, 140, 171, 0, 0, 0, 0, 168, 164, 157, 119, 27, 0, 205, -118, 0, -428, 266, 51, 0, 0, 0, 0, 0, 388, 0, 0, -24, 0, 0, 345, 484, 146, 133, 209, 75, 0, 0, 0, 0, 0, 107, 161, 0, 0, 0, 222, -77, 0, 106, 97, -343, 0, -94, 135, 123, -129, 0, 129, 0, 0, -50, 0, 143, 0, 159, 64, 0, 338, 132, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 121, 0, 165, 156, 0, 0, 0, 0, 0, 87, 273, 259, 0, 0, 114, 0, 150, 0, 0, -5, -91, 200, 0, 0, 84, 154, 202, 77, -48, 178, 0, 0, 93, 187, 0, 0, 0, 0, 0, 0, 136, 0, 286, 167, 102, 0, 0); - protected $gotoDefault = array(-32768, 468, 664, 2, 665, 835, 740, 748, 598, 482, 630, 582, 380, 1193, 792, 793, 794, 381, 368, 483, 379, 410, 405, 781, 774, 776, 784, 172, 411, 787, 1, 789, 518, 825, 1020, 365, 797, 366, 590, 799, 527, 801, 802, 137, 382, 383, 528, 484, 390, 577, 816, 276, 387, 818, 367, 819, 828, 371, 465, 455, 460, 530, 557, 609, 432, 447, 571, 565, 536, 1086, 566, 864, 349, 872, 661, 880, 883, 485, 558, 894, 452, 902, 1099, 397, 908, 914, 919, 291, 922, 417, 412, 585, 927, 928, 5, 932, 622, 623, 8, 312, 955, 599, 969, 420, 1039, 1041, 486, 487, 522, 459, 508, 526, 488, 1062, 441, 413, 1065, 433, 489, 490, 434, 435, 1083, 355, 1168, 354, 449, 320, 1155, 580, 1118, 456, 1208, 1164, 348, 491, 492, 376, 1187, 392, 1203, 438, 1210, 1218, 344, 540, 567); + protected $action = array(701, 671, 672, 673, 674, 675, 286, 676, 677, 678, 714, 715, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 0, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 245, 246, 242, 243, 244, -32766, -32766, 679, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 1230, 245, 246, 1231, 680, 681, 682, 683, 684, 685, 686, 900, 901, 748, -32766, -32766, -32766, -32766, -32766, -32766, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 717, 740, 718, 719, 720, 721, 709, 710, 711, 739, 712, 713, 698, 699, 700, 702, 703, 704, 742, 743, 744, 745, 746, 747, 876, 705, 706, 707, 708, 738, 729, 727, 728, 724, 725, 1047, 716, 722, 723, 730, 731, 733, 732, 734, 735, 55, 56, 425, 57, 58, 726, 737, 736, 756, 59, 60, -226, 61, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 337, -32767, -32767, -32767, -32767, 29, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 621, -32766, -32766, -32766, -32766, 62, 63, 1047, -32766, -32766, -32766, 64, 419, 65, 294, 295, 66, 67, 68, 69, 70, 71, 72, 73, 824, 25, 302, 74, 418, 985, 987, 670, 669, 1101, 1102, 1079, 756, 756, 768, 1221, 769, 470, -32766, -32766, -32766, 341, 750, 825, 54, -32767, -32767, -32767, -32767, 98, 99, 100, 101, 102, 220, 221, 222, 362, 877, -32766, 27, -32766, -32766, -32766, -32766, -32766, 1047, 492, 126, 1081, 1080, 1082, 370, 1069, 931, 207, 478, 479, 953, 954, 955, 952, 951, 950, 128, 480, 481, 804, 1107, 1108, 1109, 1110, 1104, 1105, 319, 32, 297, 10, 211, -515, 1111, 1106, 670, 669, 1081, 1080, 1082, 220, 221, 222, 41, 364, 341, 334, 421, 336, 426, -128, -128, -128, 313, 1047, 469, -4, 825, 54, 813, 597, 207, 40, 21, 427, -128, 471, -128, 472, -128, 473, -128, 1047, 428, 220, 221, 222, -32766, 33, 34, 429, 361, 327, 52, 35, 474, -32766, -32766, -32766, 342, 357, 358, 475, 476, 48, 207, 249, 670, 669, 477, 443, 300, 796, 847, 430, 431, 28, -32766, 815, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 953, 954, 955, 952, 951, 950, 422, 756, 424, 426, 827, 635, -128, -32766, -32766, 469, 825, 54, 288, 813, 1152, 756, 40, 21, 427, 317, 471, 345, 472, 129, 473, 9, 1187, 428, 612, 360, 324, 906, 33, 34, 429, 361, 1047, 415, 35, 474, 945, 1069, 315, 125, 357, 358, 475, 476, -32766, -32766, -32766, 927, 302, 477, 121, 1069, 760, 847, 430, 431, 670, 669, 423, 756, 1153, 810, 1047, 480, 767, -32766, 806, -32766, -32766, -32766, -32766, -261, 127, 347, 436, 842, 341, 1079, 1201, 426, 446, 827, 635, -4, 808, 469, 825, 54, 436, 813, 341, 756, 40, 21, 427, 444, 471, 130, 472, 1069, 473, 346, 768, 428, 769, -211, -211, -211, 33, 34, 429, 361, 308, 1077, 35, 474, -32766, -32766, -32766, 1047, 357, 358, 475, 476, -32766, -32766, -32766, 907, 120, 477, 538, 1069, 796, 847, 430, 431, 436, -32766, 341, -32766, -32766, -32766, 1047, 480, 811, -32766, 926, -32766, -32766, 755, 1081, 1080, 1082, 49, -32766, -32766, -32766, 750, 752, 426, 1202, 827, 635, -211, 30, 469, 670, 669, 436, 813, 341, 75, 40, 21, 427, -32766, 471, 1065, 472, 124, 473, 670, 669, 428, 212, -210, -210, -210, 33, 34, 429, 361, 51, 1187, 35, 474, 756, -32766, -32766, -32766, 357, 358, 475, 476, 213, 825, 54, 221, 222, 477, 20, 580, 796, 847, 430, 431, 220, 221, 222, 756, 222, 247, 78, 79, 80, 81, 341, 207, 516, 103, 104, 105, 753, 307, 131, 638, 1069, 207, 341, 207, 122, 827, 635, -210, 36, 106, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 1113, 307, 346, 436, 214, 341, 825, 54, 426, 123, 250, 129, 134, 106, 469, -32766, 571, 1113, 813, 245, 246, 40, 21, 427, 251, 471, 252, 472, 341, 473, 453, 22, 428, 207, 900, 901, 639, 33, 34, 429, 825, 54, -86, 35, 474, 220, 221, 222, 314, 357, 358, 100, 101, 102, 239, 240, 241, 646, 477, -230, 458, 588, 135, 374, 595, 596, 207, 761, 641, 649, 643, 942, 655, 930, 663, 823, 133, 307, 838, 426, -32766, 106, 750, 43, 44, 469, 45, 442, 46, 813, 827, 635, 40, 21, 427, 47, 471, 50, 472, 53, 473, 132, 608, 428, 302, 604, -280, -32766, 33, 34, 429, 825, 54, 426, 35, 474, 756, 958, -84, 469, 357, 358, 520, 813, 629, 363, 40, 21, 427, 477, 471, 574, 472, -515, 473, 848, 617, 428, -423, -32766, 11, 647, 33, 34, 429, 825, 54, 445, 35, 474, 462, 285, 577, 1112, 357, 358, 592, 369, 849, 593, 290, 827, 635, 477, 0, 0, 531, 0, 0, 325, 0, 0, 0, 0, 0, 652, 0, 0, 0, 322, 326, 0, 0, 0, 426, 0, 0, 0, 0, 323, 469, 316, 318, -516, 813, 863, 635, 40, 21, 427, 0, 471, 0, 472, 0, 473, 1159, 0, 428, 0, -414, 6, 7, 33, 34, 429, 825, 54, 426, 35, 474, 12, 14, 373, 469, 357, 358, -424, 813, 562, 755, 40, 21, 427, 477, 471, 248, 472, 840, 473, 38, 39, 428, 658, 659, 814, 822, 33, 34, 429, 801, 816, 879, 35, 474, 215, 216, 870, 871, 357, 358, 217, 771, 218, 799, 864, 827, 635, 477, 770, 861, 859, 937, 938, 935, 209, 821, 805, 807, 809, 812, 934, 764, 1101, 1102, 765, 936, 24, 78, 426, 335, 1103, 359, 636, 640, 469, 642, 644, 645, 813, 827, 635, 40, 21, 427, 648, 471, 650, 472, 651, 473, 653, 654, 428, 637, 26, 660, 797, 33, 34, 429, 215, 216, 1227, 35, 474, 1229, 217, 763, 218, 357, 358, 846, 762, 845, 1228, 844, 1061, 832, 477, 558, 209, 1107, 1108, 1109, 1110, 1104, 1105, 398, 1101, 1102, 1049, 843, 1050, 1111, 1106, 830, 1103, 943, 868, 869, 457, 1226, 1158, 219, 1195, 1193, 1178, 1191, 1092, 918, 827, 635, 31, 1199, 1189, 1056, 37, 42, 76, 77, 210, 287, 292, 293, 308, 309, 310, 311, 339, 356, 416, 0, -227, -226, 16, 17, 18, 393, 454, 461, 463, 467, 552, 626, 1052, 558, 1055, 1107, 1108, 1109, 1110, 1104, 1105, 398, 908, 1117, 1051, 1027, 563, 1111, 1106, 1026, 1094, 1058, 0, -433, 1045, 0, 1057, 219, 1060, 1059, 1076, 0, 1192, 1177, 1173, 1190, 1091, 1224, 1118, 1172, 600); + protected $actionCheck = array(2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, 11, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 69, 70, 53, 54, 55, 9, 10, 57, 30, 116, 32, 33, 34, 35, 36, 37, 38, 80, 69, 70, 83, 71, 72, 73, 74, 75, 76, 77, 135, 136, 80, 33, 34, 35, 36, 37, 38, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 31, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 13, 134, 135, 136, 137, 138, 139, 140, 141, 142, 3, 4, 5, 6, 7, 148, 149, 150, 82, 12, 13, 160, 15, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 8, 44, 45, 46, 47, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 80, 33, 34, 35, 36, 50, 51, 13, 9, 10, 11, 56, 128, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 59, 60, 37, 38, 78, 79, 80, 82, 82, 106, 85, 108, 86, 9, 10, 11, 161, 80, 1, 2, 44, 45, 46, 47, 48, 49, 50, 51, 52, 9, 10, 11, 106, 156, 30, 8, 32, 33, 34, 35, 36, 13, 116, 8, 153, 154, 155, 8, 122, 158, 30, 125, 126, 116, 117, 118, 119, 120, 121, 31, 134, 135, 156, 137, 138, 139, 140, 141, 142, 143, 145, 146, 8, 8, 133, 149, 150, 37, 38, 153, 154, 155, 9, 10, 11, 159, 8, 161, 162, 8, 164, 74, 75, 76, 77, 8, 13, 80, 0, 1, 2, 84, 158, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 13, 98, 9, 10, 11, 9, 103, 104, 105, 106, 8, 70, 109, 110, 9, 10, 11, 8, 115, 116, 117, 118, 70, 30, 31, 37, 38, 124, 31, 8, 127, 128, 129, 130, 8, 30, 156, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 116, 117, 118, 119, 120, 121, 8, 82, 8, 74, 156, 157, 158, 33, 34, 80, 1, 2, 8, 84, 163, 82, 87, 88, 89, 133, 91, 70, 93, 152, 95, 108, 82, 98, 158, 8, 113, 160, 103, 104, 105, 106, 13, 108, 109, 110, 123, 122, 113, 157, 115, 116, 117, 118, 9, 10, 11, 156, 71, 124, 157, 122, 127, 128, 129, 130, 37, 38, 8, 82, 160, 156, 13, 134, 156, 30, 156, 32, 33, 34, 35, 158, 157, 148, 159, 122, 161, 80, 1, 74, 133, 156, 157, 158, 156, 80, 1, 2, 159, 84, 161, 82, 87, 88, 89, 157, 91, 157, 93, 122, 95, 161, 106, 98, 108, 100, 101, 102, 103, 104, 105, 106, 159, 116, 109, 110, 9, 10, 11, 13, 115, 116, 117, 118, 9, 10, 11, 160, 16, 124, 81, 122, 127, 128, 129, 130, 159, 30, 161, 32, 33, 34, 13, 134, 156, 30, 156, 32, 33, 153, 153, 154, 155, 70, 9, 10, 11, 80, 80, 74, 160, 156, 157, 158, 14, 80, 37, 38, 159, 84, 161, 152, 87, 88, 89, 30, 91, 160, 93, 14, 95, 37, 38, 98, 16, 100, 101, 102, 103, 104, 105, 106, 70, 82, 109, 110, 82, 33, 34, 35, 115, 116, 117, 118, 16, 1, 2, 10, 11, 124, 160, 85, 127, 128, 129, 130, 9, 10, 11, 82, 11, 14, 157, 9, 10, 11, 161, 30, 85, 53, 54, 55, 154, 57, 157, 31, 122, 30, 161, 30, 157, 156, 157, 158, 30, 69, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 144, 57, 161, 159, 16, 161, 1, 2, 74, 157, 16, 152, 157, 69, 80, 116, 161, 144, 84, 69, 70, 87, 88, 89, 16, 91, 16, 93, 161, 95, 75, 76, 98, 30, 135, 136, 31, 103, 104, 105, 1, 2, 31, 109, 110, 9, 10, 11, 31, 115, 116, 50, 51, 52, 50, 51, 52, 31, 124, 160, 75, 76, 101, 102, 111, 112, 30, 156, 157, 31, 31, 156, 157, 156, 157, 31, 31, 57, 38, 74, 33, 69, 80, 70, 70, 80, 70, 89, 70, 84, 156, 157, 87, 88, 89, 70, 91, 70, 93, 70, 95, 70, 96, 98, 71, 77, 82, 85, 103, 104, 105, 1, 2, 74, 109, 110, 82, 82, 97, 80, 115, 116, 85, 84, 92, 106, 87, 88, 89, 124, 91, 90, 93, 133, 95, 128, 94, 98, 147, 116, 97, 31, 103, 104, 105, 1, 2, 97, 109, 110, 97, 97, 100, 144, 115, 116, 100, 106, 128, 113, 161, 156, 157, 124, -1, -1, 151, -1, -1, 114, -1, -1, -1, -1, -1, 31, -1, -1, -1, 131, 131, -1, -1, -1, 74, -1, -1, -1, -1, 132, 80, 133, 133, 133, 84, 156, 157, 87, 88, 89, -1, 91, -1, 93, -1, 95, 144, -1, 98, -1, 147, 147, 147, 103, 104, 105, 1, 2, 74, 109, 110, 147, 147, 147, 80, 115, 116, 147, 84, 151, 153, 87, 88, 89, 124, 91, 31, 93, 152, 95, 156, 156, 98, 156, 156, 156, 156, 103, 104, 105, 156, 156, 156, 109, 110, 50, 51, 156, 156, 115, 116, 56, 156, 58, 156, 156, 156, 157, 124, 156, 156, 156, 156, 156, 156, 70, 156, 156, 156, 156, 156, 156, 156, 78, 79, 156, 156, 159, 157, 74, 157, 86, 157, 157, 157, 80, 157, 157, 157, 84, 156, 157, 87, 88, 89, 157, 91, 157, 93, 157, 95, 157, 157, 98, 157, 159, 158, 158, 103, 104, 105, 50, 51, 158, 109, 110, 158, 56, 158, 58, 115, 116, 158, 158, 158, 158, 158, 158, 158, 124, 135, 70, 137, 138, 139, 140, 141, 142, 143, 78, 79, 158, 158, 158, 149, 150, 158, 86, 158, 158, 158, 158, 158, 164, 159, 158, 158, 158, 158, 158, 158, 156, 157, 159, 158, 158, 163, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, -1, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 135, 160, 137, 138, 139, 140, 141, 142, 143, 160, 160, 160, 160, 160, 149, 150, 160, 160, 163, -1, 162, 162, -1, 163, 159, 163, 163, 163, -1, 163, 163, 163, 163, 163, 163, 163, 163, 163); + protected $actionBase = array(0, 229, 310, 390, 470, 103, 325, 325, 785, -2, -2, 149, -2, -2, -2, 660, 765, 799, 765, 589, 694, 870, 870, 870, 252, 404, 404, 404, 514, 177, 177, 918, 434, 118, 295, 313, 240, 491, 491, 491, 491, 138, 138, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 89, 206, 775, 550, 535, 776, 777, 778, 912, 709, 913, 859, 862, 700, 863, 864, 865, 866, 867, 858, 871, 935, 872, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 322, 592, 285, 319, 232, 44, 691, 691, 691, 691, 691, 691, 691, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 582, 530, 530, 530, 594, 860, 658, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 500, -21, -21, 492, 702, 420, 355, 216, 549, 151, 26, 26, 331, 331, 331, 331, 331, 46, 46, 5, 5, 5, 5, 153, 188, 188, 188, 188, 121, 121, 121, 121, 314, 314, 394, 394, 362, 300, 298, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 67, 656, 656, 659, 659, 522, 554, 554, 554, 554, 679, -59, -59, 381, 462, 462, 462, 528, 717, 854, 382, 382, 382, 382, 382, 382, 561, 561, 561, -3, -3, -3, 692, 115, 137, 115, 137, 678, 732, 450, 732, 338, 677, -15, 510, 812, 468, 707, 856, 711, 857, 572, 735, 267, 529, 654, 674, 463, 529, 529, 529, 529, 654, 610, 640, 608, 463, 529, 463, 718, 323, 496, 89, 570, 507, 675, 779, 293, 670, 781, 290, 373, 332, 566, 278, 435, 733, 784, 914, 917, 385, 715, 675, 675, 675, 352, 511, 278, -8, 605, 605, 605, 605, 156, 605, 605, 605, 605, 251, 276, 375, 402, 780, 657, 657, 690, 869, 783, 783, 657, 689, 657, 690, 874, 874, 874, 874, 657, 657, 657, 657, 783, 783, 783, 688, 783, 239, 703, 704, 704, 874, 742, 743, 657, 657, 712, 783, 783, 783, 712, 695, 874, 701, 741, 277, 783, 874, 672, 689, 672, 657, 701, 672, 689, 689, 672, 22, 666, 668, 873, 875, 887, 791, 662, 685, 879, 880, 876, 878, 811, 699, 744, 497, 669, 671, 673, 680, 719, 682, 713, 674, 667, 667, 667, 655, 720, 655, 667, 667, 667, 667, 667, 667, 667, 667, 868, 646, 731, 714, 653, 745, 553, 573, 792, 664, 814, 900, 893, 919, 920, 881, 898, 655, 916, 739, 247, 643, 882, 813, 788, 655, 883, 655, 794, 655, 902, 820, 686, 823, 825, 667, 910, 921, 923, 924, 925, 927, 928, 929, 930, 684, 931, 749, 696, 894, 299, 877, 718, 729, 705, 790, 750, 829, 328, 932, 830, 655, 655, 795, 786, 655, 796, 751, 740, 890, 756, 895, 933, 664, 708, 896, 655, 706, 831, 934, 328, 681, 683, 888, 661, 757, 886, 911, 885, 803, 761, 649, 663, 832, 833, 834, 693, 763, 891, 892, 889, 764, 805, 665, 807, 768, 697, 835, 809, 884, 769, 848, 849, 899, 676, 730, 710, 698, 687, 810, 850, 897, 770, 771, 772, 853, 773, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, -2, -2, -2, -2, 0, 0, -2, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, -21, -21, -21, -21, 599, -21, -21, -21, -21, -21, -21, -21, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, -21, 599, 599, 599, -21, 382, -21, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 599, 0, 0, 599, -21, 599, -21, 599, -21, -21, 599, 599, 599, 599, 599, 599, 599, -21, -21, -21, -21, -21, -21, 0, 561, 561, 561, 561, -21, -21, -21, -21, 382, 382, 382, 382, 382, 382, 259, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 561, 561, -3, -3, 382, 382, 382, 382, 382, 259, 382, 382, 463, 689, 689, 689, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 463, 0, 463, 0, 382, 463, 689, 463, 657, 137, 689, 689, 463, 783, 616, 616, 616, 616, 328, 278, 0, 0, 689, 689, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 667, 247, 0, 705, 335, 0, 0, 0, 0, 0, 0, 705, 335, 347, 347, 0, 684, 667, 667, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328); + protected $actionDefault = array(3, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 544, 544, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 299, 299, 299, 32767, 32767, 32767, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 32767, 32767, 32767, 32767, 32767, 32767, 383, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 389, 549, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 364, 365, 367, 368, 298, 552, 533, 247, 390, 548, 297, 249, 327, 503, 32767, 32767, 32767, 329, 122, 258, 203, 502, 125, 296, 234, 382, 384, 328, 303, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 302, 458, 361, 360, 359, 460, 32767, 459, 496, 496, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 325, 487, 486, 326, 456, 330, 457, 333, 461, 464, 331, 332, 349, 350, 347, 348, 351, 462, 463, 480, 481, 478, 479, 301, 352, 353, 354, 355, 482, 483, 484, 485, 32767, 32767, 543, 543, 32767, 32767, 282, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 340, 341, 471, 472, 32767, 238, 238, 238, 238, 283, 238, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 335, 336, 334, 466, 467, 465, 432, 32767, 32767, 32767, 434, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 504, 32767, 32767, 32767, 32767, 32767, 517, 421, 171, 32767, 413, 32767, 171, 171, 171, 171, 32767, 222, 224, 167, 32767, 171, 32767, 490, 32767, 32767, 32767, 32767, 522, 345, 32767, 32767, 116, 32767, 32767, 32767, 559, 32767, 517, 32767, 116, 32767, 32767, 32767, 32767, 358, 337, 338, 339, 32767, 32767, 521, 515, 474, 475, 476, 477, 32767, 468, 469, 470, 473, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 429, 435, 435, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 520, 519, 32767, 414, 498, 188, 186, 186, 32767, 208, 208, 32767, 32767, 190, 491, 510, 32767, 190, 173, 32767, 400, 175, 498, 32767, 32767, 240, 32767, 240, 32767, 400, 240, 32767, 32767, 240, 32767, 415, 439, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 379, 380, 493, 506, 32767, 507, 32767, 413, 343, 344, 346, 322, 32767, 324, 369, 370, 371, 372, 373, 374, 375, 377, 32767, 419, 32767, 422, 32767, 32767, 32767, 257, 32767, 557, 32767, 32767, 306, 557, 32767, 32767, 32767, 551, 32767, 32767, 300, 32767, 32767, 32767, 32767, 253, 32767, 169, 32767, 541, 32767, 558, 32767, 515, 32767, 342, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 516, 32767, 32767, 32767, 32767, 229, 32767, 452, 32767, 116, 32767, 32767, 32767, 189, 32767, 32767, 304, 248, 32767, 32767, 550, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 114, 32767, 170, 32767, 32767, 32767, 191, 32767, 32767, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 295, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 515, 32767, 32767, 233, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 415, 32767, 276, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 127, 127, 3, 127, 127, 260, 3, 260, 127, 260, 260, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 216, 219, 208, 208, 164, 127, 127, 268); + protected $goto = array(166, 140, 140, 140, 166, 187, 168, 144, 147, 141, 142, 143, 149, 163, 163, 163, 163, 144, 144, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 138, 159, 160, 161, 162, 184, 139, 185, 493, 494, 377, 495, 499, 500, 501, 502, 503, 504, 505, 506, 971, 164, 145, 146, 148, 171, 176, 186, 203, 253, 256, 258, 260, 263, 264, 265, 266, 267, 268, 269, 277, 278, 279, 280, 303, 304, 328, 329, 330, 394, 395, 396, 542, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 150, 151, 152, 167, 153, 169, 154, 204, 170, 155, 156, 157, 205, 158, 136, 622, 560, 758, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1114, 630, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 759, 519, 530, 508, 657, 555, 1184, 350, 508, 591, 787, 1184, 889, 613, 614, 885, 618, 619, 625, 627, 632, 634, 751, 856, 856, 856, 856, 851, 857, 174, 892, 892, 1206, 1206, 177, 178, 179, 401, 402, 403, 404, 173, 202, 206, 208, 257, 259, 261, 262, 270, 271, 272, 273, 274, 275, 281, 282, 283, 284, 305, 306, 331, 332, 333, 406, 407, 408, 409, 175, 180, 254, 255, 181, 182, 183, 497, 497, 497, 497, 497, 497, 818, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 509, 585, 862, 601, 602, 509, 544, 545, 546, 547, 548, 549, 550, 551, 553, 586, 338, 559, 321, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 400, 607, 536, 536, 568, 532, 537, 534, 534, 496, 498, 524, 540, 569, 572, 583, 590, 298, 296, 296, 296, 298, 289, 299, 611, 1210, 510, 615, 910, 948, 375, 510, 437, 437, 437, 437, 437, 437, 594, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 1078, 949, 388, 1176, 561, 1078, 899, 899, 899, 899, 378, 899, 899, 1218, 1218, 1164, 754, 351, 352, 757, 1078, 1078, 1078, 1078, 1078, 1078, 1070, 384, 384, 384, 606, 1218, 878, 860, 858, 860, 656, 466, 511, 887, 882, 754, 384, 754, 384, 969, 384, 391, 385, 587, 353, 414, 384, 1232, 1203, 541, 1198, 1198, 1198, 567, 1095, 386, 386, 386, 1020, 916, 514, 1030, 19, 15, 372, 776, 916, 941, 448, 450, 633, 896, 1217, 1217, 1115, 616, 939, 841, 554, 905, 386, 340, 1071, 1074, 1075, 399, 1070, 1183, 914, 23, 1217, 774, 1183, 543, 603, 389, 1220, 1072, 1175, 1072, 518, 1200, 1200, 1200, 575, 605, 1073, 343, 522, 533, 518, 518, 773, 1090, 1089, 13, 578, 582, 628, 3, 4, 783, 1067, 772, 514, 1062, 1182, 784, 661, 919, 451, 866, 573, 957, 1161, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 528, 0, 0, 0, 0, 513, 0, 528, 0, 0, 0, 0, 610, 512, 515, 439, 440, 1068, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 1225, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301); + protected $gotoCheck = array(43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 57, 69, 15, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 128, 9, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 16, 102, 32, 69, 32, 32, 120, 72, 69, 32, 29, 120, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 6, 69, 69, 69, 69, 69, 69, 27, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 119, 119, 119, 119, 119, 119, 50, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 67, 33, 67, 67, 119, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 127, 57, 127, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 51, 51, 51, 51, 51, 51, 110, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5, 5, 5, 5, 5, 5, 5, 63, 142, 124, 63, 84, 98, 63, 124, 57, 57, 57, 57, 57, 57, 129, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 98, 12, 82, 12, 57, 57, 57, 57, 57, 46, 57, 57, 144, 144, 133, 11, 72, 72, 14, 57, 57, 57, 57, 57, 57, 82, 13, 13, 13, 49, 144, 14, 14, 14, 14, 14, 57, 14, 14, 14, 11, 13, 11, 13, 102, 13, 48, 11, 70, 70, 70, 13, 13, 140, 2, 9, 9, 9, 2, 34, 125, 125, 125, 103, 13, 13, 34, 34, 34, 34, 25, 13, 8, 8, 8, 8, 79, 143, 143, 8, 8, 8, 9, 34, 81, 125, 18, 82, 82, 82, 125, 82, 121, 85, 34, 143, 24, 121, 47, 34, 17, 143, 82, 82, 82, 47, 121, 121, 121, 40, 40, 82, 58, 58, 58, 47, 47, 23, 126, 126, 58, 62, 62, 62, 30, 30, 23, 116, 23, 13, 114, 121, 26, 74, 86, 65, 71, 66, 100, 132, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, 9, -1, 9, -1, -1, -1, -1, 13, 9, 9, 9, 9, 13, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); + protected $gotoBase = array(0, 0, -173, 0, 0, 353, 216, 0, 477, 149, 0, 110, 71, 117, 426, 112, 203, 170, 181, 0, 0, 0, 0, 168, 164, 143, 121, 27, 0, 205, -127, 0, -429, 279, 51, 0, 0, 0, 0, 0, 481, 0, 0, -24, 0, 0, 379, 484, 163, 153, 268, 75, 0, 0, 0, 0, 0, 107, 161, 0, 0, 0, 222, -77, 0, 104, 96, -344, 0, -94, 135, 123, -232, 0, 169, 0, 0, -50, 0, 173, 0, 180, 64, 0, 360, 139, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 124, 0, 165, 166, 0, 0, 0, 0, 0, 87, 340, 259, 0, 0, 120, 0, 177, 0, 0, -5, -91, 200, 0, 0, 84, 154, 211, -21, -48, 188, 0, 0, 93, 213, 0, 0, 0, 0, 0, 0, 175, 0, 358, 167, 102, 0, 0); + protected $gotoDefault = array(-32768, 468, 665, 2, 666, 836, 741, 749, 598, 482, 631, 581, 380, 1194, 793, 794, 795, 381, 368, 766, 379, 410, 405, 782, 775, 777, 785, 172, 411, 788, 1, 790, 517, 826, 1021, 365, 798, 366, 589, 800, 526, 802, 803, 137, 382, 383, 527, 483, 390, 576, 817, 276, 387, 819, 367, 820, 829, 371, 465, 455, 460, 529, 556, 609, 432, 447, 570, 564, 535, 1087, 565, 865, 349, 873, 662, 881, 884, 484, 557, 895, 452, 903, 1100, 397, 909, 915, 920, 291, 923, 417, 412, 584, 928, 929, 5, 933, 623, 624, 8, 312, 956, 599, 970, 420, 1040, 1042, 485, 486, 521, 459, 507, 525, 487, 1063, 441, 413, 1066, 433, 488, 489, 434, 435, 1084, 355, 1169, 354, 449, 320, 1156, 579, 1119, 456, 1209, 1165, 348, 490, 491, 376, 1188, 392, 1204, 438, 1211, 1219, 344, 539, 566); protected $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 12, 12, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 18, 18, 19, 19, 21, 21, 17, 17, 22, 22, 23, 23, 24, 24, 25, 25, 20, 20, 26, 28, 28, 29, 30, 30, 32, 31, 31, 31, 31, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 14, 14, 54, 54, 56, 55, 55, 48, 48, 58, 58, 59, 59, 60, 60, 61, 61, 15, 16, 16, 16, 64, 64, 64, 65, 65, 68, 68, 66, 66, 70, 70, 41, 41, 50, 50, 53, 53, 53, 52, 52, 71, 42, 42, 42, 42, 72, 72, 73, 73, 74, 74, 39, 39, 35, 35, 75, 37, 37, 76, 36, 36, 38, 38, 49, 49, 49, 62, 62, 78, 78, 79, 79, 81, 81, 81, 80, 80, 63, 63, 82, 82, 82, 83, 83, 84, 84, 84, 44, 44, 85, 85, 85, 45, 45, 86, 86, 87, 87, 67, 88, 88, 88, 88, 93, 93, 94, 94, 95, 95, 95, 95, 95, 96, 97, 97, 92, 92, 89, 89, 91, 91, 99, 99, 98, 98, 98, 98, 98, 98, 90, 90, 101, 100, 100, 46, 46, 40, 40, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 34, 34, 47, 47, 106, 106, 107, 107, 107, 107, 113, 102, 102, 109, 109, 115, 115, 116, 117, 118, 118, 118, 118, 118, 118, 118, 69, 69, 57, 57, 57, 57, 103, 103, 122, 122, 119, 119, 123, 123, 123, 123, 104, 104, 104, 108, 108, 108, 114, 114, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 27, 27, 27, 27, 27, 27, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 112, 112, 105, 105, 105, 105, 129, 129, 132, 132, 131, 131, 133, 133, 51, 51, 51, 51, 135, 135, 134, 134, 134, 134, 134, 136, 136, 121, 121, 124, 124, 120, 120, 138, 137, 137, 137, 137, 125, 125, 125, 125, 111, 111, 126, 126, 126, 126, 77, 139, 139, 140, 140, 140, 110, 110, 141, 141, 142, 142, 142, 142, 142, 127, 127, 127, 127, 144, 145, 143, 143, 143, 143, 143, 143, 143, 146, 146, 146); - protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 2, 3, 1, 1, 7, 6, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 2, 3, 1, 3, 3, 1, 3, 2, 0, 1, 1, 1, 1, 1, 3, 5, 8, 3, 5, 9, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 1, 2, 2, 5, 7, 9, 5, 6, 3, 3, 2, 2, 1, 1, 1, 0, 2, 8, 0, 4, 1, 3, 0, 1, 0, 1, 0, 1, 1, 1, 10, 7, 6, 5, 1, 2, 2, 0, 2, 0, 2, 0, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 1, 4, 0, 2, 3, 0, 2, 4, 0, 2, 0, 3, 1, 2, 1, 1, 0, 1, 3, 4, 6, 1, 1, 1, 0, 1, 0, 2, 2, 3, 3, 1, 3, 1, 2, 2, 3, 1, 1, 2, 4, 3, 1, 1, 3, 2, 0, 1, 3, 3, 9, 3, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 3, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, 0, 1, 1, 3, 3, 4, 4, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 5, 4, 3, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 2, 1, 2, 10, 11, 3, 3, 2, 4, 4, 3, 4, 4, 4, 4, 7, 3, 2, 0, 4, 1, 3, 2, 1, 2, 2, 4, 6, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 0, 2, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 1, 4, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 3, 1, 3, 1, 1, 3, 3, 0, 2, 0, 1, 3, 1, 3, 1, 1, 1, 1, 1, 6, 4, 3, 4, 2, 4, 4, 1, 3, 1, 2, 1, 1, 4, 1, 1, 3, 6, 4, 4, 4, 4, 1, 4, 0, 1, 1, 3, 1, 1, 4, 3, 1, 1, 1, 0, 0, 2, 3, 1, 3, 1, 4, 2, 2, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 6, 3, 1, 1, 1); + protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 1, 3, 1, 1, 8, 7, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 2, 3, 1, 3, 3, 1, 3, 2, 0, 1, 1, 1, 1, 1, 3, 5, 8, 3, 5, 9, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 1, 2, 2, 5, 7, 9, 5, 6, 3, 3, 2, 2, 1, 1, 1, 0, 2, 8, 0, 4, 1, 3, 0, 1, 0, 1, 0, 1, 1, 1, 10, 7, 6, 5, 1, 2, 2, 0, 2, 0, 2, 0, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 1, 4, 0, 2, 3, 0, 2, 4, 0, 2, 0, 3, 1, 2, 1, 1, 0, 1, 3, 4, 6, 1, 1, 1, 0, 1, 0, 2, 2, 3, 3, 1, 3, 1, 2, 2, 3, 1, 1, 2, 4, 3, 1, 1, 3, 2, 0, 1, 3, 3, 9, 3, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 3, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, 0, 1, 1, 3, 3, 4, 4, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 5, 4, 3, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 2, 1, 2, 10, 11, 3, 3, 2, 4, 4, 3, 4, 4, 4, 4, 7, 3, 2, 0, 4, 1, 3, 2, 1, 2, 2, 4, 6, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 0, 2, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 1, 4, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 3, 1, 3, 1, 1, 3, 3, 0, 2, 0, 1, 3, 1, 3, 1, 1, 1, 1, 1, 6, 4, 3, 4, 2, 4, 4, 1, 3, 1, 2, 1, 1, 4, 1, 1, 3, 6, 4, 4, 4, 4, 1, 4, 0, 1, 1, 3, 1, 1, 4, 3, 1, 1, 1, 0, 0, 2, 3, 1, 3, 1, 4, 2, 2, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 6, 3, 1, 1, 1); protected function initReduceCallbacks() { $this->reduceCallbacks = [0 => function ($stackPos) { @@ -264,7 +264,7 @@ protected function initReduceCallbacks() }, 101 => function ($stackPos) { $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 102 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 103 => function ($stackPos) { $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 104 => function ($stackPos) { @@ -272,9 +272,9 @@ protected function initReduceCallbacks() }, 105 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_CONSTANT; }, 106 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 2)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 107 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 2)], $this->semStack[$stackPos - (7 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 108 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; diff --git a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php index e042bd333..1619488fd 100644 --- a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +++ b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php @@ -23,20 +23,20 @@ class Php7 extends \PhpParser\ParserAbstract protected $errorSymbol = 1; protected $defaultAction = -32766; protected $unexpectedTokenRule = 32767; - protected $YY2TBLSTATE = 434; - protected $numNonLeafStates = 736; + protected $YY2TBLSTATE = 435; + protected $numNonLeafStates = 737; protected $symbolToName = array("EOF", "error", "T_THROW", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", "T_LOGICAL_AND", "T_PRINT", "T_YIELD", "T_DOUBLE_ARROW", "T_YIELD_FROM", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", "T_POW_EQUAL", "T_COALESCE_EQUAL", "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", "'^'", "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG", "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", "'>'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'{'", "'}'", "'('", "')'", "'`'", "'\"'", "'\$'"); protected $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 166, 168, 167, 55, 168, 168, 163, 164, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 159, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 160, 36, 168, 165, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 161, 35, 162, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158); - protected $action = array(133, 134, 135, 579, 136, 137, 0, 748, 749, 750, 138, 38, 327, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 102, 103, 104, 105, 106, 1109, 1110, 1111, 1108, 1107, 1106, 1112, 742, 741, -32766, 1232, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 2, 107, 108, 109, 751, 274, 381, 380, -32766, -32766, -32766, -32766, 104, 105, 106, 1024, 422, 110, 265, 139, 403, 755, 756, 757, 758, 466, 467, 428, 938, 291, -32766, 287, -32766, -32766, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 789, 580, 790, 791, 792, 793, 781, 782, 344, 345, 784, 785, 770, 771, 772, 774, 775, 776, 355, 816, 817, 818, 819, 820, 581, 777, 778, 582, 583, 810, 801, 799, 800, 813, 796, 797, 687, -545, 584, 585, 795, 586, 587, 588, 589, 590, 591, -328, -593, -367, 1234, -367, 798, 592, 593, -593, 140, -32766, -32766, -32766, 133, 134, 135, 579, 136, 137, 1057, 748, 749, 750, 138, 38, 688, 1020, 1019, 1018, 1021, 390, -32766, 7, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 379, 380, 1033, 689, 690, 742, 741, -32766, -32766, -32766, 422, -545, -545, -590, -32766, -32766, -32766, 1032, -32766, 127, -590, 1236, 1235, 1237, 1318, 751, -545, 290, -32766, 283, -32766, -32766, -32766, -32766, -32766, 1236, 1235, 1237, -545, 265, 139, 403, 755, 756, 757, 758, 16, 481, 428, 458, 459, 460, 298, 722, 35, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 789, 580, 790, 791, 792, 793, 781, 782, 344, 345, 784, 785, 770, 771, 772, 774, 775, 776, 355, 816, 817, 818, 819, 820, 581, 777, 778, 582, 583, 810, 801, 799, 800, 813, 796, 797, 129, 824, 584, 585, 795, 586, 587, 588, 589, 590, 591, -328, 83, 84, 85, -593, 798, 592, 593, -593, 149, 773, 743, 744, 745, 746, 747, 824, 748, 749, 750, 786, 787, 37, 145, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 291, 274, 835, 254, 1109, 1110, 1111, 1108, 1107, 1106, 1112, -590, 860, 110, 861, -590, 482, 751, -32766, -32766, -32766, -32766, -32766, 142, 603, 1085, 742, 741, 1262, 326, 987, 752, 753, 754, 755, 756, 757, 758, 309, -32766, 822, -32766, -32766, -32766, -32766, 242, 553, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 789, 812, 790, 791, 792, 793, 781, 782, 783, 811, 784, 785, 770, 771, 772, 774, 775, 776, 815, 816, 817, 818, 819, 820, 821, 777, 778, 779, 780, 810, 801, 799, 800, 813, 796, 797, 311, 940, 788, 794, 795, 802, 803, 805, 804, 806, 807, 323, 609, 1274, 1033, 833, 798, 809, 808, 50, 51, 52, 512, 53, 54, 860, 241, 861, 918, 55, 56, -111, 57, -32766, -32766, -32766, -111, 826, -111, 290, 1302, 1347, 356, 305, 1348, 339, -111, -111, -111, -111, -111, -111, -111, -111, -32766, -194, -32766, -32766, -32766, -193, 956, 957, 829, -86, 988, 958, 834, 58, 59, 340, 428, 952, -544, 60, 832, 61, 247, 248, 62, 63, 64, 65, 66, 67, 68, 69, 1241, 28, 267, 70, 444, 513, -342, -32766, 141, 1268, 1269, 514, 918, 833, 326, -272, 918, 1266, 42, 25, 515, 940, 516, 14, 517, 908, 518, 828, 369, 519, 520, 373, 709, 1033, 44, 45, 445, 376, 375, 388, 46, 521, 712, -86, 440, 1101, 367, 338, -543, 441, -544, -544, 830, 1227, 442, 523, 524, 525, 290, 1236, 1235, 1237, 361, 1030, 443, -544, 1087, 526, 527, 839, 1255, 1256, 1257, 1258, 1252, 1253, 297, -544, 151, -550, -584, 833, 1259, 1254, -584, 1033, 1236, 1235, 1237, 298, -154, -154, -154, 152, 71, 908, 321, 322, 326, 908, 920, 1030, 707, 833, 154, -154, 1337, -154, 155, -154, 283, -154, -543, -543, 82, 1232, 1086, 1322, 734, 156, 326, 374, 158, 1033, 1321, -194, -79, -543, -88, -193, 742, 741, 956, 957, 653, 26, -32766, 522, -51, -543, 33, -549, 894, 952, -111, -111, -111, 32, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, -59, 75, 28, 672, 673, 326, -58, 36, 250, 920, 124, 707, 125, 920, 833, 707, -154, 130, 1266, 131, -32766, -547, 144, -542, 150, 406, 1234, 377, 378, 1146, 1148, 382, 383, -32766, -32766, -32766, -85, -32766, 1056, -32766, -542, -32766, 644, 645, -32766, 159, 160, 161, 1232, -32766, -32766, -32766, 162, -79, 1227, -32766, -32766, 742, 741, 163, -302, -32766, 419, -75, -4, 918, -73, 287, 526, 527, -32766, 1255, 1256, 1257, 1258, 1252, 1253, -72, -71, -70, -69, -68, -67, 1259, 1254, -547, -547, -542, -542, 742, 741, -66, -47, -18, -32766, 73, 148, 918, 322, 326, 1234, 273, -542, 284, -542, -542, 723, -32766, -32766, -32766, 726, -32766, -547, -32766, -542, -32766, 917, 147, -32766, -542, 288, 289, -298, -32766, -32766, -32766, -32766, 713, 279, -32766, -32766, -542, 1234, 280, 285, -32766, 419, 48, 286, -32766, -32766, -32766, 332, -32766, -32766, -32766, 292, -32766, 908, 293, -32766, 934, 274, 1030, 918, -32766, -32766, -32766, 110, 682, 132, -32766, -32766, 833, 146, -32766, 559, -32766, 419, 659, 374, 824, 435, 1349, 74, 1033, -32766, 296, 654, 1116, 908, 956, 957, 306, 714, 698, 522, 555, 303, 13, 310, 852, 952, -111, -111, -111, 700, 463, 492, 953, 283, 299, 300, -32766, 49, 675, 918, 304, 660, 1234, 676, 936, 1273, -32766, 10, 1263, -32766, -32766, -32766, 642, -32766, 918, -32766, 920, -32766, 707, -4, -32766, 126, 34, 918, 565, -32766, -32766, -32766, -32766, 0, 908, -32766, -32766, 0, 1234, 918, 0, -32766, 419, 0, 0, -32766, -32766, -32766, 717, -32766, -32766, -32766, 920, -32766, 707, 1033, -32766, 724, 1275, 0, 487, -32766, -32766, -32766, -32766, 301, 302, -32766, -32766, -507, 1234, 571, -497, -32766, 419, 607, 8, -32766, -32766, -32766, 372, -32766, -32766, -32766, 17, -32766, 908, 371, -32766, 832, 298, 320, 128, -32766, -32766, -32766, 40, 370, 41, -32766, -32766, 908, -250, -250, -250, -32766, 419, 731, 374, 973, 908, 707, 732, 899, -32766, 997, 974, 728, 981, 956, 957, 971, 908, 982, 522, 897, 969, 1090, 1093, 894, 952, -111, -111, -111, 28, 1094, 1091, 1092, -249, -249, -249, 1241, 1098, 708, 374, 844, 833, 1288, 1306, 1340, 1266, 647, 1267, 711, 715, 956, 957, 716, 1241, 718, 522, 920, 719, 707, -250, 894, 952, -111, -111, -111, 720, -16, 721, 725, 710, -511, 920, 895, 707, -578, 1232, 1344, 1346, 855, 854, 920, 1227, 707, -577, 863, 946, 989, 862, 1345, 945, 943, 944, 920, 947, 707, -249, 527, 1218, 1255, 1256, 1257, 1258, 1252, 1253, 927, 937, 925, 979, 980, 631, 1259, 1254, 1343, 1300, -32766, 1289, 1307, 833, 1316, -275, 1234, -576, 73, -550, -549, 322, 326, -32766, -32766, -32766, -548, -32766, -491, -32766, 833, -32766, 1, 29, -32766, 30, 39, 43, 47, -32766, -32766, -32766, 72, 76, 77, -32766, -32766, 1232, -111, -111, 78, -32766, 419, -111, 79, 80, 81, 143, 153, -111, -32766, 157, 246, 328, 1232, -111, -111, 356, -32766, 357, -111, 358, 359, 360, 361, 362, -111, 363, 364, 365, 366, 368, 436, 0, -273, -32766, -272, 19, 20, 298, 21, 22, 24, 405, 75, 1203, 483, 484, 326, 491, 0, 494, 495, 496, 497, 501, 298, 502, 503, 510, 693, 75, 0, 1245, 1186, 326, 1264, 1059, 1058, 1039, 1222, 1035, -277, -103, 18, 23, 27, 295, 404, 600, 604, 633, 699, 1190, 1240, 1187, 1319, 0, 0, 0, 326); + protected $action = array(133, 134, 135, 580, 136, 137, 0, 749, 750, 751, 138, 38, 327, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 102, 103, 104, 105, 106, 1110, 1111, 1112, 1109, 1108, 1107, 1113, 743, 742, -32766, 1233, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 2, 107, 108, 109, 752, 274, 381, 380, -32766, -32766, -32766, -32766, 104, 105, 106, 1025, 423, 110, 265, 139, 402, 756, 757, 758, 759, 467, 468, 429, 939, 291, -32766, 287, -32766, -32766, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 790, 581, 791, 792, 793, 794, 782, 783, 344, 345, 785, 786, 771, 772, 773, 775, 776, 777, 355, 817, 818, 819, 820, 821, 582, 778, 779, 583, 584, 811, 802, 800, 801, 814, 797, 798, 688, -545, 585, 586, 796, 587, 588, 589, 590, 591, 592, -328, -593, -367, 1235, -367, 799, 593, 594, -593, 140, -32766, -32766, -32766, 133, 134, 135, 580, 136, 137, 1058, 749, 750, 751, 138, 38, 689, 1021, 1020, 1019, 1022, 390, -32766, 7, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 379, 380, 1034, 690, 691, 743, 742, -32766, -32766, -32766, 423, -545, -545, -590, -32766, -32766, -32766, 1033, -32766, 127, -590, 1237, 1236, 1238, 1319, 752, -545, 290, -32766, 283, -32766, -32766, -32766, -32766, -32766, 1237, 1236, 1238, -545, 265, 139, 402, 756, 757, 758, 759, 16, 482, 429, 459, 460, 461, 298, 723, 35, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 790, 581, 791, 792, 793, 794, 782, 783, 344, 345, 785, 786, 771, 772, 773, 775, 776, 777, 355, 817, 818, 819, 820, 821, 582, 778, 779, 583, 584, 811, 802, 800, 801, 814, 797, 798, 129, 825, 585, 586, 796, 587, 588, 589, 590, 591, 592, -328, 83, 84, 85, -593, 799, 593, 594, -593, 149, 774, 744, 745, 746, 747, 748, 825, 749, 750, 751, 787, 788, 37, 145, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 291, 274, 836, 254, 1110, 1111, 1112, 1109, 1108, 1107, 1113, -590, 861, 110, 862, -590, 483, 752, -32766, -32766, -32766, -32766, -32766, 142, 604, 1086, 743, 742, 1263, 326, 988, 753, 754, 755, 756, 757, 758, 759, 309, -32766, 823, -32766, -32766, -32766, -32766, 242, 554, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 790, 813, 791, 792, 793, 794, 782, 783, 784, 812, 785, 786, 771, 772, 773, 775, 776, 777, 816, 817, 818, 819, 820, 821, 822, 778, 779, 780, 781, 811, 802, 800, 801, 814, 797, 798, 311, 941, 789, 795, 796, 803, 804, 806, 805, 807, 808, 323, 610, 1275, 1034, 834, 799, 810, 809, 50, 51, 52, 513, 53, 54, 861, 241, 862, 919, 55, 56, -111, 57, -32766, -32766, -32766, -111, 827, -111, 290, 1303, 1348, 356, 305, 1349, 339, -111, -111, -111, -111, -111, -111, -111, -111, -32766, -194, -32766, -32766, -32766, -193, 957, 958, 830, -86, 989, 959, 835, 58, 59, 340, 429, 953, -544, 60, 833, 61, 247, 248, 62, 63, 64, 65, 66, 67, 68, 69, 1242, 28, 267, 70, 445, 514, -342, -32766, 141, 1269, 1270, 515, 919, 834, 326, -272, 919, 1267, 42, 25, 516, 941, 517, 14, 518, 909, 519, 829, 369, 520, 521, 373, 710, 1034, 44, 45, 446, 376, 375, 388, 46, 522, 713, -86, 441, 1102, 367, 338, -543, 442, -544, -544, 831, 1228, 443, 524, 525, 526, 290, 1237, 1236, 1238, 361, 1031, 444, -544, 1088, 527, 528, 840, 1256, 1257, 1258, 1259, 1253, 1254, 297, -544, 151, -550, -584, 834, 1260, 1255, -584, 1034, 1237, 1236, 1238, 298, -154, -154, -154, 152, 71, 909, 321, 322, 326, 909, 921, 1031, 708, 834, 154, -154, 1338, -154, 155, -154, 283, -154, -543, -543, 82, 1233, 1087, 1323, 735, 156, 326, 374, 158, 1034, 1322, -194, -79, -543, -88, -193, 743, 742, 957, 958, 654, 26, -32766, 523, -51, -543, 33, -549, 895, 953, -111, -111, -111, 32, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, -59, 75, 28, 673, 674, 326, -58, 36, 250, 921, 124, 708, 125, 921, 834, 708, -154, 130, 1267, 131, -32766, -547, 144, -542, 150, 406, 1235, 377, 378, 1147, 1149, 382, 383, -32766, -32766, -32766, -85, -32766, 1057, -32766, -542, -32766, 645, 646, -32766, 159, 160, 161, 1233, -32766, -32766, -32766, 162, -79, 1228, -32766, -32766, 743, 742, 163, -302, -32766, 420, -75, -4, 919, -73, 287, 527, 528, -32766, 1256, 1257, 1258, 1259, 1253, 1254, -72, -71, -70, -69, -68, -67, 1260, 1255, -547, -547, -542, -542, 743, 742, -66, -47, -18, -32766, 73, 148, 919, 322, 326, 1235, 273, -542, 284, -542, -542, 724, -32766, -32766, -32766, 727, -32766, -547, -32766, -542, -32766, 918, 147, -32766, -542, 288, 289, -298, -32766, -32766, -32766, -32766, 714, 279, -32766, -32766, -542, 1235, 280, 285, -32766, 420, 48, 286, -32766, -32766, -32766, 332, -32766, -32766, -32766, 292, -32766, 909, 293, -32766, 935, 274, 1031, 919, -32766, -32766, -32766, 110, 683, 132, -32766, -32766, 834, 146, -32766, 560, -32766, 420, 660, 374, 825, 436, 1350, 74, 1034, -32766, 296, 655, 1117, 909, 957, 958, 306, 715, 699, 523, 556, 303, 13, 310, 853, 953, -111, -111, -111, 701, 464, 493, 954, 283, 299, 300, -32766, 49, 676, 919, 304, 661, 1235, 677, 937, 1274, -32766, 10, 1264, -32766, -32766, -32766, 643, -32766, 919, -32766, 921, -32766, 708, -4, -32766, 126, 34, 919, 566, -32766, -32766, -32766, -32766, 0, 909, -32766, -32766, 0, 1235, 919, 0, -32766, 420, 0, 0, -32766, -32766, -32766, 718, -32766, -32766, -32766, 921, -32766, 708, 1034, -32766, 725, 1276, 0, 488, -32766, -32766, -32766, -32766, 301, 302, -32766, -32766, -507, 1235, 572, -497, -32766, 420, 608, 8, -32766, -32766, -32766, 372, -32766, -32766, -32766, 17, -32766, 909, 371, -32766, 833, 298, 320, 128, -32766, -32766, -32766, 40, 370, 41, -32766, -32766, 909, -250, -250, -250, -32766, 420, 732, 374, 974, 909, 708, 733, 900, -32766, 998, 975, 405, 982, 957, 958, 972, 909, 983, 523, 898, 970, 1091, 1094, 895, 953, -111, -111, -111, 28, 1095, 1092, 1093, -249, -249, -249, 1242, 1099, 709, 374, 845, 834, 1289, 1307, 1341, 1267, 648, 1268, 712, 716, 957, 958, 717, 1242, 719, 523, 921, 720, 708, -250, 895, 953, -111, -111, -111, 721, -16, 722, 726, 711, -511, 921, 409, 708, -578, 1233, 729, 896, 1345, 1347, 921, 1228, 708, -577, 856, 855, 947, 990, 1346, 946, 944, 945, 921, 948, 708, -249, 528, 1219, 1256, 1257, 1258, 1259, 1253, 1254, 928, 938, 926, 980, 981, 632, 1260, 1255, 1344, 1301, -32766, 1290, 1308, 834, 1317, -275, 1235, -576, 73, -550, -549, 322, 326, -32766, -32766, -32766, -548, -32766, -491, -32766, 834, -32766, 1, 29, -32766, 30, 39, 43, 47, -32766, -32766, -32766, 72, 76, 77, -32766, -32766, 1233, -111, -111, 78, -32766, 420, -111, 79, 80, 81, 143, 153, -111, -32766, 157, 246, 328, 1233, -111, -111, 356, -32766, 357, -111, 358, 359, 360, 361, 362, -111, 363, 364, 365, 366, 368, 437, 0, -273, -32766, -272, 19, 20, 298, 21, 22, 24, 404, 75, 1204, 484, 485, 326, 492, 0, 495, 496, 497, 498, 502, 298, 503, 504, 511, 694, 75, 0, 1246, 1187, 326, 1265, 1060, 1059, 1040, 1223, 1036, -277, -103, 18, 23, 27, 295, 403, 601, 605, 634, 700, 1191, 1241, 1188, 1320, 0, 0, 0, 326); protected $actionCheck = array(2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 70, 9, 10, 11, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 116, 117, 118, 119, 120, 121, 122, 37, 38, 30, 116, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 8, 53, 54, 55, 57, 57, 106, 107, 137, 9, 10, 11, 50, 51, 52, 1, 116, 69, 71, 72, 73, 74, 75, 76, 77, 134, 135, 80, 1, 30, 30, 30, 32, 33, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 80, 70, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8, 1, 106, 80, 108, 150, 151, 152, 8, 154, 9, 10, 11, 2, 3, 4, 5, 6, 7, 164, 9, 10, 11, 12, 13, 116, 119, 120, 121, 122, 106, 30, 108, 32, 33, 34, 35, 36, 37, 38, 9, 10, 11, 106, 107, 138, 137, 138, 37, 38, 9, 10, 11, 116, 134, 135, 1, 9, 10, 11, 137, 30, 14, 8, 155, 156, 157, 1, 57, 149, 163, 30, 163, 32, 33, 34, 35, 36, 155, 156, 157, 161, 71, 72, 73, 74, 75, 76, 77, 8, 31, 80, 129, 130, 131, 158, 161, 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 8, 80, 136, 137, 138, 139, 140, 141, 142, 143, 144, 164, 9, 10, 11, 160, 150, 151, 152, 164, 154, 2, 3, 4, 5, 6, 7, 80, 9, 10, 11, 12, 13, 30, 8, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 30, 57, 1, 8, 116, 117, 118, 119, 120, 121, 122, 160, 106, 69, 108, 164, 161, 57, 9, 10, 11, 9, 10, 161, 1, 1, 37, 38, 1, 167, 31, 71, 72, 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, 34, 35, 14, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 8, 122, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8, 51, 146, 138, 82, 150, 151, 152, 2, 3, 4, 5, 6, 7, 106, 97, 108, 1, 12, 13, 101, 15, 9, 10, 11, 106, 80, 108, 163, 1, 80, 163, 113, 83, 8, 116, 117, 118, 119, 120, 121, 122, 123, 30, 8, 32, 33, 34, 8, 117, 118, 80, 31, 159, 122, 159, 50, 51, 8, 80, 128, 70, 56, 155, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 74, 162, 9, 161, 78, 79, 80, 1, 82, 167, 164, 1, 86, 87, 88, 89, 122, 91, 101, 93, 84, 95, 156, 8, 98, 99, 8, 161, 138, 103, 104, 105, 106, 107, 8, 109, 110, 31, 97, 8, 123, 115, 116, 70, 8, 134, 135, 156, 122, 8, 124, 125, 126, 163, 155, 156, 157, 163, 116, 8, 149, 162, 136, 137, 8, 139, 140, 141, 142, 143, 144, 145, 161, 14, 163, 160, 82, 151, 152, 164, 138, 155, 156, 157, 158, 75, 76, 77, 14, 163, 84, 165, 166, 167, 84, 159, 116, 161, 82, 14, 90, 85, 92, 14, 94, 163, 96, 134, 135, 161, 116, 159, 1, 161, 14, 167, 106, 14, 138, 8, 164, 16, 149, 31, 164, 37, 38, 117, 118, 75, 76, 137, 122, 31, 161, 14, 163, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 16, 163, 70, 75, 76, 167, 16, 147, 148, 159, 16, 161, 16, 159, 82, 161, 162, 16, 86, 16, 74, 70, 16, 70, 101, 102, 80, 106, 107, 59, 60, 106, 107, 87, 88, 89, 31, 91, 1, 93, 70, 95, 111, 112, 98, 16, 16, 16, 116, 103, 104, 105, 16, 31, 122, 109, 110, 37, 38, 16, 35, 115, 116, 31, 0, 1, 31, 30, 136, 137, 124, 139, 140, 141, 142, 143, 144, 31, 31, 31, 31, 31, 31, 151, 152, 134, 135, 134, 135, 37, 38, 31, 31, 31, 74, 163, 31, 1, 166, 167, 80, 31, 149, 31, 134, 135, 31, 87, 88, 89, 31, 91, 161, 93, 161, 95, 31, 31, 98, 149, 37, 37, 35, 103, 104, 105, 74, 31, 35, 109, 110, 161, 80, 35, 35, 115, 116, 70, 35, 87, 88, 89, 35, 91, 124, 93, 37, 95, 84, 37, 98, 38, 57, 116, 1, 103, 104, 105, 69, 77, 31, 109, 110, 82, 70, 85, 89, 115, 116, 96, 106, 80, 108, 83, 154, 138, 124, 113, 90, 82, 84, 117, 118, 114, 31, 80, 122, 85, 132, 97, 132, 127, 128, 129, 130, 131, 92, 97, 97, 128, 163, 134, 135, 74, 70, 94, 1, 133, 100, 80, 100, 154, 146, 137, 150, 160, 87, 88, 89, 113, 91, 1, 93, 159, 95, 161, 162, 98, 161, 161, 1, 153, 103, 104, 105, 74, -1, 84, 109, 110, -1, 80, 1, -1, 115, 116, -1, -1, 87, 88, 89, 31, 91, 124, 93, 159, 95, 161, 138, 98, 31, 146, -1, 102, 103, 104, 105, 74, 134, 135, 109, 110, 149, 80, 81, 149, 115, 116, 153, 149, 87, 88, 89, 149, 91, 124, 93, 149, 95, 84, 149, 98, 155, 158, 161, 161, 103, 104, 105, 159, 161, 159, 109, 110, 84, 100, 101, 102, 115, 116, 159, 106, 159, 84, 161, 159, 159, 124, 159, 159, 162, 159, 117, 118, 159, 84, 159, 122, 159, 159, 159, 159, 127, 128, 129, 130, 131, 70, 159, 159, 159, 100, 101, 102, 1, 159, 161, 106, 160, 82, 160, 160, 160, 86, 160, 166, 161, 161, 117, 118, 161, 1, 161, 122, 159, 161, 161, 162, 127, 128, 129, 130, 131, 161, 31, 161, 161, 161, 165, 159, 162, 161, 163, 116, 162, 162, 162, 162, 159, 122, 161, 163, 162, 162, 162, 162, 162, 162, 162, 162, 159, 162, 161, 162, 137, 162, 139, 140, 141, 142, 143, 144, 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, 74, 162, 162, 82, 162, 164, 80, 163, 163, 163, 163, 166, 167, 87, 88, 89, 163, 91, 163, 93, 82, 95, 163, 163, 98, 163, 163, 163, 163, 103, 104, 105, 163, 163, 163, 109, 110, 116, 117, 118, 163, 115, 116, 122, 163, 163, 163, 163, 163, 128, 124, 163, 163, 163, 116, 117, 118, 163, 137, 163, 122, 163, 163, 163, 163, 163, 128, 163, 163, 163, 163, 163, 163, -1, 164, 137, 164, 164, 164, 158, 164, 164, 164, 164, 163, 165, 164, 164, 167, 164, -1, 164, 164, 164, 164, 164, 158, 164, 164, 164, 164, 163, -1, 164, 164, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, -1, -1, 167); - protected $actionBase = array(0, -2, 154, 542, 752, 893, 929, 52, 374, 431, 398, 869, 793, 235, 307, 307, 793, 307, 784, 908, 908, 917, 908, 538, 841, 468, 468, 468, 708, 708, 708, 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 348, 346, 370, 653, 1063, 1069, 1065, 1070, 1061, 1060, 1064, 1066, 1071, 946, 947, 774, 949, 950, 943, 952, 1067, 882, 1062, 1068, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 525, 191, 359, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 174, 174, 174, 620, 620, 51, 465, 356, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 658, 184, 144, 144, 7, 7, 7, 7, 7, 1031, 371, 1048, -25, -25, -25, -25, 50, 725, 526, 449, 39, 317, 80, 474, 474, 13, 13, 512, 512, 422, 422, 512, 512, 512, 808, 808, 808, 808, 443, 505, 360, 308, -78, 209, 209, 209, 209, -78, -78, -78, -78, 803, 877, -78, -78, -78, 63, 641, 641, 822, -1, -1, -1, 641, 253, 790, 548, 253, 384, 548, 480, 402, 764, 759, -49, 447, 764, 639, 755, 198, 143, 825, 609, 825, 1059, 320, 768, 426, 749, 720, 874, 904, 1072, 796, 941, 798, 942, 106, -58, 710, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1073, 336, 1059, 423, 1073, 1073, 1073, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 619, 423, 586, 616, 423, 795, 336, 348, 814, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 750, 202, 348, 346, 78, 78, 484, 65, 78, 78, 78, 78, 348, 348, 348, 348, 609, 783, 766, 613, 813, 492, 783, 783, 783, 473, 135, 378, 488, 713, 775, 67, 779, 779, 785, 969, 969, 779, 769, 779, 785, 975, 779, 779, 969, 969, 823, 280, 563, 478, 550, 568, 969, 377, 779, 779, 779, 779, 746, 573, 779, 342, 314, 779, 779, 746, 744, 760, 43, 762, 969, 969, 969, 746, 547, 762, 762, 762, 839, 844, 794, 758, 444, 433, 588, 232, 801, 758, 758, 779, 558, 794, 758, 794, 758, 745, 758, 758, 758, 794, 758, 769, 502, 758, 717, 583, 224, 758, 6, 979, 980, 624, 981, 973, 987, 1019, 991, 992, 873, 965, 999, 974, 993, 972, 970, 773, 682, 684, 818, 811, 963, 777, 777, 777, 956, 777, 777, 777, 777, 777, 777, 777, 777, 682, 743, 829, 765, 1006, 689, 691, 754, 906, 901, 1030, 1004, 1049, 994, 828, 694, 1028, 1008, 846, 821, 1009, 1010, 1029, 1050, 1052, 910, 782, 911, 912, 876, 1012, 883, 777, 979, 992, 693, 974, 993, 972, 970, 748, 739, 737, 738, 736, 735, 723, 734, 753, 1053, 954, 907, 878, 1011, 957, 682, 879, 1023, 756, 1032, 1033, 827, 788, 778, 880, 913, 1014, 1015, 1016, 884, 1054, 887, 830, 1024, 951, 1035, 789, 918, 1037, 1038, 1039, 1040, 889, 919, 892, 916, 900, 845, 776, 1020, 761, 920, 591, 787, 791, 800, 1018, 606, 1000, 902, 921, 922, 1041, 1043, 1044, 923, 924, 995, 847, 1026, 799, 1027, 1022, 848, 850, 617, 797, 1055, 781, 786, 772, 621, 632, 925, 927, 931, 998, 763, 770, 853, 855, 1056, 771, 1057, 938, 635, 857, 718, 939, 1046, 719, 724, 637, 678, 672, 731, 792, 903, 826, 757, 780, 1017, 724, 767, 858, 940, 859, 860, 867, 1045, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 458, 458, 458, 458, 458, 307, 307, 307, 307, 307, 307, 307, 0, 0, 307, 0, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 66, 66, 291, 291, 291, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 291, 291, 291, 291, 291, 291, 291, 291, 66, 823, 66, -1, -1, -1, -1, 66, 66, 66, -88, -88, 66, 384, 66, 66, -1, -1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 0, 423, 548, 66, 769, 769, 769, 769, 66, 66, 66, 66, 548, 548, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 423, 548, 0, 423, 0, 0, 769, 769, 66, 384, 823, 643, 66, 0, 0, 0, 0, 423, 769, 423, 336, 779, 548, 779, 336, 336, 78, 348, 643, 611, 611, 611, 611, 0, 0, 609, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 769, 0, 823, 0, 769, 769, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 788, 0, 788, 0, 777, 777, 777, 0, 0, 0, 0, 797, 771); - protected $actionDefault = array(3, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 596, 596, 596, 596, 32767, 32767, 254, 103, 32767, 32767, 469, 387, 387, 387, 32767, 32767, 540, 540, 540, 540, 540, 540, 32767, 32767, 32767, 32767, 32767, 32767, 469, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 37, 7, 8, 10, 11, 50, 17, 324, 32767, 32767, 32767, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 589, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 473, 452, 453, 455, 456, 386, 541, 595, 327, 592, 385, 146, 339, 329, 242, 330, 258, 474, 259, 475, 478, 479, 215, 287, 382, 150, 151, 416, 470, 418, 468, 472, 417, 392, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 390, 391, 471, 449, 448, 447, 32767, 32767, 414, 415, 419, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 389, 422, 420, 421, 438, 439, 436, 437, 440, 32767, 32767, 32767, 441, 442, 443, 444, 316, 32767, 32767, 366, 364, 316, 112, 32767, 32767, 429, 430, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 534, 446, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 101, 536, 411, 413, 503, 424, 425, 423, 393, 32767, 510, 32767, 103, 32767, 512, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 535, 32767, 542, 542, 32767, 496, 101, 195, 32767, 32767, 32767, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 603, 496, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 32767, 195, 111, 32767, 32767, 32767, 101, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 190, 32767, 268, 270, 103, 557, 195, 32767, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 508, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 496, 434, 139, 32767, 139, 542, 426, 427, 428, 498, 542, 542, 542, 312, 289, 32767, 32767, 32767, 32767, 513, 513, 101, 101, 101, 101, 508, 32767, 32767, 32767, 32767, 112, 100, 100, 100, 100, 100, 104, 102, 32767, 32767, 32767, 32767, 223, 100, 32767, 102, 102, 32767, 32767, 223, 225, 212, 102, 227, 32767, 561, 562, 223, 102, 227, 227, 227, 247, 247, 485, 318, 102, 100, 102, 102, 197, 318, 318, 32767, 102, 485, 318, 485, 318, 199, 318, 318, 318, 485, 318, 32767, 102, 318, 214, 100, 100, 318, 32767, 32767, 32767, 498, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 222, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 529, 32767, 546, 559, 432, 433, 435, 544, 457, 458, 459, 460, 461, 462, 463, 465, 591, 32767, 502, 32767, 32767, 32767, 338, 601, 32767, 601, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 602, 32767, 542, 32767, 32767, 32767, 32767, 431, 9, 76, 491, 43, 44, 52, 58, 519, 520, 521, 522, 516, 517, 523, 518, 32767, 32767, 524, 567, 32767, 32767, 543, 594, 32767, 32767, 32767, 32767, 32767, 32767, 139, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 529, 32767, 137, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 525, 32767, 32767, 32767, 542, 32767, 32767, 32767, 32767, 314, 311, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 542, 32767, 32767, 32767, 32767, 32767, 291, 32767, 308, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 286, 32767, 32767, 381, 498, 294, 296, 297, 32767, 32767, 32767, 32767, 360, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 153, 153, 3, 3, 341, 153, 153, 153, 341, 341, 153, 341, 341, 341, 153, 153, 153, 153, 153, 153, 280, 185, 262, 265, 247, 247, 153, 352, 153); - protected $goto = array(196, 196, 1031, 703, 694, 430, 658, 1062, 1334, 1334, 424, 313, 314, 335, 573, 319, 429, 336, 431, 635, 651, 652, 850, 669, 670, 671, 1334, 167, 167, 167, 167, 221, 197, 193, 193, 177, 179, 216, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 188, 189, 190, 191, 192, 218, 216, 219, 534, 535, 420, 536, 538, 539, 540, 541, 542, 543, 544, 545, 1132, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 245, 257, 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, 271, 281, 282, 316, 317, 318, 425, 426, 427, 578, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 180, 237, 181, 198, 199, 200, 239, 188, 189, 190, 191, 192, 218, 1132, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, 212, 213, 214, 853, 851, 278, 278, 278, 278, 418, 620, 620, 350, 570, 597, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1283, 1283, 831, 618, 655, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 353, 353, 353, 353, 866, 557, 550, 858, 825, 907, 902, 903, 916, 859, 904, 856, 905, 906, 857, 878, 457, 910, 865, 884, 546, 546, 546, 546, 831, 601, 831, 1084, 1079, 1080, 1081, 341, 550, 557, 566, 567, 343, 576, 599, 613, 614, 407, 408, 972, 465, 465, 667, 15, 668, 1323, 411, 412, 413, 465, 681, 348, 1233, 414, 1233, 478, 569, 346, 439, 1031, 1031, 1233, 993, 480, 1031, 393, 1031, 1031, 1104, 1105, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1315, 1315, 1315, 1315, 1233, 657, 1333, 1333, 1055, 1233, 1233, 1233, 1233, 1037, 1036, 1233, 1233, 1233, 1034, 1034, 1181, 354, 678, 949, 1333, 437, 1026, 1042, 1043, 337, 691, 354, 354, 827, 923, 691, 1040, 1041, 924, 691, 663, 1336, 939, 871, 939, 354, 354, 1281, 1281, 354, 679, 1350, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 552, 537, 537, 911, 354, 912, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 548, 564, 548, 574, 611, 730, 634, 636, 849, 548, 656, 475, 1308, 1309, 680, 684, 1007, 692, 701, 1003, 252, 252, 996, 970, 970, 968, 970, 729, 843, 549, 1005, 1000, 423, 455, 608, 1294, 846, 955, 966, 966, 966, 966, 325, 308, 455, 960, 967, 249, 249, 249, 249, 251, 253, 402, 351, 352, 683, 868, 551, 561, 449, 449, 449, 551, 1305, 561, 1305, 612, 396, 461, 1010, 1010, 1224, 1305, 395, 398, 558, 598, 602, 1015, 468, 577, 469, 470, 1310, 1311, 876, 552, 846, 1341, 1342, 964, 409, 702, 733, 324, 275, 324, 1317, 1317, 1317, 1317, 606, 621, 624, 625, 626, 627, 648, 649, 650, 705, 1068, 596, 1097, 874, 706, 476, 1228, 507, 697, 880, 1095, 1115, 432, 1301, 628, 630, 632, 432, 879, 867, 1067, 1071, 5, 1072, 6, 1038, 1038, 977, 0, 975, 662, 1049, 1045, 1046, 0, 0, 0, 0, 1226, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 928, 1120, 449, 965, 1070, 0, 0, 616, 1303, 1303, 1070, 1229, 1230, 1012, 499, 0, 500, 0, 0, 841, 0, 870, 506, 661, 991, 1113, 883, 1212, 941, 864, 0, 1213, 1216, 942, 1217, 0, 0, 1231, 1291, 1292, 0, 1223, 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255); - protected $gotoCheck = array(42, 42, 72, 9, 72, 65, 65, 126, 181, 181, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 85, 85, 26, 85, 85, 85, 181, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 15, 27, 23, 23, 23, 23, 43, 107, 107, 96, 170, 129, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 168, 168, 12, 55, 55, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 24, 24, 24, 24, 35, 75, 75, 15, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 35, 82, 15, 35, 45, 106, 106, 106, 106, 12, 106, 12, 15, 15, 15, 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 81, 81, 49, 148, 148, 81, 75, 81, 179, 81, 81, 81, 148, 81, 177, 72, 81, 72, 83, 103, 81, 82, 72, 72, 72, 102, 83, 72, 61, 72, 72, 143, 143, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 9, 9, 9, 9, 72, 63, 180, 180, 113, 72, 72, 72, 72, 117, 117, 72, 72, 72, 88, 88, 150, 14, 88, 88, 180, 112, 88, 88, 88, 29, 7, 14, 14, 7, 72, 7, 118, 118, 72, 7, 119, 180, 9, 39, 9, 14, 14, 169, 169, 14, 115, 14, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 14, 171, 171, 64, 14, 64, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 19, 48, 19, 2, 2, 48, 48, 48, 25, 19, 48, 174, 174, 174, 48, 48, 48, 48, 48, 48, 5, 5, 25, 25, 25, 25, 25, 25, 18, 25, 25, 25, 13, 19, 13, 14, 22, 91, 19, 19, 19, 19, 167, 167, 19, 19, 19, 5, 5, 5, 5, 5, 5, 28, 96, 96, 14, 37, 9, 9, 23, 23, 23, 9, 129, 9, 129, 79, 9, 9, 106, 106, 159, 129, 58, 58, 58, 58, 58, 109, 9, 9, 9, 9, 176, 176, 9, 14, 22, 9, 9, 92, 92, 92, 98, 24, 24, 24, 129, 129, 129, 129, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 128, 8, 8, 9, 8, 156, 20, 8, 8, 41, 8, 146, 116, 129, 84, 84, 84, 116, 16, 16, 16, 16, 46, 131, 46, 116, 116, 95, -1, 16, 116, 116, 116, 116, -1, -1, -1, -1, 14, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 17, 17, 23, 16, 129, -1, -1, 17, 129, 129, 129, 20, 20, 17, 154, -1, 154, -1, -1, 20, -1, 17, 154, 17, 17, 16, 16, 78, 78, 17, -1, 78, 78, 78, 78, -1, -1, 20, 20, 20, -1, 17, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); - protected $gotoBase = array(0, 0, -339, 0, 0, 386, 195, 312, 472, -10, 0, 0, -109, 62, 13, -184, 46, 65, 86, 102, 93, 0, 125, 162, 197, 371, 18, 160, 83, 22, 0, 0, 0, 0, 0, -166, 0, 85, 0, 9, 0, 48, -1, 157, 0, 207, -232, 0, -340, 223, 0, 0, 0, 0, 0, 148, 0, 0, 396, 0, 0, 231, 0, 52, 334, -236, 0, 0, 0, 0, 0, 0, -5, 0, 0, -139, 0, 0, 149, 91, 112, -245, -58, -205, 15, -695, 0, 0, 28, 0, 0, 75, 154, 0, 0, 64, -310, 0, 55, 0, 0, 0, 235, 221, 0, 0, 196, -71, 0, 77, 0, 0, 37, 24, 0, 56, 219, 23, 40, 39, 0, 0, 0, 0, 0, 0, 5, 0, 106, 166, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 47, 0, 214, 0, 35, 0, 0, 0, 49, 0, 45, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 88, -56, 95, 144, 111, 0, 0, 78, 0, 80, 229, 0, 222, -12, -299, 0, 0); - protected $gotoDefault = array(-32768, 511, 737, 4, 738, 932, 814, 823, 594, 528, 704, 347, 622, 421, 1299, 909, 1119, 575, 842, 1242, 1250, 456, 845, 330, 727, 891, 892, 893, 399, 385, 391, 397, 646, 623, 493, 877, 452, 869, 485, 872, 451, 881, 164, 417, 509, 885, 3, 888, 554, 919, 386, 896, 387, 674, 898, 560, 900, 901, 394, 400, 401, 1124, 568, 619, 913, 256, 562, 914, 384, 915, 922, 389, 392, 685, 464, 504, 498, 410, 1099, 563, 605, 643, 446, 472, 617, 629, 615, 479, 433, 415, 329, 954, 962, 486, 462, 976, 349, 984, 735, 1131, 637, 488, 992, 638, 999, 1002, 529, 530, 477, 1014, 272, 1017, 489, 12, 664, 1028, 1029, 665, 639, 1051, 640, 666, 641, 1053, 471, 595, 1061, 453, 1069, 1287, 454, 1073, 266, 1076, 277, 416, 434, 1082, 1083, 9, 1089, 695, 696, 11, 276, 508, 1114, 686, 450, 1130, 438, 1200, 1202, 556, 490, 1220, 1219, 677, 505, 1225, 447, 1290, 448, 531, 473, 315, 532, 307, 333, 312, 547, 294, 334, 533, 474, 1296, 1304, 331, 31, 1324, 1335, 342, 572, 610); + protected $actionBase = array(0, -2, 154, 542, 752, 893, 929, 52, 374, 431, 398, 869, 793, 235, 307, 307, 793, 307, 784, 908, 908, 917, 908, 538, 841, 468, 468, 468, 708, 708, 708, 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 348, 346, 370, 653, 1063, 1069, 1065, 1070, 1061, 1060, 1064, 1066, 1071, 946, 947, 774, 949, 950, 943, 952, 1067, 882, 1062, 1068, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 525, 191, 359, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 174, 174, 174, 620, 620, 51, 465, 356, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 658, 184, 144, 144, 7, 7, 7, 7, 7, 1031, 371, 1048, -25, -25, -25, -25, 50, 725, 526, 449, 39, 317, 80, 474, 474, 13, 13, 512, 512, 422, 422, 512, 512, 512, 808, 808, 808, 808, 443, 505, 360, 308, -78, 209, 209, 209, 209, -78, -78, -78, -78, 803, 877, -78, -78, -78, 63, 641, 641, 822, -1, -1, -1, 641, 253, 790, 548, 253, 384, 548, 480, 402, 764, 759, -49, 447, 764, 639, 755, 198, 143, 825, 609, 825, 1059, 320, 768, 426, 749, 720, 874, 904, 1072, 796, 941, 798, 942, 106, -58, 710, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1073, 336, 1059, 423, 1073, 1073, 1073, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 619, 423, 586, 616, 423, 795, 336, 814, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 750, 202, 348, 348, 346, 78, 78, 348, 484, 65, 78, 78, 78, 78, 348, 348, 348, 348, 609, 783, 766, 613, 813, 492, 783, 783, 783, 473, 135, 378, 488, 713, 775, 67, 779, 779, 785, 969, 969, 779, 769, 779, 785, 975, 779, 779, 969, 969, 823, 280, 563, 478, 550, 568, 969, 377, 779, 779, 779, 779, 746, 573, 779, 342, 314, 779, 779, 746, 744, 760, 43, 762, 969, 969, 969, 746, 547, 762, 762, 762, 839, 844, 794, 758, 444, 433, 588, 232, 801, 758, 758, 779, 558, 794, 758, 794, 758, 745, 758, 758, 758, 794, 758, 769, 502, 758, 717, 583, 224, 758, 6, 979, 980, 624, 981, 973, 987, 1019, 991, 992, 873, 965, 999, 974, 993, 972, 970, 773, 682, 684, 818, 811, 963, 777, 777, 777, 956, 777, 777, 777, 777, 777, 777, 777, 777, 682, 743, 829, 765, 1006, 689, 691, 754, 911, 901, 1030, 1004, 1049, 994, 828, 694, 1028, 1008, 910, 821, 1009, 1010, 1029, 1050, 1052, 912, 782, 913, 918, 876, 1012, 883, 777, 979, 992, 693, 974, 993, 972, 970, 748, 739, 737, 738, 736, 735, 723, 734, 753, 1053, 954, 907, 878, 1011, 957, 682, 879, 1023, 756, 1032, 1033, 827, 788, 778, 880, 919, 1014, 1015, 1016, 884, 1054, 887, 830, 1024, 951, 1035, 789, 846, 1037, 1038, 1039, 1040, 889, 920, 892, 916, 900, 845, 776, 1020, 761, 921, 591, 787, 791, 800, 1018, 606, 1000, 902, 906, 922, 1041, 1043, 1044, 923, 924, 995, 847, 1026, 799, 1027, 1022, 848, 850, 617, 797, 1055, 781, 786, 772, 621, 632, 925, 927, 931, 998, 763, 770, 853, 855, 1056, 771, 1057, 938, 635, 857, 718, 939, 1046, 719, 724, 637, 678, 672, 731, 792, 903, 826, 757, 780, 1017, 724, 767, 858, 940, 859, 860, 867, 1045, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 458, 458, 458, 458, 458, 307, 307, 307, 307, 307, 307, 307, 0, 0, 307, 0, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 66, 66, 291, 291, 291, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 291, 291, 291, 291, 291, 291, 291, 291, 66, 823, 66, -1, -1, -1, -1, 66, 66, 66, -88, -88, 66, 384, 66, 66, -1, -1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 0, 423, 548, 66, 769, 769, 769, 769, 66, 66, 66, 66, 548, 548, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 423, 548, 0, 423, 0, 0, 769, 769, 66, 384, 823, 643, 66, 0, 0, 0, 0, 423, 769, 423, 336, 779, 548, 779, 336, 336, 78, 348, 643, 611, 611, 611, 611, 0, 0, 609, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 769, 0, 823, 0, 769, 769, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 788, 0, 788, 0, 777, 777, 777, 0, 0, 0, 0, 797, 771); + protected $actionDefault = array(3, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 596, 596, 596, 596, 32767, 32767, 254, 103, 32767, 32767, 469, 387, 387, 387, 32767, 32767, 540, 540, 540, 540, 540, 540, 32767, 32767, 32767, 32767, 32767, 32767, 469, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 37, 7, 8, 10, 11, 50, 17, 324, 32767, 32767, 32767, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 589, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 473, 452, 453, 455, 456, 386, 541, 595, 327, 592, 385, 146, 339, 329, 242, 330, 258, 474, 259, 475, 478, 479, 215, 287, 382, 150, 151, 416, 470, 418, 468, 472, 417, 392, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 390, 391, 471, 449, 448, 447, 32767, 32767, 414, 415, 419, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 389, 422, 420, 421, 438, 439, 436, 437, 440, 32767, 32767, 32767, 441, 442, 443, 444, 316, 32767, 32767, 366, 364, 316, 112, 32767, 32767, 429, 430, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 534, 446, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 101, 536, 411, 413, 503, 424, 425, 423, 393, 32767, 510, 32767, 103, 32767, 512, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 535, 32767, 542, 542, 32767, 496, 101, 195, 32767, 32767, 32767, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 603, 496, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 32767, 195, 111, 32767, 32767, 32767, 101, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 190, 32767, 268, 270, 103, 557, 195, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 508, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 496, 434, 139, 32767, 139, 542, 426, 427, 428, 498, 542, 542, 542, 312, 289, 32767, 32767, 32767, 32767, 513, 513, 101, 101, 101, 101, 508, 32767, 32767, 32767, 32767, 112, 100, 100, 100, 100, 100, 104, 102, 32767, 32767, 32767, 32767, 223, 100, 32767, 102, 102, 32767, 32767, 223, 225, 212, 102, 227, 32767, 561, 562, 223, 102, 227, 227, 227, 247, 247, 485, 318, 102, 100, 102, 102, 197, 318, 318, 32767, 102, 485, 318, 485, 318, 199, 318, 318, 318, 485, 318, 32767, 102, 318, 214, 100, 100, 318, 32767, 32767, 32767, 498, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 222, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 529, 32767, 546, 559, 432, 433, 435, 544, 457, 458, 459, 460, 461, 462, 463, 465, 591, 32767, 502, 32767, 32767, 32767, 338, 601, 32767, 601, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 602, 32767, 542, 32767, 32767, 32767, 32767, 431, 9, 76, 491, 43, 44, 52, 58, 519, 520, 521, 522, 516, 517, 523, 518, 32767, 32767, 524, 567, 32767, 32767, 543, 594, 32767, 32767, 32767, 32767, 32767, 32767, 139, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 529, 32767, 137, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 525, 32767, 32767, 32767, 542, 32767, 32767, 32767, 32767, 314, 311, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 542, 32767, 32767, 32767, 32767, 32767, 291, 32767, 308, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 286, 32767, 32767, 381, 498, 294, 296, 297, 32767, 32767, 32767, 32767, 360, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 153, 153, 3, 3, 341, 153, 153, 153, 341, 341, 153, 341, 341, 341, 153, 153, 153, 153, 153, 153, 280, 185, 262, 265, 247, 247, 153, 352, 153); + protected $goto = array(196, 196, 1032, 704, 695, 431, 659, 1063, 1335, 1335, 425, 313, 314, 335, 574, 319, 430, 336, 432, 636, 652, 653, 851, 670, 671, 672, 1335, 167, 167, 167, 167, 221, 197, 193, 193, 177, 179, 216, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 188, 189, 190, 191, 192, 218, 216, 219, 535, 536, 421, 537, 539, 540, 541, 542, 543, 544, 545, 546, 1133, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 245, 257, 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, 271, 281, 282, 316, 317, 318, 426, 427, 428, 579, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 180, 237, 181, 198, 199, 200, 239, 188, 189, 190, 191, 192, 218, 1133, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, 212, 213, 214, 854, 619, 656, 278, 278, 278, 278, 852, 621, 621, 350, 419, 598, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1284, 1284, 832, 1105, 1106, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 353, 353, 353, 353, 826, 558, 551, 908, 903, 904, 917, 860, 905, 857, 906, 907, 858, 1035, 1035, 911, 864, 679, 950, 458, 863, 1027, 1043, 1044, 832, 885, 832, 1085, 1080, 1081, 1082, 341, 551, 558, 567, 568, 343, 577, 600, 614, 615, 547, 547, 547, 547, 973, 602, 15, 394, 397, 559, 599, 603, 1213, 942, 1234, 571, 1234, 1214, 1217, 943, 1218, 1032, 1032, 1234, 440, 912, 1032, 913, 1032, 1032, 1038, 1037, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1316, 1316, 1316, 1316, 1234, 476, 1309, 1310, 348, 1234, 1234, 1234, 1234, 407, 408, 1234, 1234, 1234, 668, 1324, 669, 354, 412, 413, 414, 867, 682, 466, 466, 415, 994, 354, 354, 346, 924, 424, 466, 609, 925, 5, 879, 6, 940, 866, 940, 354, 354, 1282, 1282, 354, 392, 1351, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 553, 538, 538, 570, 354, 658, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 549, 565, 549, 1041, 1042, 731, 635, 637, 850, 549, 657, 965, 410, 703, 681, 685, 1008, 693, 702, 1004, 252, 252, 997, 971, 971, 969, 971, 730, 1056, 550, 1006, 1001, 1182, 456, 847, 1295, 1334, 1334, 967, 967, 967, 967, 325, 308, 456, 961, 968, 249, 249, 249, 249, 251, 253, 438, 1334, 351, 352, 684, 680, 552, 562, 450, 450, 450, 552, 1306, 562, 1306, 479, 395, 462, 1337, 1311, 1312, 1306, 664, 481, 500, 337, 501, 844, 469, 578, 470, 471, 507, 847, 877, 553, 872, 1342, 1343, 1011, 1011, 575, 612, 324, 275, 324, 1318, 1318, 1318, 1318, 607, 622, 625, 626, 627, 628, 649, 650, 651, 706, 956, 401, 692, 875, 1229, 828, 869, 692, 629, 631, 633, 692, 433, 1302, 1225, 734, 613, 433, 880, 868, 1068, 1072, 1069, 1016, 477, 1039, 1039, 881, 0, 976, 663, 1050, 1046, 1047, 1073, 1116, 978, 0, 1227, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 929, 1121, 450, 966, 1071, 0, 0, 617, 1304, 1304, 1071, 1230, 1231, 1013, 0, 0, 0, 0, 0, 842, 0, 871, 0, 662, 992, 1114, 884, 597, 1098, 865, 707, 0, 0, 508, 698, 0, 1096, 1232, 1292, 1293, 0, 1224, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255); + protected $gotoCheck = array(42, 42, 72, 9, 72, 65, 65, 126, 181, 181, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 85, 85, 26, 85, 85, 85, 181, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 15, 55, 55, 23, 23, 23, 23, 27, 107, 107, 96, 43, 129, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 168, 168, 12, 143, 143, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 24, 24, 24, 24, 6, 75, 75, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 88, 88, 15, 15, 88, 88, 82, 15, 88, 88, 88, 12, 45, 12, 15, 15, 15, 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 106, 106, 106, 106, 49, 106, 75, 58, 58, 58, 58, 58, 78, 78, 72, 170, 72, 78, 78, 78, 78, 72, 72, 72, 82, 64, 72, 64, 72, 72, 117, 117, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 9, 9, 9, 9, 72, 174, 174, 174, 177, 72, 72, 72, 72, 81, 81, 72, 72, 72, 81, 179, 81, 14, 81, 81, 81, 35, 81, 148, 148, 81, 102, 14, 14, 81, 72, 13, 148, 13, 72, 46, 35, 46, 9, 35, 9, 14, 14, 169, 169, 14, 61, 14, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 14, 171, 171, 103, 14, 63, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 19, 48, 19, 118, 118, 48, 48, 48, 25, 19, 48, 92, 92, 92, 48, 48, 48, 48, 48, 48, 5, 5, 25, 25, 25, 25, 25, 25, 113, 25, 25, 25, 150, 19, 22, 14, 180, 180, 19, 19, 19, 19, 167, 167, 19, 19, 19, 5, 5, 5, 5, 5, 5, 112, 180, 96, 96, 14, 115, 9, 9, 23, 23, 23, 9, 129, 9, 129, 83, 9, 9, 180, 176, 176, 129, 119, 83, 154, 29, 154, 18, 9, 9, 9, 9, 154, 22, 9, 14, 39, 9, 9, 106, 106, 2, 2, 24, 24, 24, 129, 129, 129, 129, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 91, 28, 7, 9, 20, 7, 37, 7, 84, 84, 84, 7, 116, 129, 159, 98, 79, 116, 16, 16, 16, 16, 128, 109, 156, 116, 116, 41, -1, 16, 116, 116, 116, 116, 131, 146, 95, -1, 14, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 17, 17, 23, 16, 129, -1, -1, 17, 129, 129, 129, 20, 20, 17, -1, -1, -1, -1, -1, 20, -1, 17, -1, 17, 17, 16, 16, 8, 8, 17, 8, -1, -1, 8, 8, -1, 8, 20, 20, 20, -1, 17, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); + protected $gotoBase = array(0, 0, -249, 0, 0, 386, 192, 475, 549, -10, 0, 0, -108, -13, 13, -184, 46, 65, 138, 102, 93, 0, 123, 163, 198, 371, 18, 166, 144, 149, 0, 0, 0, 0, 0, -56, 0, 147, 0, 133, 0, 66, -1, 162, 0, 214, -406, 0, -341, 226, 0, 0, 0, 0, 0, 124, 0, 0, 208, 0, 0, 297, 0, 114, 251, -236, 0, 0, 0, 0, 0, 0, -5, 0, 0, -138, 0, 0, -149, 153, 113, -189, -54, -34, 9, -696, 0, 0, -61, 0, 0, 151, 74, 0, 0, 73, -310, 0, 89, 0, 0, 0, 284, 311, 0, 0, 218, -70, 0, 134, 0, 0, 143, 122, 0, 142, 220, -3, 85, 152, 0, 0, 0, 0, 0, 0, 5, 0, 129, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 71, 0, 282, 0, 125, 0, 0, 0, -51, 0, 64, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 88, -55, 95, 232, 111, 0, 0, -6, 0, 68, 267, 0, 277, 96, -299, 0, 0); + protected $gotoDefault = array(-32768, 512, 738, 4, 739, 933, 815, 824, 595, 529, 705, 347, 623, 422, 1300, 910, 1120, 576, 843, 1243, 1251, 457, 846, 330, 728, 892, 893, 894, 398, 385, 859, 396, 647, 624, 494, 878, 453, 870, 486, 873, 452, 882, 164, 418, 510, 886, 3, 889, 555, 920, 386, 897, 387, 675, 899, 561, 901, 902, 393, 399, 400, 1125, 569, 620, 914, 256, 563, 915, 384, 916, 923, 389, 391, 686, 465, 505, 499, 411, 1100, 564, 606, 644, 447, 473, 618, 630, 616, 480, 434, 416, 329, 955, 963, 487, 463, 977, 349, 985, 736, 1132, 638, 489, 993, 639, 1000, 1003, 530, 531, 478, 1015, 272, 1018, 490, 12, 665, 1029, 1030, 666, 640, 1052, 641, 667, 642, 1054, 472, 596, 1062, 454, 1070, 1288, 455, 1074, 266, 1077, 277, 417, 435, 1083, 1084, 9, 1090, 696, 697, 11, 276, 509, 1115, 687, 451, 1131, 439, 1201, 1203, 557, 491, 1221, 1220, 678, 506, 1226, 448, 1291, 449, 532, 474, 315, 533, 307, 333, 312, 548, 294, 334, 534, 475, 1297, 1305, 331, 31, 1325, 1336, 342, 573, 611); protected $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 68, 68, 71, 71, 70, 69, 69, 62, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 26, 26, 27, 27, 27, 27, 27, 87, 87, 89, 89, 82, 82, 90, 90, 91, 91, 91, 83, 83, 86, 86, 84, 84, 92, 93, 93, 56, 56, 64, 64, 67, 67, 67, 66, 94, 94, 95, 57, 57, 57, 57, 96, 96, 97, 97, 98, 98, 99, 100, 100, 101, 101, 102, 102, 54, 54, 50, 50, 104, 52, 52, 105, 51, 51, 53, 53, 63, 63, 63, 63, 80, 80, 108, 108, 110, 110, 111, 111, 111, 111, 109, 109, 109, 113, 113, 113, 113, 88, 88, 116, 116, 116, 117, 117, 114, 114, 118, 118, 120, 120, 121, 121, 115, 122, 122, 119, 123, 123, 123, 123, 112, 112, 81, 81, 81, 20, 20, 20, 125, 124, 124, 126, 126, 126, 126, 59, 127, 127, 128, 60, 130, 130, 131, 131, 132, 132, 85, 133, 133, 133, 133, 133, 133, 133, 138, 138, 139, 139, 140, 140, 140, 140, 140, 141, 142, 142, 137, 137, 134, 134, 136, 136, 144, 144, 143, 143, 143, 143, 143, 143, 143, 135, 145, 145, 147, 146, 146, 61, 103, 148, 148, 55, 55, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 155, 149, 149, 154, 154, 157, 158, 158, 159, 160, 161, 161, 161, 161, 19, 19, 72, 72, 72, 72, 150, 150, 150, 150, 163, 163, 151, 151, 153, 153, 153, 156, 156, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 107, 171, 171, 171, 171, 152, 152, 152, 152, 152, 152, 152, 152, 58, 58, 166, 166, 166, 166, 172, 172, 162, 162, 162, 173, 173, 173, 173, 173, 173, 73, 73, 65, 65, 65, 65, 129, 129, 129, 129, 176, 175, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 174, 174, 174, 174, 106, 170, 178, 178, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 167, 167, 167, 167, 181, 182, 180, 180, 180, 180, 180, 180, 180, 180, 183, 183, 183, 183); - protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 2, 3, 1, 1, 7, 6, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 6, 8, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); + protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 1, 3, 1, 1, 8, 7, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 6, 8, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); protected function initReduceCallbacks() { $this->reduceCallbacks = [0 => function ($stackPos) { @@ -306,7 +306,7 @@ protected function initReduceCallbacks() }, 121 => function ($stackPos) { $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 122 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 123 => function ($stackPos) { $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 124 => function ($stackPos) { @@ -314,9 +314,9 @@ protected function initReduceCallbacks() }, 125 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_CONSTANT; }, 126 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 2)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 127 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 2)], $this->semStack[$stackPos - (7 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 128 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 129 => function ($stackPos) { diff --git a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php index 14da496f8..918ff2165 100644 --- a/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +++ b/vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php @@ -609,7 +609,7 @@ protected function p(\PhpParser\Node $node, $parentFormatPreserved = \false) : s if (null !== $subNode) { $result .= $extraLeft; $origIndentLevel = $this->indentLevel; - $this->setIndentLevel($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment); + $this->setIndentLevel(\max($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment, 0)); // If it's the same node that was previously in this position, it certainly doesn't // need fixup. It's important to check this here, because our fixup checks are more // conservative than strictly necessary. @@ -692,7 +692,7 @@ protected function pArray(array $nodes, array $origNodes, int &$pos, int $indent $itemEndPos = $origArrItem->getEndTokenPos(); \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos); $origIndentLevel = $this->indentLevel; - $lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment; + $lastElemIndentLevel = \max($this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment, 0); $this->setIndentLevel($lastElemIndentLevel); $comments = $arrItem->getComments(); $origComments = $origArrItem->getComments(); diff --git a/vendor/rector/rector/vendor/ondram/ci-detector/composer.json b/vendor/rector/rector/vendor/ondram/ci-detector/composer.json index 62aa3fa4d..5efbf68aa 100644 --- a/vendor/rector/rector/vendor/ondram/ci-detector/composer.json +++ b/vendor/rector/rector/vendor/ondram/ci-detector/composer.json @@ -52,12 +52,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\OndraM\\CiDetector\\": "src\/" + "RectorPrefix202410\\OndraM\\CiDetector\\": "src\/" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\OndraM\\CiDetector\\Ci\\": "tests\/" + "RectorPrefix202410\\OndraM\\CiDetector\\Ci\\": "tests\/" } }, "config": { diff --git a/vendor/rector/rector/vendor/ondram/ci-detector/ecs.php b/vendor/rector/rector/vendor/ondram/ci-detector/ecs.php index 907eeb390..9f45dc2f8 100644 --- a/vendor/rector/rector/vendor/ondram/ci-detector/ecs.php +++ b/vendor/rector/rector/vendor/ondram/ci-detector/ecs.php @@ -1,14 +1,14 @@ parameters(); $parameters->set(Option::SKIP, [__DIR__ . '/tests/PropertiesPrinterHelper.php']); diff --git a/vendor/rector/rector/vendor/ondram/ci-detector/src/Ci/AbstractCi.php b/vendor/rector/rector/vendor/ondram/ci-detector/src/Ci/AbstractCi.php index 64e7eed0c..a8c3d2297 100644 --- a/vendor/rector/rector/vendor/ondram/ci-detector/src/Ci/AbstractCi.php +++ b/vendor/rector/rector/vendor/ondram/ci-detector/src/Ci/AbstractCi.php @@ -1,9 +1,9 @@ getTagsByName($tagName), 'value'), static function (\PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode $value) : bool { + return $value instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode; + }); + } /** * @return TemplateTagValueNode[] */ diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php new file mode 100644 index 000000000..19c20cc68 --- /dev/null +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php @@ -0,0 +1,24 @@ +parameterName = $parameterName; + $this->description = $description; + } + public function __toString() : string + { + return trim("{$this->parameterName} {$this->description}"); + } +} diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php index 0c4860aaf..23f393285 100644 --- a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php @@ -9,25 +9,32 @@ class TemplateTagValueNode implements \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode { use NodeAttributes; - /** @var string */ + /** @var non-empty-string */ public $name; /** @var TypeNode|null */ public $bound; /** @var TypeNode|null */ + public $lowerBound; + /** @var TypeNode|null */ public $default; /** @var string (may be empty) */ public $description; - public function __construct(string $name, ?TypeNode $bound, string $description, ?TypeNode $default = null) + /** + * @param non-empty-string $name + */ + public function __construct(string $name, ?TypeNode $bound, string $description, ?TypeNode $default = null, ?TypeNode $lowerBound = null) { $this->name = $name; $this->bound = $bound; + $this->lowerBound = $lowerBound; $this->default = $default; $this->description = $description; } public function __toString() : string { - $bound = $this->bound !== null ? " of {$this->bound}" : ''; + $upperBound = $this->bound !== null ? " of {$this->bound}" : ''; + $lowerBound = $this->lowerBound !== null ? " super {$this->lowerBound}" : ''; $default = $this->default !== null ? " = {$this->default}" : ''; - return trim("{$this->name}{$bound}{$default} {$this->description}"); + return trim("{$this->name}{$upperBound}{$lowerBound}{$default} {$this->description}"); } } diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php index cc9f8571f..951d74b90 100644 --- a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php @@ -16,21 +16,24 @@ class ArrayShapeNode implements \PHPStan\PhpDocParser\Ast\Type\TypeNode public $sealed; /** @var self::KIND_* */ public $kind; + /** @var ArrayShapeUnsealedTypeNode|null */ + public $unsealedType; /** * @param ArrayShapeItemNode[] $items * @param self::KIND_* $kind */ - public function __construct(array $items, bool $sealed = \true, string $kind = self::KIND_ARRAY) + public function __construct(array $items, bool $sealed = \true, string $kind = self::KIND_ARRAY, ?\PHPStan\PhpDocParser\Ast\Type\ArrayShapeUnsealedTypeNode $unsealedType = null) { $this->items = $items; $this->sealed = $sealed; $this->kind = $kind; + $this->unsealedType = $unsealedType; } public function __toString() : string { $items = $this->items; if (!$this->sealed) { - $items[] = '...'; + $items[] = '...' . $this->unsealedType; } return $this->kind . '{' . implode(', ', $items) . '}'; } diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php new file mode 100644 index 000000000..5d3c314b2 --- /dev/null +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php @@ -0,0 +1,28 @@ +valueType = $valueType; + $this->keyType = $keyType; + } + public function __toString() : string + { + if ($this->keyType !== null) { + return sprintf('<%s, %s>', $this->keyType, $this->valueType); + } + return sprintf('<%s>', $this->valueType); + } +} diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php index 02f109f56..dd3a45026 100644 --- a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php @@ -166,7 +166,7 @@ private function parseText(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens) : $tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_EOL, ...$endTokens); $text .= $tmpText; // stop if we're not at EOL - meaning it's the end of PHPDoc - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) { + if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC)) { break; } if ($this->textBetweenTagsBelongsToDescription) { @@ -209,7 +209,7 @@ private function parseOptionalDescriptionAfterDoctrineTag(\PHPStan\PhpDocParser\ $tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, Lexer::TOKEN_PHPDOC_EOL, ...$endTokens); $text .= $tmpText; // stop if we're not at EOL - meaning it's the end of PHPDoc - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) { + if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC)) { if (!$tokens->isPrecededByHorizontalWhitespace()) { return trim($text . $this->parseText($tokens)->text, " \t"); } @@ -297,6 +297,10 @@ public function parseTagValue(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens case '@phpstan-param-closure-this': $tagValue = $this->parseParamClosureThisTagValue($tokens); break; + case '@pure-unless-callable-is-impure': + case '@phpstan-pure-unless-callable-is-impure': + $tagValue = $this->parsePureUnlessCallableIsImpureTagValue($tokens); + break; case '@var': case '@phpstan-var': case '@psalm-var': @@ -636,6 +640,12 @@ private function parseParamClosureThisTagValue(\PHPStan\PhpDocParser\Parser\Toke $description = $this->parseOptionalDescription($tokens); return new Ast\PhpDoc\ParamClosureThisTagValueNode($type, $parameterName, $description); } + private function parsePureUnlessCallableIsImpureTagValue(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens) : Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode + { + $parameterName = $this->parseRequiredVariableName($tokens); + $description = $this->parseOptionalDescription($tokens); + return new Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode($parameterName, $description); + } private function parseVarTagValue(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens) : Ast\PhpDoc\VarTagValueNode { $type = $this->typeParser->parse($tokens); diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php index f55d5c6d1..076b6595f 100644 --- a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php @@ -3,6 +3,7 @@ declare (strict_types=1); namespace PHPStan\PhpDocParser\Parser; +use PHPStan\ShouldNotHappenException; use function chr; use function hexdec; use function octdec; @@ -35,6 +36,9 @@ private static function parseEscapeSequences(string $str, string $quote) : strin return chr((int) hexdec(substr($str, 1))); } if ($str[0] === 'u') { + if (!isset($matches[2])) { + throw new ShouldNotHappenException(); + } return self::codePointToUtf8((int) hexdec($matches[2])); } return chr((int) octdec($str)); diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php index 787ec4f96..08e7d7866 100644 --- a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php @@ -346,10 +346,12 @@ public function parseTemplateTagValue(\PHPStan\PhpDocParser\Parser\TokenIterator { $name = $tokens->currentTokenValue(); $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); + $upperBound = $lowerBound = null; if ($tokens->tryConsumeTokenValue('of') || $tokens->tryConsumeTokenValue('as')) { - $bound = $this->parse($tokens); - } else { - $bound = null; + $upperBound = $this->parse($tokens); + } + if ($tokens->tryConsumeTokenValue('super')) { + $lowerBound = $this->parse($tokens); } if ($tokens->tryConsumeTokenValue('=')) { $default = $this->parse($tokens); @@ -361,7 +363,10 @@ public function parseTemplateTagValue(\PHPStan\PhpDocParser\Parser\TokenIterator } else { $description = ''; } - return new Ast\PhpDoc\TemplateTagValueNode($name, $bound, $description, $default); + if ($name === '') { + throw new LogicException('Template tag name cannot be empty.'); + } + return new Ast\PhpDoc\TemplateTagValueNode($name, $upperBound, $description, $default, $lowerBound); } /** @phpstan-impure */ private function parseCallable(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate) : Ast\Type\TypeNode @@ -564,6 +569,7 @@ private function parseArrayShape(\PHPStan\PhpDocParser\Parser\TokenIterator $tok $tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET); $items = []; $sealed = \true; + $unsealedType = null; do { $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) { @@ -571,6 +577,15 @@ private function parseArrayShape(\PHPStan\PhpDocParser\Parser\TokenIterator $tok } if ($tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC)) { $sealed = \false; + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) { + if ($kind === Ast\Type\ArrayShapeNode::KIND_ARRAY) { + $unsealedType = $this->parseArrayShapeUnsealedType($tokens); + } else { + $unsealedType = $this->parseListShapeUnsealedType($tokens); + } + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + } $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA); break; } @@ -579,7 +594,7 @@ private function parseArrayShape(\PHPStan\PhpDocParser\Parser\TokenIterator $tok } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)); $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET); - return new Ast\Type\ArrayShapeNode($items, $sealed, $kind); + return new Ast\Type\ArrayShapeNode($items, $sealed, $kind, $unsealedType); } /** @phpstan-impure */ private function parseArrayShapeItem(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens) : Ast\Type\ArrayShapeItemNode @@ -631,6 +646,41 @@ private function parseArrayShapeKey(\PHPStan\PhpDocParser\Parser\TokenIterator $ } return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex); } + /** + * @phpstan-impure + */ + private function parseArrayShapeUnsealedType(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens) : Ast\Type\ArrayShapeUnsealedTypeNode + { + $startLine = $tokens->currentTokenLine(); + $startIndex = $tokens->currentTokenIndex(); + $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $valueType = $this->parse($tokens); + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $keyType = null; + if ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $keyType = $valueType; + $valueType = $this->parse($tokens); + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + } + $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); + return $this->enrichWithAttributes($tokens, new Ast\Type\ArrayShapeUnsealedTypeNode($valueType, $keyType), $startLine, $startIndex); + } + /** + * @phpstan-impure + */ + private function parseListShapeUnsealedType(\PHPStan\PhpDocParser\Parser\TokenIterator $tokens) : Ast\Type\ArrayShapeUnsealedTypeNode + { + $startLine = $tokens->currentTokenLine(); + $startIndex = $tokens->currentTokenIndex(); + $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $valueType = $this->parse($tokens); + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); + return $this->enrichWithAttributes($tokens, new Ast\Type\ArrayShapeUnsealedTypeNode($valueType, null), $startLine, $startIndex); + } /** * @phpstan-impure */ diff --git a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php index 361e2ecb8..a47383342 100644 --- a/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php +++ b/vendor/rector/rector/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php @@ -32,6 +32,7 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTextNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode; +use PHPStan\PhpDocParser\Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\RequireExtendsTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\RequireImplementsTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; @@ -44,6 +45,7 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode; use PHPStan\PhpDocParser\Ast\Type\ArrayShapeNode; +use PHPStan\PhpDocParser\Ast\Type\ArrayShapeUnsealedTypeNode; use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; use PHPStan\PhpDocParser\Ast\Type\CallableTypeNode; use PHPStan\PhpDocParser\Ast\Type\CallableTypeParameterNode; @@ -159,6 +161,12 @@ public function print(Node $node) : string $isOptional = $node->isOptional ? '=' : ''; return trim("{$type}{$isReference}{$isVariadic}{$node->parameterName}") . $isOptional; } + if ($node instanceof ArrayShapeUnsealedTypeNode) { + if ($node->keyType !== null) { + return sprintf('<%s, %s>', $this->printType($node->keyType), $this->printType($node->valueType)); + } + return sprintf('<%s>', $this->printType($node->valueType)); + } if ($node instanceof DoctrineAnnotation) { return (string) $node; } @@ -242,6 +250,9 @@ private function printTagValue(PhpDocTagValueNode $node) : string if ($node instanceof ParamClosureThisTagValueNode) { return trim("{$node->type} {$node->parameterName} {$node->description}"); } + if ($node instanceof PureUnlessCallableIsImpureTagValueNode) { + return trim("{$node->parameterName} {$node->description}"); + } if ($node instanceof PropertyTagValueNode) { $type = $this->printType($node->type); return trim("{$type} {$node->propertyName} {$node->description}"); @@ -255,9 +266,10 @@ private function printTagValue(PhpDocTagValueNode $node) : string return trim($type . ' ' . $node->description); } if ($node instanceof TemplateTagValueNode) { - $bound = $node->bound !== null ? ' of ' . $this->printType($node->bound) : ''; + $upperBound = $node->bound !== null ? ' of ' . $this->printType($node->bound) : ''; + $lowerBound = $node->lowerBound !== null ? ' super ' . $this->printType($node->lowerBound) : ''; $default = $node->default !== null ? ' = ' . $this->printType($node->default) : ''; - return trim("{$node->name}{$bound}{$default} {$node->description}"); + return trim("{$node->name}{$upperBound}{$lowerBound}{$default} {$node->description}"); } if ($node instanceof ThrowsTagValueNode) { $type = $this->printType($node->type); @@ -287,7 +299,7 @@ private function printType(TypeNode $node) : string return $this->printType($item); }, $node->items); if (!$node->sealed) { - $items[] = '...'; + $items[] = '...' . ($node->unsealedType === null ? '' : $this->print($node->unsealedType)); } return $node->kind . '{' . implode(', ', $items) . '}'; } diff --git a/vendor/rector/rector/vendor/psr/container/composer.json b/vendor/rector/rector/vendor/psr/container/composer.json index a9682b6f4..b838a4376 100644 --- a/vendor/rector/rector/vendor/psr/container/composer.json +++ b/vendor/rector/rector/vendor/psr/container/composer.json @@ -22,7 +22,7 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Psr\\Container\\": "src\/" + "RectorPrefix202410\\Psr\\Container\\": "src\/" } }, "extra": { diff --git a/vendor/rector/rector/vendor/psr/container/src/ContainerExceptionInterface.php b/vendor/rector/rector/vendor/psr/container/src/ContainerExceptionInterface.php index 435c877cd..cb7b3eb11 100644 --- a/vendor/rector/rector/vendor/psr/container/src/ContainerExceptionInterface.php +++ b/vendor/rector/rector/vendor/psr/container/src/ContainerExceptionInterface.php @@ -1,6 +1,6 @@ =5.3.0", "react\/cache": "^1.0 || ^0.6 || ^0.5", "react\/event-loop": "^1.2", - "react\/promise": "^3.0 || ^2.7 || ^1.2.1" + "react\/promise": "^3.2 || ^2.7 || ^1.2.1" }, "require-dev": { "phpunit\/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react\/async": "^4 || ^3 || ^2", - "react\/promise-timer": "^1.9" + "react\/async": "^4.3 || ^3 || ^2", + "react\/promise-timer": "^1.11" }, "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Dns\\": "src\/" + "RectorPrefix202410\\React\\Dns\\": "src\/" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\React\\Tests\\Dns\\": "tests\/" + "RectorPrefix202410\\React\\Tests\\Dns\\": "tests\/" } } } \ No newline at end of file diff --git a/vendor/rector/rector/vendor/react/dns/src/BadServerException.php b/vendor/rector/rector/vendor/react/dns/src/BadServerException.php index f2c1898c7..c717ffbc5 100644 --- a/vendor/rector/rector/vendor/react/dns/src/BadServerException.php +++ b/vendor/rector/rector/vendor/react/dns/src/BadServerException.php @@ -1,6 +1,6 @@ class !== Message::CLASS_IN ? 'CLASS' . $this->class . ' ' : ''; $type = 'TYPE' . $this->type; - $ref = new \ReflectionClass('RectorPrefix202405\\React\\Dns\\Model\\Message'); + $ref = new \ReflectionClass('RectorPrefix202410\\React\\Dns\\Model\\Message'); foreach ($ref->getConstants() as $name => $value) { if ($value === $this->type && \strpos($name, 'TYPE_') === 0) { $type = \substr($name, 5); diff --git a/vendor/rector/rector/vendor/react/dns/src/Query/RetryExecutor.php b/vendor/rector/rector/vendor/react/dns/src/Query/RetryExecutor.php index 7f34f8fbf..b89bf148e 100644 --- a/vendor/rector/rector/vendor/react/dns/src/Query/RetryExecutor.php +++ b/vendor/rector/rector/vendor/react/dns/src/Query/RetryExecutor.php @@ -1,9 +1,9 @@ = 2 && \strpos($nameserver, '://') === \false) { // several colons, but not enclosed in square brackets => enclose IPv6 address in square brackets @@ -134,6 +134,10 @@ public function __construct($nameserver, LoopInterface $loop = null) if (!isset($parts['scheme'], $parts['host']) || $parts['scheme'] !== 'tcp' || @\inet_pton(\trim($parts['host'], '[]')) === \false) { throw new \InvalidArgumentException('Invalid nameserver address given'); } + if ($loop !== null && !$loop instanceof LoopInterface) { + // manual type check to support legacy PHP < 7.1 + throw new \InvalidArgumentException('Argument #2 ($loop) expected null|React\\EventLoop\\LoopInterface'); + } $this->nameserver = 'tcp://' . $parts['host'] . ':' . (isset($parts['port']) ? $parts['port'] : 53); $this->loop = $loop ?: Loop::get(); $this->parser = new Parser(); @@ -150,14 +154,14 @@ public function query(Query $query) $queryData = $this->dumper->toBinary($request); $length = \strlen($queryData); if ($length > 0xffff) { - return \RectorPrefix202405\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Query too large for TCP transport')); + return \RectorPrefix202410\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Query too large for TCP transport')); } $queryData = \pack('n', $length) . $queryData; if ($this->socket === null) { // create async TCP/IP connection (may take a while) $socket = @\stream_socket_client($this->nameserver, $errno, $errstr, 0, \STREAM_CLIENT_CONNECT | \STREAM_CLIENT_ASYNC_CONNECT); if ($socket === \false) { - return \RectorPrefix202405\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Unable to connect to DNS server ' . $this->nameserver . ' (' . $errstr . ')', $errno)); + return \RectorPrefix202410\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Unable to connect to DNS server ' . $this->nameserver . ' (' . $errstr . ')', $errno)); } // set socket to non-blocking and wait for it to become writable (connection success/rejected) \stream_set_blocking($socket, \false); diff --git a/vendor/rector/rector/vendor/react/dns/src/Query/TimeoutException.php b/vendor/rector/rector/vendor/react/dns/src/Query/TimeoutException.php index 9b77140df..08de51c2d 100644 --- a/vendor/rector/rector/vendor/react/dns/src/Query/TimeoutException.php +++ b/vendor/rector/rector/vendor/react/dns/src/Query/TimeoutException.php @@ -1,6 +1,6 @@ executor = $executor; $this->loop = $loop ?: Loop::get(); $this->timeout = $timeout; diff --git a/vendor/rector/rector/vendor/react/dns/src/Query/UdpTransportExecutor.php b/vendor/rector/rector/vendor/react/dns/src/Query/UdpTransportExecutor.php index 99c205f72..dc29c053b 100644 --- a/vendor/rector/rector/vendor/react/dns/src/Query/UdpTransportExecutor.php +++ b/vendor/rector/rector/vendor/react/dns/src/Query/UdpTransportExecutor.php @@ -1,13 +1,13 @@ = 2 && \strpos($nameserver, '://') === \false) { // several colons, but not enclosed in square brackets => enclose IPv6 address in square brackets @@ -105,6 +105,10 @@ public function __construct($nameserver, LoopInterface $loop = null) if (!isset($parts['scheme'], $parts['host']) || $parts['scheme'] !== 'udp' || @\inet_pton(\trim($parts['host'], '[]')) === \false) { throw new \InvalidArgumentException('Invalid nameserver address given'); } + if ($loop !== null && !$loop instanceof LoopInterface) { + // manual type check to support legacy PHP < 7.1 + throw new \InvalidArgumentException('Argument #2 ($loop) expected null|React\\EventLoop\\LoopInterface'); + } $this->nameserver = 'udp://' . $parts['host'] . ':' . (isset($parts['port']) ? $parts['port'] : 53); $this->loop = $loop ?: Loop::get(); $this->parser = new Parser(); @@ -115,14 +119,14 @@ public function query(Query $query) $request = Message::createRequestForQuery($query); $queryData = $this->dumper->toBinary($request); if (isset($queryData[$this->maxPacketSize])) { - return \RectorPrefix202405\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Query too large for UDP transport', \defined('SOCKET_EMSGSIZE') ? \SOCKET_EMSGSIZE : 90)); + return \RectorPrefix202410\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Query too large for UDP transport', \defined('SOCKET_EMSGSIZE') ? \SOCKET_EMSGSIZE : 90)); } // UDP connections are instant, so try connection without a loop or timeout $errno = 0; $errstr = ''; $socket = @\stream_socket_client($this->nameserver, $errno, $errstr, 0); if ($socket === \false) { - return \RectorPrefix202405\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Unable to connect to DNS server ' . $this->nameserver . ' (' . $errstr . ')', $errno)); + return \RectorPrefix202410\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Unable to connect to DNS server ' . $this->nameserver . ' (' . $errstr . ')', $errno)); } // set socket to non-blocking and immediately try to send (fill write buffer) \stream_set_blocking($socket, \false); @@ -138,7 +142,7 @@ public function query(Query $query) $written = \fwrite($socket, $queryData); \restore_error_handler(); if ($written !== \strlen($queryData)) { - return \RectorPrefix202405\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Unable to send query to DNS server ' . $this->nameserver . ' (' . $errstr . ')', $errno)); + return \RectorPrefix202410\React\Promise\reject(new \RuntimeException('DNS query for ' . $query->describe() . ' failed: Unable to send query to DNS server ' . $this->nameserver . ' (' . $errstr . ')', $errno)); } $loop = $this->loop; $deferred = new Deferred(function () use($loop, $socket, $query) { diff --git a/vendor/rector/rector/vendor/react/dns/src/RecordNotFoundException.php b/vendor/rector/rector/vendor/react/dns/src/RecordNotFoundException.php index ec0cab6b5..74c838e4a 100644 --- a/vendor/rector/rector/vendor/react/dns/src/RecordNotFoundException.php +++ b/vendor/rector/rector/vendor/react/dns/src/RecordNotFoundException.php @@ -1,6 +1,6 @@ decorateHostsFileExecutor($this->createExecutor($config, $loop ?: Loop::get())); return new Resolver($executor); } @@ -56,8 +60,16 @@ public function create($config, LoopInterface $loop = null) * @throws \InvalidArgumentException for invalid DNS server address * @throws \UnderflowException when given DNS Config object has an empty list of nameservers */ - public function createCached($config, LoopInterface $loop = null, CacheInterface $cache = null) + public function createCached($config, $loop = null, $cache = null) { + if ($loop !== null && !$loop instanceof LoopInterface) { + // manual type check to support legacy PHP < 7.1 + throw new \InvalidArgumentException('Argument #2 ($loop) expected null|React\\EventLoop\\LoopInterface'); + } + if ($cache !== null && !$cache instanceof CacheInterface) { + // manual type check to support legacy PHP < 7.1 + throw new \InvalidArgumentException('Argument #3 ($cache) expected null|React\\Cache\\CacheInterface'); + } // default to keeping maximum of 256 responses in cache unless explicitly given if (!$cache instanceof CacheInterface) { $cache = new ArrayCache(256); diff --git a/vendor/rector/rector/vendor/react/dns/src/Resolver/Resolver.php b/vendor/rector/rector/vendor/react/dns/src/Resolver/Resolver.php index 2bcc1410e..eb3ed6a82 100644 --- a/vendor/rector/rector/vendor/react/dns/src/Resolver/Resolver.php +++ b/vendor/rector/rector/vendor/react/dns/src/Resolver/Resolver.php @@ -1,11 +1,11 @@ loop = new EventLoop(); diff --git a/vendor/rector/rector/vendor/react/event-loop/src/ExtLibeventLoop.php b/vendor/rector/rector/vendor/react/event-loop/src/ExtLibeventLoop.php index 691b37404..cd0567c93 100644 --- a/vendor/rector/rector/vendor/react/event-loop/src/ExtLibeventLoop.php +++ b/vendor/rector/rector/vendor/react/event-loop/src/ExtLibeventLoop.php @@ -1,12 +1,12 @@ streamEvents[(int) $stream])) { - $this->streamEvents[(int) $stream] = \RectorPrefix202405\uv_poll_init_socket($this->uv, $stream); + $this->streamEvents[(int) $stream] = \RectorPrefix202410\uv_poll_init_socket($this->uv, $stream); } if ($this->streamEvents[(int) $stream] !== \false) { $this->pollStream($stream); diff --git a/vendor/rector/rector/vendor/react/event-loop/src/Factory.php b/vendor/rector/rector/vendor/react/event-loop/src/Factory.php index 95551733d..4999c89eb 100644 --- a/vendor/rector/rector/vendor/react/event-loop/src/Factory.php +++ b/vendor/rector/rector/vendor/react/event-loop/src/Factory.php @@ -1,6 +1,6 @@ promise(); -$deferred->resolve(mixed $value = null); -$deferred->reject(mixed $reason = null); -$deferred->notify(mixed $update = null); +$deferred->resolve(mixed $value); +$deferred->reject(\Throwable $reason); ``` The `promise` method returns the promise of the deferred. The `resolve` and `reject` methods control the state of the deferred. -The deprecated `notify` method is for progress notification. - The constructor of the `Deferred` accepts an optional `$canceller` argument. See [Promise](#promise-2) for more information. @@ -121,7 +108,7 @@ keeping the authority to modify its state to yourself. #### Deferred::resolve() ```php -$deferred->resolve(mixed $value = null); +$deferred->resolve(mixed $value); ``` Resolves the promise returned by `promise()`. All consumers are notified by @@ -131,10 +118,12 @@ having `$onFulfilled` (which they registered via `$promise->then()`) called with If `$value` itself is a promise, the promise will transition to the state of this promise once it is resolved. +See also the [`resolve()` function](#resolve). + #### Deferred::reject() ```php -$deferred->reject(mixed $reason = null); +$deferred->reject(\Throwable $reason); ``` Rejects the promise returned by `promise()`, signalling that the deferred's @@ -142,27 +131,14 @@ computation failed. All consumers are notified by having `$onRejected` (which they registered via `$promise->then()`) called with `$reason`. -If `$reason` itself is a promise, the promise will be rejected with the outcome -of this promise regardless whether it fulfills or rejects. - -#### Deferred::notify() - -> Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore. - -```php -$deferred->notify(mixed $update = null); -``` - -Triggers progress notifications, to indicate to consumers that the computation -is making progress toward its result. - -All consumers are notified by having `$onProgress` (which they registered via -`$promise->then()`) called with `$update`. +See also the [`reject()` function](#reject). ### PromiseInterface The promise interface provides the common interface for all promise implementations. +See [Promise](#promise-2) for the only public implementation exposed by this +package. A promise represents an eventual outcome, which is either fulfillment (success) and an associated value, or rejection (failure) and an associated reason. @@ -170,32 +146,22 @@ and an associated value, or rejection (failure) and an associated reason. Once in the fulfilled or rejected state, a promise becomes immutable. Neither its state nor its result (or error) can be modified. -#### Implementations - -* [Promise](#promise-2) -* [FulfilledPromise](#fulfilledpromise) (deprecated) -* [RejectedPromise](#rejectedpromise) (deprecated) -* [LazyPromise](#lazypromise) (deprecated) - #### PromiseInterface::then() ```php -$transformedPromise = $promise->then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null); +$transformedPromise = $promise->then(callable $onFulfilled = null, callable $onRejected = null); ``` Transforms a promise's value by applying a function to the promise's fulfillment or rejection value. Returns a new promise for the transformed result. -The `then()` method registers new fulfilled, rejection and progress handlers -with a promise (all parameters are optional): +The `then()` method registers new fulfilled and rejection handlers with a promise +(all parameters are optional): * `$onFulfilled` will be invoked once the promise is fulfilled and passed the result as the first argument. * `$onRejected` will be invoked once the promise is rejected and passed the reason as the first argument. - * `$onProgress` (deprecated) will be invoked whenever the producer of the promise - triggers progress notifications and passed a single argument (whatever it - wants) to indicate progress. It returns a new promise that will fulfill with the return value of either `$onFulfilled` or `$onRejected`, whichever is called, or will reject with @@ -208,51 +174,16 @@ the same call to `then()`: never both. 2. `$onFulfilled` and `$onRejected` will never be called more than once. - 3. `$onProgress` (deprecated) may be called multiple times. #### See also * [resolve()](#resolve) - Creating a resolved promise * [reject()](#reject) - Creating a rejected promise -* [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone) -* [done() vs. then()](#done-vs-then) - -### ExtendedPromiseInterface - -The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut -and utility methods which are not part of the Promises/A specification. - -#### Implementations - -* [Promise](#promise-1) -* [FulfilledPromise](#fulfilledpromise) (deprecated) -* [RejectedPromise](#rejectedpromise) (deprecated) -* [LazyPromise](#lazypromise) (deprecated) - -#### ExtendedPromiseInterface::done() - -```php -$promise->done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null); -``` -Consumes the promise's ultimate value if the promise fulfills, or handles the -ultimate error. - -It will cause a fatal error if either `$onFulfilled` or `$onRejected` throw or -return a rejected promise. - -Since the purpose of `done()` is consumption rather than transformation, -`done()` always returns `null`. - -#### See also - -* [PromiseInterface::then()](#promiseinterfacethen) -* [done() vs. then()](#done-vs-then) - -#### ExtendedPromiseInterface::otherwise() +#### PromiseInterface::catch() ```php -$promise->otherwise(callable $onRejected); +$promise->catch(callable $onRejected); ``` Registers a rejection handler for promise. It is a shortcut for: @@ -266,19 +197,19 @@ only specific errors. ```php $promise - ->otherwise(function (\RuntimeException $reason) { + ->catch(function (\RuntimeException $reason) { // Only catch \RuntimeException instances // All other types of errors will propagate automatically }) - ->otherwise(function ($reason) { + ->catch(function (\Throwable $reason) { // Catch other errors - )}; + }); ``` -#### ExtendedPromiseInterface::always() +#### PromiseInterface::finally() ```php -$newPromise = $promise->always(callable $onFulfilledOrRejected); +$newPromise = $promise->finally(callable $onFulfilledOrRejected); ``` Allows you to execute "cleanup" type tasks in a promise chain. @@ -297,16 +228,16 @@ when the promise is either fulfilled or rejected. rejected promise, `$newPromise` will reject with the thrown exception or rejected promise's reason. -`always()` behaves similarly to the synchronous finally statement. When combined -with `otherwise()`, `always()` allows you to write code that is similar to the familiar +`finally()` behaves similarly to the synchronous finally statement. When combined +with `catch()`, `finally()` allows you to write code that is similar to the familiar synchronous catch/finally pair. Consider the following synchronous code: ```php try { - return doSomething(); -} catch(\Exception $e) { + return doSomething(); +} catch (\Throwable $e) { return handleError($e); } finally { cleanup(); @@ -318,48 +249,47 @@ written: ```php return doSomething() - ->otherwise('handleError') - ->always('cleanup'); + ->catch('handleError') + ->finally('cleanup'); ``` -#### ExtendedPromiseInterface::progress() - -> Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore. +#### PromiseInterface::cancel() -```php -$promise->progress(callable $onProgress); +``` php +$promise->cancel(); ``` -Registers a handler for progress updates from promise. It is a shortcut for: +The `cancel()` method notifies the creator of the promise that there is no +further interest in the results of the operation. -```php -$promise->then(null, null, $onProgress); -``` +Once a promise is settled (either fulfilled or rejected), calling `cancel()` on +a promise has no effect. -### CancellablePromiseInterface +#### ~~PromiseInterface::otherwise()~~ -A cancellable promise provides a mechanism for consumers to notify the creator -of the promise that they are not longer interested in the result of an -operation. +> Deprecated since v3.0.0, see [`catch()`](#promiseinterfacecatch) instead. -#### CancellablePromiseInterface::cancel() +The `otherwise()` method registers a rejection handler for a promise. -``` php -$promise->cancel(); +This method continues to exist only for BC reasons and to ease upgrading +between versions. It is an alias for: + +```php +$promise->catch($onRejected); ``` -The `cancel()` method notifies the creator of the promise that there is no -further interest in the results of the operation. +#### ~~PromiseInterface::always()~~ -Once a promise is settled (either fulfilled or rejected), calling `cancel()` on -a promise has no effect. +> Deprecated since v3.0.0, see [`finally()`](#promiseinterfacefinally) instead. -#### Implementations +The `always()` method allows you to execute "cleanup" type tasks in a promise chain. -* [Promise](#promise-1) -* [FulfilledPromise](#fulfilledpromise) (deprecated) -* [RejectedPromise](#rejectedpromise) (deprecated) -* [LazyPromise](#lazypromise) (deprecated) +This method continues to exist only for BC reasons and to ease upgrading +between versions. It is an alias for: + +```php +$promise->finally($onFulfilledOrRejected); +``` ### Promise @@ -367,16 +297,14 @@ Creates a promise whose state is controlled by the functions passed to `$resolver`. ```php -$resolver = function (callable $resolve, callable $reject, callable $notify) { +$resolver = function (callable $resolve, callable $reject) { // Do some work, possibly asynchronously, and then - // resolve or reject. You can notify of progress events (deprecated) - // along the way if you want/need. + // resolve or reject. $resolve($awesomeResult); // or throw new Exception('Promise rejected'); // or $resolve($anotherPromise); // or $reject($nastyError); - // or $notify($progressNotification); }; $canceller = function () { @@ -390,7 +318,7 @@ $promise = new React\Promise\Promise($resolver, $canceller); ``` The promise constructor receives a resolver function and an optional canceller -function which both will be called with 3 arguments: +function which both will be called with two arguments: * `$resolve($value)` - Primary function that seals the fate of the returned promise. Accepts either a non-promise value, or another promise. @@ -399,7 +327,6 @@ function which both will be called with 3 arguments: fate will be equivalent to that of `$otherPromise`. * `$reject($reason)` - Function that rejects the promise. It is recommended to just throw an exception instead of using `$reject()`. - * `$notify($update)` - Deprecated function that issues progress events for the promise. If the resolver or canceller throw an exception, the promise will be rejected with that thrown exception as the rejection reason. @@ -407,108 +334,108 @@ with that thrown exception as the rejection reason. The resolver function will be called immediately, the canceller function only once all consumers called the `cancel()` method of the promise. -### FulfilledPromise - -> Deprecated in v2.8.0: External usage of `FulfilledPromise` is deprecated, use `resolve()` instead. - -Creates a already fulfilled promise. - -```php -$promise = React\Promise\FulfilledPromise($value); -``` - -Note, that `$value` **cannot** be a promise. It's recommended to use -[resolve()](#resolve) for creating resolved promises. +### Functions -### RejectedPromise +Useful functions for creating and joining collections of promises. -> Deprecated in v2.8.0: External usage of `RejectedPromise` is deprecated, use `reject()` instead. +All functions working on promise collections (like `all()`, `race()`, +etc.) support cancellation. This means, if you call `cancel()` on the returned +promise, all promises in the collection are cancelled. -Creates a already rejected promise. +#### resolve() ```php -$promise = React\Promise\RejectedPromise($reason); +$promise = React\Promise\resolve(mixed $promiseOrValue); ``` -Note, that `$reason` **cannot** be a promise. It's recommended to use -[reject()](#reject) for creating rejected promises. - -### LazyPromise +Creates a promise for the supplied `$promiseOrValue`. -> Deprecated in v2.8.0: LazyPromise is deprecated and should not be used anymore. +If `$promiseOrValue` is a value, it will be the resolution value of the +returned promise. -Creates a promise which will be lazily initialized by `$factory` once a consumer -calls the `then()` method. +If `$promiseOrValue` is a thenable (any object that provides a `then()` method), +a trusted promise that follows the state of the thenable is returned. -```php -$factory = function () { - $deferred = new React\Promise\Deferred(); +If `$promiseOrValue` is a promise, it will be returned as is. - // Do some heavy stuff here and resolve the deferred once completed +The resulting `$promise` implements the [`PromiseInterface`](#promiseinterface) +and can be consumed like any other promise: - return $deferred->promise(); -}; - -$promise = new React\Promise\LazyPromise($factory); +```php +$promise = React\Promise\resolve(42); -// $factory will only be executed once we call then() -$promise->then(function ($value) { +$promise->then(function (int $result): void { + var_dump($result); +}, function (\Throwable $e): void { + echo 'Error: ' . $e->getMessage() . PHP_EOL; }); ``` -### Functions - -Useful functions for creating, joining, mapping and reducing collections of -promises. - -All functions working on promise collections (like `all()`, `race()`, `some()` -etc.) support cancellation. This means, if you call `cancel()` on the returned -promise, all promises in the collection are cancelled. If the collection itself -is a promise which resolves to an array, this promise is also cancelled. - -#### resolve() +#### reject() ```php -$promise = React\Promise\resolve(mixed $promiseOrValue); +$promise = React\Promise\reject(\Throwable $reason); ``` -Creates a promise for the supplied `$promiseOrValue`. +Creates a rejected promise for the supplied `$reason`. -If `$promiseOrValue` is a value, it will be the resolution value of the -returned promise. +Note that the [`\Throwable`](https://www.php.net/manual/en/class.throwable.php) interface introduced in PHP 7 covers +both user land [`\Exception`](https://www.php.net/manual/en/class.exception.php)'s and +[`\Error`](https://www.php.net/manual/en/class.error.php) internal PHP errors. By enforcing `\Throwable` as reason to +reject a promise, any language error or user land exception can be used to reject a promise. -If `$promiseOrValue` is a thenable (any object that provides a `then()` method), -a trusted promise that follows the state of the thenable is returned. +The resulting `$promise` implements the [`PromiseInterface`](#promiseinterface) +and can be consumed like any other promise: -If `$promiseOrValue` is a promise, it will be returned as is. +```php +$promise = React\Promise\reject(new RuntimeException('Request failed')); -Note: The promise returned is always a promise implementing -[ExtendedPromiseInterface](#extendedpromiseinterface). If you pass in a custom -promise which only implements [PromiseInterface](#promiseinterface), this -promise will be assimilated to a extended promise following `$promiseOrValue`. +$promise->then(function (int $result): void { + var_dump($result); +}, function (\Throwable $e): void { + echo 'Error: ' . $e->getMessage() . PHP_EOL; +}); +``` -#### reject() +Note that rejected promises should always be handled similar to how any +exceptions should always be caught in a `try` + `catch` block. If you remove the +last reference to a rejected promise that has not been handled, it will +report an unhandled promise rejection: ```php -$promise = React\Promise\reject(mixed $promiseOrValue); -``` +function incorrect(): int +{ + $promise = React\Promise\reject(new RuntimeException('Request failed')); -Creates a rejected promise for the supplied `$promiseOrValue`. + // Commented out: No rejection handler registered here. + // $promise->then(null, function (\Throwable $e): void { /* ignore */ }); -If `$promiseOrValue` is a value, it will be the rejection value of the -returned promise. + // Returning from a function will remove all local variable references, hence why + // this will report an unhandled promise rejection here. + return 42; +} + +// Calling this function will log an error message plus its stack trace: +// Unhandled promise rejection with RuntimeException: Request failed in example.php:10 +incorrect(); +``` + +A rejected promise will be considered "handled" if you catch the rejection +reason with either the [`then()` method](#promiseinterfacethen), the +[`catch()` method](#promiseinterfacecatch), or the +[`finally()` method](#promiseinterfacefinally). Note that each of these methods +return a new promise that may again be rejected if you re-throw an exception. -If `$promiseOrValue` is a promise, its completion value will be the rejected -value of the returned promise. +A rejected promise will also be considered "handled" if you abort the operation +with the [`cancel()` method](#promiseinterfacecancel) (which in turn would +usually reject the promise if it is still pending). -This can be useful in situations where you need to reject a promise without -throwing an exception. For example, it allows you to propagate a rejection with -the value of another promise. +See also the [`set_rejection_handler()` function](#set_rejection_handler). #### all() ```php -$promise = React\Promise\all(array|React\Promise\PromiseInterface $promisesOrValues); +$promise = React\Promise\all(iterable $promisesOrValues); ``` Returns a promise that will resolve only once all the items in @@ -519,16 +446,19 @@ will be an array containing the resolution values of each of the items in #### race() ```php -$promise = React\Promise\race(array|React\Promise\PromiseInterface $promisesOrValues); +$promise = React\Promise\race(iterable $promisesOrValues); ``` Initiates a competitive race that allows one winner. Returns a promise which is resolved in the same way the first settled promise resolves. +The returned promise will become **infinitely pending** if `$promisesOrValues` +contains 0 items. + #### any() ```php -$promise = React\Promise\any(array|React\Promise\PromiseInterface $promisesOrValues); +$promise = React\Promise\any(iterable $promisesOrValues); ``` Returns a promise that will resolve when any one of the items in @@ -536,58 +466,52 @@ Returns a promise that will resolve when any one of the items in will be the resolution value of the triggering item. The returned promise will only reject if *all* items in `$promisesOrValues` are -rejected. The rejection value will be an array of all rejection reasons. +rejected. The rejection value will be a `React\Promise\Exception\CompositeException` +which holds all rejection reasons. The rejection reasons can be obtained with +`CompositeException::getThrowables()`. The returned promise will also reject with a `React\Promise\Exception\LengthException` if `$promisesOrValues` contains 0 items. -#### some() +#### set_rejection_handler() ```php -$promise = React\Promise\some(array|React\Promise\PromiseInterface $promisesOrValues, integer $howMany); +React\Promise\set_rejection_handler(?callable $callback): ?callable; ``` -Returns a promise that will resolve when `$howMany` of the supplied items in -`$promisesOrValues` resolve. The resolution value of the returned promise -will be an array of length `$howMany` containing the resolution values of the -triggering items. - -The returned promise will reject if it becomes impossible for `$howMany` items -to resolve (that is, when `(count($promisesOrValues) - $howMany) + 1` items -reject). The rejection value will be an array of -`(count($promisesOrValues) - $howMany) + 1` rejection reasons. - -The returned promise will also reject with a `React\Promise\Exception\LengthException` -if `$promisesOrValues` contains less items than `$howMany`. - -#### map() +Sets the global rejection handler for unhandled promise rejections. -```php -$promise = React\Promise\map(array|React\Promise\PromiseInterface $promisesOrValues, callable $mapFunc); -``` +Note that rejected promises should always be handled similar to how any +exceptions should always be caught in a `try` + `catch` block. If you remove +the last reference to a rejected promise that has not been handled, it will +report an unhandled promise rejection. See also the [`reject()` function](#reject) +for more details. -Traditional map function, similar to `array_map()`, but allows input to contain -promises and/or values, and `$mapFunc` may return either a value or a promise. +The `?callable $callback` argument MUST be a valid callback function that +accepts a single `Throwable` argument or a `null` value to restore the +default promise rejection handler. The return value of the callback function +will be ignored and has no effect, so you SHOULD return a `void` value. The +callback function MUST NOT throw or the program will be terminated with a +fatal error. -The map function receives each item as argument, where item is a fully resolved -value of a promise or value in `$promisesOrValues`. +The function returns the previous rejection handler or `null` if using the +default promise rejection handler. -#### reduce() +The default promise rejection handler will log an error message plus its stack +trace: ```php -$promise = React\Promise\reduce(array|React\Promise\PromiseInterface $promisesOrValues, callable $reduceFunc , $initialValue = null); +// Unhandled promise rejection with RuntimeException: Unhandled in example.php:2 +React\Promise\reject(new RuntimeException('Unhandled')); ``` -Traditional reduce function, similar to `array_reduce()`, but input may contain -promises and/or values, and `$reduceFunc` may return either a value or a -promise, *and* `$initialValue` may be a promise or a value for the starting -value. - -### PromisorInterface - -The `React\Promise\PromisorInterface` provides a common interface for objects -that provide a promise. `React\Promise\Deferred` implements it, but since it -is part of the public API anyone can implement it. +The promise rejection handler may be used to use customize the log message or +write to custom log targets. As a rule of thumb, this function should only be +used as a last resort and promise rejections are best handled with either the +[`then()` method](#promiseinterfacethen), the +[`catch()` method](#promiseinterfacecatch), or the +[`finally()` method](#promiseinterfacefinally). +See also the [`reject()` function](#reject) for more details. Examples -------- @@ -600,7 +524,7 @@ function getAwesomeResultPromise() $deferred = new React\Promise\Deferred(); // Execute a Node.js-style function using the callback pattern - computeAwesomeResultAsynchronously(function ($error, $result) use ($deferred) { + computeAwesomeResultAsynchronously(function (\Throwable $error, $result) use ($deferred) { if ($error) { $deferred->reject($error); } else { @@ -617,11 +541,8 @@ getAwesomeResultPromise() function ($value) { // Deferred resolved, do something with $value }, - function ($reason) { + function (\Throwable $reason) { // Deferred rejected, do something with $reason - }, - function ($update) { - // Progress notification triggered, do something with $update } ); ``` @@ -689,17 +610,17 @@ $deferred->promise() ->then(function ($x) { throw new \Exception($x + 1); }) - ->otherwise(function (\Exception $x) { + ->catch(function (\Exception $x) { // Propagate the rejection throw $x; }) - ->otherwise(function (\Exception $x) { + ->catch(function (\Exception $x) { // Can also propagate by returning another rejection return React\Promise\reject( new \Exception($x->getMessage() + 1) ); }) - ->otherwise(function ($x) { + ->catch(function ($x) { echo 'Reject ' . $x->getMessage(); // 3 }); @@ -721,7 +642,7 @@ $deferred->promise() ->then(function ($x) { throw new \Exception($x + 1); }) - ->otherwise(function (\Exception $x) { + ->catch(function (\Exception $x) { // Handle the rejection, and don't propagate. // This is like catch without a rethrow return $x->getMessage() + 1; @@ -733,131 +654,57 @@ $deferred->promise() $deferred->resolve(1); // Prints "Mixed 4" ``` -#### Progress event forwarding - -> Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore. - -In the same way as resolution and rejection handlers, your progress handler -**MUST** return a progress event to be propagated to the next link in the chain. -If you return nothing, `null` will be propagated. - -Also in the same way as resolutions and rejections, if you don't register a -progress handler, the update will be propagated through. - -If your progress handler throws an exception, the exception will be propagated -to the next link in the chain. The best thing to do is to ensure your progress -handlers do not throw exceptions. - -This gives you the opportunity to transform progress events at each step in the -chain so that they are meaningful to the next step. It also allows you to choose -not to transform them, and simply let them propagate untransformed, by not -registering a progress handler. +Install +------- -```php -$deferred = new React\Promise\Deferred(); +The recommended way to install this library is [through Composer](https://getcomposer.org/). +[New to Composer?](https://getcomposer.org/doc/00-intro.md) -$deferred->promise() - ->progress(function ($update) { - return $update + 1; - }) - ->progress(function ($update) { - echo 'Progress ' . $update; // 2 - }); +This project follows [SemVer](https://semver.org/). +This will install the latest supported version from this branch: -$deferred->notify(1); // Prints "Progress 2" +```bash +composer require react/promise:^3.2 ``` -### done() vs. then() - -The golden rule is: - - Either return your promise, or call done() on it. - -At a first glance, `then()` and `done()` seem very similar. However, there are -important distinctions. - -The intent of `then()` is to transform a promise's value and to pass or return -a new promise for the transformed value along to other parts of your code. - -The intent of `done()` is to consume a promise's value, transferring -responsibility for the value to your code. - -In addition to transforming a value, `then()` allows you to recover from, or -propagate intermediate errors. Any errors that are not handled will be caught -by the promise machinery and used to reject the promise returned by `then()`. - -Calling `done()` transfers all responsibility for errors to your code. If an -error (either a thrown exception or returned rejection) escapes the -`$onFulfilled` or `$onRejected` callbacks you provide to done, it will be -rethrown in an uncatchable way causing a fatal error. +See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades. -```php -function getJsonResult() -{ - return queryApi() - ->then( - // Transform API results to an object - function ($jsonResultString) { - return json_decode($jsonResultString); - }, - // Transform API errors to an exception - function ($jsonErrorString) { - $object = json_decode($jsonErrorString); - throw new ApiErrorException($object->errorMessage); - } - ); -} +This project aims to run on any platform and thus does not require any PHP +extensions and supports running on PHP 7.1 through current PHP 8+. +It's *highly recommended to use the latest supported PHP version* for this project. -// Here we provide no rejection handler. If the promise returned has been -// rejected, the ApiErrorException will be thrown -getJsonResult() - ->done( - // Consume transformed object - function ($jsonResultObject) { - // Do something with $jsonResultObject - } - ); +We're committed to providing long-term support (LTS) options and to provide a +smooth upgrade path. If you're using an older PHP version, you may use the +[`2.x` branch](https://github.com/reactphp/promise/tree/2.x) (PHP 5.4+) or +[`1.x` branch](https://github.com/reactphp/promise/tree/1.x) (PHP 5.3+) which both +provide a compatible API but do not take advantage of newer language features. +You may target multiple versions at the same time to support a wider range of +PHP versions like this: -// Here we provide a rejection handler which will either throw while debugging -// or log the exception -getJsonResult() - ->done( - function ($jsonResultObject) { - // Do something with $jsonResultObject - }, - function (ApiErrorException $exception) { - if (isDebug()) { - throw $exception; - } else { - logException($exception); - } - } - ); +```bash +composer require "react/promise:^3 || ^2 || ^1" ``` -Note that if a rejection value is not an instance of `\Exception`, it will be -wrapped in an exception of the type `React\Promise\UnhandledRejectionException`. - -You can get the original rejection reason by calling `$exception->getReason()`. +## Tests -Install -------- +To run the test suite, you first need to clone this repo and then install all +dependencies [through Composer](https://getcomposer.org/): -The recommended way to install this library is [through Composer](https://getcomposer.org). -[New to Composer?](https://getcomposer.org/doc/00-intro.md) +```bash +composer install +``` -This project follows [SemVer](https://semver.org/). -This will install the latest supported version: +To run the test suite, go to the project root and run: ```bash -composer require react/promise:^2.11 +vendor/bin/phpunit ``` -See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades. +On top of this, we use PHPStan on max level to ensure type safety across the project: -This project aims to run on any platform and thus does not require any PHP -extensions and supports running on legacy PHP 5.4 through current PHP 8+ and HHVM. -It's *highly recommended to use the latest supported PHP version* for this project. +```bash +vendor/bin/phpstan +``` Credits ------- diff --git a/vendor/rector/rector/vendor/react/promise/composer.json b/vendor/rector/rector/vendor/react/promise/composer.json index 468d857d7..f0f18f269 100644 --- a/vendor/rector/rector/vendor/react/promise/composer.json +++ b/vendor/rector/rector/vendor/react/promise/composer.json @@ -25,14 +25,15 @@ } ], "require": { - "php": ">=5.4.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit\/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "phpstan\/phpstan": "1.10.39 || 1.4.10", + "phpunit\/phpunit": "^9.6 || ^7.5" }, "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Promise\\": "src\/" + "RectorPrefix202410\\React\\Promise\\": "src\/" }, "files": [ "src\/functions_include.php" @@ -40,11 +41,14 @@ }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\React\\Promise\\": [ - "tests\/", - "tests\/fixtures\/" + "RectorPrefix202410\\React\\Promise\\": [ + "tests\/fixtures\/", + "tests\/" ] - } + }, + "files": [ + "tests\/Fiber.php" + ] }, "keywords": [ "promise", diff --git a/vendor/rector/rector/vendor/react/promise/src/CancellablePromiseInterface.php b/vendor/rector/rector/vendor/react/promise/src/CancellablePromiseInterface.php deleted file mode 100644 index be96ec9d5..000000000 --- a/vendor/rector/rector/vendor/react/promise/src/CancellablePromiseInterface.php +++ /dev/null @@ -1,17 +0,0 @@ - + */ private $promise; + /** @var callable(T):void */ private $resolveCallback; + /** @var callable(\Throwable):void */ private $rejectCallback; - private $notifyCallback; - private $canceller; - public function __construct(callable $canceller = null) + /** + * @param (callable(callable(T):void,callable(\Throwable):void):void)|null $canceller + */ + public function __construct(?callable $canceller = null) { - $this->canceller = $canceller; + $this->promise = new Promise(function ($resolve, $reject) : void { + $this->resolveCallback = $resolve; + $this->rejectCallback = $reject; + }, $canceller); } - public function promise() + /** + * @return PromiseInterface + */ + public function promise() : PromiseInterface { - if (null === $this->promise) { - $this->promise = new Promise(function ($resolve, $reject, $notify) { - $this->resolveCallback = $resolve; - $this->rejectCallback = $reject; - $this->notifyCallback = $notify; - }, $this->canceller); - $this->canceller = null; - } return $this->promise; } - public function resolve($value = null) - { - $this->promise(); - \call_user_func($this->resolveCallback, $value); - } - public function reject($reason = null) - { - $this->promise(); - \call_user_func($this->rejectCallback, $reason); - } /** - * @deprecated 2.6.0 Progress support is deprecated and should not be used anymore. - * @param mixed $update + * @param T $value */ - public function notify($update = null) + public function resolve($value) : void { - $this->promise(); - \call_user_func($this->notifyCallback, $update); + ($this->resolveCallback)($value); } - /** - * @deprecated 2.2.0 - * @see Deferred::notify() - */ - public function progress($update = null) + public function reject(\Throwable $reason) : void { - $this->notify($update); + ($this->rejectCallback)($reason); } } diff --git a/vendor/rector/rector/vendor/react/promise/src/Exception/CompositeException.php b/vendor/rector/rector/vendor/react/promise/src/Exception/CompositeException.php new file mode 100644 index 000000000..af5e40bcd --- /dev/null +++ b/vendor/rector/rector/vendor/react/promise/src/Exception/CompositeException.php @@ -0,0 +1,29 @@ +throwables = $throwables; + } + /** + * @return \Throwable[] + */ + public function getThrowables() : array + { + return $this->throwables; + } +} diff --git a/vendor/rector/rector/vendor/react/promise/src/Exception/LengthException.php b/vendor/rector/rector/vendor/react/promise/src/Exception/LengthException.php index 6bb548fb1..2b10e9c9e 100644 --- a/vendor/rector/rector/vendor/react/promise/src/Exception/LengthException.php +++ b/vendor/rector/rector/vendor/react/promise/src/Exception/LengthException.php @@ -1,6 +1,6 @@ then(null, $onRejected); - * ``` - * - * Additionally, you can type hint the `$reason` argument of `$onRejected` to catch - * only specific errors. - * - * @param callable $onRejected - * @return ExtendedPromiseInterface - */ - public function otherwise(callable $onRejected); - /** - * Allows you to execute "cleanup" type tasks in a promise chain. - * - * It arranges for `$onFulfilledOrRejected` to be called, with no arguments, - * when the promise is either fulfilled or rejected. - * - * * If `$promise` fulfills, and `$onFulfilledOrRejected` returns successfully, - * `$newPromise` will fulfill with the same value as `$promise`. - * * If `$promise` fulfills, and `$onFulfilledOrRejected` throws or returns a - * rejected promise, `$newPromise` will reject with the thrown exception or - * rejected promise's reason. - * * If `$promise` rejects, and `$onFulfilledOrRejected` returns successfully, - * `$newPromise` will reject with the same reason as `$promise`. - * * If `$promise` rejects, and `$onFulfilledOrRejected` throws or returns a - * rejected promise, `$newPromise` will reject with the thrown exception or - * rejected promise's reason. - * - * `always()` behaves similarly to the synchronous finally statement. When combined - * with `otherwise()`, `always()` allows you to write code that is similar to the familiar - * synchronous catch/finally pair. - * - * Consider the following synchronous code: - * - * ```php - * try { - * return doSomething(); - * } catch(\Exception $e) { - * return handleError($e); - * } finally { - * cleanup(); - * } - * ``` - * - * Similar asynchronous code (with `doSomething()` that returns a promise) can be - * written: - * - * ```php - * return doSomething() - * ->otherwise('handleError') - * ->always('cleanup'); - * ``` - * - * @param callable $onFulfilledOrRejected - * @return ExtendedPromiseInterface - */ - public function always(callable $onFulfilledOrRejected); - /** - * Registers a handler for progress updates from promise. It is a shortcut for: - * - * ```php - * $promise->then(null, null, $onProgress); - * ``` - * - * @param callable $onProgress - * @return ExtendedPromiseInterface - * @deprecated 2.6.0 Progress support is deprecated and should not be used anymore. - */ - public function progress(callable $onProgress); -} diff --git a/vendor/rector/rector/vendor/react/promise/src/FulfilledPromise.php b/vendor/rector/rector/vendor/react/promise/src/FulfilledPromise.php deleted file mode 100644 index 3e757d8ec..000000000 --- a/vendor/rector/rector/vendor/react/promise/src/FulfilledPromise.php +++ /dev/null @@ -1,60 +0,0 @@ -value = $value; - } - public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) - { - if (null === $onFulfilled) { - return $this; - } - try { - return resolve($onFulfilled($this->value)); - } catch (\Throwable $exception) { - return new RejectedPromise($exception); - } catch (\Exception $exception) { - return new RejectedPromise($exception); - } - } - public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) - { - if (null === $onFulfilled) { - return; - } - $result = $onFulfilled($this->value); - if ($result instanceof ExtendedPromiseInterface) { - $result->done(); - } - } - public function otherwise(callable $onRejected) - { - return $this; - } - public function always(callable $onFulfilledOrRejected) - { - return $this->then(function ($value) use($onFulfilledOrRejected) { - return resolve($onFulfilledOrRejected())->then(function () use($value) { - return $value; - }); - }); - } - public function progress(callable $onProgress) - { - return $this; - } - public function cancel() - { - } -} diff --git a/vendor/rector/rector/vendor/react/promise/src/CancellationQueue.php b/vendor/rector/rector/vendor/react/promise/src/Internal/CancellationQueue.php similarity index 70% rename from vendor/rector/rector/vendor/react/promise/src/CancellationQueue.php rename to vendor/rector/rector/vendor/react/promise/src/Internal/CancellationQueue.php index 412c29176..8793a7b64 100644 --- a/vendor/rector/rector/vendor/react/promise/src/CancellationQueue.php +++ b/vendor/rector/rector/vendor/react/promise/src/Internal/CancellationQueue.php @@ -1,12 +1,17 @@ started) { return; @@ -14,7 +19,10 @@ public function __invoke() $this->started = \true; $this->drain(); } - public function enqueue($cancellable) + /** + * @param mixed $cancellable + */ + public function enqueue($cancellable) : void { if (!\is_object($cancellable) || !\method_exists($cancellable, 'then') || !\method_exists($cancellable, 'cancel')) { return; @@ -24,15 +32,15 @@ public function enqueue($cancellable) $this->drain(); } } - private function drain() + private function drain() : void { for ($i = \key($this->queue); isset($this->queue[$i]); $i++) { $cancellable = $this->queue[$i]; + \assert(\method_exists($cancellable, 'cancel')); $exception = null; try { $cancellable->cancel(); } catch (\Throwable $exception) { - } catch (\Exception $exception) { } unset($this->queue[$i]); if ($exception) { diff --git a/vendor/rector/rector/vendor/react/promise/src/Internal/FulfilledPromise.php b/vendor/rector/rector/vendor/react/promise/src/Internal/FulfilledPromise.php new file mode 100644 index 000000000..5910e5f30 --- /dev/null +++ b/vendor/rector/rector/vendor/react/promise/src/Internal/FulfilledPromise.php @@ -0,0 +1,79 @@ + + */ +final class FulfilledPromise implements PromiseInterface +{ + /** @var T */ + private $value; + /** + * @param T $value + * @throws \InvalidArgumentException + */ + public function __construct($value = null) + { + if ($value instanceof PromiseInterface) { + throw new \InvalidArgumentException('You cannot create React\\Promise\\FulfilledPromise with a promise. Use React\\Promise\\resolve($promiseOrValue) instead.'); + } + $this->value = $value; + } + /** + * @template TFulfilled + * @param ?(callable((T is void ? null : T)): (PromiseInterface|TFulfilled)) $onFulfilled + * @return PromiseInterface<($onFulfilled is null ? T : TFulfilled)> + */ + public function then(?callable $onFulfilled = null, ?callable $onRejected = null) : PromiseInterface + { + if (null === $onFulfilled) { + return $this; + } + try { + /** + * @var PromiseInterface|T $result + */ + $result = $onFulfilled($this->value); + return resolve($result); + } catch (\Throwable $exception) { + return new RejectedPromise($exception); + } + } + public function catch(callable $onRejected) : PromiseInterface + { + return $this; + } + public function finally(callable $onFulfilledOrRejected) : PromiseInterface + { + return $this->then(function ($value) use($onFulfilledOrRejected) : PromiseInterface { + return resolve($onFulfilledOrRejected())->then(function () use($value) { + return $value; + }); + }); + } + public function cancel() : void + { + } + /** + * @deprecated 3.0.0 Use `catch()` instead + * @see self::catch() + */ + public function otherwise(callable $onRejected) : PromiseInterface + { + return $this->catch($onRejected); + } + /** + * @deprecated 3.0.0 Use `finally()` instead + * @see self::finally() + */ + public function always(callable $onFulfilledOrRejected) : PromiseInterface + { + return $this->finally($onFulfilledOrRejected); + } +} diff --git a/vendor/rector/rector/vendor/react/promise/src/Internal/RejectedPromise.php b/vendor/rector/rector/vendor/react/promise/src/Internal/RejectedPromise.php new file mode 100644 index 000000000..215ff7821 --- /dev/null +++ b/vendor/rector/rector/vendor/react/promise/src/Internal/RejectedPromise.php @@ -0,0 +1,111 @@ + + */ +final class RejectedPromise implements PromiseInterface +{ + /** @var \Throwable */ + private $reason; + /** @var bool */ + private $handled = \false; + /** + * @param \Throwable $reason + */ + public function __construct(\Throwable $reason) + { + $this->reason = $reason; + } + /** @throws void */ + public function __destruct() + { + if ($this->handled) { + return; + } + $handler = set_rejection_handler(null); + if ($handler === null) { + $message = 'Unhandled promise rejection with ' . $this->reason; + \error_log($message); + return; + } + try { + $handler($this->reason); + } catch (\Throwable $e) { + \preg_match('/^([^:\\s]++)(.*+)$/sm', (string) $e, $match); + \assert(isset($match[1], $match[2])); + $message = 'Fatal error: Uncaught ' . $match[1] . ' from unhandled promise rejection handler' . $match[2]; + \error_log($message); + exit(255); + } + } + /** + * @template TRejected + * @param ?callable $onFulfilled + * @param ?(callable(\Throwable): (PromiseInterface|TRejected)) $onRejected + * @return PromiseInterface<($onRejected is null ? never : TRejected)> + */ + public function then(?callable $onFulfilled = null, ?callable $onRejected = null) : PromiseInterface + { + if (null === $onRejected) { + return $this; + } + $this->handled = \true; + try { + return resolve($onRejected($this->reason)); + } catch (\Throwable $exception) { + return new RejectedPromise($exception); + } + } + /** + * @template TThrowable of \Throwable + * @template TRejected + * @param callable(TThrowable): (PromiseInterface|TRejected) $onRejected + * @return PromiseInterface + */ + public function catch(callable $onRejected) : PromiseInterface + { + if (!_checkTypehint($onRejected, $this->reason)) { + return $this; + } + /** + * @var callable(\Throwable):(PromiseInterface|TRejected) $onRejected + */ + return $this->then(null, $onRejected); + } + public function finally(callable $onFulfilledOrRejected) : PromiseInterface + { + return $this->then(null, function (\Throwable $reason) use($onFulfilledOrRejected) : PromiseInterface { + return resolve($onFulfilledOrRejected())->then(function () use($reason) : PromiseInterface { + return new RejectedPromise($reason); + }); + }); + } + public function cancel() : void + { + $this->handled = \true; + } + /** + * @deprecated 3.0.0 Use `catch()` instead + * @see self::catch() + */ + public function otherwise(callable $onRejected) : PromiseInterface + { + return $this->catch($onRejected); + } + /** + * @deprecated 3.0.0 Use `always()` instead + * @see self::always() + */ + public function always(callable $onFulfilledOrRejected) : PromiseInterface + { + return $this->finally($onFulfilledOrRejected); + } +} diff --git a/vendor/rector/rector/vendor/react/promise/src/LazyPromise.php b/vendor/rector/rector/vendor/react/promise/src/LazyPromise.php deleted file mode 100644 index 367a881f8..000000000 --- a/vendor/rector/rector/vendor/react/promise/src/LazyPromise.php +++ /dev/null @@ -1,57 +0,0 @@ -factory = $factory; - } - public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) - { - return $this->promise()->then($onFulfilled, $onRejected, $onProgress); - } - public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) - { - return $this->promise()->done($onFulfilled, $onRejected, $onProgress); - } - public function otherwise(callable $onRejected) - { - return $this->promise()->otherwise($onRejected); - } - public function always(callable $onFulfilledOrRejected) - { - return $this->promise()->always($onFulfilledOrRejected); - } - public function progress(callable $onProgress) - { - return $this->promise()->progress($onProgress); - } - public function cancel() - { - return $this->promise()->cancel(); - } - /** - * @internal - * @see Promise::settle() - */ - public function promise() - { - if (null === $this->promise) { - try { - $this->promise = resolve(\call_user_func($this->factory)); - } catch (\Throwable $exception) { - $this->promise = new RejectedPromise($exception); - } catch (\Exception $exception) { - $this->promise = new RejectedPromise($exception); - } - } - return $this->promise; - } -} diff --git a/vendor/rector/rector/vendor/react/promise/src/Promise.php b/vendor/rector/rector/vendor/react/promise/src/Promise.php index 35e4e3dc0..8fdd2a66f 100644 --- a/vendor/rector/rector/vendor/react/promise/src/Promise.php +++ b/vendor/rector/rector/vendor/react/promise/src/Promise.php @@ -1,16 +1,29 @@ + */ +final class Promise implements PromiseInterface { + /** @var (callable(callable(T):void,callable(\Throwable):void):void)|null */ private $canceller; + /** @var ?PromiseInterface */ private $result; + /** @var list):void> */ private $handlers = []; - private $progressHandlers = []; + /** @var int */ private $requiredCancelRequests = 0; - private $cancelRequests = 0; - public function __construct(callable $resolver, callable $canceller = null) + /** @var bool */ + private $cancelled = \false; + /** + * @param callable(callable(T):void,callable(\Throwable):void):void $resolver + * @param (callable(callable(T):void,callable(\Throwable):void):void)|null $canceller + */ + public function __construct(callable $resolver, ?callable $canceller = null) { $this->canceller = $canceller; // Explicitly overwrite arguments with null values before invoking @@ -20,13 +33,13 @@ public function __construct(callable $resolver, callable $canceller = null) $resolver = $canceller = null; $this->call($cb); } - public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) + public function then(?callable $onFulfilled = null, ?callable $onRejected = null) : PromiseInterface { if (null !== $this->result) { - return $this->result->then($onFulfilled, $onRejected, $onProgress); + return $this->result->then($onFulfilled, $onRejected); } if (null === $this->canceller) { - return new static($this->resolver($onFulfilled, $onRejected, $onProgress)); + return new static($this->resolver($onFulfilled, $onRejected)); } // This promise has a canceller, so we create a new child promise which // has a canceller that invokes the parent canceller if all other @@ -35,118 +48,157 @@ public function then(callable $onFulfilled = null, callable $onRejected = null, // keeping a cyclic reference between parent and follower. $parent = $this; ++$parent->requiredCancelRequests; - return new static($this->resolver($onFulfilled, $onRejected, $onProgress), static function () use(&$parent) { - if (++$parent->cancelRequests >= $parent->requiredCancelRequests) { + return new static($this->resolver($onFulfilled, $onRejected), static function () use(&$parent) : void { + \assert($parent instanceof self); + --$parent->requiredCancelRequests; + if ($parent->requiredCancelRequests <= 0) { $parent->cancel(); } $parent = null; }); } - public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) + /** + * @template TThrowable of \Throwable + * @template TRejected + * @param callable(TThrowable): (PromiseInterface|TRejected) $onRejected + * @return PromiseInterface + */ + public function catch(callable $onRejected) : PromiseInterface { - if (null !== $this->result) { - return $this->result->done($onFulfilled, $onRejected, $onProgress); - } - $this->handlers[] = static function (ExtendedPromiseInterface $promise) use($onFulfilled, $onRejected) { - $promise->done($onFulfilled, $onRejected); - }; - if ($onProgress) { - $this->progressHandlers[] = $onProgress; - } - } - public function otherwise(callable $onRejected) - { - return $this->then(null, static function ($reason) use($onRejected) { + return $this->then(null, static function (\Throwable $reason) use($onRejected) { if (!_checkTypehint($onRejected, $reason)) { return new RejectedPromise($reason); } + /** + * @var callable(\Throwable):(PromiseInterface|TRejected) $onRejected + */ return $onRejected($reason); }); } - public function always(callable $onFulfilledOrRejected) + public function finally(callable $onFulfilledOrRejected) : PromiseInterface { - return $this->then(static function ($value) use($onFulfilledOrRejected) { + return $this->then(static function ($value) use($onFulfilledOrRejected) : PromiseInterface { return resolve($onFulfilledOrRejected())->then(function () use($value) { return $value; }); - }, static function ($reason) use($onFulfilledOrRejected) { - return resolve($onFulfilledOrRejected())->then(function () use($reason) { + }, static function (\Throwable $reason) use($onFulfilledOrRejected) : PromiseInterface { + return resolve($onFulfilledOrRejected())->then(function () use($reason) : RejectedPromise { return new RejectedPromise($reason); }); }); } - public function progress(callable $onProgress) - { - return $this->then(null, null, $onProgress); - } - public function cancel() + public function cancel() : void { - if (null === $this->canceller || null !== $this->result) { - return; - } + $this->cancelled = \true; $canceller = $this->canceller; $this->canceller = null; - $this->call($canceller); + $parentCanceller = null; + if (null !== $this->result) { + // Forward cancellation to rejected promise to avoid reporting unhandled rejection + if ($this->result instanceof RejectedPromise) { + $this->result->cancel(); + } + // Go up the promise chain and reach the top most promise which is + // itself not following another promise + $root = $this->unwrap($this->result); + // Return if the root promise is already resolved or a + // FulfilledPromise or RejectedPromise + if (!$root instanceof self || null !== $root->result) { + return; + } + $root->requiredCancelRequests--; + if ($root->requiredCancelRequests <= 0) { + $parentCanceller = [$root, 'cancel']; + } + } + if (null !== $canceller) { + $this->call($canceller); + } + // For BC, we call the parent canceller after our own canceller + if ($parentCanceller) { + $parentCanceller(); + } } - private function resolver(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) + /** + * @deprecated 3.0.0 Use `catch()` instead + * @see self::catch() + */ + public function otherwise(callable $onRejected) : PromiseInterface { - return function ($resolve, $reject, $notify) use($onFulfilled, $onRejected, $onProgress) { - if ($onProgress) { - $progressHandler = static function ($update) use($notify, $onProgress) { - try { - $notify($onProgress($update)); - } catch (\Throwable $e) { - $notify($e); - } catch (\Exception $e) { - $notify($e); - } - }; - } else { - $progressHandler = $notify; - } - $this->handlers[] = static function (ExtendedPromiseInterface $promise) use($onFulfilled, $onRejected, $resolve, $reject, $progressHandler) { - $promise->then($onFulfilled, $onRejected)->done($resolve, $reject, $progressHandler); + return $this->catch($onRejected); + } + /** + * @deprecated 3.0.0 Use `finally()` instead + * @see self::finally() + */ + public function always(callable $onFulfilledOrRejected) : PromiseInterface + { + return $this->finally($onFulfilledOrRejected); + } + private function resolver(?callable $onFulfilled = null, ?callable $onRejected = null) : callable + { + return function (callable $resolve, callable $reject) use($onFulfilled, $onRejected) : void { + $this->handlers[] = static function (PromiseInterface $promise) use($onFulfilled, $onRejected, $resolve, $reject) : void { + $promise = $promise->then($onFulfilled, $onRejected); + if ($promise instanceof self && $promise->result === null) { + $promise->handlers[] = static function (PromiseInterface $promise) use($resolve, $reject) : void { + $promise->then($resolve, $reject); + }; + } else { + $promise->then($resolve, $reject); + } }; - $this->progressHandlers[] = $progressHandler; }; } - private function reject($reason = null) + private function reject(\Throwable $reason) : void { if (null !== $this->result) { return; } $this->settle(reject($reason)); } - private function settle(ExtendedPromiseInterface $promise) + /** + * @param PromiseInterface $result + */ + private function settle(PromiseInterface $result) : void { - $promise = $this->unwrap($promise); - if ($promise === $this) { - $promise = new RejectedPromise(new \LogicException('Cannot resolve a promise with itself.')); + $result = $this->unwrap($result); + if ($result === $this) { + $result = new RejectedPromise(new \LogicException('Cannot resolve a promise with itself.')); + } + if ($result instanceof self) { + $result->requiredCancelRequests++; + } else { + // Unset canceller only when not following a pending promise + $this->canceller = null; } $handlers = $this->handlers; - $this->progressHandlers = $this->handlers = []; - $this->result = $promise; - $this->canceller = null; + $this->handlers = []; + $this->result = $result; foreach ($handlers as $handler) { - $handler($promise); + $handler($result); } - } - private function unwrap($promise) - { - $promise = $this->extract($promise); - while ($promise instanceof self && null !== $promise->result) { - $promise = $this->extract($promise->result); + // Forward cancellation to rejected promise to avoid reporting unhandled rejection + if ($this->cancelled && $result instanceof RejectedPromise) { + $result->cancel(); } - return $promise; } - private function extract($promise) + /** + * @param PromiseInterface $promise + * @return PromiseInterface + */ + private function unwrap(PromiseInterface $promise) : PromiseInterface { - if ($promise instanceof LazyPromise) { - $promise = $promise->promise(); + while ($promise instanceof self && null !== $promise->result) { + /** @var PromiseInterface $promise */ + $promise = $promise->result; } return $promise; } - private function call(callable $cb) + /** + * @param callable(callable(mixed):void,callable(\Throwable):void):void $cb + */ + private function call(callable $cb) : void { // Explicitly overwrite argument with null value. This ensure that this // argument does not show up in the stack trace in PHP 7+ only. @@ -162,6 +214,7 @@ private function call(callable $cb) } elseif (\is_object($callback) && !$callback instanceof \Closure) { $ref = new \ReflectionMethod($callback, '__invoke'); } else { + \assert($callback instanceof \Closure || \is_string($callback)); $ref = new \ReflectionFunction($callback); } $args = $ref->getNumberOfParameters(); @@ -178,29 +231,21 @@ private function call(callable $cb) // These assumptions are covered by the test suite, so if you ever feel like // refactoring this, go ahead, any alternative suggestions are welcome! $target =& $this; - $progressHandlers =& $this->progressHandlers; - $callback(static function ($value = null) use(&$target) { + $callback(static function ($value) use(&$target) : void { if ($target !== null) { $target->settle(resolve($value)); $target = null; } - }, static function ($reason = null) use(&$target) { + }, static function (\Throwable $reason) use(&$target) : void { if ($target !== null) { $target->reject($reason); $target = null; } - }, static function ($update = null) use(&$progressHandlers) { - foreach ($progressHandlers as $handler) { - $handler($update); - } }); } } catch (\Throwable $e) { $target = null; $this->reject($e); - } catch (\Exception $e) { - $target = null; - $this->reject($e); } } } diff --git a/vendor/rector/rector/vendor/react/promise/src/PromiseInterface.php b/vendor/rector/rector/vendor/react/promise/src/PromiseInterface.php index b843393ec..da5bd721f 100644 --- a/vendor/rector/rector/vendor/react/promise/src/PromiseInterface.php +++ b/vendor/rector/rector/vendor/react/promise/src/PromiseInterface.php @@ -1,7 +1,10 @@ |TFulfilled)) $onFulfilled + * @param ?(callable(\Throwable): (PromiseInterface|TRejected)) $onRejected + * @return PromiseInterface<($onRejected is null ? ($onFulfilled is null ? T : TFulfilled) : ($onFulfilled is null ? T|TRejected : TFulfilled|TRejected))> */ - public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null); + public function then(?callable $onFulfilled = null, ?callable $onRejected = null) : PromiseInterface; + /** + * Registers a rejection handler for promise. It is a shortcut for: + * + * ```php + * $promise->then(null, $onRejected); + * ``` + * + * Additionally, you can type hint the `$reason` argument of `$onRejected` to catch + * only specific errors. + * + * @template TThrowable of \Throwable + * @template TRejected + * @param callable(TThrowable): (PromiseInterface|TRejected) $onRejected + * @return PromiseInterface + */ + public function catch(callable $onRejected) : PromiseInterface; + /** + * Allows you to execute "cleanup" type tasks in a promise chain. + * + * It arranges for `$onFulfilledOrRejected` to be called, with no arguments, + * when the promise is either fulfilled or rejected. + * + * * If `$promise` fulfills, and `$onFulfilledOrRejected` returns successfully, + * `$newPromise` will fulfill with the same value as `$promise`. + * * If `$promise` fulfills, and `$onFulfilledOrRejected` throws or returns a + * rejected promise, `$newPromise` will reject with the thrown exception or + * rejected promise's reason. + * * If `$promise` rejects, and `$onFulfilledOrRejected` returns successfully, + * `$newPromise` will reject with the same reason as `$promise`. + * * If `$promise` rejects, and `$onFulfilledOrRejected` throws or returns a + * rejected promise, `$newPromise` will reject with the thrown exception or + * rejected promise's reason. + * + * `finally()` behaves similarly to the synchronous finally statement. When combined + * with `catch()`, `finally()` allows you to write code that is similar to the familiar + * synchronous catch/finally pair. + * + * Consider the following synchronous code: + * + * ```php + * try { + * return doSomething(); + * } catch(\Exception $e) { + * return handleError($e); + * } finally { + * cleanup(); + * } + * ``` + * + * Similar asynchronous code (with `doSomething()` that returns a promise) can be + * written: + * + * ```php + * return doSomething() + * ->catch('handleError') + * ->finally('cleanup'); + * ``` + * + * @param callable(): (void|PromiseInterface) $onFulfilledOrRejected + * @return PromiseInterface + */ + public function finally(callable $onFulfilledOrRejected) : PromiseInterface; + /** + * The `cancel()` method notifies the creator of the promise that there is no + * further interest in the results of the operation. + * + * Once a promise is settled (either fulfilled or rejected), calling `cancel()` on + * a promise has no effect. + * + * @return void + */ + public function cancel() : void; + /** + * [Deprecated] Registers a rejection handler for a promise. + * + * This method continues to exist only for BC reasons and to ease upgrading + * between versions. It is an alias for: + * + * ```php + * $promise->catch($onRejected); + * ``` + * + * @template TThrowable of \Throwable + * @template TRejected + * @param callable(TThrowable): (PromiseInterface|TRejected) $onRejected + * @return PromiseInterface + * @deprecated 3.0.0 Use catch() instead + * @see self::catch() + */ + public function otherwise(callable $onRejected) : PromiseInterface; + /** + * [Deprecated] Allows you to execute "cleanup" type tasks in a promise chain. + * + * This method continues to exist only for BC reasons and to ease upgrading + * between versions. It is an alias for: + * + * ```php + * $promise->finally($onFulfilledOrRejected); + * ``` + * + * @param callable(): (void|PromiseInterface) $onFulfilledOrRejected + * @return PromiseInterface + * @deprecated 3.0.0 Use finally() instead + * @see self::finally() + */ + public function always(callable $onFulfilledOrRejected) : PromiseInterface; } diff --git a/vendor/rector/rector/vendor/react/promise/src/PromisorInterface.php b/vendor/rector/rector/vendor/react/promise/src/PromisorInterface.php deleted file mode 100644 index e5fa11b6b..000000000 --- a/vendor/rector/rector/vendor/react/promise/src/PromisorInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -reason = $reason; - } - public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) - { - if (null === $onRejected) { - return $this; - } - try { - return resolve($onRejected($this->reason)); - } catch (\Throwable $exception) { - return new RejectedPromise($exception); - } catch (\Exception $exception) { - return new RejectedPromise($exception); - } - } - public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null) - { - if (null === $onRejected) { - throw UnhandledRejectionException::resolve($this->reason); - } - $result = $onRejected($this->reason); - if ($result instanceof self) { - throw UnhandledRejectionException::resolve($result->reason); - } - if ($result instanceof ExtendedPromiseInterface) { - $result->done(); - } - } - public function otherwise(callable $onRejected) - { - if (!_checkTypehint($onRejected, $this->reason)) { - return $this; - } - return $this->then(null, $onRejected); - } - public function always(callable $onFulfilledOrRejected) - { - return $this->then(null, function ($reason) use($onFulfilledOrRejected) { - return resolve($onFulfilledOrRejected())->then(function () use($reason) { - return new RejectedPromise($reason); - }); - }); - } - public function progress(callable $onProgress) - { - return $this; - } - public function cancel() - { - } -} diff --git a/vendor/rector/rector/vendor/react/promise/src/UnhandledRejectionException.php b/vendor/rector/rector/vendor/react/promise/src/UnhandledRejectionException.php deleted file mode 100644 index a10913966..000000000 --- a/vendor/rector/rector/vendor/react/promise/src/UnhandledRejectionException.php +++ /dev/null @@ -1,25 +0,0 @@ -reason = $reason; - $message = \sprintf('Unhandled Rejection: %s', \json_encode($reason)); - parent::__construct($message, 0); - } - public function getReason() - { - return $this->reason; - } -} diff --git a/vendor/rector/rector/vendor/react/promise/src/functions.php b/vendor/rector/rector/vendor/react/promise/src/functions.php index 047056acf..f7905b82d 100644 --- a/vendor/rector/rector/vendor/react/promise/src/functions.php +++ b/vendor/rector/rector/vendor/react/promise/src/functions.php @@ -1,7 +1,10 @@ |T $promiseOrValue + * @return PromiseInterface */ -function resolve($promiseOrValue = null) +function resolve($promiseOrValue) : PromiseInterface { - if ($promiseOrValue instanceof ExtendedPromiseInterface) { + if ($promiseOrValue instanceof PromiseInterface) { return $promiseOrValue; } - // Check is_object() first to avoid method_exists() triggering - // class autoloaders if $promiseOrValue is a string. if (\is_object($promiseOrValue) && \method_exists($promiseOrValue, 'then')) { $canceller = null; if (\method_exists($promiseOrValue, 'cancel')) { $canceller = [$promiseOrValue, 'cancel']; + \assert(\is_callable($canceller)); } - return new Promise(function ($resolve, $reject, $notify) use($promiseOrValue) { - $promiseOrValue->then($resolve, $reject, $notify); + /** @var Promise */ + return new Promise(function (callable $resolve, callable $reject) use($promiseOrValue) : void { + $promiseOrValue->then($resolve, $reject); }, $canceller); } return new FulfilledPromise($promiseOrValue); } /** - * Creates a rejected promise for the supplied `$promiseOrValue`. + * Creates a rejected promise for the supplied `$reason`. * - * If `$promiseOrValue` is a value, it will be the rejection value of the + * If `$reason` is a value, it will be the rejection value of the * returned promise. * - * If `$promiseOrValue` is a promise, its completion value will be the rejected + * If `$reason` is a promise, its completion value will be the rejected * value of the returned promise. * * This can be useful in situations where you need to reject a promise without * throwing an exception. For example, it allows you to propagate a rejection with * the value of another promise. * - * @param mixed $promiseOrValue - * @return PromiseInterface + * @return PromiseInterface */ -function reject($promiseOrValue = null) +function reject(\Throwable $reason) : PromiseInterface { - if ($promiseOrValue instanceof PromiseInterface) { - return resolve($promiseOrValue)->then(function ($value) { - return new RejectedPromise($value); - }); - } - return new RejectedPromise($promiseOrValue); + return new RejectedPromise($reason); } /** * Returns a promise that will resolve only once all the items in @@ -65,14 +63,41 @@ function reject($promiseOrValue = null) * will be an array containing the resolution values of each of the items in * `$promisesOrValues`. * - * @param array $promisesOrValues - * @return PromiseInterface + * @template T + * @param iterable|T> $promisesOrValues + * @return PromiseInterface> */ -function all($promisesOrValues) +function all(iterable $promisesOrValues) : PromiseInterface { - return map($promisesOrValues, function ($val) { - return $val; - }); + $cancellationQueue = new Internal\CancellationQueue(); + /** @var Promise> */ + return new Promise(function (callable $resolve, callable $reject) use($promisesOrValues, $cancellationQueue) : void { + $toResolve = 0; + /** @var bool */ + $continue = \true; + $values = []; + foreach ($promisesOrValues as $i => $promiseOrValue) { + $cancellationQueue->enqueue($promiseOrValue); + $values[$i] = null; + ++$toResolve; + resolve($promiseOrValue)->then(function ($value) use($i, &$values, &$toResolve, &$continue, $resolve) : void { + $values[$i] = $value; + if (0 === --$toResolve && !$continue) { + $resolve($values); + } + }, function (\Throwable $reason) use(&$continue, $reject) : void { + $continue = \false; + $reject($reason); + }); + if (!$continue && !\is_array($promisesOrValues)) { + break; + } + } + $continue = \false; + if ($toResolve === 0) { + $resolve($values); + } + }, $cancellationQueue); } /** * Initiates a competitive race that allows one winner. Returns a promise which is @@ -81,24 +106,25 @@ function all($promisesOrValues) * The returned promise will become **infinitely pending** if `$promisesOrValues` * contains 0 items. * - * @param array $promisesOrValues - * @return PromiseInterface + * @template T + * @param iterable|T> $promisesOrValues + * @return PromiseInterface */ -function race($promisesOrValues) +function race(iterable $promisesOrValues) : PromiseInterface { - $cancellationQueue = new CancellationQueue(); - $cancellationQueue->enqueue($promisesOrValues); - return new Promise(function ($resolve, $reject, $notify) use($promisesOrValues, $cancellationQueue) { - resolve($promisesOrValues)->done(function ($array) use($cancellationQueue, $resolve, $reject, $notify) { - if (!\is_array($array) || !$array) { - $resolve(); - return; + $cancellationQueue = new Internal\CancellationQueue(); + /** @var Promise */ + return new Promise(function (callable $resolve, callable $reject) use($promisesOrValues, $cancellationQueue) : void { + $continue = \true; + foreach ($promisesOrValues as $promiseOrValue) { + $cancellationQueue->enqueue($promiseOrValue); + resolve($promiseOrValue)->then($resolve, $reject)->finally(function () use(&$continue) : void { + $continue = \false; + }); + if (!$continue && !\is_array($promisesOrValues)) { + break; } - foreach ($array as $promiseOrValue) { - $cancellationQueue->enqueue($promiseOrValue); - resolve($promiseOrValue)->done($resolve, $reject, $notify); - } - }, $reject, $notify); + } }, $cancellationQueue); } /** @@ -112,162 +138,98 @@ function race($promisesOrValues) * The returned promise will also reject with a `React\Promise\Exception\LengthException` * if `$promisesOrValues` contains 0 items. * - * @param array $promisesOrValues - * @return PromiseInterface + * @template T + * @param iterable|T> $promisesOrValues + * @return PromiseInterface */ -function any($promisesOrValues) +function any(iterable $promisesOrValues) : PromiseInterface { - return some($promisesOrValues, 1)->then(function ($val) { - return \array_shift($val); - }); + $cancellationQueue = new Internal\CancellationQueue(); + /** @var Promise */ + return new Promise(function (callable $resolve, callable $reject) use($promisesOrValues, $cancellationQueue) : void { + $toReject = 0; + $continue = \true; + $reasons = []; + foreach ($promisesOrValues as $i => $promiseOrValue) { + $cancellationQueue->enqueue($promiseOrValue); + ++$toReject; + resolve($promiseOrValue)->then(function ($value) use($resolve, &$continue) : void { + $continue = \false; + $resolve($value); + }, function (\Throwable $reason) use($i, &$reasons, &$toReject, $reject, &$continue) : void { + $reasons[$i] = $reason; + if (0 === --$toReject && !$continue) { + $reject(new CompositeException($reasons, 'All promises rejected.')); + } + }); + if (!$continue && !\is_array($promisesOrValues)) { + break; + } + } + $continue = \false; + if ($toReject === 0 && !$reasons) { + $reject(new Exception\LengthException('Must contain at least 1 item but contains only 0 items.')); + } elseif ($toReject === 0) { + $reject(new CompositeException($reasons, 'All promises rejected.')); + } + }, $cancellationQueue); } /** - * Returns a promise that will resolve when `$howMany` of the supplied items in - * `$promisesOrValues` resolve. The resolution value of the returned promise - * will be an array of length `$howMany` containing the resolution values of the - * triggering items. + * Sets the global rejection handler for unhandled promise rejections. * - * The returned promise will reject if it becomes impossible for `$howMany` items - * to resolve (that is, when `(count($promisesOrValues) - $howMany) + 1` items - * reject). The rejection value will be an array of - * `(count($promisesOrValues) - $howMany) + 1` rejection reasons. + * Note that rejected promises should always be handled similar to how any + * exceptions should always be caught in a `try` + `catch` block. If you remove + * the last reference to a rejected promise that has not been handled, it will + * report an unhandled promise rejection. See also the [`reject()` function](#reject) + * for more details. * - * The returned promise will also reject with a `React\Promise\Exception\LengthException` - * if `$promisesOrValues` contains less items than `$howMany`. + * The `?callable $callback` argument MUST be a valid callback function that + * accepts a single `Throwable` argument or a `null` value to restore the + * default promise rejection handler. The return value of the callback function + * will be ignored and has no effect, so you SHOULD return a `void` value. The + * callback function MUST NOT throw or the program will be terminated with a + * fatal error. * - * @param array $promisesOrValues - * @param int $howMany - * @return PromiseInterface - */ -function some($promisesOrValues, $howMany) -{ - $cancellationQueue = new CancellationQueue(); - $cancellationQueue->enqueue($promisesOrValues); - return new Promise(function ($resolve, $reject, $notify) use($promisesOrValues, $howMany, $cancellationQueue) { - resolve($promisesOrValues)->done(function ($array) use($howMany, $cancellationQueue, $resolve, $reject, $notify) { - if (!\is_array($array) || $howMany < 1) { - $resolve([]); - return; - } - $len = \count($array); - if ($len < $howMany) { - throw new Exception\LengthException(\sprintf('Input array must contain at least %d item%s but contains only %s item%s.', $howMany, 1 === $howMany ? '' : 's', $len, 1 === $len ? '' : 's')); - } - $toResolve = $howMany; - $toReject = $len - $toResolve + 1; - $values = []; - $reasons = []; - foreach ($array as $i => $promiseOrValue) { - $fulfiller = function ($val) use($i, &$values, &$toResolve, $toReject, $resolve) { - if ($toResolve < 1 || $toReject < 1) { - return; - } - $values[$i] = $val; - if (0 === --$toResolve) { - $resolve($values); - } - }; - $rejecter = function ($reason) use($i, &$reasons, &$toReject, $toResolve, $reject) { - if ($toResolve < 1 || $toReject < 1) { - return; - } - $reasons[$i] = $reason; - if (0 === --$toReject) { - $reject($reasons); - } - }; - $cancellationQueue->enqueue($promiseOrValue); - resolve($promiseOrValue)->done($fulfiller, $rejecter, $notify); - } - }, $reject, $notify); - }, $cancellationQueue); -} -/** - * Traditional map function, similar to `array_map()`, but allows input to contain - * promises and/or values, and `$mapFunc` may return either a value or a promise. + * The function returns the previous rejection handler or `null` if using the + * default promise rejection handler. * - * The map function receives each item as argument, where item is a fully resolved - * value of a promise or value in `$promisesOrValues`. + * The default promise rejection handler will log an error message plus its + * stack trace: * - * @param array $promisesOrValues - * @param callable $mapFunc - * @return PromiseInterface - */ -function map($promisesOrValues, callable $mapFunc) -{ - $cancellationQueue = new CancellationQueue(); - $cancellationQueue->enqueue($promisesOrValues); - return new Promise(function ($resolve, $reject, $notify) use($promisesOrValues, $mapFunc, $cancellationQueue) { - resolve($promisesOrValues)->done(function ($array) use($mapFunc, $cancellationQueue, $resolve, $reject, $notify) { - if (!\is_array($array) || !$array) { - $resolve([]); - return; - } - $toResolve = \count($array); - $values = []; - foreach ($array as $i => $promiseOrValue) { - $cancellationQueue->enqueue($promiseOrValue); - $values[$i] = null; - resolve($promiseOrValue)->then($mapFunc)->done(function ($mapped) use($i, &$values, &$toResolve, $resolve) { - $values[$i] = $mapped; - if (0 === --$toResolve) { - $resolve($values); - } - }, $reject, $notify); - } - }, $reject, $notify); - }, $cancellationQueue); -} -/** - * Traditional reduce function, similar to `array_reduce()`, but input may contain - * promises and/or values, and `$reduceFunc` may return either a value or a - * promise, *and* `$initialValue` may be a promise or a value for the starting - * value. + * ```php + * // Unhandled promise rejection with RuntimeException: Unhandled in example.php:2 + * React\Promise\reject(new RuntimeException('Unhandled')); + * ``` + * + * The promise rejection handler may be used to use customize the log message or + * write to custom log targets. As a rule of thumb, this function should only be + * used as a last resort and promise rejections are best handled with either the + * [`then()` method](#promiseinterfacethen), the + * [`catch()` method](#promiseinterfacecatch), or the + * [`finally()` method](#promiseinterfacefinally). + * See also the [`reject()` function](#reject) for more details. * - * @param array $promisesOrValues - * @param callable $reduceFunc - * @param mixed $initialValue - * @return PromiseInterface + * @param callable(\Throwable):void|null $callback + * @return callable(\Throwable):void|null */ -function reduce($promisesOrValues, callable $reduceFunc, $initialValue = null) +function set_rejection_handler(?callable $callback) : ?callable { - $cancellationQueue = new CancellationQueue(); - $cancellationQueue->enqueue($promisesOrValues); - return new Promise(function ($resolve, $reject, $notify) use($promisesOrValues, $reduceFunc, $initialValue, $cancellationQueue) { - resolve($promisesOrValues)->done(function ($array) use($reduceFunc, $initialValue, $cancellationQueue, $resolve, $reject, $notify) { - if (!\is_array($array)) { - $array = []; - } - $total = \count($array); - $i = 0; - // Wrap the supplied $reduceFunc with one that handles promises and then - // delegates to the supplied. - $wrappedReduceFunc = function ($current, $val) use($reduceFunc, $cancellationQueue, $total, &$i) { - $cancellationQueue->enqueue($val); - return $current->then(function ($c) use($reduceFunc, $total, &$i, $val) { - return resolve($val)->then(function ($value) use($reduceFunc, $total, &$i, $c) { - return $reduceFunc($c, $value, $i++, $total); - }); - }); - }; - $cancellationQueue->enqueue($initialValue); - \array_reduce($array, $wrappedReduceFunc, resolve($initialValue))->done($resolve, $reject, $notify); - }, $reject, $notify); - }, $cancellationQueue); + static $current = null; + $previous = $current; + $current = $callback; + return $previous; } /** * @internal */ -function _checkTypehint(callable $callback, $object) +function _checkTypehint(callable $callback, \Throwable $reason) : bool { - if (!\is_object($object)) { - return \true; - } if (\is_array($callback)) { $callbackReflection = new \ReflectionMethod($callback[0], $callback[1]); } elseif (\is_object($callback) && !$callback instanceof \Closure) { $callbackReflection = new \ReflectionMethod($callback, '__invoke'); } else { + \assert($callback instanceof \Closure || \is_string($callback)); $callbackReflection = new \ReflectionFunction($callback); } $parameters = $callbackReflection->getParameters(); @@ -275,13 +237,6 @@ function _checkTypehint(callable $callback, $object) return \true; } $expectedException = $parameters[0]; - // PHP before v8 used an easy API: - if (\PHP_VERSION_ID < 70100 || \defined('HHVM_VERSION')) { - if (!$expectedException->getClass()) { - return \true; - } - return $expectedException->getClass()->isInstance($object); - } // Extract the type of the argument and handle different possibilities $type = $expectedException->getType(); $isTypeUnion = \true; @@ -307,12 +262,17 @@ function _checkTypehint(callable $callback, $object) foreach ($types as $type) { if ($type instanceof \ReflectionIntersectionType) { foreach ($type->getTypes() as $typeToMatch) { - if (!($matches = $typeToMatch->isBuiltin() && \gettype($object) === $typeToMatch->getName() || (new \ReflectionClass($typeToMatch->getName()))->isInstance($object))) { + \assert($typeToMatch instanceof \ReflectionNamedType); + $name = $typeToMatch->getName(); + if (!($matches = !$typeToMatch->isBuiltin() && $reason instanceof $name)) { break; } } + \assert(isset($matches)); } else { - $matches = $type->isBuiltin() && \gettype($object) === $type->getName() || (new \ReflectionClass($type->getName()))->isInstance($object); + \assert($type instanceof \ReflectionNamedType); + $name = $type->getName(); + $matches = !$type->isBuiltin() && $reason instanceof $name; } // If we look for a single match (union), we can return early on match // If we look for a full match (intersection), we can return early on mismatch diff --git a/vendor/rector/rector/vendor/react/promise/src/functions_include.php b/vendor/rector/rector/vendor/react/promise/src/functions_include.php index b8b1e714e..0a60aff4d 100644 --- a/vendor/rector/rector/vendor/react/promise/src/functions_include.php +++ b/vendor/rector/rector/vendor/react/promise/src/functions_include.php @@ -1,7 +1,7 @@ =5.3.0", "evenement\/evenement": "^3.0 || ^2.0 || ^1.0", - "react\/dns": "^1.11", + "react\/dns": "^1.13", "react\/event-loop": "^1.2", - "react\/promise": "^3 || ^2.6 || ^1.2.1", - "react\/stream": "^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 || ^2", + "react\/async": "^4.3 || ^3.3 || ^2", "react\/promise-stream": "^1.4", - "react\/promise-timer": "^1.10" + "react\/promise-timer": "^1.11" }, "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Socket\\": "src\/" + "RectorPrefix202410\\React\\Socket\\": "src\/" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\React\\Tests\\Socket\\": "tests\/" + "RectorPrefix202410\\React\\Tests\\Socket\\": "tests\/" } } } \ No newline at end of file diff --git a/vendor/rector/rector/vendor/react/socket/src/Connection.php b/vendor/rector/rector/vendor/react/socket/src/Connection.php index 7241fbe90..cea7b8806 100644 --- a/vendor/rector/rector/vendor/react/socket/src/Connection.php +++ b/vendor/rector/rector/vendor/react/socket/src/Connection.php @@ -1,13 +1,13 @@ connectors[$scheme])) { - return \RectorPrefix202405\React\Promise\reject(new \RuntimeException('No connector available for URI scheme "' . $scheme . '" (EINVAL)', \defined('SOCKET_EINVAL') ? \SOCKET_EINVAL : (\defined('PCNTL_EINVAL') ? \PCNTL_EINVAL : 22))); + return \RectorPrefix202410\React\Promise\reject(new \RuntimeException('No connector available for URI scheme "' . $scheme . '" (EINVAL)', \defined('SOCKET_EINVAL') ? \SOCKET_EINVAL : (\defined('PCNTL_EINVAL') ? \PCNTL_EINVAL : 22))); } return $this->connectors[$scheme]->connect($uri); } diff --git a/vendor/rector/rector/vendor/react/socket/src/ConnectorInterface.php b/vendor/rector/rector/vendor/react/socket/src/ConnectorInterface.php index de95962fe..5424a618d 100644 --- a/vendor/rector/rector/vendor/react/socket/src/ConnectorInterface.php +++ b/vendor/rector/rector/vendor/react/socket/src/ConnectorInterface.php @@ -1,6 +1,6 @@ = \PHP_INT_MAX) { throw new \InvalidArgumentException('Invalid FD number given (EINVAL)', \defined('SOCKET_EINVAL') ? \SOCKET_EINVAL : (\defined('PCNTL_EINVAL') ? \PCNTL_EINVAL : 22)); } + if ($loop !== null && !$loop instanceof LoopInterface) { + // manual type check to support legacy PHP < 7.1 + throw new \InvalidArgumentException('Argument #2 ($loop) expected null|React\\EventLoop\\LoopInterface'); + } $this->loop = $loop ?: Loop::get(); $errno = 0; $errstr = ''; diff --git a/vendor/rector/rector/vendor/react/socket/src/FixedUriConnector.php b/vendor/rector/rector/vendor/react/socket/src/FixedUriConnector.php index b09aa7668..d24582a87 100644 --- a/vendor/rector/rector/vendor/react/socket/src/FixedUriConnector.php +++ b/vendor/rector/rector/vendor/react/socket/src/FixedUriConnector.php @@ -1,6 +1,6 @@ loop = $loop ?: Loop::get(); $this->connector = $connector; diff --git a/vendor/rector/rector/vendor/react/socket/src/LimitingServer.php b/vendor/rector/rector/vendor/react/socket/src/LimitingServer.php index bd60fd106..63e08ba70 100644 --- a/vendor/rector/rector/vendor/react/socket/src/LimitingServer.php +++ b/vendor/rector/rector/vendor/react/socket/src/LimitingServer.php @@ -1,8 +1,8 @@ connector = $connector; $this->streamEncryption = new StreamEncryption($loop ?: Loop::get(), \false); $this->context = $context; @@ -78,7 +87,7 @@ public function connect($uri) } throw $e; }); - return new \RectorPrefix202405\React\Promise\Promise(function ($resolve, $reject) use($promise) { + return new \RectorPrefix202410\React\Promise\Promise(function ($resolve, $reject) use($promise) { $promise->then($resolve, $reject); }, function ($_, $reject) use(&$promise, $uri, &$connected) { if ($connected) { diff --git a/vendor/rector/rector/vendor/react/socket/src/SecureServer.php b/vendor/rector/rector/vendor/react/socket/src/SecureServer.php index 9305ae1f6..2df050e98 100644 --- a/vendor/rector/rector/vendor/react/socket/src/SecureServer.php +++ b/vendor/rector/rector/vendor/react/socket/src/SecureServer.php @@ -1,10 +1,10 @@ array(), 'tls' => array(), 'unix' => array()); $scheme = 'tcp'; diff --git a/vendor/rector/rector/vendor/react/socket/src/StreamEncryption.php b/vendor/rector/rector/vendor/react/socket/src/StreamEncryption.php index c49299ea6..065aa286c 100644 --- a/vendor/rector/rector/vendor/react/socket/src/StreamEncryption.php +++ b/vendor/rector/rector/vendor/react/socket/src/StreamEncryption.php @@ -1,9 +1,9 @@ loop = $loop ?: Loop::get(); $this->context = $context; } diff --git a/vendor/rector/rector/vendor/react/socket/src/TcpServer.php b/vendor/rector/rector/vendor/react/socket/src/TcpServer.php index 19aea484e..4cc8342c7 100644 --- a/vendor/rector/rector/vendor/react/socket/src/TcpServer.php +++ b/vendor/rector/rector/vendor/react/socket/src/TcpServer.php @@ -1,10 +1,10 @@ loop = $loop ?: Loop::get(); // a single port has been given => assume localhost if ((string) (int) $uri === (string) $uri) { diff --git a/vendor/rector/rector/vendor/react/socket/src/TimeoutConnector.php b/vendor/rector/rector/vendor/react/socket/src/TimeoutConnector.php index 5217121fc..2b9306f5c 100644 --- a/vendor/rector/rector/vendor/react/socket/src/TimeoutConnector.php +++ b/vendor/rector/rector/vendor/react/socket/src/TimeoutConnector.php @@ -1,17 +1,26 @@ connector = $connector; $this->timeout = $timeout; $this->loop = $loop ?: Loop::get(); diff --git a/vendor/rector/rector/vendor/react/socket/src/UnixConnector.php b/vendor/rector/rector/vendor/react/socket/src/UnixConnector.php index 25907a5f0..3f6d62634 100644 --- a/vendor/rector/rector/vendor/react/socket/src/UnixConnector.php +++ b/vendor/rector/rector/vendor/react/socket/src/UnixConnector.php @@ -1,10 +1,10 @@ loop = $loop ?: Loop::get(); } public function connect($path) diff --git a/vendor/rector/rector/vendor/react/socket/src/UnixServer.php b/vendor/rector/rector/vendor/react/socket/src/UnixServer.php index 957ed2cc5..37ba201be 100644 --- a/vendor/rector/rector/vendor/react/socket/src/UnixServer.php +++ b/vendor/rector/rector/vendor/react/socket/src/UnixServer.php @@ -1,10 +1,10 @@ loop = $loop ?: Loop::get(); if (\strpos($path, '://') === \false) { $path = 'unix://' . $path; diff --git a/vendor/rector/rector/vendor/react/stream/README.md b/vendor/rector/rector/vendor/react/stream/README.md index 2bfcbbe8c..9c0468a65 100644 --- a/vendor/rector/rector/vendor/react/stream/README.md +++ b/vendor/rector/rector/vendor/react/stream/README.md @@ -1203,7 +1203,7 @@ This project follows [SemVer](https://semver.org/). This will install the latest supported version: ```bash -composer require react/stream:^1.3 +composer require react/stream:^1.4 ``` See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades. diff --git a/vendor/rector/rector/vendor/react/stream/composer.json b/vendor/rector/rector/vendor/react/stream/composer.json index 429a18d80..5ac379678 100644 --- a/vendor/rector/rector/vendor/react/stream/composer.json +++ b/vendor/rector/rector/vendor/react/stream/composer.json @@ -40,17 +40,17 @@ "evenement\/evenement": "^3.0 || ^2.0 || ^1.0" }, "require-dev": { - "phpunit\/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "phpunit\/phpunit": "^9.6 || ^5.7 || ^4.8.36", "clue\/stream-filter": "~1.2" }, "autoload": { "psr-4": { - "RectorPrefix202405\\React\\Stream\\": "src\/" + "RectorPrefix202410\\React\\Stream\\": "src\/" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\React\\Tests\\Stream\\": "tests\/" + "RectorPrefix202410\\React\\Tests\\Stream\\": "tests\/" } } } \ No newline at end of file diff --git a/vendor/rector/rector/vendor/react/stream/src/CompositeStream.php b/vendor/rector/rector/vendor/react/stream/src/CompositeStream.php index a754cdb65..32d216c8f 100644 --- a/vendor/rector/rector/vendor/react/stream/src/CompositeStream.php +++ b/vendor/rector/rector/vendor/react/stream/src/CompositeStream.php @@ -1,8 +1,8 @@ paused = \true; + // only allow pause if still readable, false otherwise + $this->paused = $this->readable; } public function resume() { + $this->paused = \false; + // emit drain event if previous write was paused (throttled) if ($this->drain) { $this->drain = \false; $this->emit('drain'); } - $this->paused = \false; } public function pipe(WritableStreamInterface $dest, array $options = array()) { @@ -126,11 +128,12 @@ public function write($data) } } $this->emit('data', array($data)); + // emit drain event on next resume if currently paused (throttled) if ($this->paused) { $this->drain = \true; - return \false; } - return \true; + // continue writing if still writable and not paused (throttled), false otherwise + return $this->writable && !$this->paused; } public function end($data = null) { @@ -146,7 +149,7 @@ public function end($data = null) } $this->readable = \false; $this->writable = \false; - $this->paused = \true; + $this->paused = \false; $this->drain = \false; $this->emit('end'); $this->close(); @@ -158,9 +161,9 @@ public function close() } $this->readable = \false; $this->writable = \false; - $this->closed = \true; - $this->paused = \true; + $this->paused = \false; $this->drain = \false; + $this->closed = \true; $this->callback = null; $this->emit('close'); $this->removeAllListeners(); diff --git a/vendor/rector/rector/vendor/react/stream/src/Util.php b/vendor/rector/rector/vendor/react/stream/src/Util.php index 567216ad4..327561258 100644 --- a/vendor/rector/rector/vendor/react/stream/src/Util.php +++ b/vendor/rector/rector/vendor/react/stream/src/Util.php @@ -1,6 +1,6 @@ stream = $stream; $this->loop = $loop ?: Loop::get(); $this->softLimit = $writeBufferSoftLimit === null ? 65536 : (int) $writeBufferSoftLimit; diff --git a/vendor/rector/rector/vendor/react/stream/src/WritableStreamInterface.php b/vendor/rector/rector/vendor/react/stream/src/WritableStreamInterface.php index 733e10757..0ddad4ff7 100644 --- a/vendor/rector/rector/vendor/react/stream/src/WritableStreamInterface.php +++ b/vendor/rector/rector/vendor/react/stream/src/WritableStreamInterface.php @@ -1,8 +1,8 @@ services(); $services->set(TypedPropertyRector::class); diff --git a/vendor/rector/rector/vendor/rector/extension-installer/src/GeneratedConfig.php b/vendor/rector/rector/vendor/rector/extension-installer/src/GeneratedConfig.php index 2ce4977b1..3b4c22e58 100644 --- a/vendor/rector/rector/vendor/rector/extension-installer/src/GeneratedConfig.php +++ b/vendor/rector/rector/vendor/rector/extension-installer/src/GeneratedConfig.php @@ -9,7 +9,7 @@ */ final class GeneratedConfig { - public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main 364e273'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 4228a73'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main d075c4f'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 040014c')); + public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main e75008c'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main d9cef57'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 3e592ec'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 14fcc87')); private function __construct() { } diff --git a/vendor/rector/rector/vendor/rector/extension-installer/src/PluginInstaller.php b/vendor/rector/rector/vendor/rector/extension-installer/src/PluginInstaller.php index a1cc7a0a0..14b5b985d 100644 --- a/vendor/rector/rector/vendor/rector/extension-installer/src/PluginInstaller.php +++ b/vendor/rector/rector/vendor/rector/extension-installer/src/PluginInstaller.php @@ -3,11 +3,11 @@ declare (strict_types=1); namespace Rector\RectorInstaller; -use RectorPrefix202405\Composer\Installer\InstallationManager; -use RectorPrefix202405\Composer\IO\IOInterface; -use RectorPrefix202405\Composer\Package\PackageInterface; -use RectorPrefix202405\Composer\Repository\InstalledRepositoryInterface; -use RectorPrefix202405\Composer\Util\Filesystem as ComposerFilesystem; +use RectorPrefix202410\Composer\Installer\InstallationManager; +use RectorPrefix202410\Composer\IO\IOInterface; +use RectorPrefix202410\Composer\Package\PackageInterface; +use RectorPrefix202410\Composer\Repository\InstalledRepositoryInterface; +use RectorPrefix202410\Composer\Util\Filesystem as ComposerFilesystem; /** * @see \Rector\RectorInstaller\Tests\PluginInstallerTest */ diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/README.md b/vendor/rector/rector/vendor/rector/rector-doctrine/README.md index f80f22929..4a98c6bc9 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/README.md +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/README.md @@ -1,6 +1,6 @@ # Rector Rules for Doctrine -See available [Doctrine rules](/docs/rector_rules_overview.md) +See available [Doctrine rules](https://getrector.com/find-rule?activeRectorSetGroup=doctrine) ## Install @@ -14,7 +14,16 @@ composer require rector/rector --dev ## Use Sets -To add a set to your config, use `Rector\Doctrine\Set\DoctrineSetList` class and pick one of constants: +To add a set to your config, use `->withPreparedSets` method, and pick one of constants: + +```php +use Rector\Config\RectorConfig; + +return RectorConfig::configure() + ->withPreparedSets(doctrineCodeQuality: true); +``` + +If you're on PHP 7.x, you can use withSets() instead, for `doctrineCodeQuality` set, so you can define: ```php use Rector\Config\RectorConfig; @@ -25,6 +34,7 @@ return RectorConfig::configure() DoctrineSetList::DOCTRINE_CODE_QUALITY, ]); ``` +See [documentation](https://getrector.com/documentation)
diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/composer.json b/vendor/rector/rector/vendor/rector/rector-doctrine/composer.json index 9e4ccad8e..d18c67f92 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/composer.json +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/composer.json @@ -5,24 +5,24 @@ "description": "Rector upgrades rules for Doctrine", "require": { "php": ">=8.2", - "symfony\/yaml": "^6.4" + "symfony\/yaml": "^7.1" }, "require-dev": { - "doctrine\/doctrine-bundle": "^2.11", - "doctrine\/orm": "^2.18", - "phpstan\/extension-installer": "^1.3", - "phpstan\/phpstan": "^1.10.57", + "doctrine\/doctrine-bundle": "^2.12", + "doctrine\/orm": "^2.19", + "phpstan\/extension-installer": "^1.4", + "phpstan\/phpstan": "^1.11", + "phpstan\/phpstan-deprecation-rules": "^1.2", "phpstan\/phpstan-webmozart-assert": "^1.2", "phpunit\/phpunit": "^10.5", - "rector\/rector-generator": "^0.7.10", "rector\/rector-src": "dev-main", - "symplify\/easy-coding-standard": "^12.1", + "rector\/type-perfect": "^0.2", + "symplify\/easy-coding-standard": "^12.3", "symplify\/phpstan-extensions": "^11.4", - "symplify\/phpstan-rules": "^11.4", - "symplify\/rule-doc-generator": "^12.1", + "symplify\/phpstan-rules": "^13.0", "symplify\/vendor-patches": "^11.3", - "tomasvotruba\/class-leak": "^0.2.13", - "tomasvotruba\/unused-public": "^0.3", + "tomasvotruba\/class-leak": "^0.2.15", + "tomasvotruba\/unused-public": "^0.4", "tracy\/tracy": "^2.10" }, "autoload": { @@ -51,10 +51,7 @@ "phpstan": "vendor\/bin\/phpstan analyse --ansi --error-format symplify", "rector": "vendor\/bin\/rector --ansi", "check-cs": "vendor\/bin\/ecs check --ansi", - "fix-cs": "vendor\/bin\/ecs check --fix --ansi", - "docs": [ - "vendor\/bin\/rule-doc-generator generate src rules --output-file docs\/rector_rules_overview.md --ansi" - ] + "fix-cs": "vendor\/bin\/ecs check --fix --ansi" }, "extra": { "enable-patching": true diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/attributes/doctrine.php b/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/attributes/doctrine.php index 9a5e62291..4e88bc225 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/attributes/doctrine.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/attributes/doctrine.php @@ -1,7 +1,7 @@ ruleWithConfiguration(AttributeKeyToClassConstFetchRector::class, [new AttributeKeyToClassConstFetch('Doctrine\\ORM\\Mapping\\Column', 'type', 'Doctrine\\DBAL\\Types\\Types', ['array' => 'ARRAY', 'ascii_string' => 'ASCII_STRING', 'bigint' => 'BIGINT', 'binary' => 'BINARY', 'blob' => 'BLOB', 'boolean' => 'BOOLEAN', 'date' => 'DATE_MUTABLE', 'date_immutable' => 'DATE_IMMUTABLE', 'dateinterval' => 'DATEINTERVAL', 'datetime' => 'DATETIME_MUTABLE', 'datetime_immutable' => 'DATETIME_IMMUTABLE', 'datetimetz' => 'DATETIMETZ_MUTABLE', 'datetimetz_immutable' => 'DATETIMETZ_IMMUTABLE', 'decimal' => 'DECIMAL', 'float' => 'FLOAT', 'guid' => 'GUID', 'integer' => 'INTEGER', 'json' => 'JSON', 'object' => 'OBJECT', 'simple_array' => 'SIMPLE_ARRAY', 'smallint' => 'SMALLINT', 'string' => 'STRING', 'text' => 'TEXT', 'time' => 'TIME_MUTABLE', 'time_immutable' => 'TIME_IMMUTABLE'])]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-collection-22.php b/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-collection-22.php index f27e17ea0..d38bd02db 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-collection-22.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-collection-22.php @@ -1,11 +1,9 @@ ruleWithConfiguration(RenameClassConstFetchRector::class, [new RenameClassAndConstFetch('Doctrine\\Common\\Collections\\Criteria', 'ASC', 'Doctrine\\Common\\Collections\\Order', 'Ascending'), new RenameClassAndConstFetch('Doctrine\\Common\\Collections\\Criteria', 'DESC', 'Doctrine\\Common\\Collections\\Order', 'Descending')]); + $rectorConfig->rules([\Rector\Doctrine\Collection22\Rector\CriteriaOrderingConstantsDeprecationRector::class]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-common-20.php b/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-common-20.php index b7412b0b7..4a68dd6b6 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-common-20.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/config/sets/doctrine-common-20.php @@ -1,7 +1,7 @@ withRules([ExplicitRelationCollectionRector::class, AddReturnDocBlockToCollectionPropertyGetterByToManyAnnotationRector::class, TypedPropertyFromToManyRelationTypeRector::class, ImproveDoctrineCollectionDocTypeInEntityRector::class]); diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/config/yaml-to-annotations.php b/vendor/rector/rector/vendor/rector/rector-doctrine/config/yaml-to-annotations.php index 47e727413..bae1c2236 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/config/yaml-to-annotations.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/config/yaml-to-annotations.php @@ -1,7 +1,7 @@ addIndexes($classMapping['indexes'] ?? [], $class, MappingClass::INDEX); $this->addIndexes($classMapping['uniqueConstraints'] ?? [], $class, MappingClass::UNIQUE_CONSTRAINT); } + public function getClassName() : string + { + return MappingClass::TABLE; + } /** * @param array> $mapping * @param MappingClass::* $attribute @@ -52,8 +56,4 @@ private function addIndexes(array $mapping, Class_ $class, string $attribute) : $class->attrGroups[] = AttributeFactory::createGroup($attribute, $args); } } - public function getClassName() : string - { - return MappingClass::TABLE; - } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/JoinColumnAttributeTransformer.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/JoinColumnAttributeTransformer.php index 32d5d506d..f9a17748f 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/JoinColumnAttributeTransformer.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/JoinColumnAttributeTransformer.php @@ -30,6 +30,10 @@ public function transform(EntityMapping $entityMapping, $property) : void $this->transformMapping($property, $entityMapping->matchManyToManyPropertyMapping($property)['joinTable'] ?? null); $this->transformMapping($property, $entityMapping->matchManyToOnePropertyMapping($property)); } + public function getClassName() : string + { + return MappingClass::JOIN_COLUMN; + } /** * @param array>|null $mapping * @param \PhpParser\Node\Stmt\Property|\PhpParser\Node\Param $property @@ -53,10 +57,6 @@ private function transformMapping($property, ?array $mapping) : void $property->attrGroups[] = $this->createJoinColumnAttrGroup($columnName, $joinColumn); } } - public function getClassName() : string - { - return MappingClass::JOIN_COLUMN; - } /** * @param int|string $columnName * @param mixed $joinColumn diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/OneToManyAttributeTransformer.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/OneToManyAttributeTransformer.php index 646fff792..2dadda1a4 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/OneToManyAttributeTransformer.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/AttributeTransformer/PropertyAttributeTransformer/OneToManyAttributeTransformer.php @@ -35,7 +35,7 @@ public function transform(EntityMapping $entityMapping, $property) : void // handled by OrderBy mapping rule as standalone entity class unset($oneToManyMapping[EntityMappingKey::ORDER_BY]); $args = $this->nodeFactory->createArgs($oneToManyMapping); - NodeValueNormalizer::ensureKeyIsClassConstFetch($args, 'targetEntity'); + NodeValueNormalizer::ensureKeyIsClassConstFetch($args, EntityMappingKey::TARGET_ENTITY); $property->attrGroups[] = AttributeFactory::createGroup($this->getClassName(), $args); } public function getClassName() : string diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/EntityMappingResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/EntityMappingResolver.php index 55a94fce1..0366dfa41 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/EntityMappingResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/EntityMappingResolver.php @@ -5,10 +5,10 @@ use PHPStan\Reflection\ReflectionProvider; use Rector\Doctrine\CodeQuality\ValueObject\EntityMapping; -use RectorPrefix202405\Symfony\Component\Finder\Finder; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; -use RectorPrefix202405\Symfony\Component\Yaml\Yaml; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Finder\Finder; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Yaml\Yaml; +use RectorPrefix202410\Webmozart\Assert\Assert; final class EntityMappingResolver { /** diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Enum/CollectionMapping.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Enum/CollectionMapping.php new file mode 100644 index 000000000..ae202187d --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Enum/CollectionMapping.php @@ -0,0 +1,18 @@ +classMethodReturnTypeOverrideGuard = $classMethodReturnTypeOverrideGuard; + $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->doctrineDocBlockResolver = $doctrineDocBlockResolver; + $this->phpDocTypeChanger = $phpDocTypeChanger; + $this->collectionTypeResolver = $collectionTypeResolver; + $this->collectionTypeFactory = $collectionTypeFactory; + $this->methodUniqueReturnedPropertyResolver = $methodUniqueReturnedPropertyResolver; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Adds @return PHPDoc type to Collection property getter by *ToMany annotation/attribute', [new CodeSample(<<<'CODE_SAMPLE' +use App\Entity\Training; + +/** + * @ORM\Entity + */ +final class Trainer +{ + /** + * @ORM\OneToMany(targetEntity=Training::class) + */ + private $trainings; + + public function getTrainings() + { + return $this->trainings; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +/** + * @ORM\Entity + */ +final class Trainer +{ + /** + * @ORM\OneToMany(targetEntity=Training::class) + */ + private $trainings; + + /** + * @return \Doctrine\Common\Collections\Collection + */ + public function getTrainings() + { + return $this->trainings; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactorWithScope(Node $node, Scope $scope) : ?Node + { + if (!$this->doctrineDocBlockResolver->isDoctrineEntityClass($node)) { + return null; + } + $hasChanged = \false; + foreach ($node->getMethods() as $classMethod) { + if ($this->classMethodReturnTypeOverrideGuard->shouldSkipClassMethod($classMethod, $scope)) { + continue; + } + $property = $this->methodUniqueReturnedPropertyResolver->resolve($node, $classMethod); + if (!$property instanceof Property) { + continue; + } + $collectionObjectType = $this->collectionTypeResolver->resolveFromToManyProperty($property); + if (!$collectionObjectType instanceof FullyQualifiedObjectType) { + continue; + } + // update docblock with known collection type + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classMethod); + $newVarType = $this->collectionTypeFactory->createType($collectionObjectType); + $this->phpDocTypeChanger->changeReturnType($classMethod, $phpDocInfo, $newVarType); + $hasChanged = \true; + } + return $hasChanged ? $node : null; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php new file mode 100644 index 000000000..35a0bb367 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/AddReturnDocBlockToCollectionPropertyGetterByToManyAttributeRector.php @@ -0,0 +1,64 @@ +trainings; + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +#[ORM\Entity] +final class Trainer +{ + #[ORM\OneToMany(targetEntity:Training::class, mappedBy:"trainer")] + private $trainings; + + /** + * @return \Doctrine\Common\Collections\Collection + */ + public function getTrainings() + { + return $this->trainings; + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + return null; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php index 3518c55d2..72e71846e 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/ExplicitRelationCollectionRector.php @@ -7,6 +7,8 @@ use PhpParser\Node\Expr; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\Class_; +use Rector\Doctrine\Enum\MappingClass; +use Rector\Doctrine\Enum\OdmMappingClass; use Rector\Doctrine\NodeAnalyzer\AttrinationFinder; use Rector\Doctrine\NodeFactory\ArrayCollectionAssignFactory; use Rector\NodeManipulator\ClassDependencyManipulator; @@ -52,7 +54,7 @@ public function __construct(AttrinationFinder $attrinationFinder, ConstructorAss } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Use explicit collection in one-to-many relations of Doctrine entity', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Use Collection object type for one-to-many relations of Doctrine entity/ODM document', [new CodeSample(<<<'CODE_SAMPLE' use Doctrine\ORM\Mapping\OneToMany; use Doctrine\ORM\Mapping\Entity; @@ -95,12 +97,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->attrinationFinder->hasByOne($node, 'Doctrine\\ORM\\Mapping\\Entity')) { + if (!$this->attrinationFinder->hasByMany($node, [MappingClass::ENTITY, MappingClass::EMBEDDABLE, OdmMappingClass::DOCUMENT])) { return null; } $arrayCollectionAssigns = []; foreach ($node->getProperties() as $property) { - if (!$this->attrinationFinder->hasByMany($property, ['Doctrine\\ORM\\Mapping\\OneToMany', 'Doctrine\\ORM\\Mapping\\ManyToMany'])) { + if (!$this->attrinationFinder->hasByMany($property, [MappingClass::ONE_TO_MANY, MappingClass::MANY_TO_MANY, OdmMappingClass::REFERENCE_MANY])) { continue; } // make sure has collection diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php index c97c731c5..e7a060e3c 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/InitializeDefaultEntityCollectionRector.php @@ -5,54 +5,21 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; -use PhpParser\Node\Stmt\Expression; -use Rector\Doctrine\NodeAnalyzer\AttrinationFinder; -use Rector\Doctrine\NodeFactory\ArrayCollectionAssignFactory; -use Rector\NodeManipulator\ClassDependencyManipulator; use Rector\Rector\AbstractRector; -use Rector\TypeDeclaration\AlreadyAssignDetector\ConstructorAssignDetector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/best-practices.html#initialize-collections-in-the-constructor * - * @see \Rector\Doctrine\Tests\CodeQuality\Rector\Class_\InitializeDefaultEntityCollectionRector\InitializeDefaultEntityCollectionRectorTest - * - * @deprecated This rule can create incomplete assign of object to an array. Use the @see \Rector\Doctrine\CodeQuality\Rector\Class_\ExplicitRelationCollectionRector instead. + * @deprecated This rule can create incomplete assign of object to an array. Use the + * @see \Rector\Doctrine\CodeQuality\Rector\Class_\ExplicitRelationCollectionRector instead */ final class InitializeDefaultEntityCollectionRector extends AbstractRector { /** - * @readonly - * @var \Rector\NodeManipulator\ClassDependencyManipulator - */ - private $classDependencyManipulator; - /** - * @readonly - * @var \Rector\Doctrine\NodeFactory\ArrayCollectionAssignFactory - */ - private $arrayCollectionAssignFactory; - /** - * @readonly - * @var \Rector\Doctrine\NodeAnalyzer\AttrinationFinder - */ - private $attrinationFinder; - /** - * @readonly - * @var \Rector\TypeDeclaration\AlreadyAssignDetector\ConstructorAssignDetector - */ - private $constructorAssignDetector; - /** - * @var string[] + * @var bool */ - private const TO_MANY_ANNOTATION_CLASSES = ['Doctrine\\ORM\\Mapping\\OneToMany', 'Doctrine\\ORM\\Mapping\\ManyToMany']; - public function __construct(ClassDependencyManipulator $classDependencyManipulator, ArrayCollectionAssignFactory $arrayCollectionAssignFactory, AttrinationFinder $attrinationFinder, ConstructorAssignDetector $constructorAssignDetector) - { - $this->classDependencyManipulator = $classDependencyManipulator; - $this->arrayCollectionAssignFactory = $arrayCollectionAssignFactory; - $this->attrinationFinder = $attrinationFinder; - $this->constructorAssignDetector = $constructorAssignDetector; - } + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Initialize collection property in Entity constructor', [new CodeSample(<<<'CODE_SAMPLE' @@ -102,49 +69,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->attrinationFinder->hasByOne($node, 'Doctrine\\ORM\\Mapping\\Entity')) { + if ($this->hasWarned) { return null; } - $toManyPropertyNames = $this->resolveToManyPropertyNames($node); - if ($toManyPropertyNames === []) { - return null; - } - $assigns = $this->createAssignsOfArrayCollectionsForPropertyNames($toManyPropertyNames); - $this->classDependencyManipulator->addStmtsToConstructorIfNotThereYet($node, $assigns); - return $node; - } - /** - * @return string[] - */ - private function resolveToManyPropertyNames(Class_ $class) : array - { - $collectionPropertyNames = []; - foreach ($class->getProperties() as $property) { - if (\count($property->props) !== 1) { - continue; - } - if (!$this->attrinationFinder->hasByMany($property, self::TO_MANY_ANNOTATION_CLASSES)) { - continue; - } - /** @var string $propertyName */ - $propertyName = $this->getName($property); - if ($this->constructorAssignDetector->isPropertyAssigned($class, $propertyName)) { - continue; - } - $collectionPropertyNames[] = $propertyName; - } - return $collectionPropertyNames; - } - /** - * @param string[] $propertyNames - * @return Expression[] - */ - private function createAssignsOfArrayCollectionsForPropertyNames(array $propertyNames) : array - { - $assigns = []; - foreach ($propertyNames as $propertyName) { - $assigns[] = $this->arrayCollectionAssignFactory->createFromPropertyName($propertyName); - } - return $assigns; + \trigger_error(\sprintf('The "%s" rule was deprecated, as its functionality caused bugs. Without knowing the full dependency tree, its risky to change. Use "%s" instead', self::class, 'https://github.com/rectorphp/swiss-knife#4-finalize-classes-without-children')); + \sleep(3); + $this->hasWarned = \true; + return null; } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/RemoveEmptyTableAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/RemoveEmptyTableAttributeRector.php index 06ecfe08c..f375647f2 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/RemoveEmptyTableAttributeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Class_/RemoveEmptyTableAttributeRector.php @@ -20,9 +20,9 @@ public function getRuleDefinition() : RuleDefinition return new RuleDefinition("Remove empty Table attribute on entities because it's useless", [new CodeSample(<<<'CODE_SAMPLE' collectionTypeFactory = $collectionTypeFactory; - $this->assignManipulator = $assignManipulator; $this->collectionTypeResolver = $collectionTypeResolver; $this->collectionVarTagValueNodeResolver = $collectionVarTagValueNodeResolver; $this->phpDocTypeChanger = $phpDocTypeChanger; $this->doctrineDocBlockResolver = $doctrineDocBlockResolver; - $this->reflectionResolver = $reflectionResolver; $this->attributeFinder = $attributeFinder; $this->targetEntityResolver = $targetEntityResolver; $this->phpDocInfoFactory = $phpDocInfoFactory; - $this->staticTypeMapper = $staticTypeMapper; + $this->setterCollectionResolver = $setterCollectionResolver; } public function getRuleDefinition() : RuleDefinition { @@ -118,6 +104,11 @@ class SomeClass * @var Collection|Trainer[] */ private $trainings = []; + + public function setTrainings($trainings) + { + $this->trainings = $trainings; + } } CODE_SAMPLE , <<<'CODE_SAMPLE' @@ -134,6 +125,14 @@ class SomeClass * @var Collection */ private $trainings = []; + + /** + * @param Collection $trainings + */ + public function setTrainings($trainings) + { + $this->trainings = $trainings; + } } CODE_SAMPLE )]); @@ -158,10 +157,10 @@ public function refactor(Node $node) : ?Node private function refactorProperty(Property $property) : ?Property { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property); - if ($phpDocInfo->hasByAnnotationClasses(ToManyMappings::TO_MANY_CLASSES)) { + if ($phpDocInfo->hasByAnnotationClasses(CollectionMapping::TO_MANY_CLASSES)) { return $this->refactorPropertyPhpDocInfo($property, $phpDocInfo); } - $targetEntityExpr = $this->attributeFinder->findAttributeByClassesArgByName($property, ToManyMappings::TO_MANY_CLASSES, 'targetEntity'); + $targetEntityExpr = $this->attributeFinder->findAttributeByClassesArgByName($property, CollectionMapping::TO_MANY_CLASSES, EntityMappingKey::TARGET_ENTITY); if (!$targetEntityExpr instanceof Expr) { return null; } @@ -177,8 +176,8 @@ private function refactorClassMethod(Class_ $class) : ?Class_ if (!$classMethod->isPublic()) { continue; } - $collectionObjectType = $this->resolveCollectionSetterAssignType($class, $classMethod); - if (!$collectionObjectType instanceof Type) { + $collectionObjectType = $this->setterCollectionResolver->resolveAssignedGenericCollectionType($class, $classMethod); + if (!$collectionObjectType instanceof GenericObjectType) { continue; } if (\count($classMethod->params) !== 1) { @@ -199,27 +198,6 @@ private function refactorClassMethod(Class_ $class) : ?Class_ } return null; } - private function resolveCollectionSetterAssignType(Class_ $class, ClassMethod $classMethod) : ?Type - { - $propertyFetches = $this->assignManipulator->resolveAssignsToLocalPropertyFetches($classMethod); - if (\count($propertyFetches) !== 1) { - return null; - } - $phpPropertyReflection = $this->reflectionResolver->resolvePropertyReflectionFromPropertyFetch($propertyFetches[0]); - if (!$phpPropertyReflection instanceof PhpPropertyReflection) { - return null; - } - $propertyName = (string) $this->nodeNameResolver->getName($propertyFetches[0]); - $property = $class->getProperty($propertyName); - if (!$property instanceof Property) { - return null; - } - $varTagValueNode = $this->collectionVarTagValueNodeResolver->resolve($property); - if (!$varTagValueNode instanceof VarTagValueNode) { - return null; - } - return $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($varTagValueNode->type, $property); - } private function refactorPropertyPhpDocInfo(Property $property, PhpDocInfo $phpDocInfo) : ?Property { $varTagValueNode = $this->collectionVarTagValueNodeResolver->resolve($property); @@ -231,7 +209,7 @@ private function refactorPropertyPhpDocInfo(Property $property, PhpDocInfo $phpD $newVarType = $this->collectionTypeFactory->createType($collectionObjectType); $this->phpDocTypeChanger->changeVarType($property, $phpDocInfo, $newVarType); } else { - $collectionObjectType = $this->collectionTypeResolver->resolveFromToManyProperties($property); + $collectionObjectType = $this->collectionTypeResolver->resolveFromToManyProperty($property); if (!$collectionObjectType instanceof FullyQualifiedObjectType) { return null; } @@ -242,18 +220,23 @@ private function refactorPropertyPhpDocInfo(Property $property, PhpDocInfo $phpD } private function refactorAttribute(Expr $expr, PhpDocInfo $phpDocInfo, Property $property) : ?Property { - $phpDocVarTagValueNode = $phpDocInfo->getVarTagValueNode(); - $phpDocCollectionVarTagValueNode = $this->collectionVarTagValueNodeResolver->resolve($property); - if ($phpDocVarTagValueNode instanceof VarTagValueNode && !$phpDocCollectionVarTagValueNode instanceof VarTagValueNode) { - return null; + $toManyAttribute = $this->attributeFinder->findAttributeByClasses($property, CollectionMapping::TO_MANY_CLASSES); + if ($toManyAttribute instanceof Attribute) { + $targetEntityClassName = $this->targetEntityResolver->resolveFromAttribute($toManyAttribute); + } else { + $phpDocVarTagValueNode = $phpDocInfo->getVarTagValueNode(); + $phpDocCollectionVarTagValueNode = $this->collectionVarTagValueNodeResolver->resolve($property); + if ($phpDocVarTagValueNode instanceof VarTagValueNode && !$phpDocCollectionVarTagValueNode instanceof VarTagValueNode) { + return null; + } + $targetEntityClassName = $this->targetEntityResolver->resolveFromExpr($expr); } - $targetEntityClassName = $this->targetEntityResolver->resolveFromExpr($expr); if ($targetEntityClassName === null) { return null; } $fullyQualifiedObjectType = new FullyQualifiedObjectType($targetEntityClassName); - $newVarType = $this->collectionTypeFactory->createType($fullyQualifiedObjectType); - $this->phpDocTypeChanger->changeVarType($property, $phpDocInfo, $newVarType); + $genericObjectType = $this->collectionTypeFactory->createType($fullyQualifiedObjectType); + $this->phpDocTypeChanger->changeVarType($property, $phpDocInfo, $genericObjectType); return $property; } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/OrderByKeyToClassConstRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/OrderByKeyToClassConstRector.php deleted file mode 100644 index 132147b98..000000000 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/OrderByKeyToClassConstRector.php +++ /dev/null @@ -1,88 +0,0 @@ - 'ASC'])] - protected \DateTimeInterface $messages; -} -?> -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use Doctrine\ORM\Mapping as ORM; - -class ReplaceOrderByAscWithClassConstant -{ - #[ORM\OrderBy(['createdAt' => \Doctrine\Common\Collections\Criteria::ASC])] - protected \DateTimeInterface $messages; -} -?> -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Property::class]; - } - /** - * @param Property $node - */ - public function refactor(Node $node) : ?Node - { - $nodeAttribute = null; - foreach ($node->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attr) { - if ($attr->name->toString() === 'Doctrine\\ORM\\Mapping\\OrderBy') { - $nodeAttribute = $attr; - break 2; - } - } - } - // If Attribute is not OrderBy, return null - if (!$nodeAttribute instanceof Attribute) { - return null; - } - if (!isset($nodeAttribute->args[0])) { - return null; - } - if (!$nodeAttribute->args[0]->value instanceof Array_) { - return null; - } - if (!isset($nodeAttribute->args[0]->value->items[0])) { - return null; - } - if (!$nodeAttribute->args[0]->value->items[0]->value instanceof String_) { - return null; - } - // If Attribute value from key is not `ASC` or `DESC`, return null - if (!\in_array($nodeAttribute->args[0]->value->items[0]->value->value, ['ASC', 'asc', 'DESC', 'desc'], \true)) { - return null; - } - $upper = \strtoupper($nodeAttribute->args[0]->value->items[0]->value->value); - $nodeAttribute->args[0]->value->items[0]->value = $this->nodeFactory->createClassConstFetch('Doctrine\\Common\\Collections\\Criteria', $upper); - return $node; - } -} diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php index 575a76264..098fb245b 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromDoctrineCollectionRector.php @@ -4,45 +4,22 @@ namespace Rector\Doctrine\CodeQuality\Rector\Property; use PhpParser\Node; -use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\Property; -use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\Doctrine\TypeAnalyzer\DoctrineCollectionTypeAnalyzer; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; -use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\ValueObject\PhpVersion; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Doctrine\Tests\CodeQuality\Rector\Property\TypedPropertyFromDoctrineCollectionRector\TypedPropertyFromDoctrineCollectionRectorTest * @deprecated Use more complete \Rector\Doctrine\CodeQuality\Rector\Class_\ExplicitRelationCollectionRector instead */ -final class TypedPropertyFromDoctrineCollectionRector extends AbstractRector implements MinPhpVersionInterface +final class TypedPropertyFromDoctrineCollectionRector extends AbstractRector implements MinPhpVersionInterface, DeprecatedInterface { /** - * @readonly - * @var \Rector\Doctrine\TypeAnalyzer\DoctrineCollectionTypeAnalyzer + * @var bool */ - private $doctrineCollectionTypeAnalyzer; - /** - * @readonly - * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory - */ - private $phpDocInfoFactory; - /** - * @readonly - * @var \Rector\StaticTypeMapper\StaticTypeMapper - */ - private $staticTypeMapper; - public function __construct(DoctrineCollectionTypeAnalyzer $doctrineCollectionTypeAnalyzer, PhpDocInfoFactory $phpDocInfoFactory, StaticTypeMapper $staticTypeMapper) - { - $this->doctrineCollectionTypeAnalyzer = $doctrineCollectionTypeAnalyzer; - $this->phpDocInfoFactory = $phpDocInfoFactory; - $this->staticTypeMapper = $staticTypeMapper; - } + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Add typed property based on Doctrine collection', [new CodeSample(<<<'CODE_SAMPLE' @@ -91,23 +68,13 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if ($node->type !== null) { - return null; - } - $propertyPhpDocInfo = $this->phpDocInfoFactory->createFromNode($node); - if (!$propertyPhpDocInfo instanceof PhpDocInfo) { - return null; - } - $varTagValueNode = $propertyPhpDocInfo->getVarTagValueNode(); - if (!$varTagValueNode instanceof VarTagValueNode) { - return null; - } - $varTagType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($varTagValueNode->type, $node); - if (!$this->doctrineCollectionTypeAnalyzer->detect($varTagType)) { + if ($this->hasWarned) { return null; } - $node->type = new FullyQualified('Doctrine\\Common\\Collections\\Collection'); - return $node; + \trigger_error(\sprintf('The "%s" rule was deprecated, as its functionality caused bugs. Without knowing the full dependency tree, its risky to change. Use "%s" instead', self::class, 'https://github.com/rectorphp/swiss-knife#4-finalize-classes-without-children')); + \sleep(3); + $this->hasWarned = \true; + return null; } public function provideMinPhpVersion() : int { diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php index 8f07220ff..27524cf1f 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Rector/Property/TypedPropertyFromToOneRelationTypeRector.php @@ -13,6 +13,7 @@ use PHPStan\Type\UnionType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; +use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Doctrine\NodeManipulator\ToOneRelationPropertyTypeResolver; use Rector\Php\PhpVersionProvider; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; @@ -22,12 +23,13 @@ use Rector\ValueObject\PhpVersion; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; +use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Doctrine\Tests\CodeQuality\Rector\Property\TypedPropertyFromToOneRelationTypeRector\TypedPropertyFromToOneRelationTypeRectorTest */ -final class TypedPropertyFromToOneRelationTypeRector extends AbstractRector implements MinPhpVersionInterface +final class TypedPropertyFromToOneRelationTypeRector extends AbstractRector implements MinPhpVersionInterface, ConfigurableRectorInterface { /** * @readonly @@ -59,6 +61,11 @@ final class TypedPropertyFromToOneRelationTypeRector extends AbstractRector impl * @var \Rector\StaticTypeMapper\StaticTypeMapper */ private $staticTypeMapper; + public const FORCE_NULLABLE = 'force_nullable'; + /** + * @var bool + */ + private $forceNullable = \true; public function __construct(PropertyTypeDecorator $propertyTypeDecorator, PhpDocTypeChanger $phpDocTypeChanger, ToOneRelationPropertyTypeResolver $toOneRelationPropertyTypeResolver, PhpVersionProvider $phpVersionProvider, PhpDocInfoFactory $phpDocInfoFactory, StaticTypeMapper $staticTypeMapper) { $this->propertyTypeDecorator = $propertyTypeDecorator; @@ -70,13 +77,14 @@ public function __construct(PropertyTypeDecorator $propertyTypeDecorator, PhpDoc } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Complete @var annotations or types based on @ORM\\*toOne annotations or attributes', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Complete @var annotations or types based on @ORM\\*toOne annotations or attributes', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' use Doctrine\ORM\Mapping as ORM; class SimpleColumn { /** * @ORM\OneToOne(targetEntity="App\Company\Entity\Company") + * @ORM\JoinColumn(nullable=false) */ private $company; } @@ -88,11 +96,46 @@ class SimpleColumn { /** * @ORM\OneToOne(targetEntity="App\Company\Entity\Company") + * @ORM\JoinColumn(nullable=false) */ private ?\App\Company\Entity\Company $company = null; } CODE_SAMPLE -)]); +, ['force_nullable' => \true]), new ConfiguredCodeSample(<<<'CODE_SAMPLE' +use Doctrine\ORM\Mapping as ORM; + +class SimpleColumn +{ + /** + * @ORM\OneToOne(targetEntity="App\Company\Entity\Company") + * @ORM\JoinColumn(nullable=false) + */ + private $company; +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Doctrine\ORM\Mapping as ORM; + +class SimpleColumn +{ + /** + * @ORM\OneToOne(targetEntity="App\Company\Entity\Company") + * @ORM\JoinColumn(nullable=false) + */ + private \App\Company\Entity\Company $company; +} +CODE_SAMPLE +, ['force_nullable' => \false])]); + } + /** + * @param array $configuration + */ + public function configure(array $configuration) : void + { + if (isset($configuration[self::FORCE_NULLABLE])) { + Assert::boolean($configuration[self::FORCE_NULLABLE]); + $this->forceNullable = $configuration[self::FORCE_NULLABLE]; + } } /** * @return array> @@ -109,7 +152,7 @@ public function refactor(Node $node) : ?\PhpParser\Node\Stmt\Property if ($node->type !== null) { return null; } - $propertyType = $this->toOneRelationPropertyTypeResolver->resolve($node); + $propertyType = $this->toOneRelationPropertyTypeResolver->resolve($node, $this->forceNullable); if (!$propertyType instanceof Type) { return null; } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php new file mode 100644 index 000000000..e2b53ad0d --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/SetterCollectionResolver.php @@ -0,0 +1,113 @@ +assignManipulator = $assignManipulator; + $this->reflectionResolver = $reflectionResolver; + $this->nodeNameResolver = $nodeNameResolver; + $this->collectionVarTagValueNodeResolver = $collectionVarTagValueNodeResolver; + $this->staticTypeMapper = $staticTypeMapper; + $this->collectionTypeFactory = $collectionTypeFactory; + } + public function resolveAssignedGenericCollectionType(Class_ $class, ClassMethod $classMethod) : ?GenericObjectType + { + $propertyFetches = $this->assignManipulator->resolveAssignsToLocalPropertyFetches($classMethod); + if (\count($propertyFetches) !== 1) { + return null; + } + $phpPropertyReflection = $this->reflectionResolver->resolvePropertyReflectionFromPropertyFetch($propertyFetches[0]); + if (!$phpPropertyReflection instanceof PhpPropertyReflection) { + return null; + } + $propertyName = (string) $this->nodeNameResolver->getName($propertyFetches[0]); + $property = $class->getProperty($propertyName); + if (!$property instanceof Property) { + return null; + } + $varTagValueNode = $this->collectionVarTagValueNodeResolver->resolve($property); + if (!$varTagValueNode instanceof VarTagValueNode) { + return null; + } + // remove collection union type, so this can be turned into generic type + $resolvedType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($varTagValueNode->type, $property); + if ($resolvedType instanceof UnionType) { + $nonCollectionTypes = []; + foreach ($resolvedType->getTypes() as $unionedType) { + if (!$this->isCollectionType($unionedType)) { + continue; + } + $nonCollectionTypes[] = $unionedType; + } + if (\count($nonCollectionTypes) === 1) { + $soleType = $nonCollectionTypes[0]; + if ($soleType instanceof ArrayType && $soleType->getItemType() instanceof ObjectType) { + return $this->collectionTypeFactory->createType($soleType->getItemType()); + } + } + } + if ($resolvedType instanceof GenericObjectType) { + return $resolvedType; + } + return null; + } + private function isCollectionType(Type $type) : bool + { + if ($type instanceof ShortenedObjectType && $type->getFullyQualifiedName() === DoctrineClass::COLLECTION) { + return \true; + } + return $type instanceof ObjectType && $type->getClassName() === DoctrineClass::COLLECTION; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Utils/CaseStringHelper.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Utils/CaseStringHelper.php index 0917e764a..6c12a7b69 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Utils/CaseStringHelper.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/Utils/CaseStringHelper.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Doctrine\CodeQuality\Utils; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; final class CaseStringHelper { public static function camelCase(string $value) : string diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/ValueObject/EntityMapping.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/ValueObject/EntityMapping.php index c97d47993..48302f581 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/ValueObject/EntityMapping.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/CodeQuality/ValueObject/EntityMapping.php @@ -7,7 +7,7 @@ use PhpParser\Node\Param; use PhpParser\Node\Stmt\Property; use Rector\Exception\ShouldNotHappenException; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class EntityMapping { /** diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Collection22/Rector/CriteriaOrderingConstantsDeprecationRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Collection22/Rector/CriteriaOrderingConstantsDeprecationRector.php new file mode 100644 index 000000000..14ceb8558 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Collection22/Rector/CriteriaOrderingConstantsDeprecationRector.php @@ -0,0 +1,158 @@ +criteriaObjectType = new ObjectType('Doctrine\\Common\\Collections\\Criteria'); + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Replace ASC/DESC with enum Ordering in Criteria::orderBy method call, and remove usage of Criteria::ASC and Criteria::DESC constants elsewhere', [new CodeSample(<<<'CODE_SAMPLE' +use Doctrine\Common\Collections\Criteria; + +$criteria = new Criteria(); +$criteria->orderBy(['someProperty' => 'ASC', 'anotherProperty' => 'DESC']); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Doctrine\Common\Collections\Criteria; + +$criteria = new Criteria(); +$criteria->orderBy(['someProperty' => \Doctrine\Common\Collections\Order::Ascending, 'anotherProperty' => \Doctrine\Common\Collections\Order::Descending]); +CODE_SAMPLE +), new CodeSample(<<<'CODE_SAMPLE' +use Doctrine\Common\Collections\Criteria; + +$query->addOrderBy('something', Criteria::ASC); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Doctrine\Common\Collections\Criteria; + +$query->addOrderBy('something', 'ASC'); +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class, ClassConstFetch::class]; + } + /** + * @param MethodCall|ClassConstFetch $node + */ + public function refactor(Node $node) : ?Node + { + if ($node instanceof ClassConstFetch) { + return $this->refactorClassConstFetch($node); + } + return $this->refactorMethodCall($node); + } + private function refactorClassConstFetch(ClassConstFetch $classConstFetch) : ?Node + { + if (!$classConstFetch->name instanceof Identifier) { + return null; + } + if (!\in_array($classConstFetch->name->name, ['ASC', 'DESC'])) { + return null; + } + if (!$classConstFetch->class instanceof Name) { + return null; + } + if (!$this->criteriaObjectType->isSuperTypeOf(new ObjectType($classConstFetch->class->toCodeString()))->yes()) { + return null; + } + switch ($classConstFetch->name->name) { + case 'ASC': + return new String_('ASC'); + case 'DESC': + return new String_('DESC'); + } + } + private function refactorMethodCall(MethodCall $methodCall) : ?Node + { + if (!$this->isName($methodCall->name, 'orderBy')) { + return null; + } + if ($methodCall->isFirstClassCallable()) { + return null; + } + if (!$this->criteriaObjectType->isSuperTypeOf($this->nodeTypeResolver->getType($methodCall->var))->yes()) { + return null; + } + $args = $methodCall->getArgs(); + if (\count($args) < 1) { + return null; + } + $arg = $args[0]; + if (!$arg instanceof Arg) { + return null; + } + if (!$arg->value instanceof Array_) { + return null; + } + $nodeHasChange = \false; + $newItems = []; + // we parse the array of the first argument + foreach ($arg->value->items as $item) { + if ($item === null) { + $newItems[] = $item; + continue; + } + if ($item->value instanceof String_ && \in_array($v = \strtoupper($item->value->value), ['ASC', 'DESC'], \true)) { + $newItems[] = $this->buildArrayItem($v, $item->key); + $nodeHasChange = \true; + } elseif ($item->value instanceof ClassConstFetch && $item->value->class instanceof Name && $this->criteriaObjectType->isSuperTypeOf(new ObjectType($item->value->class->toString())) && $item->value->name instanceof Identifier && \in_array($v = \strtoupper((string) $item->value->name), ['ASC', 'DESC'], \true)) { + $newItems[] = $this->buildArrayItem($v, $item->key); + $nodeHasChange = \true; + } else { + $newItems[] = $item; + } + } + if ($nodeHasChange) { + return $this->nodeFactory->createMethodCall($methodCall->var, 'orderBy', $this->nodeFactory->createArgs([$this->nodeFactory->createArg(new Array_($newItems))])); + } + return null; + } + /** + * @param 'ASC'|'DESC' $direction + */ + private function buildArrayItem(string $direction, ?\PhpParser\Node\Expr $key) : ArrayItem + { + $classConstFetch = $this->nodeFactory->createClassConstFetch('Doctrine\\Common\\Collections\\Order', (function () use($direction) { + switch ($direction) { + case 'ASC': + return 'Ascending'; + case 'DESC': + return 'Descending'; + } + })()); + return new ArrayItem($classConstFetch, $key); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php index 26e0de7b2..1c40f858d 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php @@ -65,7 +65,7 @@ public function run(): iterable )]); } /** - * @param ClassMethod|MethodCall|Node\Stmt\Foreach_ $node + * @param ClassMethod|MethodCall|Foreach_ $node * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Foreach_|null */ public function refactor(Node $node) diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/MappingClass.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/MappingClass.php index 728d7fb0b..88df797cf 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/MappingClass.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/MappingClass.php @@ -85,6 +85,10 @@ final class MappingClass * @var string */ public const ONE_TO_MANY = 'Doctrine\\ORM\\Mapping\\OneToMany'; + /** + * @var string + */ + public const ONE_TO_ONE = 'Doctrine\\ORM\\Mapping\\OneToOne'; /** * @var string */ diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/OdmMappingClass.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/OdmMappingClass.php new file mode 100644 index 000000000..7695b8fc1 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Enum/OdmMappingClass.php @@ -0,0 +1,16 @@ +findAttributeByClassesArgByName($node, [$attributeClass], $argName); } + /** + * @param string[] $attributeClasses + * @param string[] $argNames + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassLike|\PhpParser\Node\Param $node + */ + public function findAttributeByClassesArgByNames($node, array $attributeClasses, array $argNames) : ?Expr + { + $attribute = $this->findAttributeByClasses($node, $attributeClasses); + if (!$attribute instanceof Attribute) { + return null; + } + foreach ($argNames as $argName) { + $argExpr = $this->findArgByName($attribute, $argName); + if ($argExpr instanceof Expr) { + return $argExpr; + } + } + return null; + } /** * @param string[] $attributeClasses * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassLike|\PhpParser\Node\Param $node @@ -80,6 +99,14 @@ public function findAttributeByClasses($node, array $attributeClasses) : ?Attrib } return null; } + /** + * @param string[] $attributeClasses + * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassLike|\PhpParser\Node\Param $node + */ + public function hasAttributeByClasses($node, array $attributeClasses) : bool + { + return $this->findAttributeByClasses($node, $attributeClasses) !== []; + } private function findArgByName(Attribute $attribute, string $argName) : ?\PhpParser\Node\Expr { foreach ($attribute->args as $arg) { diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/AttrinationFinder.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/AttrinationFinder.php index 991076d8a..9961bf5bc 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/AttrinationFinder.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/AttrinationFinder.php @@ -57,8 +57,9 @@ public function hasByOne($node, string $name) : bool } /** * @param string[] $classNames + * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Property $property */ - public function hasByMany(Property $property, array $classNames) : bool + public function hasByMany($property, array $classNames) : bool { $phpDocInfo = $this->phpDocInfoFactory->createFromNode($property); if ($phpDocInfo instanceof PhpDocInfo && $phpDocInfo->hasByAnnotationClasses($classNames)) { @@ -67,4 +68,20 @@ public function hasByMany(Property $property, array $classNames) : bool $attribute = $this->attributeFinder->findAttributeByClasses($property, $classNames); return $attribute instanceof Attribute; } + /** + * @param string[] $classNames + * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\Property $property + * @return \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode|\PhpParser\Node\Attribute|null + */ + public function getByMany($property, array $classNames) + { + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($property); + if ($phpDocInfo instanceof PhpDocInfo) { + $foundDoctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClasses($classNames); + if ($foundDoctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { + return $foundDoctrineAnnotationTagValueNode; + } + } + return $this->attributeFinder->findAttributeByClasses($property, $classNames); + } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/MethodUniqueReturnedPropertyResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/MethodUniqueReturnedPropertyResolver.php new file mode 100644 index 000000000..94676afe6 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/MethodUniqueReturnedPropertyResolver.php @@ -0,0 +1,44 @@ +betterNodeFinder = $betterNodeFinder; + $this->nodeNameResolver = $nodeNameResolver; + } + public function resolve(Class_ $class, ClassMethod $classMethod) : ?Property + { + $returns = $this->betterNodeFinder->findInstancesOfInFunctionLikeScoped($classMethod, Return_::class); + if (\count($returns) !== 1) { + return null; + } + $return = \reset($returns); + $returnExpr = $return->expr; + if (!$returnExpr instanceof PropertyFetch) { + return null; + } + $propertyName = (string) $this->nodeNameResolver->getName($returnExpr); + return $class->getProperty($propertyName); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/TargetEntityResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/TargetEntityResolver.php index d682af5be..f507d43fb 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/TargetEntityResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeAnalyzer/TargetEntityResolver.php @@ -3,10 +3,13 @@ declare (strict_types=1); namespace Rector\Doctrine\NodeAnalyzer; +use PhpParser\Node\Attribute; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ClassConstFetch; +use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\String_; use PHPStan\Reflection\ReflectionProvider; +use Rector\Doctrine\CodeQuality\Enum\EntityMappingKey; use Rector\Exception\NotImplementedYetException; use Rector\NodeNameResolver\NodeNameResolver; final class TargetEntityResolver @@ -26,6 +29,19 @@ public function __construct(NodeNameResolver $nodeNameResolver, ReflectionProvid $this->nodeNameResolver = $nodeNameResolver; $this->reflectionProvider = $reflectionProvider; } + public function resolveFromAttribute(Attribute $attribute) : ?string + { + foreach ($attribute->args as $arg) { + if (!$arg->name instanceof Identifier) { + continue; + } + if ($arg->name->toString() !== EntityMappingKey::TARGET_ENTITY) { + continue; + } + return $this->resolveFromExpr($arg->value); + } + return null; + } public function resolveFromExpr(Expr $targetEntityExpr) : ?string { if ($targetEntityExpr instanceof ClassConstFetch) { diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ColumnPropertyTypeResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ColumnPropertyTypeResolver.php index 57b847acd..33d813cc9 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ColumnPropertyTypeResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ColumnPropertyTypeResolver.php @@ -76,10 +76,10 @@ public function __construct(PhpDocInfoFactory $phpDocInfoFactory, TypeFactory $t 'varchar' => new StringType(), 'string' => new StringType(), 'char' => new StringType(), - 'longblob' => new StringType(), - 'blob' => new StringType(), - 'mediumblob' => new StringType(), - 'tinyblob' => new StringType(), + 'longblob' => new MixedType(), + 'blob' => new MixedType(), + 'mediumblob' => new MixedType(), + 'tinyblob' => new MixedType(), 'binary' => new StringType(), 'varbinary' => new StringType(), 'set' => new StringType(), diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToManyRelationPropertyTypeResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToManyRelationPropertyTypeResolver.php index 40bc01a8c..968d9ed38 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToManyRelationPropertyTypeResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToManyRelationPropertyTypeResolver.php @@ -11,6 +11,10 @@ use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\BetterPhpDocParser\PhpDoc\StringNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; +use Rector\Doctrine\CodeQuality\Enum\CollectionMapping; +use Rector\Doctrine\CodeQuality\Enum\DoctrineClass; +use Rector\Doctrine\CodeQuality\Enum\EntityMappingKey; +use Rector\Doctrine\CodeQuality\Enum\OdmMappingKey; use Rector\Doctrine\NodeAnalyzer\AttributeFinder; use Rector\Doctrine\PhpDoc\ShortClassExpander; use Rector\Doctrine\TypeAnalyzer\CollectionTypeFactory; @@ -43,14 +47,6 @@ final class ToManyRelationPropertyTypeResolver * @var \Rector\Doctrine\TypeAnalyzer\CollectionTypeFactory */ private $collectionTypeFactory; - /** - * @var string - */ - private const COLLECTION_TYPE = 'Doctrine\\Common\\Collections\\Collection'; - /** - * @var class-string[] - */ - private const TO_MANY_ANNOTATION_CLASSES = ['Doctrine\\ORM\\Mapping\\OneToMany', 'Doctrine\\ORM\\Mapping\\ManyToMany']; public function __construct(PhpDocInfoFactory $phpDocInfoFactory, ShortClassExpander $shortClassExpander, AttributeFinder $attributeFinder, ValueResolver $valueResolver, CollectionTypeFactory $collectionTypeFactory) { $this->phpDocInfoFactory = $phpDocInfoFactory; @@ -62,11 +58,11 @@ public function __construct(PhpDocInfoFactory $phpDocInfoFactory, ShortClassExpa public function resolve(Property $property) : ?Type { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property); - $doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClasses(self::TO_MANY_ANNOTATION_CLASSES); + $doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClasses(CollectionMapping::TO_MANY_CLASSES); if ($doctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { return $this->processToManyRelation($property, $doctrineAnnotationTagValueNode); } - $expr = $this->attributeFinder->findAttributeByClassesArgByName($property, self::TO_MANY_ANNOTATION_CLASSES, 'targetEntity'); + $expr = $this->attributeFinder->findAttributeByClassesArgByNames($property, CollectionMapping::TO_MANY_CLASSES, [EntityMappingKey::TARGET_ENTITY, OdmMappingKey::TARGET_DOCUMENT]); if (!$expr instanceof Expr) { return null; } @@ -74,7 +70,7 @@ public function resolve(Property $property) : ?Type } private function processToManyRelation(Property $property, DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode) : ?\PHPStan\Type\Type { - $targetEntityArrayItemNode = $doctrineAnnotationTagValueNode->getValue('targetEntity'); + $targetEntityArrayItemNode = $doctrineAnnotationTagValueNode->getValue(EntityMappingKey::TARGET_ENTITY) ?: $doctrineAnnotationTagValueNode->getValue(OdmMappingKey::TARGET_DOCUMENT); if (!$targetEntityArrayItemNode instanceof ArrayItemNode) { return null; } @@ -97,7 +93,7 @@ private function resolveTypeFromTargetEntity($targetEntity, $property) : Type $targetEntity = $this->valueResolver->getValue($targetEntity); } if (!\is_string($targetEntity)) { - return new FullyQualifiedObjectType(self::COLLECTION_TYPE); + return new FullyQualifiedObjectType(DoctrineClass::COLLECTION); } $entityFullyQualifiedClass = $this->shortClassExpander->resolveFqnTargetEntity($targetEntity, $property); $fullyQualifiedObjectType = new FullyQualifiedObjectType($entityFullyQualifiedClass); diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToOneRelationPropertyTypeResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToOneRelationPropertyTypeResolver.php index 422d14546..90f83df61 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToOneRelationPropertyTypeResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/NodeManipulator/ToOneRelationPropertyTypeResolver.php @@ -3,20 +3,22 @@ declare (strict_types=1); namespace Rector\Doctrine\NodeManipulator; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Stmt\Property; use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprTrueNode; use PHPStan\Type\MixedType; use PHPStan\Type\NullType; use PHPStan\Type\Type; -use PHPStan\Type\TypeCombinator; use Rector\BetterPhpDocParser\PhpDoc\ArrayItemNode; use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode; use Rector\BetterPhpDocParser\PhpDoc\StringNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocParser\ClassAnnotationMatcher; +use Rector\Doctrine\CodeQuality\Enum\CollectionMapping; +use Rector\Doctrine\CodeQuality\Enum\EntityMappingKey; use Rector\Doctrine\NodeAnalyzer\AttributeFinder; use Rector\Doctrine\NodeAnalyzer\TargetEntityResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; @@ -48,10 +50,7 @@ final class ToOneRelationPropertyTypeResolver * @var \Rector\Doctrine\NodeAnalyzer\TargetEntityResolver */ private $targetEntityResolver; - /** - * @var class-string[] - */ - private const TO_ONE_ANNOTATION_CLASSES = ['Doctrine\\ORM\\Mapping\\ManyToOne', 'Doctrine\\ORM\\Mapping\\OneToOne']; + private const JOIN_COLUMN = ['Doctrine\\ORM\\Mapping\\JoinColumn', 'Doctrine\\ORM\\Mapping\\Column']; public function __construct(TypeFactory $typeFactory, PhpDocInfoFactory $phpDocInfoFactory, ClassAnnotationMatcher $classAnnotationMatcher, AttributeFinder $attributeFinder, TargetEntityResolver $targetEntityResolver) { $this->typeFactory = $typeFactory; @@ -60,28 +59,28 @@ public function __construct(TypeFactory $typeFactory, PhpDocInfoFactory $phpDocI $this->attributeFinder = $attributeFinder; $this->targetEntityResolver = $targetEntityResolver; } - public function resolve(Property $property) : ?Type + public function resolve(Property $property, bool $forceNullable) : ?Type { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property); - $doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClasses(self::TO_ONE_ANNOTATION_CLASSES); + $doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClasses(CollectionMapping::TO_ONE_CLASSES); if ($doctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { - return $this->resolveFromDocBlock($phpDocInfo, $property, $doctrineAnnotationTagValueNode); + return $this->resolveFromDocBlock($phpDocInfo, $property, $doctrineAnnotationTagValueNode, $forceNullable); } - $expr = $this->attributeFinder->findAttributeByClassesArgByName($property, self::TO_ONE_ANNOTATION_CLASSES, 'targetEntity'); + $expr = $this->attributeFinder->findAttributeByClassesArgByName($property, CollectionMapping::TO_ONE_CLASSES, EntityMappingKey::TARGET_ENTITY); if (!$expr instanceof Expr) { return null; } $targetEntityClass = $this->targetEntityResolver->resolveFromExpr($expr); if ($targetEntityClass !== null) { $fullyQualifiedObjectType = new FullyQualifiedObjectType($targetEntityClass); - // @todo resolve nullable value - return $this->resolveFromObjectType($fullyQualifiedObjectType, \false); + $isNullable = $forceNullable || $this->isNullableJoinColumn($property); + return $this->resolveFromObjectType($fullyQualifiedObjectType, $isNullable); } return null; } - private function processToOneRelation(Property $property, DoctrineAnnotationTagValueNode $toOneDoctrineAnnotationTagValueNode, ?DoctrineAnnotationTagValueNode $joinDoctrineAnnotationTagValueNode) : Type + private function processToOneRelation(Property $property, DoctrineAnnotationTagValueNode $toOneDoctrineAnnotationTagValueNode, ?DoctrineAnnotationTagValueNode $joinDoctrineAnnotationTagValueNode, bool $forceNullable) : Type { - $targetEntityArrayItemNode = $toOneDoctrineAnnotationTagValueNode->getValue('targetEntity'); + $targetEntityArrayItemNode = $toOneDoctrineAnnotationTagValueNode->getValue(EntityMappingKey::TARGET_ENTITY); if (!$targetEntityArrayItemNode instanceof ArrayItemNode) { return new MixedType(); } @@ -98,7 +97,7 @@ private function processToOneRelation(Property $property, DoctrineAnnotationTagV // resolve to FQN $tagFullyQualifiedName = $this->classAnnotationMatcher->resolveTagFullyQualifiedName($targetEntityClass, $property); $fullyQualifiedObjectType = new FullyQualifiedObjectType($tagFullyQualifiedName); - $isNullable = $this->isNullableType($joinDoctrineAnnotationTagValueNode); + $isNullable = $forceNullable || $this->isNullableType($joinDoctrineAnnotationTagValueNode); return $this->resolveFromObjectType($fullyQualifiedObjectType, $isNullable); } private function shouldAddNullType(DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode) : bool @@ -109,10 +108,10 @@ private function shouldAddNullType(DoctrineAnnotationTagValueNode $doctrineAnnot } return $isNullableValueArrayItemNode->value instanceof ConstExprTrueNode; } - private function resolveFromDocBlock(PhpDocInfo $phpDocInfo, Property $property, DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode) : Type + private function resolveFromDocBlock(PhpDocInfo $phpDocInfo, Property $property, DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode, bool $forceNullable) : Type { $joinDoctrineAnnotationTagValueNode = $phpDocInfo->findOneByAnnotationClass('Doctrine\\ORM\\Mapping\\JoinColumn'); - return $this->processToOneRelation($property, $doctrineAnnotationTagValueNode, $joinDoctrineAnnotationTagValueNode); + return $this->processToOneRelation($property, $doctrineAnnotationTagValueNode, $joinDoctrineAnnotationTagValueNode, $forceNullable); } private function resolveFromObjectType(FullyQualifiedObjectType $fullyQualifiedObjectType, bool $isNullable) : Type { @@ -121,18 +120,18 @@ private function resolveFromObjectType(FullyQualifiedObjectType $fullyQualifiedO if ($isNullable) { $types[] = new NullType(); } - $propertyType = $this->typeFactory->createMixedPassedOrUnionType($types); - // add default null if missing - if (!TypeCombinator::containsNull($propertyType)) { - $propertyType = TypeCombinator::addNull($propertyType); - } - return $propertyType; + return $this->typeFactory->createMixedPassedOrUnionType($types); } private function isNullableType(?DoctrineAnnotationTagValueNode $joinDoctrineAnnotationTagValueNode) : bool { if (!$joinDoctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { - return \false; + return \true; } return $this->shouldAddNullType($joinDoctrineAnnotationTagValueNode); } + private function isNullableJoinColumn(Property $property) : bool + { + $joinExpr = $this->attributeFinder->findAttributeByClassesArgByName($property, self::JOIN_COLUMN, 'nullable'); + return $joinExpr instanceof ConstFetch && !\in_array('false', $joinExpr->name->getParts(), \true); + } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php index 727e11a08..f6c8c3c08 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Doctrine\PhpDoc; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ReflectionProvider; diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php index b56925556..70ee5c86e 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php @@ -4,21 +4,22 @@ namespace Rector\Doctrine\PhpDocParser; use PhpParser\Node\Stmt\Class_; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; +use Rector\Doctrine\Enum\MappingClass; +use Rector\Doctrine\Enum\OdmMappingClass; +use Rector\Doctrine\NodeAnalyzer\AttrinationFinder; final class DoctrineDocBlockResolver { /** * @readonly - * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory + * @var \Rector\Doctrine\NodeAnalyzer\AttrinationFinder */ - private $phpDocInfoFactory; - public function __construct(PhpDocInfoFactory $phpDocInfoFactory) + private $attrinationFinder; + public function __construct(AttrinationFinder $attrinationFinder) { - $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->attrinationFinder = $attrinationFinder; } public function isDoctrineEntityClass(Class_ $class) : bool { - $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($class); - return $phpDocInfo->hasByAnnotationClasses(['Doctrine\\ORM\\Mapping\\Entity', 'Doctrine\\ORM\\Mapping\\Embeddable']); + return $this->attrinationFinder->hasByMany($class, [MappingClass::ENTITY, MappingClass::EMBEDDABLE, OdmMappingClass::DOCUMENT]); } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/DoctrineSetList.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/DoctrineSetList.php index d7e4607e2..0b8bb4a9d 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/DoctrineSetList.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/DoctrineSetList.php @@ -3,12 +3,15 @@ declare (strict_types=1); namespace Rector\Doctrine\Set; -use Rector\Set\Contract\SetListInterface; /** * @api */ -final class DoctrineSetList implements SetListInterface +final class DoctrineSetList { + /** + * @var string + */ + public const TYPED_COLLECTIONS = __DIR__ . '/../../config/sets/typed-collections.php'; /** * @var string */ diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php new file mode 100644 index 000000000..2c2a34783 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/Set/SetProvider/DoctrineSetProvider.php @@ -0,0 +1,23 @@ +nameScopeFactory = $nameScopeFactory; - $this->phpDocInfoFactory = $phpDocInfoFactory; $this->shortClassExpander = $shortClassExpander; + $this->attrinationFinder = $attrinationFinder; + $this->targetEntityResolver = $targetEntityResolver; } public function resolveFromTypeNode(TypeNode $typeNode, Node $node) : ?FullyQualifiedObjectType { @@ -51,24 +69,41 @@ public function resolveFromTypeNode(TypeNode $typeNode, Node $node) : ?FullyQual } } if ($typeNode instanceof ArrayTypeNode && $typeNode->type instanceof IdentifierTypeNode) { - $nameScope = $this->nameScopeFactory->createNameScopeFromNode($node); + $nameScope = $this->nameScopeFactory->createNameScopeFromNodeWithoutTemplateTypes($node); $fullyQualifiedName = $nameScope->resolveStringName($typeNode->type->name); return new FullyQualifiedObjectType($fullyQualifiedName); } return null; } - public function resolveFromToManyProperties(Property $property) : ?FullyQualifiedObjectType + public function resolveFromToManyProperty(Property $property) : ?FullyQualifiedObjectType { - $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property); - $doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClasses(ToManyMappings::TO_MANY_CLASSES); - if (!$doctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { - return null; + $doctrineAnnotationTagValueNodeOrAttribute = $this->attrinationFinder->getByMany($property, CollectionMapping::TO_MANY_CLASSES); + if ($doctrineAnnotationTagValueNodeOrAttribute instanceof DoctrineAnnotationTagValueNode) { + return $this->resolveFromDoctrineAnnotationTagValueNode($doctrineAnnotationTagValueNodeOrAttribute, $property); + } + if ($doctrineAnnotationTagValueNodeOrAttribute instanceof Attribute) { + $targetEntityExpr = $this->findExprByArgNames($doctrineAnnotationTagValueNodeOrAttribute->args, [EntityMappingKey::TARGET_ENTITY, OdmMappingKey::TARGET_DOCUMENT]); + if (!$targetEntityExpr instanceof ClassConstFetch) { + return null; + } + $targetEntityClassName = $this->targetEntityResolver->resolveFromExpr($targetEntityExpr); + if ($targetEntityClassName === null) { + return null; + } + return new FullyQualifiedObjectType($targetEntityClassName); } - $targetEntityArrayItemNode = $doctrineAnnotationTagValueNode->getValue('targetEntity'); - if (!$targetEntityArrayItemNode instanceof ArrayItemNode) { + return null; + } + private function resolveFromDoctrineAnnotationTagValueNode(DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode, Property $property) : ?FullyQualifiedObjectType + { + $targetEntityArrayItemNode = $doctrineAnnotationTagValueNode->getValue(EntityMappingKey::TARGET_ENTITY); + // in case of ODM + $targetDocumentArrayItemNode = $doctrineAnnotationTagValueNode->getValue(self::TARGET_DOCUMENT); + $targetArrayItemNode = $targetEntityArrayItemNode ?: $targetDocumentArrayItemNode; + if (!$targetArrayItemNode instanceof ArrayItemNode) { return null; } - $targetEntityClass = $targetEntityArrayItemNode->value; + $targetEntityClass = $targetArrayItemNode->value; if ($targetEntityClass instanceof StringNode) { $targetEntityClass = $targetEntityClass->value; } @@ -78,4 +113,20 @@ public function resolveFromToManyProperties(Property $property) : ?FullyQualifie $fullyQualifiedTargetEntity = $this->shortClassExpander->resolveFqnTargetEntity($targetEntityClass, $property); return new FullyQualifiedObjectType($fullyQualifiedTargetEntity); } + /** + * @param Arg[] $args + * @param string[] $names + */ + private function findExprByArgNames(array $args, array $names) : ?Expr + { + foreach ($args as $arg) { + if (!$arg->name instanceof Identifier) { + continue; + } + if (\in_array($arg->name->toString(), $names, \true)) { + return $arg->value; + } + } + return null; + } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/CollectionVarTagValueNodeResolver.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/CollectionVarTagValueNodeResolver.php index fe4400d67..b9fe2a97d 100644 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/CollectionVarTagValueNodeResolver.php +++ b/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/CollectionVarTagValueNodeResolver.php @@ -5,8 +5,10 @@ use PhpParser\Node\Stmt\Property; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; +use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\Doctrine\CodeQuality\Enum\ToManyMappings; +use Rector\Doctrine\CodeQuality\Enum\CollectionMapping; +use Rector\Doctrine\NodeAnalyzer\AttributeFinder; final class CollectionVarTagValueNodeResolver { /** @@ -14,16 +16,29 @@ final class CollectionVarTagValueNodeResolver * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory */ private $phpDocInfoFactory; - public function __construct(PhpDocInfoFactory $phpDocInfoFactory) + /** + * @readonly + * @var \Rector\Doctrine\NodeAnalyzer\AttributeFinder + */ + private $attributeFinder; + public function __construct(PhpDocInfoFactory $phpDocInfoFactory, AttributeFinder $attributeFinder) { $this->phpDocInfoFactory = $phpDocInfoFactory; + $this->attributeFinder = $attributeFinder; } public function resolve(Property $property) : ?VarTagValueNode { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property); - if (!$phpDocInfo->hasByAnnotationClasses(ToManyMappings::TO_MANY_CLASSES)) { + if (!$this->hasAnnotationOrAttributeToMany($phpDocInfo, $property)) { return null; } return $phpDocInfo->getVarTagValueNode(); } + private function hasAnnotationOrAttributeToMany(PhpDocInfo $phpDocInfo, Property $property) : bool + { + if ($phpDocInfo->hasByAnnotationClasses(CollectionMapping::TO_MANY_CLASSES)) { + return \true; + } + return $this->attributeFinder->hasAttributeByClasses($property, CollectionMapping::TO_MANY_CLASSES); + } } diff --git a/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/DoctrineCollectionTypeAnalyzer.php b/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/DoctrineCollectionTypeAnalyzer.php deleted file mode 100644 index 4e037ef2f..000000000 --- a/vendor/rector/rector/vendor/rector/rector-doctrine/src/TypeAnalyzer/DoctrineCollectionTypeAnalyzer.php +++ /dev/null @@ -1,45 +0,0 @@ -getTypes() as $unionedType) { - if ($this->isCollectionObjectType($unionedType)) { - $hasDoctrineCollectionType = \true; - } - if ($unionedType instanceof ArrayType) { - $arrayType = $unionedType; - } - } - if (!$hasDoctrineCollectionType) { - return \false; - } - return $arrayType instanceof ArrayType; - } - private function isCollectionObjectType(Type $type) : bool - { - if (!$type instanceof TypeWithClassName) { - return \false; - } - $className = $type instanceof ShortenedObjectType ? $type->getFullyQualifiedName() : $type->getClassName(); - return $className === 'Doctrine\\Common\\Collections\\Collection'; - } -} diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/README.md b/vendor/rector/rector/vendor/rector/rector-downgrade-php/README.md index 4dbb1c799..613d02cbc 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/README.md +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/README.md @@ -1,6 +1,6 @@ # Rector Rules for PHP Downgrade -See available [Downgrade rules](/docs/rector_rules_overview.md) +See available [Downgrade rules](https://getrector.com/find-rule?query=downgrade+rules) ## Install diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/composer.json b/vendor/rector/rector/vendor/rector/rector-downgrade-php/composer.json index 3a8e86ccb..e1f47a3aa 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/composer.json +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/composer.json @@ -10,15 +10,14 @@ "phpstan\/extension-installer": "^1.3", "phpstan\/phpstan": "^1.10", "phpstan\/phpstan-webmozart-assert": "^1.2", - "phpunit\/phpunit": "^10.3", - "rector\/phpstan-rules": "^0.7.4", - "rector\/rector-generator": "^0.7.3", + "phpunit\/phpunit": "^10.5", "rector\/rector-src": "dev-main", - "symplify\/easy-coding-standard": "^12.0", - "symplify\/phpstan-extensions": "^11.3", - "symplify\/phpstan-rules": "^12.4", - "symplify\/rule-doc-generator": "^12.0", - "symplify\/vendor-patches": "^11.2", + "rector\/type-perfect": "^0.1.8", + "symplify\/easy-coding-standard": "^12.3", + "symplify\/phpstan-extensions": "^11.4", + "symplify\/phpstan-rules": "^13.0", + "symplify\/rule-doc-generator": "^12.2", + "symplify\/vendor-patches": "^11.3", "tomasvotruba\/class-leak": "^0.2.13", "tracy\/tracy": "^2.10" }, @@ -44,10 +43,7 @@ "scripts": { "phpstan": "vendor\/bin\/phpstan analyse --ansi --error-format symplify", "check-cs": "vendor\/bin\/ecs check --ansi", - "fix-cs": "vendor\/bin\/ecs check --fix --ansi", - "docs": [ - "vendor\/bin\/rule-doc-generator generate rules --output-file docs\/rector_rules_overview.md --ansi" - ] + "fix-cs": "vendor\/bin\/ecs check --fix --ansi" }, "extra": { "enable-patching": true diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/config/set/downgrade-php72.php b/vendor/rector/rector/vendor/rector/rector-downgrade-php/config/set/downgrade-php72.php index 9daa55a0d..b5206dcb7 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/config/set/downgrade-php72.php +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/config/set/downgrade-php72.php @@ -1,7 +1,7 @@ getVariants()); - $parameters = $parametersAcceptor->getParameters(); + $parametersAcceptorWithPhpDocs = ParametersAcceptorSelector::combineAcceptors($functionLikeReflection->getVariants()); + $parameters = $parametersAcceptorWithPhpDocs->getParameters(); if ($functionLikeReflection instanceof NativeFunctionReflection) { $functionLikeReflection = new ReflectionFunction($functionLikeReflection->getName()); } diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Class_/DowngradeAttributeToAnnotationRector.php b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Class_/DowngradeAttributeToAnnotationRector.php index da83f543c..05028cd95 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Class_/DowngradeAttributeToAnnotationRector.php +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Class_/DowngradeAttributeToAnnotationRector.php @@ -21,7 +21,7 @@ use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @changelog https://php.watch/articles/php-attributes#syntax * diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeThrowExprRector.php b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeThrowExprRector.php index ce93f2558..9f2b8cc7d 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeThrowExprRector.php +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/Expression/DowngradeThrowExprRector.php @@ -183,6 +183,13 @@ private function refactorReturn(Return_ $return) : ?array if ($return->expr instanceof Throw_) { return [new Expression($return->expr)]; } + if ($return->expr instanceof Ternary) { + $if = $this->refactorTernary($return->expr, null); + if (!$if instanceof If_) { + return null; + } + return [$if, new Return_($return->expr->cond)]; + } return null; } private function createIf(Coalesce $coalesce, Throw_ $throw) : If_ diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php index bc8492fd8..c5aa00890 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php @@ -11,9 +11,7 @@ use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\Ternary; use PhpParser\Node\Expr\Variable; -use Rector\Provider\CurrentFileProvider; use Rector\Rector\AbstractRector; -use Rector\ValueObject\Application\File; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -21,26 +19,20 @@ */ final class DowngradeNullsafeToTernaryOperatorRector extends AbstractRector { - /** - * @readonly - * @var \Rector\Provider\CurrentFileProvider - */ - private $currentFileProvider; /** * @var int */ private $counter = 0; /** - * @var string|null - */ - private $previousFileName; - /** - * @var string|null + * Hack-ish way to reset counter for a new file, to avoid rising counter for each file + * + * @param Node[] $nodes + * @return array|Node[]|null */ - private $currentFileName; - public function __construct(CurrentFileProvider $currentFileProvider) + public function beforeTraverse(array $nodes) : ?array { - $this->currentFileProvider = $currentFileProvider; + $this->counter = 0; + return parent::beforeTraverse($nodes); } public function getRuleDefinition() : RuleDefinition { @@ -64,18 +56,6 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Ternary { - if ($this->previousFileName === null) { - $previousFile = $this->currentFileProvider->getFile(); - if (!$previousFile instanceof File) { - return null; - } - $this->previousFileName = $previousFile->getFilePath(); - } - $currentFile = $this->currentFileProvider->getFile(); - if (!$currentFile instanceof File) { - return null; - } - $this->currentFileName = $currentFile->getFilePath(); $nullsafeVariable = $this->createNullsafeVariable(); $methodCallOrPropertyFetch = $node instanceof NullsafeMethodCall ? new MethodCall($nullsafeVariable, $node->name, $node->getArgs()) : new PropertyFetch($nullsafeVariable, $node->name); $assign = new Assign($nullsafeVariable, $node->var); @@ -83,10 +63,6 @@ public function refactor(Node $node) : ?Ternary } private function createNullsafeVariable() : Variable { - if ($this->previousFileName !== $this->currentFileName) { - $this->counter = 0; - $this->previousFileName = $this->currentFileName; - } $nullsafeVariableName = 'nullsafeVariable' . ++$this->counter; return new Variable($nullsafeVariableName); } diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/FunctionLike/DowngradeNewInInitializerRector.php b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/FunctionLike/DowngradeNewInInitializerRector.php index 773bcb70f..221c200b6 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/FunctionLike/DowngradeNewInInitializerRector.php +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/rules/DowngradePhp81/Rector/FunctionLike/DowngradeNewInInitializerRector.php @@ -159,6 +159,9 @@ private function replaceNewInParams($functionLike) $stmts[] = new Expression($assign); $param->default = $this->nodeFactory->createNull(); } + if ($functionLike->stmts === null) { + return $functionLike; + } $functionLike->stmts = $functionLike->stmts ?? []; $functionLike->stmts = \array_merge($stmts, $functionLike->stmts); return $functionLike; diff --git a/vendor/rector/rector/vendor/rector/rector-downgrade-php/stubs/Symfony/Component/Annotation/Route.php b/vendor/rector/rector/vendor/rector/rector-downgrade-php/stubs/Symfony/Component/Annotation/Route.php index b21f65b4d..f52d5aa7a 100644 --- a/vendor/rector/rector/vendor/rector/rector-downgrade-php/stubs/Symfony/Component/Annotation/Route.php +++ b/vendor/rector/rector/vendor/rector/rector-downgrade-php/stubs/Symfony/Component/Annotation/Route.php @@ -1,7 +1,7 @@ rules([ - AddSeeTestAnnotationRector::class, ConstructClassMethodToSetUpTestCaseRector::class, AssertSameTrueFalseToAssertTrueFalseRector::class, AssertEqualsToSameRector::class, @@ -42,8 +43,12 @@ ReplaceTestAnnotationWithPrefixedFunctionRector::class, TestWithToDataProviderRector::class, AssertEqualsOrAssertSameFloatParameterToSpecificMethodsTypeRector::class, - DataProviderArrayItemsNewlinedRector::class, + DataProviderArrayItemsNewLinedRector::class, + // narrow with consecutive + NarrowIdenticalWithConsecutiveRector::class, + SingleWithConsecutiveToWithRector::class, // specific asserts + AssertCompareOnCountableWithMethodToAssertCountRector::class, AssertCompareToSpecificMethodRector::class, AssertComparisonToSpecificMethodRector::class, AssertNotOperatorRector::class, diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit-exception.php b/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit-exception.php deleted file mode 100644 index 4fe57c2fa..000000000 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit-exception.php +++ /dev/null @@ -1,9 +0,0 @@ -sets([PHPUnitSetList::ANNOTATIONS_TO_ATTRIBUTES]); - $rectorConfig->rules([StaticDataProviderClassMethodRector::class, PublicDataProviderClassMethodRector::class, PropertyExistsWithoutAssertRector::class, AddProphecyTraitRector::class, WithConsecutiveRector::class, RemoveSetMethodsMethodCallRector::class]); + $rectorConfig->rules([AssertIssetToAssertObjectHasPropertyRector::class, StaticDataProviderClassMethodRector::class, PublicDataProviderClassMethodRector::class, AddProphecyTraitRector::class, WithConsecutiveRector::class, RemoveSetMethodsMethodCallRector::class]); $rectorConfig->ruleWithConfiguration(RenameMethodRector::class, [ // https://github.com/sebastianbergmann/phpunit/issues/4087 new MethodCallRename('PHPUnit\\Framework\\Assert', 'assertRegExp', 'assertMatchesRegularExpression'), + // https://github.com/sebastianbergmann/phpunit/issues/5220 + new MethodCallRename('PHPUnit\\Framework\\Assert', 'assertObjectHasAttribute', 'assertObjectHasProperty'), + new MethodCallRename('PHPUnit\\Framework\\Assert', 'assertObjectNotHasAttribute', 'assertObjectNotHasProperty'), new MethodCallRename('PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder', 'getInvocationCount', 'numberOfInvocations'), // https://github.com/sebastianbergmann/phpunit/issues/4090 new MethodCallRename('PHPUnit\\Framework\\Assert', 'assertNotRegExp', 'assertDoesNotMatchRegularExpression'), diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit91.php b/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit110.php similarity index 59% rename from vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit91.php rename to vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit110.php index c536f142c..21e31e11c 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit91.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/config/sets/phpunit110.php @@ -1,9 +1,8 @@ phpDocTagRemover = $phpDocTagRemover; @@ -119,7 +122,7 @@ public function refactor(Node $node) : ?Node } private function createTicketAttribute(string $stringValue) : Attribute { - $fullyQualified = new FullyQualified(Ticket::class); + $fullyQualified = new FullyQualified(self::TICKET_CLASS); $ticketString = new String_($stringValue); $args = [new Arg($ticketString)]; return new Attribute($fullyQualified, $args); diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php similarity index 99% rename from vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/ClassMethod/CreateMockToAnonymousClassRector.php rename to vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index 2d06873b7..55f7becd8 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -1,7 +1,7 @@ resolveSourceClassNames($className); $matchingTestClassName = $this->matchExistingClassName($possibleTestClassNames); - if ($matchingTestClassName === null) { + if (!\is_string($matchingTestClassName)) { return null; } $coversAttributeGroup = $this->createAttributeGroup('\\' . $matchingTestClassName); diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddParentSetupCallOnSetupRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddParentSetupCallOnSetupRector.php new file mode 100644 index 000000000..94c33d14c --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddParentSetupCallOnSetupRector.php @@ -0,0 +1,101 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + $this->betterNodeFinder = $betterNodeFinder; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add missing parent::setUp() call on setUp() method on test class', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + protected function setUp(): void + { + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + protected function setUp(): void + { + parent::setUp(); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + $setUpMethod = $node->getMethod(MethodName::SET_UP); + if (!$setUpMethod instanceof ClassMethod) { + return null; + } + if ($setUpMethod->isAbstract() || $setUpMethod->stmts === null) { + return null; + } + $isSetupExists = (bool) $this->betterNodeFinder->findFirstInFunctionLikeScoped($setUpMethod, function (Node $subNode) : bool { + if (!$subNode instanceof StaticCall) { + return \false; + } + if (!$this->isName($subNode->class, 'parent')) { + return \false; + } + return $this->isName($subNode->name, 'setUp'); + }); + if ($isSetupExists) { + return null; + } + $setUpMethod->stmts = \array_merge([new Expression(new StaticCall(new Name('parent'), new Identifier('setUp')))], $setUpMethod->stmts); + return $node; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php index db6081ec8..588c3c728 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php @@ -11,7 +11,6 @@ use PHPStan\Reflection\ReflectionProvider; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover; use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\PHPUnit\Naming\TestClassNameResolver; use Rector\Rector\AbstractRector; @@ -27,11 +26,6 @@ final class AddSeeTestAnnotationRector extends AbstractRector * @var \PHPStan\Reflection\ReflectionProvider */ private $reflectionProvider; - /** - * @readonly - * @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover - */ - private $phpDocTagRemover; /** * @readonly * @var \Rector\PHPUnit\Naming\TestClassNameResolver @@ -51,10 +45,9 @@ final class AddSeeTestAnnotationRector extends AbstractRector * @var string */ private const SEE = 'see'; - public function __construct(ReflectionProvider $reflectionProvider, PhpDocTagRemover $phpDocTagRemover, TestClassNameResolver $testClassNameResolver, DocBlockUpdater $docBlockUpdater, PhpDocInfoFactory $phpDocInfoFactory) + public function __construct(ReflectionProvider $reflectionProvider, TestClassNameResolver $testClassNameResolver, DocBlockUpdater $docBlockUpdater, PhpDocInfoFactory $phpDocInfoFactory) { $this->reflectionProvider = $reflectionProvider; - $this->phpDocTagRemover = $phpDocTagRemover; $this->testClassNameResolver = $testClassNameResolver; $this->docBlockUpdater = $docBlockUpdater; $this->phpDocInfoFactory = $phpDocInfoFactory; @@ -100,17 +93,16 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { + if ($this->shouldSkipClass($node)) { + return null; + } $className = $this->getName($node); if ($className === null) { return null; } $possibleTestClassNames = $this->testClassNameResolver->resolve($className); $matchingTestClassName = $this->matchExistingClassName($possibleTestClassNames); - if ($this->shouldSkipClass($node)) { - return null; - } $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); - $this->removeNonExistingClassSeeAnnotation($phpDocInfo); if ($matchingTestClassName === null) { return null; } @@ -168,32 +160,6 @@ private function hasAlreadySeeAnnotation(PhpDocInfo $phpDocInfo, string $testCas } return \false; } - private function removeNonExistingClassSeeAnnotation(PhpDocInfo $phpDocInfo) : void - { - /** @var PhpDocTagNode[] $seePhpDocTagNodes */ - $seePhpDocTagNodes = $phpDocInfo->getTagsByName(self::SEE); - foreach ($seePhpDocTagNodes as $seePhpDocTagNode) { - if (!$seePhpDocTagNode->value instanceof GenericTagValueNode) { - continue; - } - $possibleClassName = $seePhpDocTagNode->value->value; - if (!$this->isSeeTestCaseClass($possibleClassName)) { - continue; - } - if ($this->reflectionProvider->hasClass($possibleClassName)) { - continue; - } - // remove old annotation - $this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $seePhpDocTagNode); - } - } - private function isSeeTestCaseClass(string $possibleClassName) : bool - { - if (\strncmp($possibleClassName, '\\', \strlen('\\')) !== 0) { - return \false; - } - return \substr_compare($possibleClassName, 'Test', -\strlen('Test')) === 0; - } /** * @param string[] $classNames */ diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/Class_/PreferPHPUnitSelfCallRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php similarity index 72% rename from vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/Class_/PreferPHPUnitSelfCallRector.php rename to vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php index b25d90afa..9a6e360a9 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/Class_/PreferPHPUnitSelfCallRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php @@ -1,15 +1,17 @@ testsNodeAnalyzer = $testsNodeAnalyzer; + $this->reflectionResolver = $reflectionResolver; } public function getRuleDefinition() : RuleDefinition { @@ -85,8 +93,18 @@ public function refactor(Node $node) : ?Node if (!$this->isObjectType($node->var, new ObjectType('PHPUnit\\Framework\\TestCase'))) { return null; } - $hasChanged = \true; - return $this->nodeFactory->createStaticCall('self', $methodName, $node->getArgs()); + $classReflection = $this->reflectionResolver->resolveClassReflection($node); + if ($classReflection instanceof ClassReflection && $classReflection->hasNativeMethod($methodName)) { + $method = $classReflection->getNativeMethod($methodName); + if ($node->isFirstClassCallable()) { + return null; + } + if ($method->isStatic()) { + $hasChanged = \true; + return $this->nodeFactory->createStaticCall('self', $methodName, $node->getArgs()); + } + } + return null; }); if ($hasChanged) { return $node; diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php index 337f4791b..f278627d5 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php @@ -88,6 +88,9 @@ public function refactor(Node $node) : ?Node if (\strncmp($methodName, 'assert', \strlen('assert')) !== 0) { return null; } + if ($node->isFirstClassCallable()) { + return null; + } $hasChanged = \true; return $this->nodeFactory->createMethodCall('this', $methodName, $node->getArgs()); }); diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/SetUpBeforeClassToSetUpRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/SetUpBeforeClassToSetUpRector.php new file mode 100644 index 000000000..f59d7ae5f --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/SetUpBeforeClassToSetUpRector.php @@ -0,0 +1,146 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change setUpBeforeClass() to setUp() if not needed', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + private static $someService; + + public static function setUpBeforeClass(): void + { + self::$someService = new SomeService(); + } + + public function test() + { + $result = self::$someService->getValue(); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + private $someService; + + protected function setUp(): void + { + $this->someService = new SomeService(); + } + + public function test() + { + $result = $this->someService->getValue(); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + $className = $this->getName($node); + if ($className === null) { + return null; + } + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + $setUpBeforeClassMethod = $node->getMethod(MethodName::SET_UP_BEFORE_CLASS); + if (!$setUpBeforeClassMethod instanceof ClassMethod) { + return null; + } + $changedPropertyNames = []; + // replace static property fetches + $this->traverseNodesWithCallable($setUpBeforeClassMethod, function (Node $node) use(&$changedPropertyNames) { + if (!$node instanceof Assign) { + return null; + } + if (!$node->var instanceof StaticPropertyFetch) { + return null; + } + $staticPropertyFetch = $node->var; + if (!$this->isName($staticPropertyFetch->class, 'self')) { + return null; + } + $node->var = new PropertyFetch(new Variable('this'), $staticPropertyFetch->name); + $propertyName = $this->getName($staticPropertyFetch->name); + if (!\is_string($propertyName)) { + return null; + } + $changedPropertyNames[] = $propertyName; + }); + if ($changedPropertyNames === []) { + return null; + } + // remove static flag + $setUpBeforeClassMethod->flags -= Class_::MODIFIER_STATIC; + // remove public flag + $setUpBeforeClassMethod->flags -= Class_::MODIFIER_PUBLIC; + // make protected + $setUpBeforeClassMethod->flags += Class_::MODIFIER_PROTECTED; + $setUpBeforeClassMethod->name = new Identifier('setUp'); + foreach ($node->getProperties() as $property) { + if (!$property->isStatic()) { + continue; + } + if ($this->isNames($property, $changedPropertyNames)) { + $property->flags -= Class_::MODIFIER_STATIC; + } + } + // replace same property access in the class + $this->traverseNodesWithCallable($node->getMethods(), function (Node $node) use($changedPropertyNames) : ?PropertyFetch { + if (!$node instanceof StaticPropertyFetch) { + return null; + } + if (!$this->isNames($node, $changedPropertyNames)) { + return null; + } + return new PropertyFetch(new Variable('this'), $node->name); + }); + return $node; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/TestWithToDataProviderRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/TestWithToDataProviderRector.php index 7583f64da..66786fddf 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/TestWithToDataProviderRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/Class_/TestWithToDataProviderRector.php @@ -3,8 +3,8 @@ declare (strict_types=1); namespace Rector\PHPUnit\CodeQuality\Rector\Class_; -use RectorPrefix202405\Nette\Utils\Json; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Json; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareOnCountableWithMethodToAssertCountRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareOnCountableWithMethodToAssertCountRector.php new file mode 100644 index 000000000..084af3091 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareOnCountableWithMethodToAssertCountRector.php @@ -0,0 +1,74 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Replaces use of assertSame and assertEquals on Countable objects with count method', [new CodeSample(<<<'CODE_SAMPLE' +$this->assertSame(1, $countable->count()); +CODE_SAMPLE +, <<<'CODE_SAMPLE' +$this->assertCount(1, $countable); +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class, StaticCall::class]; + } + /** + * @param MethodCall|StaticCall $node + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null + */ + public function refactor(Node $node) + { + if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, ['assertSame', 'assertEquals'])) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + if (\count($node->getArgs()) < 2) { + return null; + } + $right = $node->getArgs()[1]->value; + if ($right instanceof MethodCall && $right->name instanceof Identifier && $right->name->toLowerString() === 'count' && $right->getArgs() === []) { + $type = $this->getType($right->var); + if ((new ObjectType('Countable'))->isSuperTypeOf($type)->yes()) { + $args = $node->getArgs(); + $args[1] = new Arg($right->var); + $node->args = $args; + $node->name = new Identifier('assertCount'); + } + } + return null; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareToSpecificMethodRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareToSpecificMethodRector.php index cb4559724..d93e3835c 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareToSpecificMethodRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertCompareToSpecificMethodRector.php @@ -39,7 +39,7 @@ final class AssertCompareToSpecificMethodRector extends AbstractRector public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer) { $this->testsNodeAnalyzer = $testsNodeAnalyzer; - $this->functionNamesWithAssertMethods = [new FunctionNameWithAssertMethods('count', self::ASSERT_COUNT, self::ASSERT_NOT_COUNT), new FunctionNameWithAssertMethods('sizeof', self::ASSERT_COUNT, self::ASSERT_NOT_COUNT), new FunctionNameWithAssertMethods('iterator_count', self::ASSERT_COUNT, self::ASSERT_NOT_COUNT), new FunctionNameWithAssertMethods('gettype', 'assertInternalType', 'assertNotInternalType'), new FunctionNameWithAssertMethods('get_class', 'assertInstanceOf', 'assertNotInstanceOf')]; + $this->functionNamesWithAssertMethods = [new FunctionNameWithAssertMethods('count', self::ASSERT_COUNT, self::ASSERT_NOT_COUNT), new FunctionNameWithAssertMethods('sizeof', self::ASSERT_COUNT, self::ASSERT_NOT_COUNT), new FunctionNameWithAssertMethods('iterator_count', self::ASSERT_COUNT, self::ASSERT_NOT_COUNT), new FunctionNameWithAssertMethods('get_class', 'assertInstanceOf', 'assertNotInstanceOf')]; } public function getRuleDefinition() : RuleDefinition { diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertEqualsOrAssertSameFloatParameterToSpecificMethodsTypeRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertEqualsOrAssertSameFloatParameterToSpecificMethodsTypeRector.php index ee8ae827c..85f14e216 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertEqualsOrAssertSameFloatParameterToSpecificMethodsTypeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertEqualsOrAssertSameFloatParameterToSpecificMethodsTypeRector.php @@ -71,6 +71,9 @@ public function refactor(Node $node) : ?Node if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, ['assertEquals', 'assertSame'])) { return null; } + if ($node->isFirstClassCallable()) { + return null; + } $args = $node->getArgs(); $firstValue = $args[0]->value; if (!$firstValue instanceof DNumber) { diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertIssetToSpecificMethodRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertIssetToSpecificMethodRector.php index 028bba836..67befb730 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertIssetToSpecificMethodRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertIssetToSpecificMethodRector.php @@ -7,16 +7,11 @@ use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\Isset_; use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticCall; -use PhpParser\Node\Scalar\String_; -use PHPStan\Reflection\ClassReflection; -use PHPStan\Type\ObjectWithoutClassType; -use PHPStan\Type\TypeWithClassName; +use Rector\PHPUnit\Enum\AssertMethod; use Rector\PHPUnit\NodeAnalyzer\IdentifierManipulator; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\Rector\AbstractRector; -use Rector\Reflection\ClassReflectionAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -34,28 +29,14 @@ final class AssertIssetToSpecificMethodRector extends AbstractRector * @var \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer */ private $testsNodeAnalyzer; - /** - * @readonly - * @var \Rector\Reflection\ClassReflectionAnalyzer - */ - private $classReflectionAnalyzer; - /** - * @var string - */ - private const ASSERT_TRUE = 'assertTrue'; - /** - * @var string - */ - private const ASSERT_FALSE = 'assertFalse'; - public function __construct(IdentifierManipulator $identifierManipulator, TestsNodeAnalyzer $testsNodeAnalyzer, ClassReflectionAnalyzer $classReflectionAnalyzer) + public function __construct(IdentifierManipulator $identifierManipulator, TestsNodeAnalyzer $testsNodeAnalyzer) { $this->identifierManipulator = $identifierManipulator; $this->testsNodeAnalyzer = $testsNodeAnalyzer; - $this->classReflectionAnalyzer = $classReflectionAnalyzer; } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Turns isset comparisons to their method name alternatives in PHPUnit TestCase', [new CodeSample('$this->assertTrue(isset($anything->foo));', '$this->assertObjectHasAttribute("foo", $anything);'), new CodeSample('$this->assertFalse(isset($anything["foo"]), "message");', '$this->assertArrayNotHasKey("foo", $anything, "message");')]); + return new RuleDefinition('Turns assertTrue() + isset() comparisons to more precise assertArrayHasKey() method', [new CodeSample('$this->assertTrue(isset($anything["foo"]), "message");', '$this->assertArrayHasKey("foo", $anything, "message");')]); } /** * @return array> @@ -69,76 +50,30 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, [self::ASSERT_TRUE, self::ASSERT_FALSE])) { + if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, [AssertMethod::ASSERT_TRUE, AssertMethod::ASSERT_FALSE])) { return null; } if ($node->isFirstClassCallable()) { return null; } - $firstArgumentValue = $node->getArgs()[0]->value; + $firstArg = $node->getArgs()[0]; + $firstArgumentValue = $firstArg->value; // is property access if (!$firstArgumentValue instanceof Isset_) { return null; } - $variableNodeClass = \get_class($firstArgumentValue->vars[0]); - if (!\in_array($variableNodeClass, [ArrayDimFetch::class, PropertyFetch::class], \true)) { - return null; - } - /** @var Isset_ $issetNode */ - $issetNode = $node->getArgs()[0]->value; - $issetNodeArg = $issetNode->vars[0]; - if ($issetNodeArg instanceof PropertyFetch) { - if ($this->hasMagicIsset($issetNodeArg->var)) { - return null; - } - return $this->refactorPropertyFetchNode($node, $issetNodeArg); - } - if ($issetNodeArg instanceof ArrayDimFetch) { - return $this->refactorArrayDimFetchNode($node, $issetNodeArg); - } - return $node; - } - private function hasMagicIsset(Node $node) : bool - { - $type = $this->nodeTypeResolver->getType($node); - if (!$type instanceof TypeWithClassName) { - // object not found, skip - return $type instanceof ObjectWithoutClassType; - } - $classReflection = $type->getClassReflection(); - if (!$classReflection instanceof ClassReflection) { - return \false; - } - if ($classReflection->hasMethod('__isset')) { - return \true; - } - if (!$classReflection->isClass()) { - return \false; - } - return $this->classReflectionAnalyzer->resolveParentClassName($classReflection) !== null; - } - /** - * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $node - */ - private function refactorPropertyFetchNode($node, PropertyFetch $propertyFetch) : ?Node - { - $name = $this->getName($propertyFetch); - if ($name === null) { + $issetExpr = $firstArgumentValue->vars[0]; + if (!$issetExpr instanceof ArrayDimFetch) { return null; } - $this->identifierManipulator->renameNodeWithMap($node, [self::ASSERT_TRUE => 'assertObjectHasAttribute', self::ASSERT_FALSE => 'assertObjectNotHasAttribute']); - $oldArgs = $node->getArgs(); - unset($oldArgs[0]); - $newArgs = $this->nodeFactory->createArgs([new String_($name), $propertyFetch->var]); - $node->args = \array_merge($newArgs, $oldArgs); - return $node; + return $this->refactorArrayDimFetchNode($node, $issetExpr); } /** * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $node */ private function refactorArrayDimFetchNode($node, ArrayDimFetch $arrayDimFetch) : Node { - $this->identifierManipulator->renameNodeWithMap($node, [self::ASSERT_TRUE => 'assertArrayHasKey', self::ASSERT_FALSE => 'assertArrayNotHasKey']); + $this->identifierManipulator->renameNodeWithMap($node, [AssertMethod::ASSERT_TRUE => 'assertArrayHasKey', AssertMethod::ASSERT_FALSE => 'assertArrayNotHasKey']); $oldArgs = $node->getArgs(); unset($oldArgs[0]); $node->args = \array_merge($this->nodeFactory->createArgs([$arrayDimFetch->dim, $arrayDimFetch->var]), $oldArgs); diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertRegExpRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertRegExpRector.php index 030005e99..1079f4164 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertRegExpRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/AssertRegExpRector.php @@ -9,9 +9,13 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; +use PhpParser\Node\Expr\Variable; use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\LNumber; +use PhpParser\Node\Stmt\Expression; +use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Exception\ShouldNotHappenException; +use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\Rector\AbstractRector; @@ -32,6 +36,11 @@ final class AssertRegExpRector extends AbstractRector * @var \Rector\PhpParser\Node\Value\ValueResolver */ private $valueResolver; + /** + * @readonly + * @var \Rector\NodeManipulator\StmtsManipulator + */ + private $stmtsManipulator; /** * @var string */ @@ -48,10 +57,11 @@ final class AssertRegExpRector extends AbstractRector * @var string */ private const ASSERT_NOT_EQUALS = 'assertNotEquals'; - public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer, ValueResolver $valueResolver) + public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer, ValueResolver $valueResolver, StmtsManipulator $stmtsManipulator) { $this->testsNodeAnalyzer = $testsNodeAnalyzer; $this->valueResolver = $valueResolver; + $this->stmtsManipulator = $stmtsManipulator; } public function getRuleDefinition() : RuleDefinition { @@ -62,36 +72,59 @@ public function getRuleDefinition() : RuleDefinition */ public function getNodeTypes() : array { - return [MethodCall::class, StaticCall::class]; + return [StmtsAwareInterface::class]; } /** - * @param MethodCall|StaticCall $node + * @param StmtsAwareInterface $node */ public function refactor(Node $node) : ?Node { - if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, [self::ASSERT_SAME, self::ASSERT_EQUALS, self::ASSERT_NOT_SAME, self::ASSERT_NOT_EQUALS])) { + if ($node->stmts === null) { return null; } - if ($node->isFirstClassCallable()) { - return null; + $hasChanged = \false; + foreach ($node->stmts as $key => $stmt) { + if (!$stmt instanceof Expression) { + continue; + } + if (!$stmt->expr instanceof MethodCall && !$stmt->expr instanceof StaticCall) { + continue; + } + if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($stmt->expr, [self::ASSERT_SAME, self::ASSERT_EQUALS, self::ASSERT_NOT_SAME, self::ASSERT_NOT_EQUALS])) { + continue; + } + if ($stmt->expr->isFirstClassCallable()) { + continue; + } + /** @var FuncCall|Node $secondArgumentValue */ + $secondArgumentValue = $stmt->expr->getArgs()[1]->value; + if (!$secondArgumentValue instanceof FuncCall) { + continue; + } + if (!$this->isName($secondArgumentValue, 'preg_match')) { + continue; + } + if ($secondArgumentValue->isFirstClassCallable()) { + continue; + } + $oldMethodName = $this->getName($stmt->expr->name); + if ($oldMethodName === null) { + continue; + } + $args = $secondArgumentValue->getArgs(); + if (isset($args[2]) && $args[2]->value instanceof Variable && $this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, (string) $this->getName($args[2]->value))) { + continue; + } + $oldFirstArgument = $stmt->expr->getArgs()[0]->value; + $oldCondition = $this->resolveOldCondition($oldFirstArgument); + $this->renameMethod($stmt->expr, $oldMethodName, $oldCondition); + $this->moveFunctionArgumentsUp($stmt->expr); + $hasChanged = \true; } - /** @var FuncCall|Node $secondArgumentValue */ - $secondArgumentValue = $node->getArgs()[1]->value; - if (!$secondArgumentValue instanceof FuncCall) { - return null; - } - if (!$this->isName($secondArgumentValue, 'preg_match')) { - return null; - } - $oldMethodName = $this->getName($node->name); - if ($oldMethodName === null) { - return null; + if ($hasChanged) { + return $node; } - $oldFirstArgument = $node->getArgs()[0]->value; - $oldCondition = $this->resolveOldCondition($oldFirstArgument); - $this->renameMethod($node, $oldMethodName, $oldCondition); - $this->moveFunctionArgumentsUp($node); - return $node; + return null; } private function resolveOldCondition(Expr $expr) : int { diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowIdenticalWithConsecutiveRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowIdenticalWithConsecutiveRector.php new file mode 100644 index 000000000..f8686a0d2 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowIdenticalWithConsecutiveRector.php @@ -0,0 +1,122 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Narrow identical withConsecutive() and willReturnOnConsecutiveCalls() to single call', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $this->personServiceMock->expects($this->exactly(3)) + ->method('prepare') + ->withConsecutive( + [1], + [1], + [1], + ) + ->willReturnOnConsecutiveCalls( + [2], + [2], + [2], + ); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $this->personServiceMock->expects($this->exactly(3)) + ->method('prepare') + ->with([1]) + ->willReturn([2]); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class]; + } + /** + * @param MethodCall $node + */ + public function refactor(Node $node) : ?\PhpParser\Node\Expr\MethodCall + { + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + if (!$this->isNames($node->name, ['withConsecutive', 'willReturnOnConsecutiveCalls'])) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + $firstArg = $node->getArgs()[0]; + // skip as most likely nested array of unique values + if ($firstArg->unpack) { + return null; + } + $uniqueArgValues = $this->resolveUniqueArgValues($node); + // multiple unique values + if (\count($uniqueArgValues) !== 1) { + return null; + } + $firstArg = $node->getArgs()[0]; + if ($this->isName($node->name, 'withConsecutive')) { + $node->name = new Identifier('with'); + } else { + $node->name = new Identifier('willReturn'); + } + // use simpler with() instead + $node->args = [new Arg($firstArg->value)]; + return $node; + } + /** + * @return string[] + */ + private function resolveUniqueArgValues(MethodCall $methodCall) : array + { + $printerStandard = new Standard(); + $printedValues = []; + foreach ($methodCall->getArgs() as $arg) { + $printedValues[] = $printerStandard->prettyPrintExpr($arg->value); + } + return \array_unique($printedValues); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowSingleWillReturnCallbackRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowSingleWillReturnCallbackRector.php new file mode 100644 index 000000000..9be1a239f --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/NarrowSingleWillReturnCallbackRector.php @@ -0,0 +1,175 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Narrow single-value match willReturnCallback() to with() and willReturn() call', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $matcher = $this->exactly(1); + + $this->personServiceMock->expects($matcher) + ->willReturnCallback(function (...$parameters) use ($matcher) { + match ($matcher->getInvocationCount()) { + 1 => $this->assertSame([1], $parameters), + }; + }); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $matcher = $this->exactly(1); + + $this->personServiceMock->expects($matcher) + ->with(1, $parameters); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class]; + } + /** + * @param MethodCall $node + */ + public function refactor(Node $node) : ?\PhpParser\Node\Expr\MethodCall + { + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + if (!$this->isName($node->name, 'willReturnCallback')) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + if (\count($node->getArgs()) !== 1) { + return null; + } + $firstArg = $node->getArgs()[0]; + $matchAndReturnMatch = $this->matchClosureSingleStmtMatch($firstArg->value); + if (!$matchAndReturnMatch instanceof MatchAndReturnMatch) { + return null; + } + $matchArmBody = $this->matchSingleMatchArmBodyWithConditionOne($matchAndReturnMatch->getConsecutiveMatch()); + if (!$matchArmBody instanceof Expr) { + return null; + } + if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($matchArmBody, ['assertSame', 'assertEquals'])) { + return null; + } + // we look for $this->assertSame(...) + $expectedExpr = $matchAndReturnMatch->getConsecutiveMatchExpr(); + if ($expectedExpr instanceof Array_) { + $args = $this->nodeFactory->createArgs($expectedExpr->items); + } else { + $args = [new Arg($expectedExpr)]; + } + $node->name = new Identifier('with'); + $node->args = $args; + // remove the returnCallback if present + if ($matchAndReturnMatch->getWillReturnMatch() instanceof Match_) { + return new MethodCall($node, new Identifier('willReturn'), [new Arg($matchAndReturnMatch->getWillReturnMatchExpr())]); + } + return $node; + } + private function matchClosureSingleStmtMatch(Expr $expr) : ?MatchAndReturnMatch + { + if (!$expr instanceof Closure) { + return null; + } + // we need match or match + return match + if (\count($expr->stmts) < 1 || \count($expr->stmts) > 2) { + return null; + } + $onlyStmts = $expr->stmts[0]; + if (!$onlyStmts instanceof Expression) { + return null; + } + if (!$onlyStmts->expr instanceof Match_) { + return null; + } + $returnMatch = null; + if (\count($expr->stmts) === 2) { + $secondStmt = $expr->stmts[1]; + if (!$secondStmt instanceof Return_) { + return null; + } + if (!$secondStmt->expr instanceof Match_) { + return null; + } + $returnMatch = $secondStmt->expr; + } + return new MatchAndReturnMatch($onlyStmts->expr, $returnMatch); + } + private function matchSingleMatchArmBodyWithConditionOne(Match_ $match) : ?Expr + { + // has more options + if (\count($match->arms) !== 1) { + return null; + } + $onlyArm = $match->arms[0]; + if ($onlyArm->conds === null || \count($onlyArm->conds) !== 1) { + return null; + } + $onlyArmCond = $onlyArm->conds[0]; + if (!$this->isNumberOne($onlyArmCond)) { + return null; + } + return $onlyArm->body; + } + private function isNumberOne(Expr $expr) : bool + { + if (!$expr instanceof LNumber) { + return \false; + } + return $expr->value === 1; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/SingleWithConsecutiveToWithRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/SingleWithConsecutiveToWithRector.php new file mode 100644 index 000000000..a21821902 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/Rector/MethodCall/SingleWithConsecutiveToWithRector.php @@ -0,0 +1,128 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + $this->betterNodeFinder = $betterNodeFinder; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change single-value withConsecutive() to with() call, willReturnOnConsecutiveCalls() to willReturn() call', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $this->personServiceMock->expects($this->exactly(3)) + ->method('prepare') + ->withConsecutive( + [1], + ); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $this->personServiceMock->expects($this->exactly(3)) + ->method('prepare') + ->with([1]); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class]; + } + /** + * @param MethodCall $node + */ + public function refactor(Node $node) : ?\PhpParser\Node\Expr\MethodCall + { + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + if (!$this->isNames($node->name, ['withConsecutive', 'willReturnOnConsecutiveCalls'])) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + if (\count($node->getArgs()) !== 1) { + return null; + } + $firstArg = $node->getArgs()[0]; + // skip as multiple unique values + if ($firstArg->unpack) { + return null; + } + // use simpler with()/willReturn() instead + if ($this->isName($node->name, 'withConsecutive')) { + $node->name = new Identifier('with'); + } else { + $node->name = new Identifier('willReturn'); + } + // has assert inside? + $hasAssertInside = (bool) $this->betterNodeFinder->findFirst($firstArg->value, function (Node $node) : bool { + if (!$node instanceof MethodCall) { + return \false; + } + return $this->isNames($node->name, ['equalTo', 'instanceOf']); + }); + // replace $this->equalsTo() with direct value + $this->traverseNodesWithCallable($firstArg->value, function (Node $node) : ?Node { + if (!$node instanceof MethodCall) { + return null; + } + if (!$this->isName($node->name, 'equalTo')) { + return null; + } + return $node->getArgs()[0]->value; + }); + if ($hasAssertInside && $firstArg->value instanceof Array_) { + $args = $this->nodeFactory->createArgs($firstArg->value->items); + } else { + $args = [new Arg($firstArg->value)]; + } + $node->args = $args; + return $node; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/ValueObject/MatchAndReturnMatch.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/ValueObject/MatchAndReturnMatch.php new file mode 100644 index 000000000..b825247d2 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/CodeQuality/ValueObject/MatchAndReturnMatch.php @@ -0,0 +1,53 @@ +consecutiveMatch = $consecutiveMatch; + $this->willReturnMatch = $willReturnMatch; + } + public function getConsecutiveMatch() : Match_ + { + return $this->consecutiveMatch; + } + public function getConsecutiveMatchExpr() : Expr + { + $soleArm = $this->consecutiveMatch->arms[0]; + if ($soleArm->body instanceof CallLike) { + $assertCall = $soleArm->body; + $firstArg = $assertCall->getArgs()[0]; + return $firstArg->value; + } + throw new ShouldNotHappenException(); + } + public function getWillReturnMatch() : ?Match_ + { + return $this->willReturnMatch; + } + public function getWillReturnMatchExpr() : Expr + { + if (!$this->willReturnMatch instanceof Match_) { + throw new ShouldNotHappenException(); + } + $soleArm = $this->willReturnMatch->arms[0]; + return $soleArm->body; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php new file mode 100644 index 000000000..d46a28ccd --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/AssertIssetToAssertObjectHasPropertyRector.php @@ -0,0 +1,139 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + $this->identifierManipulator = $identifierManipulator; + $this->classReflectionAnalyzer = $classReflectionAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change "isset()" property check, to assertObjectHasProperty() method', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function test() + { + $object = new stdClass(); + $this->assertTrue(isset($object->someProperty)); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function test() + { + $object = new stdClass(); + $this->assertObjectHasProperty('someProperty', $object); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [MethodCall::class, StaticCall::class]; + } + /** + * @param MethodCall|StaticCall $node + */ + public function refactor(Node $node) : ?Node + { + if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, [AssertMethod::ASSERT_TRUE, AssertMethod::ASSERT_FALSE])) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + $firstArg = $node->getArgs()[0]; + $firstArgValue = $firstArg->value; + if (!$firstArgValue instanceof Isset_) { + return null; + } + $issetExpr = $firstArgValue->vars[0]; + if (!$issetExpr instanceof PropertyFetch) { + return null; + } + if ($this->hasMagicIsset($issetExpr->var)) { + return null; + } + $name = $this->getName($issetExpr); + if ($name === null) { + return null; + } + $this->identifierManipulator->renameNodeWithMap($node, [AssertMethod::ASSERT_TRUE => 'assertObjectHasProperty', AssertMethod::ASSERT_FALSE => 'assertObjectNotHasProperty']); + $oldArgs = $node->getArgs(); + unset($oldArgs[0]); + $newArgs = $this->nodeFactory->createArgs([new String_($name), $issetExpr->var]); + $node->args = \array_merge($newArgs, $oldArgs); + return $node; + } + private function hasMagicIsset(Expr $expr) : bool + { + $type = $this->nodeTypeResolver->getType($expr); + if (!$type instanceof TypeWithClassName) { + // object not found, skip + return $type instanceof ObjectWithoutClassType; + } + $classReflection = $type->getClassReflection(); + if (!$classReflection instanceof ClassReflection) { + return \false; + } + if ($classReflection->hasMethod('__isset')) { + return \true; + } + if (!$classReflection->isClass()) { + return \false; + } + return $this->classReflectionAnalyzer->resolveParentClassName($classReflection) !== null; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/PropertyExistsWithoutAssertRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/PropertyExistsWithoutAssertRector.php deleted file mode 100644 index e82e45fea..000000000 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/PropertyExistsWithoutAssertRector.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - private const RENAME_METHODS_WITH_OBJECT_MAP = ['assertObjectHasAttribute' => 'assertTrue', 'assertObjectNotHasAttribute' => 'assertFalse']; - /** - * @var array - */ - private const RENAME_METHODS_WITH_CLASS_MAP = ['assertClassHasAttribute' => 'assertTrue', 'assertClassNotHasAttribute' => 'assertFalse']; - public function __construct(IdentifierManipulator $identifierManipulator, TestsNodeAnalyzer $testsNodeAnalyzer) - { - $this->identifierManipulator = $identifierManipulator; - $this->testsNodeAnalyzer = $testsNodeAnalyzer; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Turns PHPUnit TestCase assertObjectHasAttribute into `property_exists` comparisons', [new CodeSample(<<<'CODE_SAMPLE' -$this->assertClassHasAttribute("property", "Class"); -$this->assertClassNotHasAttribute("property", "Class"); -CODE_SAMPLE -, <<<'CODE_SAMPLE' -$this->assertFalse(property_exists(new Class, "property")); -$this->assertTrue(property_exists(new Class, "property")); -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [MethodCall::class, StaticCall::class]; - } - /** - * @param MethodCall|StaticCall $node - */ - public function refactor(Node $node) : ?Node - { - if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, ['assertClassHasAttribute', 'assertClassNotHasAttribute', 'assertObjectNotHasAttribute', 'assertObjectHasAttribute'])) { - return null; - } - $arguments = \array_column($node->args, 'value'); - if ($arguments[0] instanceof String_ || $arguments[0] instanceof Variable || $arguments[0] instanceof ArrayDimFetch || $arguments[0] instanceof PropertyFetch) { - $secondArg = $arguments[0]; - } else { - return null; - } - if ($arguments[1] instanceof Variable) { - $firstArg = new Variable($arguments[1]->name); - $map = self::RENAME_METHODS_WITH_OBJECT_MAP; - } elseif ($arguments[1] instanceof String_) { - $firstArg = new New_(new FullyQualified($arguments[1]->value)); - $map = self::RENAME_METHODS_WITH_CLASS_MAP; - } elseif ($arguments[1] instanceof PropertyFetch || $arguments[1] instanceof ArrayDimFetch) { - $firstArg = $arguments[1]; - $map = self::RENAME_METHODS_WITH_OBJECT_MAP; - } else { - return null; - } - unset($node->args[0]); - unset($node->args[1]); - $propertyExistsFuncCall = new FuncCall(new Name('property_exists'), [new Arg($firstArg), new Arg($secondArg)]); - $newArgs = $this->nodeFactory->createArgs([$propertyExistsFuncCall]); - $node->args = \array_merge($newArgs, $node->getArgs()); - $this->identifierManipulator->renameNodeWithMap($node, $map); - return $node; - } -} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php index 8e5ca57c5..c36ecd613 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/MethodCall/RemoveSetMethodsMethodCallRector.php @@ -5,7 +5,10 @@ use PhpParser\Node; use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Identifier; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ObjectType; +use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -24,13 +27,25 @@ final class RemoveSetMethodsMethodCallRector extends AbstractRector * @var \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer */ private $testsNodeAnalyzer; - public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer) + /** + * @readonly + * @var \Rector\PhpParser\Node\Value\ValueResolver + */ + private $valueResolver; + /** + * @readonly + * @var \PHPStan\Reflection\ReflectionProvider + */ + private $reflectionProvider; + public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer, ValueResolver $valueResolver, ReflectionProvider $reflectionProvider) { $this->testsNodeAnalyzer = $testsNodeAnalyzer; + $this->valueResolver = $valueResolver; + $this->reflectionProvider = $reflectionProvider; } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Remove "setMethods()" method as never used', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Remove "setMethods()" method as never used, move methods to "addMethods()" if non-existent or @method magic', [new CodeSample(<<<'CODE_SAMPLE' use PHPUnit\Framework\TestCase; final class SomeTest extends TestCase @@ -72,12 +87,88 @@ public function refactor(Node $node) : ?Node if (!$this->testsNodeAnalyzer->isInTestClass($node)) { return null; } + if ($node->isFirstClassCallable()) { + return null; + } if (!$this->isName($node->name, 'setMethods')) { return null; } if (!$this->isObjectType($node->var, new ObjectType('PHPUnit\\Framework\\MockObject\\MockBuilder'))) { return null; } + $mockedMagicMethodNames = $this->resolvedMockedMagicMethodNames($node); + // rename to "addMethods()" to add magic method names + if ($mockedMagicMethodNames !== []) { + $node->name = new Identifier('addMethods'); + $node->args = $this->nodeFactory->createArgs([$mockedMagicMethodNames]); + return $node; + } return $node->var; } + /** + * Method names from @method, must remain mocked using "addMethods()" call + * + * @return string[] + */ + private function resolvedMockedMagicMethodNames(MethodCall $setMethodsMethodCall) : array + { + $mockedClassName = $this->resolveMockedClassName($setMethodsMethodCall); + // unable to resolve mocked class + if (!\is_string($mockedClassName)) { + return []; + } + $magicMethodNames = $this->resolveClassMagicMethodNames($mockedClassName); + if ($magicMethodNames === []) { + // no magic methods? nothing to keep + return []; + } + $mockedMethodNames = $this->resolveSetMethodNames($setMethodsMethodCall); + $magicSetMethodNames = \array_intersect($mockedMethodNames, $magicMethodNames); + return \array_values($magicSetMethodNames); + } + /** + * @return string[] + */ + private function resolveClassMagicMethodNames(string $className) : array + { + if (!$this->reflectionProvider->hasClass($className)) { + return []; + } + $classReflection = $this->reflectionProvider->getClass($className); + return \array_keys($classReflection->getMethodTags()); + } + /** + * @return string[] + */ + private function resolveSetMethodNames(MethodCall $setMethodsMethodCall) : array + { + if ($setMethodsMethodCall->isFirstClassCallable()) { + return []; + } + $firstArg = $setMethodsMethodCall->getArgs()[0]; + $value = $this->valueResolver->getValue($firstArg->value); + if (!\is_array($value)) { + return []; + } + return $value; + } + /** + * @return mixed + */ + private function resolveMockedClassName(MethodCall $setMethodsMethodCall) + { + $parentMethodCall = $setMethodsMethodCall->var; + while ($parentMethodCall instanceof MethodCall) { + if ($this->isName($parentMethodCall->name, 'getMockBuilder')) { + if ($parentMethodCall->isFirstClassCallable()) { + return null; + } + // resolve mocked class name + $firstArg = $parentMethodCall->getArgs()[0]; + return $this->valueResolver->getValue($firstArg->value); + } + $parentMethodCall = $parentMethodCall->var; + } + return null; + } } diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php new file mode 100644 index 000000000..15c19e3e1 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit100/Rector/StmtsAwareInterface/WithConsecutiveRector.php @@ -0,0 +1,353 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + $this->betterNodeFinder = $betterNodeFinder; + $this->withConsecutiveMatchFactory = $withConsecutiveMatchFactory; + $this->matcherInvocationCountMethodCallNodeFactory = $matcherInvocationCountMethodCallNodeFactory; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Refactor deprecated withConsecutive() to willReturnCallback() structure', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $this->personServiceMock->expects($this->exactly(2)) + ->method('prepare') + ->withConsecutive( + [1, 2], + [3, 4], + ); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public function run() + { + $matcher = $this->exactly(2); + + $this->personServiceMock->expects($matcher) + ->method('prepare') + ->willReturnCallback(function (...$parameters) use ($matcher) { + match ($matcher->numberOfInvocations()) { + 1 => self::assertEquals([1, 2], $parameters), + 2 => self::assertEquals([3, 4], $parameters), + }; + }); + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Expression::class]; + } + /** + * @param Expression $node + */ + public function refactor(Node $node) + { + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + $withConsecutiveMethodCall = $this->findMethodCall($node, self::WITH_CONSECUTIVE_METHOD); + if (!$withConsecutiveMethodCall instanceof MethodCall) { + return null; + } + if ($this->hasWillReturnMapOrWill($node)) { + return null; + } + $returnStmts = []; + $willReturn = $this->findMethodCall($node, 'willReturn'); + if ($willReturn instanceof MethodCall) { + $returnStmts[] = $this->createWillReturnStmt($willReturn); + } + $willReturnSelf = $this->findMethodCall($node, 'willReturnSelf'); + if ($willReturnSelf instanceof MethodCall) { + $returnStmts[] = $this->createWillReturnSelfStmts($willReturnSelf); + } + $willReturnArgument = $this->findMethodCall($node, 'willReturnArgument'); + if ($willReturnArgument instanceof MethodCall) { + $returnStmts[] = $this->createWillReturnArgument($willReturnArgument); + } + $willReturnOnConsecutiveCallsArgument = $this->findMethodCall($node, 'willReturnOnConsecutiveCalls'); + if ($willReturnOnConsecutiveCallsArgument instanceof MethodCall) { + $returnStmts[] = $this->createReturnMatch($willReturnOnConsecutiveCallsArgument); + } + $willThrowException = $this->findMethodCall($node, 'willThrowException'); + if ($willThrowException instanceof MethodCall) { + $returnStmts[] = $this->createWillThrowException($willThrowException); + } + $willReturnReferenceArgument = $this->findMethodCall($node, 'willReturnReference'); + $referenceVariable = null; + if ($willReturnReferenceArgument instanceof MethodCall) { + $returnStmts[] = $this->createWillReturn($willReturnReferenceArgument); + // returns passed args + $referenceVariable = new Variable('parameters'); + } + $this->removeMethodCalls($node, ['willReturn', 'willReturnArgument', 'willReturnSelf', 'willReturnOnConsecutiveCalls', 'willReturnReference', 'willThrowException']); + $expectsCall = $this->matchAndRefactorExpectsMethodCall($node); + if (!$expectsCall instanceof MethodCall && !$expectsCall instanceof StaticCall) { + // fallback to default by case count + $lNumber = new LNumber(\count($withConsecutiveMethodCall->args)); + $expectsCall = new MethodCall(new Variable('this'), new Identifier('exactly'), [new Arg($lNumber)]); + } + // 2. does willReturnCallback() exist? just merge + $existingWillReturnCallback = $this->findMethodCall($node, 'willReturnCallback'); + if ($existingWillReturnCallback instanceof MethodCall) { + return $this->refactorWithExistingWillReturnCallback($existingWillReturnCallback, $withConsecutiveMethodCall, $node); + } + // 3. rename and replace withConsecutive() + return $this->refactorToWillReturnCallback($withConsecutiveMethodCall, $returnStmts, $referenceVariable, $expectsCall, $node); + } + public function provideMinPhpVersion() : int + { + // This rule uses PHP 8.0 match + return PhpVersion::PHP_80; + } + /** + * Replace $this->expects(...) + * + * @param Expression $expression + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null + */ + private function matchAndRefactorExpectsMethodCall(Expression $expression) + { + /** @var MethodCall|StaticCall|null $exactlyCall */ + $exactlyCall = null; + $this->traverseNodesWithCallable($expression, function (Node $node) use(&$exactlyCall) : ?MethodCall { + if (!$node instanceof MethodCall) { + return null; + } + if (!$this->isName($node->name, 'expects')) { + return null; + } + if ($node->isFirstClassCallable()) { + return null; + } + $firstArg = $node->getArgs()[0]; + if (!$firstArg->value instanceof MethodCall && !$firstArg->value instanceof StaticCall) { + return null; + } + $exactlyCall = $firstArg->value; + $node->args = [new Arg(new Variable(ConsecutiveVariable::MATCHER))]; + return $node; + }); + // add expects() method + if (!$exactlyCall instanceof Expr) { + $this->traverseNodesWithCallable($expression, function (Node $node) : ?int { + if (!$node instanceof MethodCall) { + return null; + } + if ($node->var instanceof MethodCall) { + return null; + } + $node->var = new MethodCall($node->var, 'expects', [new Arg(new Variable(ConsecutiveVariable::MATCHER))]); + return NodeTraverser::STOP_TRAVERSAL; + }); + } + return $exactlyCall; + } + private function findMethodCall(Expression $expression, string $methodName) : ?MethodCall + { + if (!$expression->expr instanceof MethodCall) { + return null; + } + /** @var MethodCall|null $methodCall */ + $methodCall = $this->betterNodeFinder->findFirst($expression->expr, function (Node $node) use($methodName) : bool { + if (!$node instanceof MethodCall) { + return \false; + } + return $this->isName($node->name, $methodName); + }); + return $methodCall; + } + private function hasWillReturnMapOrWill(Expression $expression) : bool + { + $nodesWithWillReturnMap = $this->betterNodeFinder->find($expression, function (Node $node) : bool { + if (!$node instanceof MethodCall) { + return \false; + } + return $this->isNames($node->name, ['willReturnMap', 'will']); + }); + return $nodesWithWillReturnMap !== []; + } + /** + * @param Stmt[] $returnStmts + * @return Stmt[] + * @param \PhpParser\Node\Expr|\PhpParser\Node\Expr\Variable|null $referenceVariable + * @param \PhpParser\Node\Expr\StaticCall|\PhpParser\Node\Expr\MethodCall $expectsCall + */ + private function refactorToWillReturnCallback(MethodCall $withConsecutiveMethodCall, array $returnStmts, $referenceVariable, $expectsCall, Expression $expression) : array + { + $closure = $this->withConsecutiveMatchFactory->createClosure($withConsecutiveMethodCall, $returnStmts, $referenceVariable); + $withConsecutiveMethodCall->name = new Identifier('willReturnCallback'); + $withConsecutiveMethodCall->args = [new Arg($closure)]; + $matcherVariable = new Variable(ConsecutiveVariable::MATCHER); + $matcherAssign = new Assign($matcherVariable, $expectsCall); + return [new Expression($matcherAssign), $expression]; + } + private function refactorWithExistingWillReturnCallback(MethodCall $existingWillReturnCallback, MethodCall $withConsecutiveMethodCall, Expression $expression) : Expression + { + $callbackArg = $existingWillReturnCallback->getArgs()[0]; + if (!$callbackArg->value instanceof Closure) { + throw new ShouldNotHappenException(); + } + $callbackClosure = $callbackArg->value; + $callbackClosure->params[] = new Param(new Variable(ConsecutiveVariable::PARAMETERS)); + $parametersMatch = $this->withConsecutiveMatchFactory->createParametersMatch($withConsecutiveMethodCall); + if (\is_array($parametersMatch)) { + $callbackClosure->stmts = \array_merge($parametersMatch, $callbackClosure->stmts); + } else { + $callbackClosure->stmts = \array_merge([new Expression($parametersMatch)], $callbackClosure->stmts); + } + $this->removeMethodCalls($expression, [self::WITH_CONSECUTIVE_METHOD]); + return $expression; + } + /** + * @param string[] $methodNames + */ + private function removeMethodCalls(Expression $expression, array $methodNames) : void + { + $this->traverseNodesWithCallable($expression, function (Node $node) use($methodNames) : ?Node { + if (!$node instanceof MethodCall) { + return null; + } + if (!$this->isNames($node->name, $methodNames)) { + return null; + } + return $node->var; + }); + } + private function createWillReturnStmt(MethodCall $willReturnMethodCall) : Return_ + { + $firstArg = $willReturnMethodCall->getArgs()[0] ?? null; + if (!$firstArg instanceof Arg) { + throw new ShouldNotHappenException(); + } + return new Return_($firstArg->value); + } + private function createWillReturnSelfStmts(MethodCall $willReturnSelfMethodCall) : Return_ + { + $selfVariable = $willReturnSelfMethodCall; + while (\true) { + if (!$selfVariable instanceof MethodCall) { + break; + } + $selfVariable = $selfVariable->var; + } + return new Return_($selfVariable); + } + private function createWillThrowException(MethodCall $willThrowExceptionMethodCall) : Throw_ + { + $firstArg = $willThrowExceptionMethodCall->getArgs()[0] ?? null; + if (!$firstArg instanceof Arg) { + throw new ShouldNotHappenException(); + } + return new Throw_($firstArg->value); + } + private function createWillReturn(MethodCall $willReturnReferenceMethodCall) : Return_ + { + $firstArg = $willReturnReferenceMethodCall->getArgs()[0] ?? null; + if (!$firstArg instanceof Arg) { + throw new ShouldNotHappenException(); + } + $referenceVariable = $firstArg->value; + if (!$referenceVariable instanceof Variable) { + throw new ShouldNotHappenException(); + } + return new Return_($referenceVariable); + } + private function createWillReturnArgument(MethodCall $willReturnArgumentMethodCall) : Return_ + { + $parametersVariable = new Variable(ConsecutiveVariable::PARAMETERS); + $firstArgs = $willReturnArgumentMethodCall->getArgs()[0]; + if (!$firstArgs instanceof Arg) { + throw new ShouldNotHappenException(); + } + return new Return_(new ArrayDimFetch($parametersVariable, $firstArgs->value)); + } + private function createReturnMatch(MethodCall $willReturnOnConsecutiveCallsMethodCall) : Return_ + { + $numberOfInvocationsMethodCall = $this->matcherInvocationCountMethodCallNodeFactory->create(); + $matchArms = []; + foreach ($willReturnOnConsecutiveCallsMethodCall->getArgs() as $key => $arg) { + $matchArms[] = new MatchArm([new LNumber($key + 1)], $arg->value); + } + return new Return_(new Match_($numberOfInvocationsMethodCall, $matchArms)); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php new file mode 100644 index 000000000..a45e4c866 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php @@ -0,0 +1,251 @@ +testsNodeAnalyzer = $testsNodeAnalyzer; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change the array-index names to the argument name of the dataProvider', [new CodeSample(<<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public static function dataProviderArray(): array + { + return [ + [ + 'keyA' => true, + 'keyB' => false, + ] + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderArray')] + public function testFilter(bool $changeToKeyA, bool $changeToKeyB): void + { + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + public static function dataProviderArray(): array + { + return [ + [ + 'changeToKeyA' => true, + 'changeToKeyB' => false, + ] + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderArray')] + public function testFilter(bool $changeToKeyA, bool $changeToKeyB): void + { + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?\PhpParser\Node + { + if (!$this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + $wasChanged = \false; + foreach ($node->getMethods() as $classMethod) { + if (!$classMethod->isPublic()) { + continue; + } + if ($classMethod->getParams() === []) { + continue; + } + $dataProviderMethodNames = $this->getDataProviderMethodNames($classMethod); + if ($dataProviderMethodNames === []) { + continue; + } + foreach ($dataProviderMethodNames as $dataProviderMethodName) { + $dataProviderMethod = $node->getMethod($dataProviderMethodName); + if ($dataProviderMethod === null) { + continue; + } + $namedArgumentsFromTestClass = $this->getNamedArguments($classMethod); + foreach ($this->extractDataProviderArrayItem($dataProviderMethod) as $dataProviderArrayItem) { + if ($this->refactorArrayKey($dataProviderArrayItem, $namedArgumentsFromTestClass)) { + $wasChanged = \true; + } + } + } + } + return $wasChanged ? $node : null; + } + /** + * @return list + */ + public function getNamedArguments(ClassMethod $classMethod) : array + { + $dataProviderNameMapping = []; + foreach ($classMethod->getParams() as $param) { + if ($param->var instanceof Variable) { + $dataProviderNameMapping[] = $this->getName($param->var); + } + } + return \array_values(\array_filter($dataProviderNameMapping)); + } + /** + * @param list $stmts + * @return array + */ + public function getResolvedVariables(array $stmts) : array + { + $variables = []; + foreach ($stmts as $stmt) { + if (!$stmt instanceof Expression) { + continue; + } + if (!$stmt->expr instanceof Assign) { + continue; + } + if (!$stmt->expr->var instanceof Variable) { + continue; + } + if (!$stmt->expr->expr instanceof Array_) { + continue; + } + $variables[$this->getName($stmt->expr->var)] = $stmt->expr->expr; + } + return $variables; + } + /** + * @return list + */ + private function getDataProviderMethodNames(ClassMethod $classMethod) : array + { + $dataProviderMethodNames = []; + $attributeClassName = 'PHPUnit\\Framework\\Attributes\\DataProvider'; + foreach ($classMethod->attrGroups as $attributeGroup) { + foreach ($attributeGroup->attrs as $attribute) { + if (!$this->isName($attribute->name, $attributeClassName)) { + continue; + } + foreach ($attribute->args as $arg) { + if ($arg->value instanceof String_) { + $dataProviderMethodNames[] = $arg->value->value; + } + } + } + } + return $dataProviderMethodNames; + } + /** + * @param list $dataProviderNameMapping + */ + private function refactorArrayKey(Array_ $array, array $dataProviderNameMapping) : bool + { + $hasChanged = \false; + $needToSetAllKeyNames = \false; + $allArrayKeyNames = []; + foreach ($array->items as $arrayItem) { + if ((($nullsafeVariable1 = $arrayItem) ? $nullsafeVariable1->key : null) instanceof String_) { + $needToSetAllKeyNames = \true; + $allArrayKeyNames[] = $arrayItem->key->value; + } + } + // Skip already modified keys because they could be in a different order + if (\array_intersect($dataProviderNameMapping, $allArrayKeyNames) === $dataProviderNameMapping) { + return \false; + } + foreach ($array->items as $arrayIndex => $arrayItem) { + if ($arrayItem === null) { + continue; + } + if (!isset($dataProviderNameMapping[$arrayIndex])) { + continue; + } + if ($arrayItem->key === null && $needToSetAllKeyNames) { + $arrayItem->key = String_::fromString($dataProviderNameMapping[$arrayIndex]); + } + if ($arrayItem->key instanceof String_ && $arrayItem->key->value !== $dataProviderNameMapping[$arrayIndex]) { + $arrayItem->key->value = $dataProviderNameMapping[$arrayIndex]; + $hasChanged = \true; + } + } + return $hasChanged; + } + /** + * @return iterable + */ + private function extractDataProviderArrayItem(ClassMethod $classMethod) : iterable + { + $stmts = $classMethod->getStmts() ?? []; + $resolvedVariables = $this->getResolvedVariables($stmts); + foreach ($stmts as $stmt) { + if ($stmt instanceof Expression && $stmt->expr instanceof Yield_) { + $arrayItem = $stmt->expr->value; + if ($arrayItem instanceof Array_) { + (yield $arrayItem); + } + } + if ($stmt instanceof Return_ && $stmt->expr instanceof Array_) { + $dataProviderTestCases = $stmt->expr; + foreach ($dataProviderTestCases->items as $dataProviderTestCase) { + $arrayItem = ($nullsafeVariable2 = $dataProviderTestCase) ? $nullsafeVariable2->value : null; + if ($arrayItem instanceof Array_) { + (yield $arrayItem); + } + $variableName = $arrayItem === null ? null : $this->getName($arrayItem); + if ($arrayItem instanceof Variable && $variableName !== null && isset($resolvedVariables[$variableName])) { + $dataProviderList = $resolvedVariables[$variableName]; + foreach ($dataProviderList->items as $dataProviderItem) { + if ((($nullsafeVariable3 = $dataProviderItem) ? $nullsafeVariable3->value : null) instanceof Array_) { + (yield $dataProviderItem->value); + } + } + } + } + } + } + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit70/Rector/Class_/RemoveDataProviderTestPrefixRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit70/Rector/Class_/RemoveDataProviderTestPrefixRector.php index 67bdb7639..ab9d07729 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit70/Rector/Class_/RemoveDataProviderTestPrefixRector.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit70/Rector/Class_/RemoveDataProviderTestPrefixRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PHPUnit\PHPUnit70\Rector\Class_; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\Class_; diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Composer/ProjectPackageVersionResolver.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/Composer/ProjectPackageVersionResolver.php new file mode 100644 index 000000000..e330f596b --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/src/Composer/ProjectPackageVersionResolver.php @@ -0,0 +1,34 @@ +installedPackageResolver = $installedPackageResolver; + } + public function findPackageVersion(string $packageName) : ?string + { + $rootProjectInstalledPackages = $this->installedPackageResolver->resolve(\getcwd()); + foreach ($rootProjectInstalledPackages as $rootProjectInstalledPackage) { + if ($rootProjectInstalledPackage->getName() === $packageName) { + return $rootProjectInstalledPackage->getVersion(); + } + } + return null; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Enum/AssertMethod.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/Enum/AssertMethod.php new file mode 100644 index 000000000..2daf3c857 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/src/Enum/AssertMethod.php @@ -0,0 +1,16 @@ +matcherInvocationCountMethodCallNodeFactory = $matcherInvocationCountMethodCallNodeFactory; + $this->nodeNameResolver = $nodeNameResolver; + } + /** + * @return If_[] + */ + public function createIfs(MethodCall $withConsecutiveMethodCall) : array + { + $ifs = []; + $matcherMethodCall = $this->matcherInvocationCountMethodCallNodeFactory->create(); + $parametersVariable = new Variable(ConsecutiveVariable::PARAMETERS); + foreach ($withConsecutiveMethodCall->getArgs() as $key => $withConsecutiveArg) { + if (!$withConsecutiveArg->value instanceof Array_) { + throw new ShouldNotHappenException(); + } + $ifStmts = []; + foreach ($withConsecutiveArg->value->items as $assertKey => $assertArrayItem) { + if (!$assertArrayItem instanceof ArrayItem) { + continue; + } + if (!$assertArrayItem->value instanceof MethodCall) { + throw new NotImplementedYetException(); + } + $assertMethodCall = $assertArrayItem->value; + if ($this->nodeNameResolver->isName($assertMethodCall->name, 'equalTo')) { + $assertMethodCallExpression = $this->createAssertMethodCall($assertMethodCall, $parametersVariable, $assertKey); + $ifStmts[] = $assertMethodCallExpression; + } elseif ($this->nodeNameResolver->isName($assertMethodCall->name, 'callback')) { + $ifStmts[] = $this->createClosureAssignExpression($assertMethodCall); + $ifStmts[] = $this->createAssertClosureExpression($parametersVariable, $assertKey); + } else { + $methodName = $this->nodeNameResolver->getName($assertMethodCall->name); + throw new NotImplementedYetException($methodName ?? 'dynamic name'); + } + } + $ifs[] = new If_(new Identical($matcherMethodCall, new LNumber($key + 1)), ['stmts' => $ifStmts]); + } + return $ifs; + } + private function createAssertMethodCall(MethodCall $assertMethodCall, Variable $parametersVariable, int $parameterPositionKey) : Expression + { + $assertMethodCall->name = new Identifier('assertEquals'); + $parametersArrayDimFetch = new ArrayDimFetch($parametersVariable, new LNumber($parameterPositionKey)); + $assertMethodCall->args[] = new Arg($parametersArrayDimFetch); + return new Expression($assertMethodCall); + } + private function createClosureAssignExpression(MethodCall $assertMethodCall) : Expression + { + $callableFirstArg = $assertMethodCall->getArgs()[0]; + $callbackVariable = new Variable('callback'); + $callbackAssign = new Assign($callbackVariable, $callableFirstArg->value); + return new Expression($callbackAssign); + } + private function createAssertClosureExpression(Variable $parametersVariable, int $parameterPositionKey) : Expression + { + $callbackVariable = new Variable('callback'); + $parametersArrayDimFetch = new ArrayDimFetch($parametersVariable, new LNumber($parameterPositionKey)); + $callbackFuncCall = new FuncCall($callbackVariable, [new Arg($parametersArrayDimFetch)]); + // add assert true to the callback + $assertTrueMethodCall = new MethodCall(new Variable('this'), 'assertTrue', [new Arg($callbackFuncCall)]); + return new Expression($assertTrueMethodCall); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/MatcherInvocationCountMethodCallNodeFactory.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/MatcherInvocationCountMethodCallNodeFactory.php new file mode 100644 index 000000000..a77130b1f --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/MatcherInvocationCountMethodCallNodeFactory.php @@ -0,0 +1,38 @@ +projectPackageVersionResolver = $projectPackageVersionResolver; + } + public function create() : MethodCall + { + $invocationMethodName = $this->getInvocationMethodName(); + $matcherVariable = new Variable(ConsecutiveVariable::MATCHER); + return new MethodCall($matcherVariable, new Identifier($invocationMethodName)); + } + private function getInvocationMethodName() : string + { + $projectPHPUnitVersion = $this->projectPackageVersionResolver->findPackageVersion('phpunit/phpunit'); + if ($projectPHPUnitVersion === null || \version_compare($projectPHPUnitVersion, '10.0', '>=')) { + // phpunit 10 naming + return 'numberOfInvocations'; + } + // phpunit 9 naming + return 'getInvocationCount'; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/UsedVariablesResolver.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/UsedVariablesResolver.php new file mode 100644 index 000000000..236597ca8 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/UsedVariablesResolver.php @@ -0,0 +1,58 @@ +betterNodeFinder = $betterNodeFinder; + $this->nodeNameResolver = $nodeNameResolver; + } + /** + * @param Stmt[] $returnStmts + * @return Variable[] + */ + public function resolveUsedVariables(MethodCall $withConsecutiveMethodCall, array $returnStmts) : array + { + $consecutiveArgs = $withConsecutiveMethodCall->getArgs(); + $stmtVariables = $this->resolveUniqueVariables($returnStmts); + return $this->resolveUniqueVariables(\array_merge($consecutiveArgs, $stmtVariables)); + } + /** + * @param Node[] $nodes + * @return Variable[] + */ + private function resolveUniqueVariables(array $nodes) : array + { + /** @var Variable[] $usedVariables */ + $usedVariables = $this->betterNodeFinder->findInstancesOfScoped($nodes, Variable::class); + $uniqueUsedVariables = []; + foreach ($usedVariables as $usedVariable) { + if ($this->nodeNameResolver->isNames($usedVariable, ['this', ConsecutiveVariable::MATCHER, ConsecutiveVariable::PARAMETERS])) { + continue; + } + $usedVariableName = $this->nodeNameResolver->getName($usedVariable); + $uniqueUsedVariables[$usedVariableName] = $usedVariable; + } + return $uniqueUsedVariables; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/WithConsecutiveMatchFactory.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/WithConsecutiveMatchFactory.php new file mode 100644 index 000000000..68ac29e5a --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeFactory/WithConsecutiveMatchFactory.php @@ -0,0 +1,156 @@ +builderFactory = $builderFactory; + $this->usedVariablesResolver = $usedVariablesResolver; + $this->matcherInvocationCountMethodCallNodeFactory = $matcherInvocationCountMethodCallNodeFactory; + $this->nodeFinder = $nodeFinder; + $this->nodeNameResolver = $nodeNameResolver; + $this->consecutiveIfsFactory = $consecutiveIfsFactory; + } + /** + * @param Stmt[] $returnStmts + * @param \PhpParser\Node\Expr\Variable|\PhpParser\Node\Expr|null $referenceVariable + */ + public function createClosure(MethodCall $withConsecutiveMethodCall, array $returnStmts, $referenceVariable) : Closure + { + $matcherVariable = new Variable(ConsecutiveVariable::MATCHER); + $usedVariables = $this->usedVariablesResolver->resolveUsedVariables($withConsecutiveMethodCall, $returnStmts); + $matchOrIfs = $this->createParametersMatch($withConsecutiveMethodCall); + if (\is_array($matchOrIfs)) { + $closureStmts = \array_merge($matchOrIfs, $returnStmts); + } else { + $closureStmts = \array_merge([new Expression($matchOrIfs)], $returnStmts); + } + $parametersParam = new Param(new Variable(ConsecutiveVariable::PARAMETERS)); + $parametersParam->variadic = \true; + return new Closure(['byRef' => $this->isByRef($referenceVariable), 'uses' => $this->createClosureUses($matcherVariable, $usedVariables), 'params' => [$parametersParam], 'stmts' => $closureStmts]); + } + /** + * @return Match_|MethodCall|Stmt\If_[] + */ + public function createParametersMatch(MethodCall $withConsecutiveMethodCall) + { + $parametersVariable = new Variable(ConsecutiveVariable::PARAMETERS); + $firstArg = $withConsecutiveMethodCall->getArgs()[0] ?? null; + if ($firstArg instanceof Arg && $firstArg->unpack) { + return $this->createAssertSameDimFetch($firstArg, $parametersVariable); + } + $numberOfInvocationsMethodCall = $this->matcherInvocationCountMethodCallNodeFactory->create(); + // A. has assert inside the on consecutive? create ifs + if ($this->hasInnerAssertCall($withConsecutiveMethodCall)) { + return $this->consecutiveIfsFactory->createIfs($withConsecutiveMethodCall); + } + // B. if not, create match + $matchArms = []; + foreach ($withConsecutiveMethodCall->getArgs() as $key => $arg) { + $assertEquals = $this->builderFactory->staticCall('self', 'assertEquals', [$arg, $parametersVariable]); + $matchArms[] = new MatchArm([new LNumber($key + 1)], $assertEquals); + } + return new Match_($numberOfInvocationsMethodCall, $matchArms); + } + private function createAssertSameDimFetch(Arg $firstArg, Variable $variable) : MethodCall + { + $matcherCountMethodCall = $this->matcherInvocationCountMethodCallNodeFactory->create(); + $currentValueArrayDimFetch = new ArrayDimFetch($firstArg->value, new Minus($matcherCountMethodCall, new LNumber(1))); + $compareArgs = [new Arg($currentValueArrayDimFetch), new Arg($variable)]; + return $this->builderFactory->methodCall(new Variable('this'), 'assertSame', $compareArgs); + } + /** + * @param \PhpParser\Node\Expr|\PhpParser\Node\Expr\Variable|null $referenceVariable + */ + private function isByRef($referenceVariable) : bool + { + return $referenceVariable instanceof Variable; + } + /** + * @param Variable[] $usedVariables + * @return ClosureUse[] + */ + private function createClosureUses(Variable $matcherVariable, array $usedVariables) : array + { + $uses = [new ClosureUse($matcherVariable)]; + foreach ($usedVariables as $usedVariable) { + $uses[] = new ClosureUse($usedVariable); + } + return $uses; + } + /** + * We look for $this->assert/equals*() calls inside the consecutive calls + */ + private function hasInnerAssertCall(MethodCall $withConsecutiveMethodCall) : bool + { + return (bool) $this->nodeFinder->findFirst($withConsecutiveMethodCall->getArgs(), function (Node $node) : bool { + if (!$node instanceof MethodCall) { + return \false; + } + if (!$node->var instanceof Variable) { + return \false; + } + if (!$this->nodeNameResolver->isName($node->var, 'this')) { + return \false; + } + if (!$node->name instanceof Identifier) { + return \false; + } + // is one of assert methods + return \strncmp($node->name->toString(), 'equal', \strlen('equal')) === 0; + }); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/PhpDoc/DataProviderMethodRenamer.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/PhpDoc/DataProviderMethodRenamer.php index a838a0d7d..e5bf7c61a 100644 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/src/PhpDoc/DataProviderMethodRenamer.php +++ b/vendor/rector/rector/vendor/rector/rector-phpunit/src/PhpDoc/DataProviderMethodRenamer.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\PHPUnit\PhpDoc; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node\Stmt\Class_; use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/StmtsAwareInterface/WithConsecutiveRector.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/StmtsAwareInterface/WithConsecutiveRector.php deleted file mode 100644 index fbf0ad97b..000000000 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/StmtsAwareInterface/WithConsecutiveRector.php +++ /dev/null @@ -1,390 +0,0 @@ -testsNodeAnalyzer = $testsNodeAnalyzer; - $this->betterNodeFinder = $betterNodeFinder; - $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; - $this->builderFactory = $builderFactory; - } - public function getRuleDefinition() : RuleDefinition - { - return new RuleDefinition('Refactor deprecated withConsecutive() to willReturnCallback() structure', [new CodeSample(<<<'CODE_SAMPLE' -use PHPUnit\Framework\TestCase; - -final class SomeTest extends TestCase -{ - public function run() - { - $this->personServiceMock->expects($this->exactly(2)) - ->method('prepare') - ->withConsecutive( - [1, 2], - [3, 4], - ); - - $this->userServiceMock->expects(self::exactly(2)) - ->method('prepare') - ->withConsecutive( - [1, 2], - [3, 4], - ); - } -} -CODE_SAMPLE -, <<<'CODE_SAMPLE' -use PHPUnit\Framework\TestCase; - -final class SomeTest extends TestCase -{ - public function run() - { - $matcher = $this->exactly(2); - - $this->personServiceMock->expects($matcher) - ->method('prepare') - ->willReturnCallback(function ($parameters) use ($matcher) { - match ($matcher->numberOfInvocations()) { - 1 => self::assertEquals([1, 2], $parameters), - 2 => self::assertEquals([3, 4], $parameters), - }; - }); - - $matcher = self::exactly(2); - - $this->userServiceMock->expects($matcher) - ->method('prepare') - ->willReturnCallback(function ($parameters) use ($matcher) { - match ($matcher->numberOfInvocations()) { - 1 => self::assertEquals([1, 2], $parameters), - 2 => self::assertEquals([3, 4], $parameters), - } - }); - } -} -CODE_SAMPLE -)]); - } - /** - * @return array> - */ - public function getNodeTypes() : array - { - return [Expression::class]; - } - /** - * @param Expression $node - */ - public function refactor(Node $node) - { - if (!$this->testsNodeAnalyzer->isInTestClass($node)) { - return null; - } - $withConsecutiveMethodCall = $this->findMethodCall($node, 'withConsecutive'); - if (!$withConsecutiveMethodCall instanceof MethodCall) { - return null; - } - if ($this->hasWillReturnMapOrWill($node)) { - return null; - } - $returnStmts = []; - $willReturn = $this->findMethodCall($node, 'willReturn'); - if ($willReturn instanceof MethodCall) { - $args = $willReturn->getArgs(); - if (\count($args) !== 1 || !$args[0] instanceof Arg) { - return null; - } - $returnStmts = [new Return_($args[0]->value)]; - } - $willReturnSelf = $this->findMethodCall($node, 'willReturnSelf'); - if ($willReturnSelf instanceof MethodCall) { - if ($returnStmts !== []) { - return null; - } - $selfVariable = $willReturnSelf; - while (\true) { - if (!$selfVariable instanceof MethodCall) { - break; - } - $selfVariable = $selfVariable->var; - } - $returnStmts = [new Return_($selfVariable)]; - } - $willReturnArgument = $this->findMethodCall($node, 'willReturnArgument'); - if ($willReturnArgument instanceof MethodCall) { - if ($returnStmts !== []) { - return null; - } - $parametersVariable = new Variable('parameters'); - $args = $willReturnArgument->getArgs(); - if (\count($args) !== 1 || !$args[0] instanceof Arg) { - return null; - } - $returnStmts = [new Return_(new ArrayDimFetch($parametersVariable, $args[0]->value))]; - } - $willReturnOnConsecutiveCallsArgument = $this->findMethodCall($node, 'willReturnOnConsecutiveCalls'); - if ($willReturnOnConsecutiveCallsArgument instanceof MethodCall) { - if ($returnStmts !== []) { - return null; - } - $matcherVariable = new Variable('matcher'); - $numberOfInvocationsMethodCall = new MethodCall($matcherVariable, new Identifier('numberOfInvocations')); - $matchArms = []; - foreach ($willReturnOnConsecutiveCallsArgument->getArgs() as $key => $arg) { - $matchArms[] = new MatchArm([new LNumber($key + 1)], $arg->value); - } - $returnStmts = [new Return_(new Match_($numberOfInvocationsMethodCall, $matchArms))]; - } - $willReturnReferenceArgument = $this->findMethodCall($node, 'willReturnReference'); - $referenceVariable = null; - if ($willReturnReferenceArgument instanceof MethodCall) { - if ($returnStmts !== []) { - return null; - } - $args = $willReturnReferenceArgument->args; - if (\count($args) !== 1 || !$args[0] instanceof Arg) { - return null; - } - $referenceVariable = $args[0]->value; - if (!$referenceVariable instanceof Variable) { - return null; - } - $returnStmts = [new Return_($referenceVariable)]; - } - $willThrowException = $this->findMethodCall($node, 'willThrowException'); - if ($willThrowException instanceof MethodCall) { - if ($returnStmts !== []) { - return null; - } - $args = $willThrowException->getArgs(); - if (\count($args) !== 1 || !$args[0] instanceof Arg) { - return null; - } - $returnStmts = [new Throw_($args[0]->value)]; - } - /** - * remove willReturn, willReturnArgument, willReturnOnConsecutiveCalls, willReturnReference - * willReturnSelf and willThrowException - */ - $this->removeWills($node); - $expectsCall = $this->matchAndRefactorExpectsMethodCall($node); - if (!$expectsCall instanceof MethodCall && !$expectsCall instanceof StaticCall) { - return null; - } - // 2. rename and replace withConsecutive() - $withConsecutiveMethodCall->name = new Identifier('willReturnCallback'); - $withConsecutiveMethodCall->args = [new Arg($this->createClosure($withConsecutiveMethodCall, $returnStmts, $referenceVariable))]; - $matcherAssign = new Assign(new Variable('matcher'), $expectsCall); - return [new Expression($matcherAssign), $node]; - } - public function provideMinPhpVersion() : int - { - /** - * This rule just work for phpunit 10, - * And as php 8.1 is the min version supported by phpunit 10, then we decided to let this version as minimum. - * - * You can see more detail in this issue: https://github.com/rectorphp/rector-phpunit/issues/272 - */ - return PhpVersion::PHP_81; - } - /** - * @template T of Node - * @param Node|Node[] $node - * @param class-string $type - * @return T[] - */ - public function findInstancesOfScoped($node, string $type) : array - { - /** @var T[] $foundNodes */ - $foundNodes = []; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($node, static function (Node $subNode) use($type, &$foundNodes) : ?int { - if ($subNode instanceof Class_ || $subNode instanceof Function_ || $subNode instanceof Closure) { - return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - } - if ($subNode instanceof $type) { - $foundNodes[] = $subNode; - return null; - } - return null; - }); - return $foundNodes; - } - /** - * @param Node\Stmt[] $returnStmts - */ - private function createClosure(MethodCall $expectsMethodCall, array $returnStmts, ?Variable $referenceVariable) : Closure - { - $closure = new Closure(); - $byRef = $referenceVariable instanceof Variable; - $closure->byRef = $byRef; - $matcherVariable = new Variable('matcher'); - $closure->uses[] = new ClosureUse($matcherVariable); - $usedVariables = $this->resolveUniqueUsedVariables(\array_merge($expectsMethodCall->getArgs(), $this->resolveUniqueUsedVariables($returnStmts))); - foreach ($usedVariables as $usedVariable) { - $closureUse = new ClosureUse($usedVariable); - if ($byRef && $this->getName($usedVariable) === $this->getName($referenceVariable)) { - $closureUse->byRef = \true; - } - $closure->uses[] = $closureUse; - } - $parametersVariable = new Variable('parameters'); - $match = $this->createMatch($matcherVariable, $expectsMethodCall, $parametersVariable); - $closure->params[] = new Param($parametersVariable); - $closure->stmts = \array_merge([new Expression($match)], $returnStmts); - return $closure; - } - /** - * Replace $this->expects(...) - * - * @param Expression $expression - * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall|null - */ - private function matchAndRefactorExpectsMethodCall(Expression $expression) - { - /** @var MethodCall|StaticCall|null $exactlyCall */ - $exactlyCall = null; - $this->traverseNodesWithCallable($expression, function (Node $node) use(&$exactlyCall) : ?MethodCall { - if (!$node instanceof MethodCall) { - return null; - } - if (!$this->isName($node->name, 'expects')) { - return null; - } - $firstArg = $node->getArgs()[0]; - if (!$firstArg->value instanceof MethodCall && !$firstArg->value instanceof StaticCall) { - return null; - } - $exactlyCall = $firstArg->value; - $node->args = [new Arg(new Variable('matcher'))]; - return $node; - }); - return $exactlyCall; - } - private function findMethodCall(Expression $expression, string $methodName) : ?MethodCall - { - if (!$expression->expr instanceof MethodCall) { - return null; - } - /** @var MethodCall|null $methodCall */ - $methodCall = $this->betterNodeFinder->findFirst($expression->expr, function (Node $node) use($methodName) : bool { - if (!$node instanceof MethodCall) { - return \false; - } - return $this->isName($node->name, $methodName); - }); - return $methodCall; - } - private function createMatch(Variable $matcherVariable, MethodCall $expectsMethodCall, Variable $parameters) : Match_ - { - $numberOfInvocationsMethodCall = new MethodCall($matcherVariable, new Identifier('numberOfInvocations')); - $matchArms = []; - foreach ($expectsMethodCall->getArgs() as $key => $arg) { - $assertEquals = $this->builderFactory->staticCall('self', 'assertEquals', [$arg, $parameters]); - $matchArms[] = new MatchArm([new LNumber($key + 1)], $assertEquals); - } - return new Match_($numberOfInvocationsMethodCall, $matchArms); - } - /** - * @param Node[] $nodes - * @return Variable[] - */ - private function resolveUniqueUsedVariables(array $nodes) : array - { - /** @var Variable[] $usedVariables */ - $usedVariables = $this->findInstancesOfScoped($nodes, Variable::class); - $uniqueUsedVariables = []; - foreach ($usedVariables as $usedVariable) { - if ($this->isNames($usedVariable, ['this', 'matcher', 'parameters'])) { - continue; - } - $usedVariableName = $this->getName($usedVariable); - $uniqueUsedVariables[$usedVariableName] = $usedVariable; - } - return $uniqueUsedVariables; - } - /** - * @param \PhpParser\Node\Stmt\Expression|\PhpParser\Node $node - */ - private function hasWillReturnMapOrWill($node) : bool - { - $nodesWithWillReturnMap = $this->betterNodeFinder->find($node, function (Node $node) : bool { - if (!$node instanceof MethodCall) { - return \false; - } - return $this->isNames($node->name, ['willReturnMap', 'will']); - }); - return $nodesWithWillReturnMap !== []; - } - /** - * @param \PhpParser\Node\Stmt\Expression|\PhpParser\Node $expression - */ - private function removeWills($expression) : void - { - $this->traverseNodesWithCallable($expression, function (Node $node) : ?Node { - if (!$node instanceof MethodCall) { - return null; - } - if (!$this->isNames($node->name, ['willReturn', 'willReturnArgument', 'willReturnSelf', 'willReturnOnConsecutiveCalls', 'willReturnReference', 'willThrowException'])) { - return null; - } - return $node->var; - }); - } -} diff --git a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Set/PHPUnitLevelSetList.php b/vendor/rector/rector/vendor/rector/rector-phpunit/src/Set/PHPUnitLevelSetList.php deleted file mode 100644 index 228c3c8fb..000000000 --- a/vendor/rector/rector/vendor/rector/rector-phpunit/src/Set/PHPUnitLevelSetList.php +++ /dev/null @@ -1,43 +0,0 @@ -rules([SwiftCreateMessageToNewEmailRector::class, SwiftSetBodyToHtmlPlainMethodCallRector::class]); + $rectorConfig->rules([SwiftCreateMessageToNewEmailRector::class, SwiftSetBodyToHtmlPlainMethodCallRector::class, SwiftMessageToEmailRector::class]); $rectorConfig->ruleWithConfiguration(RenameClassRector::class, [ 'Swift_Mailer' => 'Symfony\\Component\\Mailer\\MailerInterface', - 'Swift_Message' => 'Symfony\\Component\\Mime\\Email', // message 'Swift_Mime_SimpleMessage' => 'Symfony\\Component\\Mime\\RawMessage', // transport @@ -20,4 +22,5 @@ 'Swift_FailoverTransport' => 'Symfony\\Component\\Mailer\\Transport\\FailoverTransport', 'Swift_SendmailTransport' => 'Symfony\\Component\\Mailer\\Transport\\SendmailTransport', ]); + $rectorConfig->ruleWithConfiguration(RenameClassConstFetchRector::class, [new RenameClassAndConstFetch('Swift_Mime_SimpleMessage', 'PRIORITY_HIGHEST', 'Symfony\\Component\\Mime\\Email', 'PRIORITY_HIGHEST'), new RenameClassAndConstFetch('Swift_Mime_SimpleMessage', 'PRIORITY_HIGH', 'Symfony\\Component\\Mime\\Email', 'PRIORITY_HIGH'), new RenameClassAndConstFetch('Swift_Mime_SimpleMessage', 'PRIORITY_NORMAL', 'Symfony\\Component\\Mime\\Email', 'PRIORITY_NORMAL'), new RenameClassAndConstFetch('Swift_Mime_SimpleMessage', 'PRIORITY_LOW', 'Symfony\\Component\\Mime\\Email', 'PRIORITY_LOW'), new RenameClassAndConstFetch('Swift_Mime_SimpleMessage', 'PRIORITY_LOWEST', 'Symfony\\Component\\Mime\\Email', 'PRIORITY_LOWEST')]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/annotations-to-attributes.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/annotations-to-attributes.php index 9085bd7f5..f7610daf5 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/annotations-to-attributes.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/annotations-to-attributes.php @@ -1,7 +1,7 @@ rules([ServiceArgsToServiceNamedArgRector::class, ServiceSetStringNameToClassNameRector::class, ServiceSettersToSettersAutodiscoveryRector::class, ServicesSetNameToSetTypeRector::class, ServiceTagsToDefaultsAutoconfigureRector::class]); + $rectorConfig->rules([MergeServiceNameTypeRector::class, ServiceArgsToServiceNamedArgRector::class, ServiceSetStringNameToClassNameRector::class, ServiceSettersToSettersAutodiscoveryRector::class, ServiceTagsToDefaultsAutoconfigureRector::class]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/level/deprecated-level-set.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/level/deprecated-level-set.php deleted file mode 100644 index 6eb610786..000000000 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/level/deprecated-level-set.php +++ /dev/null @@ -1,11 +0,0 @@ -rules([ - MakeCommandLazyRector::class, + RedirectToRouteRector::class, EventListenerToEventSubscriberRector::class, ResponseReturnTypeControllerActionRector::class, // int and string literals to const fetches diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony-constructor-injection.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony-constructor-injection.php index 9dd76e7f2..df7da51a3 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony-constructor-injection.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony-constructor-injection.php @@ -1,11 +1,12 @@ rules([ContainerGetToConstructorInjectionRector::class, GetToConstructorInjectionRector::class]); + $rectorConfig->rules([ContainerGetToConstructorInjectionRector::class, ContainerGetNameToTypeInTestsRector::class, GetToConstructorInjectionRector::class]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony25.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony25.php index db090ddb5..6df89cb61 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony25.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony25.php @@ -1,7 +1,7 @@ rules([ConstraintUrlOptionRector::class, FormIsValidRector::class, VarDumperTestTraitMethodArgsRector::class, ContainerBuilderCompileEnvArgumentRector::class, ProcessBuilderInstanceRector::class, ProcessBuilderGetProcessRector::class]); + $rectorConfig->rules([ConstraintUrlOptionRector::class, FormIsValidRector::class, VarDumperTestTraitMethodArgsRector::class, ContainerBuilderCompileEnvArgumentRector::class]); $rectorConfig->ruleWithConfiguration(RenameClassRector::class, ['Symfony\\Component\\Validator\\Tests\\Constraints\\AbstractConstraintValidatorTest' => 'Symfony\\Component\\Validator\\Test\\ConstraintValidatorTestCase', 'Symfony\\Component\\Process\\ProcessBuilder' => 'Symfony\\Component\\Process\\Process']); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony41.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony41.php index a90e3cb36..e71852790 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony41.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony41.php @@ -1,7 +1,7 @@ rules([WebTestCaseAssertIsSuccessfulRector::class, WebTestCaseAssertResponseCodeRector::class, WebTestCaseAssertSelectorTextContainsRector::class, TwigBundleFilesystemLoaderToTwigRector::class, MakeDispatchFirstArgumentEventRector::class, GetCurrencyBundleMethodCallsToIntlRector::class, ConvertRenderTemplateShortNotationToBundleSyntaxRector::class, EventDispatcherParentConstructRector::class]); + $rectorConfig->rules([WebTestCaseAssertIsSuccessfulRector::class, WebTestCaseAssertResponseCodeRector::class, TwigBundleFilesystemLoaderToTwigRector::class, MakeDispatchFirstArgumentEventRector::class, GetCurrencyBundleMethodCallsToIntlRector::class, ConvertRenderTemplateShortNotationToBundleSyntaxRector::class, EventDispatcherParentConstructRector::class]); $rectorConfig->ruleWithConfiguration(RenameMethodRector::class, [new MethodCallRename('Symfony\\Component\\BrowserKit\\Response', 'getStatus', 'getStatusCode'), new MethodCallRename('Symfony\\Component\\Security\\Http\\Firewall', 'handleRequest', 'callListeners')]); $rectorConfig->ruleWithConfiguration(RenameClassRector::class, [ // assets deprecation diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony44.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony44.php index bc056f11a..b77e43498 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony44.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony44.php @@ -1,7 +1,7 @@ rules([KernelTestCaseContainerPropertyDeprecationRector::class, CommandDescriptionToPropertyRector::class]); + $rectorConfig->rules([KernelTestCaseContainerPropertyDeprecationRector::class]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony54.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony54.php index 0586ae651..37b18c80f 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony54.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony54.php @@ -1,7 +1,7 @@ rules([CommandPropertyToAttributeRector::class, ErrorNamesPropertyToConstantRector::class, MagicClosureTwigExtensionToNativeMethodsRector::class]); + $rectorConfig->rules([CommandConfigureToAttributeRector::class, CommandPropertyToAttributeRector::class, ErrorNamesPropertyToConstantRector::class, MagicClosureTwigExtensionToNativeMethodsRector::class]); $rectorConfig->ruleWithConfiguration(RenameClassRector::class, [ // @see https://github.com/symfony/symfony/pull/43982 'Symfony\\Component\\Serializer\\Normalizer\\ContextAwareDenormalizerInterface' => 'Symfony\\Component\\Serializer\\Normalizer\\DenormalizerInterface', diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony62.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony62.php index acaaa597d..77b32dfcd 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony62.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony62.php @@ -1,7 +1,7 @@ rule(SimplifyFormRenderingRector::class); + $rectorConfig->rules([ + SimplifyFormRenderingRector::class, + SecurityAttributeToIsGrantedAttributeRector::class, + ParamConverterAttributeToMapEntityAttributeRector::class, + // @see https://github.com/symfony/symfony/pull/47068, #[AsMessageHandler] attribute + MessageHandlerInterfaceToAttributeRector::class, + MessageSubscriberInterfaceToAttributeRector::class, + // @see https://github.com/symfony/symfony/pull/47363 + ArgumentValueResolverToValueResolverRector::class, + ]); // change to attribute before rename // https://symfony.com/blog/new-in-symfony-6-2-built-in-cache-security-template-and-doctrine-attributes // @see https://github.com/rectorphp/rector-symfony/issues/535#issuecomment-1783983383 @@ -62,10 +72,4 @@ // @see https://github.com/symfony/symfony/pull/46094 // @see https://github.com/symfony/symfony/pull/48554 $rectorConfig->ruleWithConfiguration(RenameClassConstFetchRector::class, [new RenameClassAndConstFetch('Symfony\\Component\\Security\\Core\\Security', 'ACCESS_DENIED_ERROR', 'Symfony\\Component\\Security\\Http\\SecurityRequestAttributes', 'ACCESS_DENIED_ERROR'), new RenameClassAndConstFetch('Symfony\\Component\\Security\\Core\\Security', 'AUTHENTICATION_ERROR', 'Symfony\\Component\\Security\\Http\\SecurityRequestAttributes', 'AUTHENTICATION_ERROR'), new RenameClassAndConstFetch('Symfony\\Component\\Security\\Core\\Security', 'LAST_USERNAME', 'Symfony\\Component\\Security\\Http\\SecurityRequestAttributes', 'LAST_USERNAME'), new RenameClassAndConstFetch('Symfony\\Component\\Security\\Core\\Security', 'MAX_USERNAME_LENGTH', 'Symfony\\Component\\Security\\Http\\Authenticator\\Passport\\Badge\\UserBadge', 'MAX_USERNAME_LENGTH')]); - $rectorConfig->rule(ParamConverterAttributeToMapEntityAttributeRector::class); - // @see https://github.com/symfony/symfony/pull/47068 - $rectorConfig->rule(MessageHandlerInterfaceToAttributeRector::class); - $rectorConfig->rule(MessageSubscriberInterfaceToAttributeRector::class); - // @see https://github.com/symfony/symfony/pull/47363 - $rectorConfig->rule(ArgumentValueResolverToValueResolverRector::class); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony63.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony63.php index ba1a4eada..4eacff3d2 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony63.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony63.php @@ -1,10 +1,11 @@ 'Symfony\\Component\\Messenger\\Transport\\InMemory\\InMemoryTransport', 'Symfony\\Component\\Messenger\\Transport\\InMemoryTransportFactory' => 'Symfony\\Component\\Messenger\\Transport\\InMemory\\InMemoryTransportFactory', ]); - // @see https://github.com/symfony/symfony/commit/1650e3861b5fcd931e5d3eb1dd84bad764020d8e - $rectorConfig->rule(SignalableCommandInterfaceReturnTypeRector::class); + $rectorConfig->rules([ + // @see https://github.com/symfony/symfony/commit/1650e3861b5fcd931e5d3eb1dd84bad764020d8e + SignalableCommandInterfaceReturnTypeRector::class, + // @see https://symfony.com/blog/new-in-symfony-6-3-dependency-injection-improvements#new-options-for-autowire-attribute + ParamAndEnvAttributeRector::class, + ]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony64.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony64.php index 865d3cb5d..abf709a71 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony64.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony64.php @@ -1,13 +1,18 @@ ruleWithConfiguration(RenameClassRector::class, ['Symfony\\Component\\HttpKernel\\UriSigner' => 'Symfony\\Component\\HttpFoundation\\UriSigner', 'Symfony\\Component\\HttpKernel\\Debug\\FileLinkFormatter' => 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\FileLinkFormatter']); - $rectorConfig->rule(ChangeRouteAttributeFromAnnotationSubnamespaceRector::class); + $rectorConfig->ruleWithConfiguration(RenameAttributeRector::class, [new RenameAttribute('Symfony\\Component\\Routing\\Annotation\\Route', 'Symfony\\Component\\Routing\\Attribute\\Route')]); + $rectorConfig->ruleWithConfiguration(AddReturnTypeDeclarationRector::class, [new AddReturnTypeDeclaration('Symfony\\Component\\Form\\DataTransformerInterface', 'transform', new MixedType()), new AddReturnTypeDeclaration('Symfony\\Component\\Form\\DataTransformerInterface', 'reverseTransform', new MixedType())]); }; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony70.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony70.php new file mode 100644 index 000000000..b32245a6a --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony70.php @@ -0,0 +1,30 @@ +ruleWithConfiguration(RenameAttributeRector::class, [new RenameAttribute('Symfony\\Component\\DependencyInjection\\Attribute\\MapDecorated', 'Symfony\\Component\\DependencyInjection\\Attribute\\AutowireDecorated')]); + $rectorConfig->ruleWithConfiguration(RenameClassRector::class, [ + // @see https://github.com/symfony/symfony/blob/7.0/UPGRADE-7.0.md#frameworkbundle + 'Symfony\\Component\\Serializer\\Normalizer\\ObjectNormalizer' => 'Symfony\\Component\\Serializer\\Normalizer\\NormalizerInterface', + 'Symfony\\Component\\Serializer\\Normalizer\\PropertyNormalizer' => 'Symfony\\Component\\Serializer\\Normalizer\\NormalizerInterface', + // @see https://github.com/symfony/symfony/blob/7.0/UPGRADE-7.0.md#httpfoundation + 'Symfony\\Component\\HttpFoundation\\RequestMatcher' => 'Symfony\\Component\\HttpFoundation\\ChainRequestMatcher', + 'Symfony\\Component\\HttpFoundation\\ExpressionRequestMatcher' => 'Symfony\\Component\\HttpFoundation\\RequestMatcher\\ExpressionRequestMatcher', + ]); + // @see https://github.com/symfony/symfony/pull/50826 + $rectorConfig->ruleWithConfiguration(RenameMethodRector::class, [new MethodCallRename('Symfony\\Component\\HttpFoundation\\Request', 'getContentType', 'getContentTypeFormat')]); + // the "@required" was dropped, use attribute instead + $rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [new AnnotationToAttribute('required', 'Symfony\\Contracts\\Service\\Attribute\\Required')]); +}; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony71.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony71.php new file mode 100644 index 000000000..6bf57857d --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/symfony/symfony71.php @@ -0,0 +1,15 @@ +withConfiguredRule(RenameAttributeRector::class, [new RenameAttribute('Symfony\\Component\\DependencyInjection\\Attribute\\TaggedIterator', 'Symfony\\Component\\DependencyInjection\\Attribute\\AutowireIterator'), new RenameAttribute('Symfony\\Component\\DependencyInjection\\Attribute\\TaggedLocator', 'Symfony\\Component\\DependencyInjection\\Attribute\\AutowireLocator')])->withConfiguredRule(RenameMethodRector::class, [ + // typo fix + new MethodCallRename('̈́Symfony\\Component\\Serializer\\Context\\Normalizer\\AbstractNormalizerContextBuilder', 'withDefaultContructorArguments', 'withDefaultConstructorArguments'), +]); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig-underscore-to-namespace.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig-underscore-to-namespace.php index 0b6489d8c..ad99f00e3 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig-underscore-to-namespace.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig-underscore-to-namespace.php @@ -1,11 +1,194 @@ withConfiguredRule(RenameClassRector::class, [ // @see https://github.com/twigphp/Twig/pull/2862/files - $rectorConfig->ruleWithConfiguration(RenameClassRector::class, ['Twig_LoaderInterface' => 'Twig\\Loader\\LoaderInterface', 'Twig_Extension_StringLoader' => 'Twig\\Extension\\StringLoaderExtension', 'Twig_Extension_Optimizer' => 'Twig\\Extension\\OptimizerExtension', 'Twig_Extension_Debug' => 'Twig\\Extension\\DebugExtension', 'Twig_Extension_Sandbox' => 'Twig\\Extension\\SandboxExtension', 'Twig_Extension_Profiler' => 'Twig\\Extension\\ProfilerExtension', 'Twig_Extension_Escaper' => 'Twig\\Extension\\EscaperExtension', 'Twig_Extension_Staging' => 'Twig\\Extension\\StagingExtension', 'Twig_Extension_Core' => 'Twig\\Extension\\CoreExtension', 'Twig_Node' => 'Twig\\Node\\Node', 'Twig_NodeVisitor_Optimizer' => 'Twig\\NodeVisitor\\OptimizerNodeVisitor', 'Twig_NodeVisitor_SafeAnalysis' => 'Twig\\NodeVisitor\\SafeAnalysisNodeVisitor', 'Twig_NodeVisitor_Sandbox' => 'Twig\\NodeVisitor\\SandboxNodeVisitor', 'Twig_NodeVisitor_Escaper' => 'Twig\\NodeVisitor\\EscaperNodeVisitor', 'Twig_SimpleFunction' => 'Twig\\TwigFunction', 'Twig_Function' => 'Twig\\TwigFunction', 'Twig_Error_Syntax' => 'Twig\\Error\\SyntaxError', 'Twig_Error_Loader' => 'Twig\\Error\\LoaderError', 'Twig_Error_Runtime' => 'Twig\\Error\\RuntimeError', 'Twig_TokenParser' => 'Twig\\TokenParser\\AbstractTokenParser', 'Twig_TokenParserInterface' => 'Twig\\TokenParser\\TokenParserInterface', 'Twig_CacheInterface' => 'Twig\\Cache\\CacheInterface', 'Twig_NodeVisitorInterface' => 'Twig\\NodeVisitor\\NodeVisitorInterface', 'Twig_Profiler_NodeVisitor_Profiler' => 'Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor', 'Twig_Profiler_Dumper_Text' => 'Twig\\Profiler\\Dumper\\TextDumper', 'Twig_Profiler_Dumper_Base' => 'Twig\\Profiler\\Dumper\\BaseDumper', 'Twig_Profiler_Dumper_Blackfire' => 'Twig\\Profiler\\Dumper\\BlackfireDumper', 'Twig_Profiler_Dumper_Html' => 'Twig\\Profiler\\Dumper\\HtmlDumper', 'Twig_Profiler_Node_LeaveProfile' => 'Twig\\Profiler\\Node\\LeaveProfileNode', 'Twig_Profiler_Node_EnterProfile' => 'Twig\\Profiler\\Node\\EnterProfileNode', 'Twig_Error' => 'Twig\\Error\\Error', 'Twig_ExistsLoaderInterface' => 'Twig\\Loader\\ExistsLoaderInterface', 'Twig_SimpleTest' => 'Twig\\TwigTest', 'Twig_Test' => 'Twig\\TwigTest', 'Twig_FactoryRuntimeLoader' => 'Twig\\RuntimeLoader\\FactoryRuntimeLoader', 'Twig_NodeOutputInterface' => 'Twig\\Node\\NodeOutputInterface', 'Twig_SimpleFilter' => 'Twig\\TwigFilter', 'Twig_Filter' => 'Twig\\TwigFilter', 'Twig_Loader_Chain' => 'Twig\\Loader\\ChainLoader', 'Twig_Loader_Array' => 'Twig\\Loader\\ArrayLoader', 'Twig_Loader_Filesystem' => 'Twig\\Loader\\FilesystemLoader', 'Twig_Cache_Null' => 'Twig\\Cache\\NullCache', 'Twig_Cache_Filesystem' => 'Twig\\Cache\\FilesystemCache', 'Twig_NodeCaptureInterface' => 'Twig\\Node\\NodeCaptureInterface', 'Twig_Extension' => 'Twig\\Extension\\AbstractExtension', 'Twig_TokenParser_Macro' => 'Twig\\TokenParser\\MacroTokenParser', 'Twig_TokenParser_Embed' => 'Twig\\TokenParser\\EmbedTokenParser', 'Twig_TokenParser_Do' => 'Twig\\TokenParser\\DoTokenParser', 'Twig_TokenParser_From' => 'Twig\\TokenParser\\FromTokenParser', 'Twig_TokenParser_Extends' => 'Twig\\TokenParser\\ExtendsTokenParser', 'Twig_TokenParser_Set' => 'Twig\\TokenParser\\SetTokenParser', 'Twig_TokenParser_Sandbox' => 'Twig\\TokenParser\\SandboxTokenParser', 'Twig_TokenParser_AutoEscape' => 'Twig\\TokenParser\\AutoEscapeTokenParser', 'Twig_TokenParser_With' => 'Twig\\TokenParser\\WithTokenParser', 'Twig_TokenParser_Include' => 'Twig\\TokenParser\\IncludeTokenParser', 'Twig_TokenParser_Block' => 'Twig\\TokenParser\\BlockTokenParser', 'Twig_TokenParser_Filter' => 'Twig\\TokenParser\\FilterTokenParser', 'Twig_TokenParser_If' => 'Twig\\TokenParser\\IfTokenParser', 'Twig_TokenParser_For' => 'Twig\\TokenParser\\ForTokenParser', 'Twig_TokenParser_Flush' => 'Twig\\TokenParser\\FlushTokenParser', 'Twig_TokenParser_Spaceless' => 'Twig\\TokenParser\\SpacelessTokenParser', 'Twig_TokenParser_Use' => 'Twig\\TokenParser\\UseTokenParser', 'Twig_TokenParser_Import' => 'Twig\\TokenParser\\ImportTokenParser', 'Twig_ContainerRuntimeLoader' => 'Twig\\RuntimeLoader\\ContainerRuntimeLoader', 'Twig_SourceContextLoaderInterface' => 'Twig\\Loader\\SourceContextLoaderInterface', 'Twig_NodeTraverser' => 'Twig\\NodeTraverser', 'Twig_ExtensionInterface' => 'Twig\\Extension\\ExtensionInterface', 'Twig_Node_Macro' => 'Twig\\Node\\MacroNode', 'Twig_Node_Embed' => 'Twig\\Node\\EmbedNode', 'Twig_Node_Do' => 'Twig\\Node\\DoNode', 'Twig_Node_Text' => 'Twig\\Node\\TextNode', 'Twig_Node_Set' => 'Twig\\Node\\SetNode', 'Twig_Node_Sandbox' => 'Twig\\Node\\SandboxNode', 'Twig_Node_AutoEscape' => 'Twig\\Node\\AutoEscapeNode', 'Twig_Node_With' => 'Twig\\Node\\WithNode', 'Twig_Node_Include' => 'Twig\\Node\\IncludeNode', 'Twig_Node_Print' => 'Twig\\Node\\PrintNode', 'Twig_Node_Block' => 'Twig\\Node\\BlockNode', 'Twig_Node_Expression_MethodCall' => 'Twig\\Node\\Expression\\MethodCallExpression', 'Twig_Node_Expression_Unary_Pos' => 'Twig\\Node\\Expression\\Unary\\PosUnary', 'Twig_Node_Expression_Unary_Not' => 'Twig\\Node\\Expression\\Unary\\NotUnary', 'Twig_Node_Expression_Unary_Neg' => 'Twig\\Node\\Expression\\Unary\\NegUnary', 'Twig_Node_Expression_GetAttr' => 'Twig\\Node\\Expression\\GetAttrExpression', 'Twig_Node_Expression_Function' => 'Twig\\Node\\Expression\\FunctionExpression', 'Twig_Node_Expression_Binary_Power' => 'Twig\\Node\\Expression\\Binary\\PowerBinary', 'Twig_Node_Expression_Binary_In' => 'Twig\\Node\\Expression\\Binary\\InBinary', 'Twig_Node_Expression_Binary_BitwiseXor' => 'Twig\\Node\\Expression\\Binary\\BitwiseXorBinary', 'Twig_Node_Expression_Binary_Concat' => 'Twig\\Node\\Expression\\Binary\\ConcatBinary', 'Twig_Node_Expression_Binary_NotEqual' => 'Twig\\Node\\Expression\\Binary\\NotEqualBinary', 'Twig_Node_Expression_Binary_Less' => 'Twig\\Node\\Expression\\Binary\\LessBinary', 'Twig_Node_Expression_Binary_And' => 'Twig\\Node\\Expression\\Binary\\AndBinary', 'Twig_Node_Expression_Binary_GreaterEqual' => 'Twig\\Node\\Expression\\Binary\\GreaterEqualBinary', 'Twig_Node_Expression_Binary_Mod' => 'Twig\\Node\\Expression\\Binary\\ModBinary', 'Twig_Node_Expression_Binary_NotIn' => 'Twig\\Node\\Expression\\Binary\\NotInBinary', 'Twig_Node_Expression_Binary_Add' => 'Twig\\Node\\Expression\\Binary\\AddBinary', 'Twig_Node_Expression_Binary_Matches' => 'Twig\\Node\\Expression\\Binary\\MatchesBinary', 'Twig_Node_Expression_Binary_EndsWith' => 'Twig\\Node\\Expression\\Binary\\EndsWithBinary', 'Twig_Node_Expression_Binary_FloorDiv' => 'Twig\\Node\\Expression\\Binary\\FloorDivBinary', 'Twig_Node_Expression_Binary_StartsWith' => 'Twig\\Node\\Expression\\Binary\\StartsWithBinary', 'Twig_Node_Expression_Binary_LessEqual' => 'Twig\\Node\\Expression\\Binary\\LessEqualBinary', 'Twig_Node_Expression_Binary_Equal' => 'Twig\\Node\\Expression\\Binary\\EqualBinary', 'Twig_Node_Expression_Binary_BitwiseAnd' => 'Twig\\Node\\Expression\\Binary\\BitwiseAndBinary', 'Twig_Node_Expression_Binary_Mul' => 'Twig\\Node\\Expression\\Binary\\MulBinary', 'Twig_Node_Expression_Binary_Range' => 'Twig\\Node\\Expression\\Binary\\RangeBinary', 'Twig_Node_Expression_Binary_Or' => 'Twig\\Node\\Expression\\Binary\\OrBinary', 'Twig_Node_Expression_Binary_Greater' => 'Twig\\Node\\Expression\\Binary\\GreaterBinary', 'Twig_Node_Expression_Binary_Div' => 'Twig\\Node\\Expression\\Binary\\DivBinary', 'Twig_Node_Expression_Binary_BitwiseOr' => 'Twig\\Node\\Expression\\Binary\\BitwiseOrBinary', 'Twig_Node_Expression_Binary_Sub' => 'Twig\\Node\\Expression\\Binary\\SubBinary', 'Twig_Node_Expression_Test_Even' => 'Twig\\Node\\Expression\\Test\\EvenTest', 'Twig_Node_Expression_Test_Defined' => 'Twig\\Node\\Expression\\Test\\DefinedTest', 'Twig_Node_Expression_Test_Sameas' => 'Twig\\Node\\Expression\\Test\\SameasTest', 'Twig_Node_Expression_Test_Odd' => 'Twig\\Node\\Expression\\Test\\OddTest', 'Twig_Node_Expression_Test_Constant' => 'Twig\\Node\\Expression\\Test\\ConstantTest', 'Twig_Node_Expression_Test_Null' => 'Twig\\Node\\Expression\\Test\\NullTest', 'Twig_Node_Expression_Test_Divisibleby' => 'Twig\\Node\\Expression\\Test\\DivisiblebyTest', 'Twig_Node_Expression_Array' => 'Twig\\Node\\Expression\\ArrayExpression', 'Twig_Node_Expression_Binary' => 'Twig\\Node\\Expression\\Binary\\AbstractBinary', 'Twig_Node_Expression_Constant' => 'Twig\\Node\\Expression\\ConstantExpression', 'Twig_Node_Expression_Parent' => 'Twig\\Node\\Expression\\ParentExpression', 'Twig_Node_Expression_Test' => 'Twig\\Node\\Expression\\TestExpression', 'Twig_Node_Expression_Filter_Default' => 'Twig\\Node\\Expression\\Filter\\DefaultFilter', 'Twig_Node_Expression_Filter' => 'Twig\\Node\\Expression\\FilterExpression', 'Twig_Node_Expression_BlockReference' => 'Twig\\Node\\Expression\\BlockReferenceExpression', 'Twig_Node_Expression_NullCoalesce' => 'Twig\\Node\\Expression\\NullCoalesceExpression', 'Twig_Node_Expression_Name' => 'Twig\\Node\\Expression\\NameExpression', 'Twig_Node_Expression_TempName' => 'Twig\\Node\\Expression\\TempNameExpression', 'Twig_Node_Expression_Call' => 'Twig\\Node\\Expression\\CallExpression', 'Twig_Node_Expression_Unary' => 'Twig\\Node\\Expression\\Unary\\AbstractUnary', 'Twig_Node_Expression_AssignName' => 'Twig\\Node\\Expression\\AssignNameExpression', 'Twig_Node_Expression_Conditional' => 'Twig\\Node\\Expression\\ConditionalExpression', 'Twig_Node_CheckSecurity' => 'Twig\\Node\\CheckSecurityNode', 'Twig_Node_Expression' => 'Twig\\Node\\Expression\\AbstractExpression', 'Twig_Node_ForLoop' => 'Twig\\Node\\ForLoopNode', 'Twig_Node_If' => 'Twig\\Node\\IfNode', 'Twig_Node_For' => 'Twig\\Node\\ForNode', 'Twig_Node_BlockReference' => 'Twig\\Node\\BlockReferenceNode', 'Twig_Node_Flush' => 'Twig\\Node\\FlushNode', 'Twig_Node_Body' => 'Twig\\Node\\BodyNode', 'Twig_Node_Spaceless' => 'Twig\\Node\\SpacelessNode', 'Twig_Node_Import' => 'Twig\\Node\\ImportNode', 'Twig_Node_SandboxedPrint' => 'Twig\\Node\\SandboxedPrintNode', 'Twig_Node_Module' => 'Twig\\Node\\ModuleNode', 'Twig_RuntimeLoaderInterface' => 'Twig\\RuntimeLoader\\RuntimeLoaderInterface', 'Twig_BaseNodeVisitor' => 'Twig\\NodeVisitor\\AbstractNodeVisitor', 'Twig_Extensions_Extension_Text' => 'Twig\\Extensions\\TextExtension', 'Twig_Extensions_Extension_Array' => 'Twig\\Extensions\\ArrayExtension', 'Twig_Extensions_Extension_Date' => 'Twig\\Extensions\\DateExtension', 'Twig_Extensions_Extension_I18n' => 'Twig\\Extensions\\I18nExtension', 'Twig_Extensions_Extension_Intl' => 'Twig\\Extensions\\IntlExtension', 'Twig_Extensions_TokenParser_Trans' => 'Twig\\Extensions\\TokenParser\\TransTokenParser', 'Twig_Extensions_Node_Trans' => 'Twig\\Extensions\\Node\\TransNode', 'Twig_TemplateWrapper' => 'Twig\\TemplateWrapper', 'Twig_NodeInterface' => 'Twig\\Node\\Node', 'Twig_Compiler' => 'Twig\\Compiler', 'Twig_Environment' => 'Twig\\Environment', 'Twig_ExpressionParser' => 'Twig\\ExpressionParser', 'Twig_FileExtensionEscapingStrategy' => 'Twig\\FileExtensionEscapingStrategy', 'Twig_Lexer' => 'Twig\\Lexer', 'Twig_Markup' => 'Twig\\Markup', 'Twig_Parser' => 'Twig\\Parser', 'Twig_Source' => 'Twig\\Source', 'Twig_Template' => 'Twig\\Template', 'Twig_Token' => 'Twig\\Token', 'Twig_TokenStream' => 'Twig\\TokenStream', 'Twig_Extension_GlobalsInterface' => 'Twig\\Extension\\GlobalsInterface', 'Twig_Extension_InitRuntimeInterface' => 'Twig\\Extension\\InitRuntimeInterface', 'Twig_Node_Deprecated' => 'Twig\\Node\\DeprecatedNode', 'Twig_Node_SetTemp' => 'Twig\\Node\\SetTempNode', 'Twig_Profiler_Profile' => 'Twig\\Profiler\\Profile', 'Twig_Sandbox_SecurityError' => 'Twig\\Sandbox\\SecurityError', 'Twig_Sandbox_SecurityNotAllowedFilterError' => 'Twig\\Sandbox\\SecurityNotAllowedFilterError', 'Twig_Sandbox_SecurityNotAllowedFunctionError' => 'Twig\\Sandbox\\SecurityNotAllowedFunctionError', 'Twig_Sandbox_SecurityNotAllowedMethodError' => 'Twig\\Sandbox\\SecurityNotAllowedMethodError', 'Twig_Sandbox_SecurityNotAllowedPropertyError' => 'Twig\\Sandbox\\SecurityNotAllowedPropertyError', 'Twig_Sandbox_SecurityNotAllowedTagError' => 'Twig\\Sandbox\\SecurityNotAllowedTagError', 'Twig_Sandbox_SecurityPolicy' => 'Twig\\Sandbox\\SecurityPolicy', 'Twig_Sandbox_SecurityPolicyInterface' => 'Twig\\Sandbox\\SecurityPolicyInterface', 'Twig_Test_IntegrationTestCase' => 'Twig\\Test\\IntegrationTestCase', 'Twig_Test_NodeTestCase' => 'Twig\\Test\\NodeTestCase', 'Twig_TokenParser_Deprecated' => 'Twig\\TokenParser\\DeprecatedTokenParser', 'Twig_Util_DeprecationCollector' => 'Twig\\Util\\DeprecationCollector', 'Twig_Util_TemplateDirIterator' => 'Twig\\Util\\TemplateDirIterator', 'Twig_Tests_EnvironmentTest_Extension' => 'Twig\\Tests\\EnvironmentTest\\Extensio']); -}; + 'Twig_LoaderInterface' => 'Twig\\Loader\\LoaderInterface', + 'Twig_Extension_StringLoader' => 'Twig\\Extension\\StringLoaderExtension', + 'Twig_Extension_Optimizer' => 'Twig\\Extension\\OptimizerExtension', + 'Twig_Extension_Debug' => 'Twig\\Extension\\DebugExtension', + 'Twig_Extension_Sandbox' => 'Twig\\Extension\\SandboxExtension', + 'Twig_Extension_Profiler' => 'Twig\\Extension\\ProfilerExtension', + 'Twig_Extension_Escaper' => 'Twig\\Extension\\EscaperExtension', + 'Twig_Extension_Staging' => 'Twig\\Extension\\StagingExtension', + 'Twig_Extension_Core' => 'Twig\\Extension\\CoreExtension', + 'Twig_Node' => 'Twig\\Node\\Node', + 'Twig_NodeVisitor_Optimizer' => 'Twig\\NodeVisitor\\OptimizerNodeVisitor', + 'Twig_NodeVisitor_SafeAnalysis' => 'Twig\\NodeVisitor\\SafeAnalysisNodeVisitor', + 'Twig_NodeVisitor_Sandbox' => 'Twig\\NodeVisitor\\SandboxNodeVisitor', + 'Twig_NodeVisitor_Escaper' => 'Twig\\NodeVisitor\\EscaperNodeVisitor', + 'Twig_SimpleFunction' => 'Twig\\TwigFunction', + 'Twig_Function' => 'Twig\\TwigFunction', + 'Twig_Error_Syntax' => 'Twig\\Error\\SyntaxError', + 'Twig_Error_Loader' => 'Twig\\Error\\LoaderError', + 'Twig_Error_Runtime' => 'Twig\\Error\\RuntimeError', + 'Twig_TokenParser' => 'Twig\\TokenParser\\AbstractTokenParser', + 'Twig_TokenParserInterface' => 'Twig\\TokenParser\\TokenParserInterface', + 'Twig_CacheInterface' => 'Twig\\Cache\\CacheInterface', + 'Twig_NodeVisitorInterface' => 'Twig\\NodeVisitor\\NodeVisitorInterface', + 'Twig_Profiler_NodeVisitor_Profiler' => 'Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor', + 'Twig_Profiler_Dumper_Text' => 'Twig\\Profiler\\Dumper\\TextDumper', + 'Twig_Profiler_Dumper_Base' => 'Twig\\Profiler\\Dumper\\BaseDumper', + 'Twig_Profiler_Dumper_Blackfire' => 'Twig\\Profiler\\Dumper\\BlackfireDumper', + 'Twig_Profiler_Dumper_Html' => 'Twig\\Profiler\\Dumper\\HtmlDumper', + 'Twig_Profiler_Node_LeaveProfile' => 'Twig\\Profiler\\Node\\LeaveProfileNode', + 'Twig_Profiler_Node_EnterProfile' => 'Twig\\Profiler\\Node\\EnterProfileNode', + 'Twig_Error' => 'Twig\\Error\\Error', + 'Twig_ExistsLoaderInterface' => 'Twig\\Loader\\ExistsLoaderInterface', + 'Twig_SimpleTest' => 'Twig\\TwigTest', + 'Twig_Test' => 'Twig\\TwigTest', + 'Twig_FactoryRuntimeLoader' => 'Twig\\RuntimeLoader\\FactoryRuntimeLoader', + 'Twig_NodeOutputInterface' => 'Twig\\Node\\NodeOutputInterface', + 'Twig_SimpleFilter' => 'Twig\\TwigFilter', + 'Twig_Filter' => 'Twig\\TwigFilter', + 'Twig_Loader_Chain' => 'Twig\\Loader\\ChainLoader', + 'Twig_Loader_Array' => 'Twig\\Loader\\ArrayLoader', + 'Twig_Loader_Filesystem' => 'Twig\\Loader\\FilesystemLoader', + 'Twig_Cache_Null' => 'Twig\\Cache\\NullCache', + 'Twig_Cache_Filesystem' => 'Twig\\Cache\\FilesystemCache', + 'Twig_NodeCaptureInterface' => 'Twig\\Node\\NodeCaptureInterface', + 'Twig_Extension' => 'Twig\\Extension\\AbstractExtension', + 'Twig_TokenParser_Macro' => 'Twig\\TokenParser\\MacroTokenParser', + 'Twig_TokenParser_Embed' => 'Twig\\TokenParser\\EmbedTokenParser', + 'Twig_TokenParser_Do' => 'Twig\\TokenParser\\DoTokenParser', + 'Twig_TokenParser_From' => 'Twig\\TokenParser\\FromTokenParser', + 'Twig_TokenParser_Extends' => 'Twig\\TokenParser\\ExtendsTokenParser', + 'Twig_TokenParser_Set' => 'Twig\\TokenParser\\SetTokenParser', + 'Twig_TokenParser_Sandbox' => 'Twig\\TokenParser\\SandboxTokenParser', + 'Twig_TokenParser_AutoEscape' => 'Twig\\TokenParser\\AutoEscapeTokenParser', + 'Twig_TokenParser_With' => 'Twig\\TokenParser\\WithTokenParser', + 'Twig_TokenParser_Include' => 'Twig\\TokenParser\\IncludeTokenParser', + 'Twig_TokenParser_Block' => 'Twig\\TokenParser\\BlockTokenParser', + 'Twig_TokenParser_Filter' => 'Twig\\TokenParser\\FilterTokenParser', + 'Twig_TokenParser_If' => 'Twig\\TokenParser\\IfTokenParser', + 'Twig_TokenParser_For' => 'Twig\\TokenParser\\ForTokenParser', + 'Twig_TokenParser_Flush' => 'Twig\\TokenParser\\FlushTokenParser', + 'Twig_TokenParser_Spaceless' => 'Twig\\TokenParser\\SpacelessTokenParser', + 'Twig_TokenParser_Use' => 'Twig\\TokenParser\\UseTokenParser', + 'Twig_TokenParser_Import' => 'Twig\\TokenParser\\ImportTokenParser', + 'Twig_ContainerRuntimeLoader' => 'Twig\\RuntimeLoader\\ContainerRuntimeLoader', + 'Twig_SourceContextLoaderInterface' => 'Twig\\Loader\\SourceContextLoaderInterface', + 'Twig_NodeTraverser' => 'Twig\\NodeTraverser', + 'Twig_ExtensionInterface' => 'Twig\\Extension\\ExtensionInterface', + 'Twig_Node_Macro' => 'Twig\\Node\\MacroNode', + 'Twig_Node_Embed' => 'Twig\\Node\\EmbedNode', + 'Twig_Node_Do' => 'Twig\\Node\\DoNode', + 'Twig_Node_Text' => 'Twig\\Node\\TextNode', + 'Twig_Node_Set' => 'Twig\\Node\\SetNode', + 'Twig_Node_Sandbox' => 'Twig\\Node\\SandboxNode', + 'Twig_Node_AutoEscape' => 'Twig\\Node\\AutoEscapeNode', + 'Twig_Node_With' => 'Twig\\Node\\WithNode', + 'Twig_Node_Include' => 'Twig\\Node\\IncludeNode', + 'Twig_Node_Print' => 'Twig\\Node\\PrintNode', + 'Twig_Node_Block' => 'Twig\\Node\\BlockNode', + 'Twig_Node_Expression_MethodCall' => 'Twig\\Node\\Expression\\MethodCallExpression', + 'Twig_Node_Expression_Unary_Pos' => 'Twig\\Node\\Expression\\Unary\\PosUnary', + 'Twig_Node_Expression_Unary_Not' => 'Twig\\Node\\Expression\\Unary\\NotUnary', + 'Twig_Node_Expression_Unary_Neg' => 'Twig\\Node\\Expression\\Unary\\NegUnary', + 'Twig_Node_Expression_GetAttr' => 'Twig\\Node\\Expression\\GetAttrExpression', + 'Twig_Node_Expression_Function' => 'Twig\\Node\\Expression\\FunctionExpression', + 'Twig_Node_Expression_Binary_Power' => 'Twig\\Node\\Expression\\Binary\\PowerBinary', + 'Twig_Node_Expression_Binary_In' => 'Twig\\Node\\Expression\\Binary\\InBinary', + 'Twig_Node_Expression_Binary_BitwiseXor' => 'Twig\\Node\\Expression\\Binary\\BitwiseXorBinary', + 'Twig_Node_Expression_Binary_Concat' => 'Twig\\Node\\Expression\\Binary\\ConcatBinary', + 'Twig_Node_Expression_Binary_NotEqual' => 'Twig\\Node\\Expression\\Binary\\NotEqualBinary', + 'Twig_Node_Expression_Binary_Less' => 'Twig\\Node\\Expression\\Binary\\LessBinary', + 'Twig_Node_Expression_Binary_And' => 'Twig\\Node\\Expression\\Binary\\AndBinary', + 'Twig_Node_Expression_Binary_GreaterEqual' => 'Twig\\Node\\Expression\\Binary\\GreaterEqualBinary', + 'Twig_Node_Expression_Binary_Mod' => 'Twig\\Node\\Expression\\Binary\\ModBinary', + 'Twig_Node_Expression_Binary_NotIn' => 'Twig\\Node\\Expression\\Binary\\NotInBinary', + 'Twig_Node_Expression_Binary_Add' => 'Twig\\Node\\Expression\\Binary\\AddBinary', + 'Twig_Node_Expression_Binary_Matches' => 'Twig\\Node\\Expression\\Binary\\MatchesBinary', + 'Twig_Node_Expression_Binary_EndsWith' => 'Twig\\Node\\Expression\\Binary\\EndsWithBinary', + 'Twig_Node_Expression_Binary_FloorDiv' => 'Twig\\Node\\Expression\\Binary\\FloorDivBinary', + 'Twig_Node_Expression_Binary_StartsWith' => 'Twig\\Node\\Expression\\Binary\\StartsWithBinary', + 'Twig_Node_Expression_Binary_LessEqual' => 'Twig\\Node\\Expression\\Binary\\LessEqualBinary', + 'Twig_Node_Expression_Binary_Equal' => 'Twig\\Node\\Expression\\Binary\\EqualBinary', + 'Twig_Node_Expression_Binary_BitwiseAnd' => 'Twig\\Node\\Expression\\Binary\\BitwiseAndBinary', + 'Twig_Node_Expression_Binary_Mul' => 'Twig\\Node\\Expression\\Binary\\MulBinary', + 'Twig_Node_Expression_Binary_Range' => 'Twig\\Node\\Expression\\Binary\\RangeBinary', + 'Twig_Node_Expression_Binary_Or' => 'Twig\\Node\\Expression\\Binary\\OrBinary', + 'Twig_Node_Expression_Binary_Greater' => 'Twig\\Node\\Expression\\Binary\\GreaterBinary', + 'Twig_Node_Expression_Binary_Div' => 'Twig\\Node\\Expression\\Binary\\DivBinary', + 'Twig_Node_Expression_Binary_BitwiseOr' => 'Twig\\Node\\Expression\\Binary\\BitwiseOrBinary', + 'Twig_Node_Expression_Binary_Sub' => 'Twig\\Node\\Expression\\Binary\\SubBinary', + 'Twig_Node_Expression_Test_Even' => 'Twig\\Node\\Expression\\Test\\EvenTest', + 'Twig_Node_Expression_Test_Defined' => 'Twig\\Node\\Expression\\Test\\DefinedTest', + 'Twig_Node_Expression_Test_Sameas' => 'Twig\\Node\\Expression\\Test\\SameasTest', + 'Twig_Node_Expression_Test_Odd' => 'Twig\\Node\\Expression\\Test\\OddTest', + 'Twig_Node_Expression_Test_Constant' => 'Twig\\Node\\Expression\\Test\\ConstantTest', + 'Twig_Node_Expression_Test_Null' => 'Twig\\Node\\Expression\\Test\\NullTest', + 'Twig_Node_Expression_Test_Divisibleby' => 'Twig\\Node\\Expression\\Test\\DivisiblebyTest', + 'Twig_Node_Expression_Array' => 'Twig\\Node\\Expression\\ArrayExpression', + 'Twig_Node_Expression_Binary' => 'Twig\\Node\\Expression\\Binary\\AbstractBinary', + 'Twig_Node_Expression_Constant' => 'Twig\\Node\\Expression\\ConstantExpression', + 'Twig_Node_Expression_Parent' => 'Twig\\Node\\Expression\\ParentExpression', + 'Twig_Node_Expression_Test' => 'Twig\\Node\\Expression\\TestExpression', + 'Twig_Node_Expression_Filter_Default' => 'Twig\\Node\\Expression\\Filter\\DefaultFilter', + 'Twig_Node_Expression_Filter' => 'Twig\\Node\\Expression\\FilterExpression', + 'Twig_Node_Expression_BlockReference' => 'Twig\\Node\\Expression\\BlockReferenceExpression', + 'Twig_Node_Expression_NullCoalesce' => 'Twig\\Node\\Expression\\NullCoalesceExpression', + 'Twig_Node_Expression_Name' => 'Twig\\Node\\Expression\\NameExpression', + 'Twig_Node_Expression_TempName' => 'Twig\\Node\\Expression\\TempNameExpression', + 'Twig_Node_Expression_Call' => 'Twig\\Node\\Expression\\CallExpression', + 'Twig_Node_Expression_Unary' => 'Twig\\Node\\Expression\\Unary\\AbstractUnary', + 'Twig_Node_Expression_AssignName' => 'Twig\\Node\\Expression\\AssignNameExpression', + 'Twig_Node_Expression_Conditional' => 'Twig\\Node\\Expression\\ConditionalExpression', + 'Twig_Node_CheckSecurity' => 'Twig\\Node\\CheckSecurityNode', + 'Twig_Node_Expression' => 'Twig\\Node\\Expression\\AbstractExpression', + 'Twig_Node_ForLoop' => 'Twig\\Node\\ForLoopNode', + 'Twig_Node_If' => 'Twig\\Node\\IfNode', + 'Twig_Node_For' => 'Twig\\Node\\ForNode', + 'Twig_Node_BlockReference' => 'Twig\\Node\\BlockReferenceNode', + 'Twig_Node_Flush' => 'Twig\\Node\\FlushNode', + 'Twig_Node_Body' => 'Twig\\Node\\BodyNode', + 'Twig_Node_Spaceless' => 'Twig\\Node\\SpacelessNode', + 'Twig_Node_Import' => 'Twig\\Node\\ImportNode', + 'Twig_Node_SandboxedPrint' => 'Twig\\Node\\SandboxedPrintNode', + 'Twig_Node_Module' => 'Twig\\Node\\ModuleNode', + 'Twig_RuntimeLoaderInterface' => 'Twig\\RuntimeLoader\\RuntimeLoaderInterface', + 'Twig_BaseNodeVisitor' => 'Twig\\NodeVisitor\\AbstractNodeVisitor', + 'Twig_Extensions_Extension_Text' => 'Twig\\Extensions\\TextExtension', + 'Twig_Extensions_Extension_Array' => 'Twig\\Extensions\\ArrayExtension', + 'Twig_Extensions_Extension_Date' => 'Twig\\Extensions\\DateExtension', + 'Twig_Extensions_Extension_I18n' => 'Twig\\Extensions\\I18nExtension', + 'Twig_Extensions_Extension_Intl' => 'Twig\\Extensions\\IntlExtension', + 'Twig_Extensions_TokenParser_Trans' => 'Twig\\Extensions\\TokenParser\\TransTokenParser', + 'Twig_Extensions_Node_Trans' => 'Twig\\Extensions\\Node\\TransNode', + 'Twig_TemplateWrapper' => 'Twig\\TemplateWrapper', + 'Twig_NodeInterface' => 'Twig\\Node\\Node', + 'Twig_Compiler' => 'Twig\\Compiler', + 'Twig_Environment' => 'Twig\\Environment', + 'Twig_ExpressionParser' => 'Twig\\ExpressionParser', + 'Twig_FileExtensionEscapingStrategy' => 'Twig\\FileExtensionEscapingStrategy', + 'Twig_Lexer' => 'Twig\\Lexer', + 'Twig_Markup' => 'Twig\\Markup', + 'Twig_Parser' => 'Twig\\Parser', + 'Twig_Source' => 'Twig\\Source', + 'Twig_Template' => 'Twig\\Template', + 'Twig_Token' => 'Twig\\Token', + 'Twig_TokenStream' => 'Twig\\TokenStream', + 'Twig_Extension_GlobalsInterface' => 'Twig\\Extension\\GlobalsInterface', + 'Twig_Extension_InitRuntimeInterface' => 'Twig\\Extension\\InitRuntimeInterface', + 'Twig_Node_Deprecated' => 'Twig\\Node\\DeprecatedNode', + 'Twig_Node_SetTemp' => 'Twig\\Node\\SetTempNode', + 'Twig_Profiler_Profile' => 'Twig\\Profiler\\Profile', + 'Twig_Sandbox_SecurityError' => 'Twig\\Sandbox\\SecurityError', + 'Twig_Sandbox_SecurityNotAllowedFilterError' => 'Twig\\Sandbox\\SecurityNotAllowedFilterError', + 'Twig_Sandbox_SecurityNotAllowedFunctionError' => 'Twig\\Sandbox\\SecurityNotAllowedFunctionError', + 'Twig_Sandbox_SecurityNotAllowedMethodError' => 'Twig\\Sandbox\\SecurityNotAllowedMethodError', + 'Twig_Sandbox_SecurityNotAllowedPropertyError' => 'Twig\\Sandbox\\SecurityNotAllowedPropertyError', + 'Twig_Sandbox_SecurityNotAllowedTagError' => 'Twig\\Sandbox\\SecurityNotAllowedTagError', + 'Twig_Sandbox_SecurityPolicy' => 'Twig\\Sandbox\\SecurityPolicy', + 'Twig_Sandbox_SecurityPolicyInterface' => 'Twig\\Sandbox\\SecurityPolicyInterface', + 'Twig_Test_IntegrationTestCase' => 'Twig\\Test\\IntegrationTestCase', + 'Twig_Test_NodeTestCase' => 'Twig\\Test\\NodeTestCase', + 'Twig_TokenParser_Deprecated' => 'Twig\\TokenParser\\DeprecatedTokenParser', + 'Twig_Util_DeprecationCollector' => 'Twig\\Util\\DeprecationCollector', + 'Twig_Util_TemplateDirIterator' => 'Twig\\Util\\TemplateDirIterator', + 'Twig_Tests_EnvironmentTest_Extension' => 'Twig\\Tests\\EnvironmentTest\\Extensio', +]); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig112.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig112.php index c9a622f71..7e91e6c7d 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig112.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig112.php @@ -1,11 +1,9 @@ ruleWithConfiguration(RenameClassRector::class, ['Twig_Function_Node' => 'Twig_SimpleFunction', 'Twig_Function' => 'Twig_SimpleFunction', 'Twig_Filter' => 'Twig_SimpleFilter', 'Twig_Test' => 'Twig_SimpleTest']); -}; +return RectorConfig::configure()->withConfiguredRule(RenameClassRector::class, ['Twig_Function_Node' => 'Twig_SimpleFunction', 'Twig_Function' => 'Twig_SimpleFunction', 'Twig_Filter' => 'Twig_SimpleFilter', 'Twig_Test' => 'Twig_SimpleTest']); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig127.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig127.php index c97537613..66d94ea47 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig127.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig127.php @@ -1,11 +1,9 @@ ruleWithConfiguration(RenameMethodRector::class, [new MethodCallRename('Twig_Node', 'getLine', 'getTemplateLine'), new MethodCallRename('Twig_Node', 'getFilename', 'getTemplateName'), new MethodCallRename('Twig_Template', 'getSource', 'getSourceContext'), new MethodCallRename('Twig_Error', 'getTemplateFile', 'getTemplateName'), new MethodCallRename('Twig_Error', 'getTemplateName', 'setTemplateName')]); -}; +return RectorConfig::configure()->withConfiguredRule(RenameMethodRector::class, [new MethodCallRename('Twig_Node', 'getLine', 'getTemplateLine'), new MethodCallRename('Twig_Node', 'getFilename', 'getTemplateName'), new MethodCallRename('Twig_Template', 'getSource', 'getSourceContext'), new MethodCallRename('Twig_Error', 'getTemplateFile', 'getTemplateName'), new MethodCallRename('Twig_Error', 'getTemplateName', 'setTemplateName')]); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig134.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig134.php index 235948489..538711aea 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig134.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig134.php @@ -1,10 +1,8 @@ rule(SimpleFunctionAndFilterRector::class); -}; +return RectorConfig::configure()->withRules([SimpleFunctionAndFilterRector::class]); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig140.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig140.php index 137babe2b..f36731d26 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig140.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig140.php @@ -1,9 +1,7 @@ import(__DIR__ . '/twig-underscore-to-namespace.php'); -}; +return RectorConfig::configure()->withSets([__DIR__ . '/twig-underscore-to-namespace.php']); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig20.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig20.php index a5092757f..7ca9ed39b 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig20.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig20.php @@ -1,19 +1,17 @@ ruleWithConfiguration(RenameClassRector::class, [ - #filters - # @see https://twig.symfony.com/doc/1.x/deprecated.html - 'Twig_SimpleFilter' => 'Twig_Filter', - #functions - # @see https://twig.symfony.com/doc/1.x/deprecated.html - 'Twig_SimpleFunction' => 'Twig_Function', - # @see https://github.com/bolt/bolt/pull/6596 - 'Twig_SimpleTest' => 'Twig_Test', - ]); -}; +return RectorConfig::configure()->withConfiguredRule(RenameClassRector::class, [ + #filters + # @see https://twig.symfony.com/doc/1.x/deprecated.html + 'Twig_SimpleFilter' => 'Twig_Filter', + #functions + # @see https://twig.symfony.com/doc/1.x/deprecated.html + 'Twig_SimpleFunction' => 'Twig_Function', + # @see https://github.com/bolt/bolt/pull/6596 + 'Twig_SimpleTest' => 'Twig_Test', +]); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig240.php b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig240.php index 137babe2b..f36731d26 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig240.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/config/sets/twig/twig240.php @@ -1,9 +1,7 @@ import(__DIR__ . '/twig-underscore-to-namespace.php'); -}; +return RectorConfig::configure()->withSets([__DIR__ . '/twig-underscore-to-namespace.php']); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Enum/ResponseClass.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Enum/ResponseClass.php new file mode 100644 index 000000000..2aaac3c14 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Enum/ResponseClass.php @@ -0,0 +1,28 @@ +controllerAnalyzer = $controllerAnalyzer; $this->literalCallLikeConstFetchReplacer = $literalCallLikeConstFetchReplacer; - $this->responseObjectType = new ObjectType('Symfony\\Component\\HttpFoundation\\Response'); + $this->responseObjectType = new ObjectType(ResponseClass::BASIC); } public function getRuleDefinition() : RuleDefinition { @@ -115,7 +116,7 @@ private function processMethodCall(MethodCall $methodCall) : ?\PhpParser\Node\Ex if (!$this->isObjectType($methodCall->var, $this->responseObjectType)) { return null; } - return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($methodCall, 0, 'Symfony\\Component\\HttpFoundation\\Response', SymfonyResponseConstantMap::CODE_TO_CONST); + return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($methodCall, 0, ResponseClass::BASIC, SymfonyResponseConstantMap::CODE_TO_CONST); } private function processBinaryOp(BinaryOp $binaryOp) : ?BinaryOp { @@ -162,20 +163,20 @@ private function processAssertMethodCall(MethodCall $methodCall) : ?\PhpParser\N if (!$this->isGetStatusMethod($secondArg->value)) { return null; } - return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($methodCall, 0, 'Symfony\\Component\\HttpFoundation\\Response', SymfonyResponseConstantMap::CODE_TO_CONST); + return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($methodCall, 0, ResponseClass::BASIC, SymfonyResponseConstantMap::CODE_TO_CONST); } private function processRedirectMethodCall(MethodCall $methodCall) : ?\PhpParser\Node\Expr\MethodCall { if (!$this->controllerAnalyzer->isController($methodCall->var)) { return null; } - return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($methodCall, 1, 'Symfony\\Component\\HttpFoundation\\Response', SymfonyResponseConstantMap::CODE_TO_CONST); + return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($methodCall, 1, ResponseClass::BASIC, SymfonyResponseConstantMap::CODE_TO_CONST); } private function processNew(New_ $new) : ?\PhpParser\Node\Expr\New_ { if (!$this->isObjectType($new->class, $this->responseObjectType)) { return null; } - return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($new, 1, 'Symfony\\Component\\HttpFoundation\\Response', SymfonyResponseConstantMap::CODE_TO_CONST); + return $this->literalCallLikeConstFetchReplacer->replaceArgOnPosition($new, 1, ResponseClass::BASIC, SymfonyResponseConstantMap::CODE_TO_CONST); } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ActionSuffixRemoverRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ActionSuffixRemoverRector.php index d5843e68e..d50c72c67 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ActionSuffixRemoverRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ActionSuffixRemoverRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Symfony\CodeQuality\Rector\ClassMethod; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassMethod; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ResponseReturnTypeControllerActionRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ResponseReturnTypeControllerActionRector.php index 26a908149..add543c1c 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ResponseReturnTypeControllerActionRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/ResponseReturnTypeControllerActionRector.php @@ -4,25 +4,37 @@ namespace Rector\Symfony\CodeQuality\Rector\ClassMethod; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Identifier; use PhpParser\Node\Name\FullyQualified; -use PhpParser\Node\NullableType; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; +use PHPStan\Type\ObjectType; +use PHPStan\Type\Type; +use PHPStan\Type\UnionType; use Rector\Doctrine\NodeAnalyzer\AttrinationFinder; +use Rector\Exception\ShouldNotHappenException; use Rector\PhpParser\Node\BetterNodeFinder; +use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; use Rector\Rector\AbstractRector; +use Rector\StaticTypeMapper\StaticTypeMapper; +use Rector\Symfony\CodeQuality\Enum\ResponseClass; use Rector\Symfony\Enum\SensioAttribute; use Rector\Symfony\Enum\SymfonyAnnotation; use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer; +use Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer; +use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; +use Rector\ValueObject\PhpVersionFeature; +use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\Symfony\Tests\CodeQuality\Rector\ClassMethod\ResponseReturnTypeControllerActionRector\ResponseReturnTypeControllerActionRectorTest */ -final class ResponseReturnTypeControllerActionRector extends AbstractRector +final class ResponseReturnTypeControllerActionRector extends AbstractRector implements MinPhpVersionInterface { /** * @readonly @@ -39,11 +51,29 @@ final class ResponseReturnTypeControllerActionRector extends AbstractRector * @var \Rector\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; - public function __construct(ControllerAnalyzer $controllerAnalyzer, AttrinationFinder $attrinationFinder, BetterNodeFinder $betterNodeFinder) + /** + * @readonly + * @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnAnalyzer + */ + private $returnAnalyzer; + /** + * @readonly + * @var \Rector\StaticTypeMapper\StaticTypeMapper + */ + private $staticTypeMapper; + /** + * @readonly + * @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer + */ + private $returnTypeInferer; + public function __construct(ControllerAnalyzer $controllerAnalyzer, AttrinationFinder $attrinationFinder, BetterNodeFinder $betterNodeFinder, ReturnAnalyzer $returnAnalyzer, StaticTypeMapper $staticTypeMapper, ReturnTypeInferer $returnTypeInferer) { $this->controllerAnalyzer = $controllerAnalyzer; $this->attrinationFinder = $attrinationFinder; $this->betterNodeFinder = $betterNodeFinder; + $this->returnAnalyzer = $returnAnalyzer; + $this->staticTypeMapper = $staticTypeMapper; + $this->returnTypeInferer = $returnTypeInferer; } public function getRuleDefinition() : RuleDefinition { @@ -105,11 +135,26 @@ public function refactor(Node $node) : ?Node return null; } if ($this->attrinationFinder->hasByOne($node, SensioAttribute::TEMPLATE) || $this->attrinationFinder->hasByOne($node, SymfonyAnnotation::TWIG_TEMPLATE)) { - $node->returnType = new NullableType(new Identifier('array')); - return $node; + $returnType = $this->returnTypeInferer->inferFunctionLike($node); + $types = $returnType instanceof UnionType ? $returnType->getTypes() : [$returnType]; + $objectType = new ObjectType('Symfony\\Component\\HttpFoundation\\Response'); + foreach ($types as $type) { + if ($type instanceof ObjectType && $objectType->isSuperTypeOf($type)->yes()) { + return null; + } + } + if ($returnType->isArray()->yes()) { + $node->returnType = new Identifier('array'); + return $node; + } + return null; } return $this->refactorResponse($node); } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::SCALAR_TYPES; + } /** * @param array $methods */ @@ -135,28 +180,69 @@ private function hasReturn(ClassMethod $classMethod) : bool { return $this->betterNodeFinder->hasInstancesOf($classMethod, [Return_::class]); } - private function refactorResponse(ClassMethod $classMethod) : Node + private function refactorResponse(ClassMethod $classMethod) : ?ClassMethod { if ($this->isResponseReturnMethod($classMethod, ['redirectToRoute', 'redirect'])) { - $classMethod->returnType = new FullyQualified('Symfony\\Component\\HttpFoundation\\RedirectResponse'); + $classMethod->returnType = new FullyQualified(ResponseClass::REDIRECT); return $classMethod; } if ($this->isResponseReturnMethod($classMethod, ['file'])) { - $classMethod->returnType = new FullyQualified('Symfony\\Component\\HttpFoundation\\BinaryFileResponse'); + $classMethod->returnType = new FullyQualified(ResponseClass::BINARY_FILE); return $classMethod; } if ($this->isResponseReturnMethod($classMethod, ['json'])) { - $classMethod->returnType = new FullyQualified('Symfony\\Component\\HttpFoundation\\JsonResponse'); + $classMethod->returnType = new FullyQualified(ResponseClass::JSON); return $classMethod; } if ($this->isResponseReturnMethod($classMethod, ['stream'])) { - $classMethod->returnType = new FullyQualified('Symfony\\Component\\HttpFoundation\\StreamedResponse'); + $classMethod->returnType = new FullyQualified(ResponseClass::STREAMED); return $classMethod; } if ($this->isResponseReturnMethod($classMethod, ['render', 'forward', 'renderForm'])) { - $classMethod->returnType = new FullyQualified('Symfony\\Component\\HttpFoundation\\Response'); + $classMethod->returnType = new FullyQualified(ResponseClass::BASIC); return $classMethod; } + return $this->refatorWithNew($classMethod); + } + private function refatorWithNew(ClassMethod $classMethod) : ?ClassMethod + { + // early check + if (!$this->betterNodeFinder->hasInstancesOf($classMethod, [New_::class])) { + return null; + } + $returns = $this->betterNodeFinder->findReturnsScoped($classMethod); + if (!$this->returnAnalyzer->hasOnlyReturnWithExpr($classMethod, $returns)) { + return null; + } + $responseReturnType = $this->resolveResponseOnlyReturnType($returns); + if (!$responseReturnType instanceof Type) { + return null; + } + $returnType = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode($responseReturnType, TypeKind::RETURN); + if (!$returnType instanceof FullyQualified) { + return null; + } + $classMethod->returnType = $returnType; return $classMethod; } + /** + * @param Return_[] $returns + */ + private function resolveResponseOnlyReturnType(array $returns) : ?Type + { + $returnedTypes = []; + foreach ($returns as $return) { + if (!$return->expr instanceof Expr) { + // already validated above + throw new ShouldNotHappenException(); + } + $returnedType = $this->getType($return->expr); + // we only accept response + if (!$returnedType instanceof ObjectType || !$returnedType->isInstanceOf(ResponseClass::BASIC)->yes()) { + return null; + } + $returnedTypes[] = $returnedType; + } + return \count($returnedTypes) > 1 ? new UnionType($returnedTypes) : $returnedTypes[0]; + } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/TemplateAnnotationToThisRenderRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/TemplateAnnotationToThisRenderRector.php index 2000e86f6..a393b796d 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/TemplateAnnotationToThisRenderRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/ClassMethod/TemplateAnnotationToThisRenderRector.php @@ -132,44 +132,65 @@ public function indexAction() */ public function getNodeTypes() : array { - return [ClassMethod::class, Class_::class]; + return [Class_::class]; } /** - * @param Class_|ClassMethod $node + * @param Class_ $node */ public function refactor(Node $node) : ?Node { - if ($node instanceof Class_) { - return $this->addAbstractControllerParentClassIfMissing($node); + if (!$this->annotationAnalyzer->hasClassMethodWithTemplateAnnotation($node)) { + return null; + } + $this->decorateAbstractControllerParentClass($node); + $hasChanged = \false; + $classDoctrineAnnotationTagValueNode = $this->annotationAnalyzer->getDoctrineAnnotationTagValueNode($node, SymfonyAnnotation::TEMPLATE); + foreach ($node->getMethods() as $classMethod) { + if (!$classMethod->isPublic()) { + continue; + } + $hasClassMethodChanged = $this->replaceTemplateAnnotation($classMethod, $classDoctrineAnnotationTagValueNode); + if ($hasClassMethodChanged) { + $hasChanged = \true; + } } - return $this->replaceTemplateAnnotation($node); + if (!$hasChanged) { + return null; + } + // cleanup Class_ @Template annotaion + if ($classDoctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { + $this->removeDoctrineAnnotationTagValueNode($node, $classDoctrineAnnotationTagValueNode); + } + return $node; } - private function addAbstractControllerParentClassIfMissing(Class_ $class) : ?Class_ + private function decorateAbstractControllerParentClass(Class_ $class) : void { if ($class->extends instanceof Name) { - return null; - } - if (!$this->annotationAnalyzer->hasClassMethodWithTemplateAnnotation($class)) { - return null; + return; } + // this will make $this->render() method available $class->extends = new FullyQualified('Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController'); - return $class; } - private function replaceTemplateAnnotation(ClassMethod $classMethod) : ?ClassMethod + private function replaceTemplateAnnotation(ClassMethod $classMethod, ?DoctrineAnnotationTagValueNode $classDoctrineAnnotationTagValueNode) : bool { if (!$classMethod->isPublic()) { - return null; + return \false; } $doctrineAnnotationTagValueNode = $this->annotationAnalyzer->getDoctrineAnnotationTagValueNode($classMethod, SymfonyAnnotation::TEMPLATE); - if (!$doctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { - return null; + if ($doctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { + return $this->refactorClassMethod($classMethod, $doctrineAnnotationTagValueNode); } - return $this->refactorClassMethod($classMethod, $doctrineAnnotationTagValueNode); + // global @Template access + if ($classDoctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { + return $this->refactorClassMethod($classMethod, $classDoctrineAnnotationTagValueNode); + } + return \false; } - private function refactorClassMethod(ClassMethod $classMethod, DoctrineAnnotationTagValueNode $templateDoctrineAnnotationTagValueNode) : ?ClassMethod + private function refactorClassMethod(ClassMethod $classMethod, DoctrineAnnotationTagValueNode $templateDoctrineAnnotationTagValueNode) : bool { $hasThisRenderOrReturnsResponse = $this->hasLastReturnResponse($classMethod); - $this->traverseNodesWithCallable($classMethod, function (Node $node) use($templateDoctrineAnnotationTagValueNode, $hasThisRenderOrReturnsResponse, $classMethod) : ?int { + $hasChanged = \false; + $this->traverseNodesWithCallable($classMethod, function (Node $node) use($templateDoctrineAnnotationTagValueNode, $hasThisRenderOrReturnsResponse, $classMethod, &$hasChanged) : ?int { // keep as similar type if ($node instanceof Closure || $node instanceof Function_) { return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; @@ -178,14 +199,15 @@ private function refactorClassMethod(ClassMethod $classMethod, DoctrineAnnotatio return null; } $this->refactorStmtsAwareNode($node, $templateDoctrineAnnotationTagValueNode, $hasThisRenderOrReturnsResponse, $classMethod); + $hasChanged = \true; return null; }); if (!$this->emptyReturnNodeFinder->hasNoOrEmptyReturns($classMethod)) { - return null; + return $hasChanged; } $thisRenderMethodCall = $this->thisRenderFactory->create(null, $templateDoctrineAnnotationTagValueNode, $classMethod); $this->refactorNoReturn($classMethod, $thisRenderMethodCall, $templateDoctrineAnnotationTagValueNode); - return $classMethod; + return \true; } private function hasLastReturnResponse(ClassMethod $classMethod) : bool { @@ -242,11 +264,14 @@ private function refactorReturnWithValue(Return_ $return, bool $hasThisRenderOrR $this->removeDoctrineAnnotationTagValueNode($classMethod, $doctrineAnnotationTagValueNode); $this->returnTypeDeclarationUpdater->updateClassMethod($classMethod, SymfonyClass::RESPONSE); } - private function removeDoctrineAnnotationTagValueNode(ClassMethod $classMethod, DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode) : void + /** + * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\ClassMethod $node + */ + private function removeDoctrineAnnotationTagValueNode($node, DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode) : void { - $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classMethod); + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); $this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $doctrineAnnotationTagValueNode); - $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($classMethod); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); } private function refactorStmtsAwareNode(StmtsAwareInterface $stmtsAware, DoctrineAnnotationTagValueNode $templateDoctrineAnnotationTagValueNode, bool $hasThisRenderOrReturnsResponse, ClassMethod $classMethod) : void { diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/EventListenerToEventSubscriberRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/EventListenerToEventSubscriberRector.php index 4fbecb78a..ac32ebaaf 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/EventListenerToEventSubscriberRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/EventListenerToEventSubscriberRector.php @@ -3,11 +3,12 @@ declare (strict_types=1); namespace Rector\Symfony\CodeQuality\Rector\Class_; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\Class_; +use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer; use Rector\Rector\AbstractRector; use Rector\Symfony\ApplicationMetadata\ListenerServiceDefinitionProvider; use Rector\Symfony\NodeAnalyzer\ClassAnalyzer; @@ -36,10 +37,19 @@ final class EventListenerToEventSubscriberRector extends AbstractRector * @var \Rector\Symfony\NodeAnalyzer\ClassAnalyzer */ private $classAnalyzer; + /** + * @readonly + * @var \Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer + */ + private $phpAttributeAnalyzer; /** * @var string */ private const EVENT_SUBSCRIBER_INTERFACE = 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface'; + /** + * @var string + */ + private const EVENT_LISTENER_ATTRIBUTE = 'Symfony\\Component\\EventDispatcher\\Attribute\\AsEventListener'; /** * @var string */ @@ -57,11 +67,12 @@ final class EventListenerToEventSubscriberRector extends AbstractRector * @var EventNameToClassAndConstant[] */ private $eventNamesToClassConstants = []; - public function __construct(ListenerServiceDefinitionProvider $listenerServiceDefinitionProvider, GetSubscribedEventsClassMethodFactory $getSubscribedEventsClassMethodFactory, ClassAnalyzer $classAnalyzer) + public function __construct(ListenerServiceDefinitionProvider $listenerServiceDefinitionProvider, GetSubscribedEventsClassMethodFactory $getSubscribedEventsClassMethodFactory, ClassAnalyzer $classAnalyzer, PhpAttributeAnalyzer $phpAttributeAnalyzer) { $this->listenerServiceDefinitionProvider = $listenerServiceDefinitionProvider; $this->getSubscribedEventsClassMethodFactory = $getSubscribedEventsClassMethodFactory; $this->classAnalyzer = $classAnalyzer; + $this->phpAttributeAnalyzer = $phpAttributeAnalyzer; $this->eventNamesToClassConstants = [ // kernel events new EventNameToClassAndConstant('kernel.request', self::KERNEL_EVENTS_CLASS, 'REQUEST'), @@ -134,6 +145,9 @@ public function refactor(Node $node) : ?Node if ($this->classAnalyzer->hasImplements($node, 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface')) { return null; } + if ($this->hasAsListenerAttribute($node)) { + return null; + } // there must be event dispatcher in the application $listenerClassesToEventsToMethods = $this->listenerServiceDefinitionProvider->extract(); if ($listenerClassesToEventsToMethods === []) { @@ -159,4 +173,22 @@ private function changeListenerToSubscriberWithMethods(Class_ $class, array $eve $classMethod = $this->getSubscribedEventsClassMethodFactory->createFromServiceDefinitionsAndEventsToMethods($eventsToMethods, $this->eventNamesToClassConstants); $class->stmts[] = $classMethod; } + /** + * @see https://symfony.com/doc/current/event_dispatcher.html#event-dispatcher_event-listener-attributes + */ + private function hasAsListenerAttribute(Class_ $class) : bool + { + if ($this->phpAttributeAnalyzer->hasPhpAttribute($class, self::EVENT_LISTENER_ATTRIBUTE)) { + return \true; + } + foreach ($class->getMethods() as $classMethod) { + if (!$classMethod->isPublic()) { + continue; + } + if ($this->phpAttributeAnalyzer->hasPhpAttribute($classMethod, self::EVENT_LISTENER_ATTRIBUTE)) { + return \true; + } + } + return \false; + } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php index 858bc2ef6..fa2609428 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Class_/MakeCommandLazyRector.php @@ -4,24 +4,21 @@ namespace Rector\Symfony\CodeQuality\Rector\Class_; use PhpParser\Node; -use PhpParser\Node\Expr; -use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Class_; -use PhpParser\Node\Stmt\ClassMethod; -use PhpParser\Node\Stmt\Expression; -use PhpParser\Node\Stmt\Property; -use PHPStan\Type\ObjectType; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://symfony.com/doc/current/console/commands_as_services.html - * - * @see \Rector\Symfony\Tests\CodeQuality\Rector\Class_\MakeCommandLazyRector\MakeCommandLazyRectorTest + * @deprecated This rule is deprecated since Rector 1.1.2, as Symfony 6.1 introduced native attribute, + * more reliable and validated */ -final class MakeCommandLazyRector extends AbstractRector +final class MakeCommandLazyRector extends AbstractRector implements DeprecatedInterface { + /** + * @var bool + */ + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Make Symfony commands lazy', [new CodeSample(<<<'CODE_SAMPLE' @@ -60,71 +57,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->isObjectType($node, new ObjectType('Symfony\\Component\\Console\\Command\\Command'))) { - return null; - } - $defaultNameProperty = $node->getProperty('defaultName'); - if ($defaultNameProperty instanceof Property) { - return null; - } - $commandNameExpr = $this->resolveCommandNameFromSetName($node); - if (!$commandNameExpr instanceof Expr) { - return null; - } - $commandNameType = $this->getType($commandNameExpr); - if (!$commandNameType->isConstantScalarValue()->yes()) { + if ($this->hasWarned) { return null; } - $defaultNameProperty = $this->createStaticProtectedPropertyWithDefault('defaultName', $commandNameExpr); - $node->stmts = \array_merge([$defaultNameProperty], $node->stmts); - return $node; - } - private function resolveCommandNameFromSetName(Class_ $class) : ?Expr - { - $configureClassMethod = $class->getMethod('configure'); - if (!$configureClassMethod instanceof ClassMethod || $configureClassMethod->stmts === null) { - return null; - } - foreach ($configureClassMethod->stmts as $key => $stmt) { - if (!$stmt instanceof Expression) { - continue; - } - if (!$stmt->expr instanceof MethodCall) { - continue; - } - $methodCall = $stmt->expr; - if ($methodCall->var instanceof Variable) { - return $this->resolveFromNonFluentMethodCall($methodCall, $configureClassMethod, $key); - } - $expr = null; - $this->traverseNodesWithCallable($stmt, function (Node $node) use(&$expr) { - if ($node instanceof MethodCall && $this->isName($node->name, 'setName')) { - $expr = $node->getArgs()[0]->value; - // remove nested call - return $node->var; - } - return null; - }); - return $expr; - } + \trigger_error(\sprintf('The "%s" rule was deprecated, as its only dead middle step before more solid PHP attributes.', self::class)); + \sleep(3); + $this->hasWarned = \true; return null; } - private function resolveFromNonFluentMethodCall(MethodCall $methodCall, ClassMethod $classMethod, int $key) : ?Expr - { - if (!$this->isName($methodCall->name, 'setName')) { - return null; - } - $expr = $methodCall->getArgs()[0]->value; - // cleanup fluent call - unset($classMethod->stmts[$key]); - return $expr; - } - private function createStaticProtectedPropertyWithDefault(string $name, Node $node) : Property - { - $property = new \PhpParser\Builder\Property($name); - $property->makeProtected(); - $property->makeStatic(); - $property->setDefault($node); - return $property->getNode(); - } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Closure/StringExtensionToConfigBuilderRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Closure/StringExtensionToConfigBuilderRector.php index efeed0cdb..8c1855dff 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Closure/StringExtensionToConfigBuilderRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/Closure/StringExtensionToConfigBuilderRector.php @@ -25,7 +25,7 @@ use Rector\Symfony\ValueObject\ExtensionKeyAndConfiguration; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @changelog https://symfony.com/blog/new-in-symfony-5-3-config-builder-classes * @@ -71,7 +71,7 @@ final class StringExtensionToConfigBuilderRector extends AbstractRector /** * @var array */ - private const EXTENSION_KEY_TO_CLASS_MAP = ['security' => 'Symfony\\Config\\SecurityConfig', 'framework' => 'Symfony\\Config\\FrameworkConfig', 'monolog' => 'Symfony\\Config\\MonologConfig', 'twig' => 'Symfony\\Config\\TwigConfig', 'doctrine' => 'Symfony\\Config\\DoctrineConfig', 'doctrine_migrations' => 'Symfony\\Config\\DoctrineMigrationsConfig', 'sentry' => 'Symfony\\Config\\SentryConfig']; + private const EXTENSION_KEY_TO_CLASS_MAP = ['security' => 'Symfony\\Config\\SecurityConfig', 'framework' => 'Symfony\\Config\\FrameworkConfig', 'monolog' => 'Symfony\\Config\\MonologConfig', 'twig' => 'Symfony\\Config\\TwigConfig', 'doctrine' => 'Symfony\\Config\\DoctrineConfig', 'doctrine_migrations' => 'Symfony\\Config\\DoctrineMigrationsConfig', 'sentry' => 'Symfony\\Config\\SentryConfig', 'web_profiler' => 'Symfony\\Config\\WebProfilerConfig', 'debug' => 'Symfony\\Config\\DebugConfig', 'maker' => 'Symfony\\Config\\MakerConfig', 'nelmio_cors' => 'Symfony\\Config\\NelmioCorsConfig', 'api_platform' => 'Symfony\\Config\\ApiPlatformConfig']; public function __construct(SymfonyPhpClosureDetector $symfonyPhpClosureDetector, SymfonyClosureExtensionMatcher $symfonyClosureExtensionMatcher, PropertyNaming $propertyNaming, ValueResolver $valueResolver, NestedConfigCallsFactory $nestedConfigCallsFactory, SecurityAccessDecisionManagerConfigArrayHandler $securityAccessDecisionManagerConfigArrayHandler, SymfonyClosureFactory $symfonyClosureFactory) { $this->symfonyPhpClosureDetector = $symfonyPhpClosureDetector; @@ -178,11 +178,7 @@ private function createMethodCallStmts(Array_ $configurationArray, Variable $con } } if ($splitMany) { - if ($nested) { - $currentConfigCaller = new MethodCall($configVariable, $methodCallName); - } else { - $currentConfigCaller = $configVariable; - } + $currentConfigCaller = $nested ? new MethodCall($configVariable, $methodCallName) : $configVariable; if (!\is_array($value)) { return null; } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/AssertSameResponseCodeWithDebugContentsRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/AssertSameResponseCodeWithDebugContentsRector.php index 458be439b..4e69ad8ea 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/AssertSameResponseCodeWithDebugContentsRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/AssertSameResponseCodeWithDebugContentsRector.php @@ -11,6 +11,7 @@ use PHPStan\Type\ObjectType; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\Rector\AbstractRector; +use Rector\Symfony\CodeQuality\Enum\ResponseClass; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -111,7 +112,7 @@ private function matchResponseExpr(Expr $expr) : ?Expr if (!$varType instanceof ObjectType) { return null; } - if (!$varType->isInstanceof('Symfony\\Component\\HttpFoundation\\Response')->yes()) { + if (!$varType->isInstanceof(ResponseClass::BASIC)->yes()) { return null; } // must be status method call diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php index cfa5e0baa..fbc10c013 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/CodeQuality/Rector/MethodCall/LiteralGetToRequestClassConstantRector.php @@ -76,7 +76,7 @@ public function refactor(Node $node) : ?Node } // for client, the transitional dependency to browser-kit might be missing and cause fatal error on PHPStan reflection // in most cases that should be skipped, @changelog https://github.com/rectorphp/rector/issues/7135 - if ($this->reflectionProvider->hasClass('Symfony\\Component\\BrowserKit\\AbstractBrowser') && $this->isObjectType($node->var, new ObjectType('Symfony\\Component\\HttpKernel\\Client'))) { + if ($this->reflectionProvider->hasClass('Symfony\\Component\\BrowserKit\\AbstractBrowser') && ($this->isObjectType($node->var, new ObjectType('Symfony\\Component\\HttpKernel\\Client')) || $this->isObjectType($node->var, new ObjectType('Symfony\\Bundle\\FrameworkBundle\\KernelBrowser')))) { return $this->refactorClientMethodCall($node); } if (!$this->isName($node->name, 'setMethod')) { diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/NestedConfigCallsFactory.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/NestedConfigCallsFactory.php index 7d1b97c57..2a09cb6b7 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/NestedConfigCallsFactory.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/NestedConfigCallsFactory.php @@ -10,7 +10,7 @@ use Rector\Symfony\Configs\Enum\GroupingMethods; use Rector\Symfony\Configs\Enum\SecurityConfigKey; use Rector\Symfony\Utils\StringUtils; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class NestedConfigCallsFactory { /** diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/SecurityAccessDecisionManagerConfigArrayHandler.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/SecurityAccessDecisionManagerConfigArrayHandler.php index 67c2382a9..324adbc85 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/SecurityAccessDecisionManagerConfigArrayHandler.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ConfigArrayHandler/SecurityAccessDecisionManagerConfigArrayHandler.php @@ -14,9 +14,8 @@ final class SecurityAccessDecisionManagerConfigArrayHandler { /** * @return array> - * @param \PhpParser\Node\Expr\Variable|\PhpParser\Node\Expr\MethodCall $configCaller */ - public function handle(Array_ $array, $configCaller, string $mainMethodName) : array + public function handle(Array_ $array, Variable $variable, string $mainMethodName) : array { if (!$array->items[0] instanceof ArrayItem) { return []; @@ -27,7 +26,7 @@ public function handle(Array_ $array, $configCaller, string $mainMethodName) : a return []; } // build accessControl() method call here - $accessDecisionManagerMethodCall = new MethodCall($configCaller, $mainMethodName); + $accessDecisionManagerMethodCall = new MethodCall($variable, $mainMethodName); foreach ($nestedArray->items as $nestedArrayItem) { if (!$nestedArrayItem instanceof ArrayItem) { continue; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeAnalyser/ConfigServiceArgumentsResolver.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeAnalyser/ConfigServiceArgumentsResolver.php new file mode 100644 index 000000000..9c9a8cdec --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeAnalyser/ConfigServiceArgumentsResolver.php @@ -0,0 +1,50 @@ +namedSimplePhpParser = $namedSimplePhpParser; + $this->nodeTraverser = new NodeTraverser(); + $this->collectServiceArgumentsNodeVisitor = new CollectServiceArgumentsNodeVisitor(); + $this->nodeTraverser->addVisitor($this->collectServiceArgumentsNodeVisitor); + } + /** + * @param SplFileInfo[] $phpConfigFileInfos + * @return ServiceArguments[] + */ + public function resolve(array $phpConfigFileInfos) : array + { + $servicesArguments = []; + foreach ($phpConfigFileInfos as $phpConfigFileInfo) { + // traverse and collect data + $configStmts = $this->namedSimplePhpParser->parseString($phpConfigFileInfo->getContents()); + $this->nodeTraverser->traverse($configStmts); + $servicesArguments = \array_merge($servicesArguments, $this->collectServiceArgumentsNodeVisitor->getServicesArguments()); + } + return $servicesArguments; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeAnalyser/SetServiceClassNameResolver.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeAnalyser/SetServiceClassNameResolver.php new file mode 100644 index 000000000..3bfc490ca --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeAnalyser/SetServiceClassNameResolver.php @@ -0,0 +1,83 @@ +set(SomeClassName::Class) + * + * ↓ + * "SomeClassName" + */ + public function resolve(MethodCall $methodCall) : ?string + { + $nodeFinder = new NodeFinder(); + $serviceClassName = null; + $nodeFinder->findFirst($methodCall, function (Node $node) use(&$serviceClassName) : ?bool { + if (!$node instanceof MethodCall) { + return null; + } + if (!$node->name instanceof Identifier) { + return null; + } + // we look for services variable + if (!$this->isServicesVariable($node->var)) { + return null; + } + // dump($methodCall->var); + $args = $node->getArgs(); + foreach ($args as $arg) { + if (!$arg->value instanceof ClassConstFetch) { + continue; + } + $resolvedClassConstantName = $this->matchClassConstantName($arg->value); + if (!\is_string($resolvedClassConstantName)) { + continue; + } + $serviceClassName = $resolvedClassConstantName; + return \true; + } + return \false; + }); + return $serviceClassName; + } + public function matchClassConstantName(ClassConstFetch $classConstFetch) : ?string + { + if (!$classConstFetch->name instanceof Identifier) { + return null; + } + if ($classConstFetch->name->toString() !== 'class') { + return null; + } + if (!$classConstFetch->class instanceof FullyQualified) { + return null; + } + return $classConstFetch->class->toString(); + } + /** + * Dummy name check, as we don't have types here, only variable names. + */ + private function isServicesVariable(Expr $expr) : bool + { + if (!$expr instanceof Variable) { + return \false; + } + if (!\is_string($expr->name)) { + return \false; + } + $servicesName = $expr->name; + return $servicesName === 'services'; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeFactory/AutowiredParamFactory.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeFactory/AutowiredParamFactory.php new file mode 100644 index 000000000..632db0265 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeFactory/AutowiredParamFactory.php @@ -0,0 +1,28 @@ +attrGroups[] = new AttributeGroup([$this->createAutowireAttribute($string, 'param')]); + return $parameterParam; + } + private function createAutowireAttribute(String_ $string, string $argName) : Attribute + { + $args = [new Arg($string, \false, \false, [], new Identifier($argName))]; + return new Attribute(new FullyQualified(SymfonyAttribute::AUTOWIRE), $args); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeVisitor/CollectServiceArgumentsNodeVisitor.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeVisitor/CollectServiceArgumentsNodeVisitor.php new file mode 100644 index 000000000..2da59b656 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/NodeVisitor/CollectServiceArgumentsNodeVisitor.php @@ -0,0 +1,188 @@ +>> + */ + private $servicesArgumentsByClass = []; + /** + * @readonly + * @var \Rector\Symfony\Configs\NodeAnalyser\SetServiceClassNameResolver + */ + private $setServiceClassNameResolver; + public function __construct() + { + $this->setServiceClassNameResolver = new SetServiceClassNameResolver(); + } + /** + * @param Stmt[] $nodes + */ + public function beforeTraverse(array $nodes) + { + $this->servicesArgumentsByClass = []; + return parent::beforeTraverse($nodes); + } + public function enterNode(Node $node) : ?Node + { + $argsMethodCall = $this->matchNamedMethodCall($node, 'args'); + if ($argsMethodCall instanceof MethodCall) { + $this->processArgsMethodCall($argsMethodCall); + return null; + } + $argMethodCall = $this->matchNamedMethodCall($node, 'arg'); + if (!$argMethodCall instanceof MethodCall) { + return null; + } + // 1. detect arg name + value + $firstArg = $argMethodCall->getArgs()[0]; + if ($firstArg->value instanceof String_ || $firstArg->value instanceof LNumber) { + $argumentLocation = $firstArg->value->value; + if (\is_string($argumentLocation)) { + // remove $ prefix + $argumentLocation = \ltrim($argumentLocation, '$'); + } + } else { + throw new NotImplementedYetException(\sprintf('Add support for non-string arg names like "%s"', \get_class($firstArg->value))); + } + $serviceClassName = $this->setServiceClassNameResolver->resolve($argMethodCall); + if (!\is_string($serviceClassName)) { + return null; + } + $secondArg = $argMethodCall->getArgs()[1]; + if ($secondArg->value instanceof Concat) { + $unwrappedExpr = $this->matchConcatWrappedParameter($secondArg->value); + if (!$unwrappedExpr instanceof Expr) { + return null; + } + $this->servicesArgumentsByClass[$serviceClassName][self::PARAMETERS][$argumentLocation] = $unwrappedExpr; + return null; + } + if ($secondArg->value instanceof String_) { + $argumentValue = $secondArg->value->value; + } else { + throw new NotImplementedYetException(\sprintf('Add support for non-string arg values like "%s"', \get_class($firstArg->value))); + } + $this->matchStringEnvOrParameter($argumentValue, $serviceClassName, $argumentLocation); + return $node; + } + /** + * @return ServiceArguments[] + */ + public function getServicesArguments() : array + { + $serviceArguments = []; + foreach ($this->servicesArgumentsByClass as $serviceClass => $arguments) { + $parameters = $arguments[self::PARAMETERS] ?? []; + $envs = $arguments[self::ENVS] ?? []; + $serviceArguments[] = new ServiceArguments($serviceClass, $parameters, $envs); + } + return $serviceArguments; + } + /** + * We look for: ->arg(..., ...) + */ + private function matchNamedMethodCall(Node $node, string $methodName) : ?MethodCall + { + if (!$node instanceof MethodCall) { + return null; + } + if (!$node->name instanceof Identifier) { + return null; + } + if ($node->name->toString() !== $methodName) { + return null; + } + return $node; + } + /** + * We look for: + * "%" . ParameterName::NAME . "%" + */ + private function matchConcatWrappedParameter(Concat $concat) : ?Expr + { + // special case for concat parameter enum const + if (!$concat->right instanceof String_) { + return null; + } + if ($concat->right->value !== '%') { + return null; + } + $nestedConcat = $concat->left; + if (!$nestedConcat instanceof Concat) { + return null; + } + if (!$nestedConcat->left instanceof String_) { + return null; + } + if ($nestedConcat->left->value !== '%') { + return null; + } + return $nestedConcat->right; + } + /** + * @param int|string $argumentLocation + */ + private function matchStringEnvOrParameter(string $argumentValue, string $serviceClassName, $argumentLocation) : void + { + $match = Strings::match($argumentValue, '#%env\\((?[A-Z_]+)\\)#'); + if (isset($match['env'])) { + $this->servicesArgumentsByClass[$serviceClassName][self::ENVS][$argumentLocation] = (string) $match['env']; + } + $match = Strings::match($argumentValue, '#%(?[\\w]+)%#'); + if (isset($match['parameter'])) { + $this->servicesArgumentsByClass[$serviceClassName][self::PARAMETERS][$argumentLocation] = (string) $match['parameter']; + } + } + private function processArgsMethodCall(MethodCall $argsMethodCall) : void + { + $serviceClassName = $this->setServiceClassNameResolver->resolve($argsMethodCall); + // unable to resolve service + if (!\is_string($serviceClassName)) { + return; + } + // collect all + $firstArg = $argsMethodCall->getArgs()[0]; + // must be an array + if (!$firstArg->value instanceof Array_) { + return; + } + foreach ($firstArg->value->items as $position => $arrayItem) { + if (!$arrayItem instanceof ArrayItem) { + continue; + } + // not a string? most likely services reference or something else + if (!$arrayItem->value instanceof String_) { + continue; + } + $this->matchStringEnvOrParameter($arrayItem->value->value, $serviceClassName, $position); + } + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php index a6fd1c8d3..a335823a0 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/ClassMethod/AddRouteAnnotationRector.php @@ -20,6 +20,7 @@ use Rector\Symfony\ValueObject\SymfonyRouteMetadata; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use TypeError; /** * @see \Rector\Symfony\Tests\Configs\Rector\ClassMethod\AddRouteAnnotationRector\AddRouteAnnotationRectorTest */ @@ -91,7 +92,7 @@ public function refactor(Node $node) : ?Node // skip if already has an annotation try { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classMethod); - } catch (\TypeError $exception) { + } catch (TypeError $exception) { continue; } $doctrineAnnotationTagValueNode = $phpDocInfo->getByAnnotationClass(SymfonyAnnotation::ROUTE); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Class_/AutowireAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Class_/AutowireAttributeRector.php new file mode 100644 index 000000000..3a1e0c44a --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Class_/AutowireAttributeRector.php @@ -0,0 +1,175 @@ +configServiceArgumentsResolver = $configServiceArgumentsResolver; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change explicit configuration parameter pass into #[Autowire] attributes', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' +final class SomeClass +{ + public function __construct( + private int $timeout, + private string $secret, + ) { + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Symfony\Component\DependencyInjection\Attribute\Autowire; + +final class SomeClass +{ + public function __construct( + #[Autowire(param: 'timeout')] + private int $timeout, + #[Autowire(env: 'APP_SECRET')] + private string $secret, + ) { + } +} +CODE_SAMPLE +, [self::CONFIGS_DIRECTORY => __DIR__ . '/config'])]); + } + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Class_ + { + if ($node->isAnonymous()) { + return null; + } + $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); + if (!$constructClassMethod instanceof ClassMethod) { + return null; + } + if ($this->configsDirectory === null) { + throw new ShouldNotHappenException('Configure paths first'); + } + $phpConfigFileInfos = $this->findPhpConfigs($this->configsDirectory); + $servicesArguments = $this->configServiceArgumentsResolver->resolve($phpConfigFileInfos); + if ($servicesArguments === []) { + // nothing to resolve, maybe false positive! + return null; + } + $className = $this->getName($node); + if (!\is_string($className)) { + return null; + } + $hasChanged = \false; + foreach ($servicesArguments as $serviceArgument) { + if ($className !== $serviceArgument->getClassName()) { + continue; + } + foreach ($constructClassMethod->params as $position => $constructorParam) { + if (!$constructorParam->var instanceof Variable) { + continue; + } + $constructorParameterName = $constructorParam->var->name; + if (!\is_string($constructorParameterName)) { + continue; + } + $currentEnv = $serviceArgument->getEnvs()[$constructorParameterName] ?? $serviceArgument->getEnvs()[$position] ?? null; + if ($currentEnv) { + $constructorParam->attrGroups[] = new AttributeGroup([$this->createAutowireAttribute($currentEnv, 'env')]); + $hasChanged = \true; + } + $currentParameter = $serviceArgument->getParams()[$constructorParameterName] ?? $serviceArgument->getParams()[$position] ?? null; + if ($currentParameter) { + $constructorParam->attrGroups[] = new AttributeGroup([$this->createAutowireAttribute($currentParameter, 'param')]); + $hasChanged = \true; + } + } + } + if ($hasChanged) { + return $node; + } + return null; + } + /** + * @param mixed[] $configuration + */ + public function configure(array $configuration) : void + { + if (!$configuration[self::CONFIGS_DIRECTORY]) { + return; + } + $configsDirectory = $configuration[self::CONFIGS_DIRECTORY]; + Assert::string($configsDirectory); + Assert::directory($configsDirectory); + $this->configsDirectory = $configsDirectory; + } + /** + * @return SplFileInfo[] + */ + private function findPhpConfigs(string $configsDirectory) : array + { + $phpConfigsFinder = Finder::create()->files()->in($configsDirectory)->name('*.php')->sortByName(); + if ($phpConfigsFinder->count() === 0) { + throw new ShouldNotHappenException(\sprintf('Could not find any PHP configs in "%s"', $this->configsDirectory)); + } + return \iterator_to_array($phpConfigsFinder->getIterator()); + } + /** + * @param string|\PhpParser\Node\Expr $value + */ + private function createAutowireAttribute($value, string $argName) : Attribute + { + if (\is_string($value)) { + $value = new String_($value); + } + $args = [new Arg($value, \false, \false, [], new Identifier($argName))]; + return new Attribute(new FullyQualified(SymfonyAttribute::AUTOWIRE), $args); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Class_/ParameterBagToAutowireAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Class_/ParameterBagToAutowireAttributeRector.php new file mode 100644 index 000000000..4b6e05344 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Class_/ParameterBagToAutowireAttributeRector.php @@ -0,0 +1,162 @@ +autowiredParamFactory = $autowiredParamFactory; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Change explicit configuration parameter pass into #[Autowire] attributes', [new CodeSample(<<<'CODE_SAMPLE' +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; + +final class CertificateFactory +{ + private ?string $certName; + + public function __construct( + ParameterBagInterface $parameterBag + ) { + $this->certName = $parameterBag->get('certificate_name'); + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Symfony\Component\DependencyInjection\Attribute\Autowire; + +final class CertificateFactory +{ + private ?string $certName; + + public function __construct( + #[Autowire(param: 'certificate_name')] + $certName, + ) { + $this->certName = $certName; + } +} +CODE_SAMPLE +)]); + } + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Class_ + { + if ($node->isAnonymous()) { + return null; + } + $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); + if (!$constructClassMethod instanceof ClassMethod) { + return null; + } + // has parameter bag interface dependency? + if (!$this->hasParameterBagInterfaceDependency($constructClassMethod)) { + return null; + } + $extraParams = []; + $parameterBagCallCount = 0; + // replace all parameter bag interface "->get(...)" with #[Autowire] attributes + $this->traverseNodesWithCallable((array) $constructClassMethod->stmts, function (Node $node) use(&$extraParams, &$parameterBagCallCount) : ?Variable { + if (!$node instanceof MethodCall) { + return null; + } + if (!$this->isObjectType($node->var, new ObjectType(self::PARAMETER_BAG_CLASS))) { + return null; + } + ++$parameterBagCallCount; + if (!$this->isName($node->name, 'get')) { + return null; + } + $firstArg = $node->getArgs()[0]; + $argValue = $firstArg->value; + if (!$argValue instanceof String_) { + return null; + } + // from underscore to camelcase + $variableName = \lcfirst(\str_replace('_', '', \ucwords($argValue->value, '_'))); + $extraParams[] = $this->autowiredParamFactory->create($variableName, $argValue); + return new Variable($variableName); + }); + if ($extraParams === []) { + return null; + } + $this->removeParameterBagParamIfNotUsed($constructClassMethod, $extraParams, $parameterBagCallCount); + $constructClassMethod->params = \array_merge($constructClassMethod->params, $extraParams); + return $node; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::ATTRIBUTES; + } + private function hasParameterBagInterfaceDependency(ClassMethod $classMethod) : bool + { + foreach ($classMethod->getParams() as $param) { + if ($this->isParameterBagParam($param)) { + return \true; + } + } + return \false; + } + /** + * @param Param[] $extraParams + */ + private function removeParameterBagParamIfNotUsed(ClassMethod $constructClassMethod, array $extraParams, int $parameterBagCallCount) : void + { + // all usages of ParameterBagInterface were replaced + if (\count($extraParams) !== $parameterBagCallCount) { + return; + } + foreach ($constructClassMethod->params as $key => $param) { + if (!$this->isParameterBagParam($param)) { + continue; + } + unset($constructClassMethod->params[$key]); + } + } + private function isParameterBagParam(Param $param) : bool + { + if (!$param->type instanceof Node) { + return \false; + } + return $this->isName($param->type, self::PARAMETER_BAG_CLASS); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/MergeServiceNameTypeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/MergeServiceNameTypeRector.php new file mode 100644 index 000000000..f5fed8f95 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/MergeServiceNameTypeRector.php @@ -0,0 +1,120 @@ +symfonyPhpClosureDetector = $symfonyPhpClosureDetector; + $this->valueResolver = $valueResolver; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Merge name === type service registration, $services->set(SomeType::class, SomeType::class)', [new CodeSample(<<<'CODE_SAMPLE' +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; + +return static function (ContainerConfigurator $containerConfigurator): void { + $services = $containerConfigurator->services(); + $services->set(\App\SomeClass::class, \App\SomeClass::class); +}; +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; + +return static function (ContainerConfigurator $containerConfigurator): void { + $services = $containerConfigurator->services(); + $services->set(\App\SomeClass::class); +}; +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Closure::class]; + } + /** + * @param Closure $node + */ + public function refactor(Node $node) : ?Node + { + $this->hasChanged = \false; + if (!$this->symfonyPhpClosureDetector->detect($node)) { + return null; + } + $this->handleSetServices($node); + if ($this->hasChanged) { + return $node; + } + return null; + } + private function handleSetServices(Closure $closure) : void + { + $this->traverseNodesWithCallable($closure->stmts, function (Node $node) : ?MethodCall { + if (!$node instanceof MethodCall) { + return null; + } + if (!$this->isSetServices($node)) { + return null; + } + // must be exactly 2 args + if (\count($node->args) !== 2) { + return null; + } + // exchange type and service name + $firstArg = $node->getArgs()[0]; + $secondArg = $node->getArgs()[1]; + /** @var string $serviceName */ + $serviceName = $this->valueResolver->getValue($firstArg->value); + $serviceType = $this->valueResolver->getValue($secondArg->value); + if (!\is_string($serviceType)) { + return null; + } + if ($serviceName !== $serviceType) { + return null; + } + // remove 2nd arg + unset($node->args[1]); + $this->hasChanged = \true; + return $node; + }); + } + private function isSetServices(MethodCall $methodCall) : bool + { + if (!$this->isName($methodCall->name, 'set')) { + return \false; + } + return $this->isObjectType($methodCall->var, new ObjectType('Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator')); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php index f49056b78..00d4fb443 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServiceSettersToSettersAutodiscoveryRector.php @@ -23,7 +23,7 @@ use Rector\Symfony\MinimalSharedStringSolver; use Rector\Symfony\NodeAnalyzer\SymfonyPhpClosureDetector; use Rector\Symfony\ValueObject\ClassNameAndFilePath; -use RectorPrefix202405\Symfony\Component\Filesystem\Filesystem; +use RectorPrefix202410\Symfony\Component\Filesystem\Filesystem; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -115,7 +115,7 @@ public function refactor(Node $node) : ?Node return null; } $classNamesAndFilesPaths = $this->createClassNamesAndFilePaths($bareServicesSetMethodCallExpressions); - $classNames = \array_map(function (ClassNameAndFilePath $classNameAndFilePath) : string { + $classNames = \array_map(static function (ClassNameAndFilePath $classNameAndFilePath) : string { return $classNameAndFilePath->getClassName(); }, $classNamesAndFilesPaths); $sharedNamespace = $this->minimalSharedStringSolver->solve(...$classNames); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php index 5498a34d3..66a9b7162 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/Rector/Closure/ServicesSetNameToSetTypeRector.php @@ -4,51 +4,16 @@ namespace Rector\Symfony\Configs\Rector\Closure; use PhpParser\Node; -use PhpParser\Node\Arg; -use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\Closure; -use PhpParser\Node\Expr\FuncCall; -use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Name\FullyQualified; -use PhpParser\Node\Scalar\String_; -use PHPStan\Type\ObjectType; -use Rector\PhpParser\Node\Value\ValueResolver; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; -use Rector\Symfony\NodeAnalyzer\SymfonyPhpClosureDetector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Symfony\Tests\Configs\Rector\Closure\ServicesSetNameToSetTypeRector\ServicesSetNameToSetTypeRectorTest + * @deprecated This rule is deprecated. It does not have context about rest of application, will create invalid code. */ -final class ServicesSetNameToSetTypeRector extends AbstractRector +final class ServicesSetNameToSetTypeRector extends AbstractRector implements DeprecatedInterface { - /** - * @readonly - * @var \Rector\Symfony\NodeAnalyzer\SymfonyPhpClosureDetector - */ - private $symfonyPhpClosureDetector; - /** - * @readonly - * @var \Rector\PhpParser\Node\Value\ValueResolver - */ - private $valueResolver; - /** - * @var array - */ - private $alreadyChangedServiceNamesToTypes = []; - /** - * @var bool - */ - private $hasChanged = \false; - /** - * @var array - */ - private $servicesNamesByType = []; - public function __construct(SymfonyPhpClosureDetector $symfonyPhpClosureDetector, ValueResolver $valueResolver) - { - $this->symfonyPhpClosureDetector = $symfonyPhpClosureDetector; - $this->valueResolver = $valueResolver; - } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Change $services->set("name_type", SomeType::class) to bare type, useful since Symfony 3.4', [new CodeSample(<<<'CODE_SAMPLE' @@ -83,124 +48,6 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - $this->hasChanged = \false; - if (!$this->symfonyPhpClosureDetector->detect($node)) { - return null; - } - $duplicatedTypeNames = $this->resolveDuplicatedTypeNames($node); - $this->handleSetServices($node, $duplicatedTypeNames); - $this->handleRefServiceFunctionReferences($node); - if ($this->hasChanged) { - return $node; - } return null; } - private function isSetServices(MethodCall $methodCall) : bool - { - if (!$this->isName($methodCall->name, 'set')) { - return \false; - } - return $this->isObjectType($methodCall->var, new ObjectType('Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator')); - } - /** - * @param string[] $serviceNamesToSkip - */ - private function handleSetServices(Closure $closure, array $serviceNamesToSkip) : void - { - $this->traverseNodesWithCallable($closure->stmts, function (Node $node) use($serviceNamesToSkip) : ?MethodCall { - if (!$node instanceof MethodCall) { - return null; - } - if (!$this->isSetServices($node)) { - return null; - } - // must be exactly 2 args - if (\count($node->args) !== 2) { - return null; - } - // exchange type and service name - $args = $node->getArgs(); - $firstArg = $args[0]; - if (!$firstArg->value instanceof String_) { - return null; - } - // skip - if ($this->valueResolver->isValues($firstArg->value, $serviceNamesToSkip)) { - return null; - } - $secondArg = $args[1]; - /** @var string $serviceName */ - $serviceName = $this->valueResolver->getValue($firstArg->value); - $serviceType = $this->valueResolver->getValue($secondArg->value); - if (!\is_string($serviceType)) { - return null; - } - $this->alreadyChangedServiceNamesToTypes[$serviceName] = $serviceType; - // move 2nd arg to 1st position - $node->args = [$args[1]]; - $this->hasChanged = \true; - return $node; - }); - } - private function handleRefServiceFunctionReferences(Closure $closure) : void - { - $this->traverseNodesWithCallable($closure, function (Node $node) : ?Node { - if (!$node instanceof FuncCall) { - return null; - } - if (!$this->isNames($node->name, ['Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\service', 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ref'])) { - return null; - } - $args = $node->getArgs(); - if ($args === []) { - return null; - } - $firstArg = $args[0]; - foreach ($this->alreadyChangedServiceNamesToTypes as $serviceName => $serviceType) { - if (!$this->valueResolver->isValue($firstArg->value, $serviceName)) { - continue; - } - // replace string value with type - $classConstFetch = new ClassConstFetch(new FullyQualified($serviceType), 'class'); - $node->args = [new Arg($classConstFetch)]; - $this->hasChanged = \true; - } - return $node; - }); - } - /** - * @return string[] - */ - private function resolveDuplicatedTypeNames(Closure $closure) : array - { - $this->servicesNamesByType = []; - $this->traverseNodesWithCallable($closure, function (Node $node) { - if (!$node instanceof MethodCall) { - return null; - } - if (!$this->isSetServices($node)) { - return null; - } - $args = $node->getArgs(); - if (\count($args) !== 2) { - return null; - } - $firstArg = $args[0]; - $secondArg = $args[1]; - $serviceName = $this->valueResolver->getValue($firstArg->value); - $serviceType = $this->valueResolver->getValue($secondArg->value); - if (!\is_string($serviceType)) { - return null; - } - $this->servicesNamesByType[$serviceType][] = $serviceName; - }); - $duplicatedTypeNames = []; - foreach ($this->servicesNamesByType as $servicesNames) { - if (\count($servicesNames) <= 1) { - continue; - } - $duplicatedTypeNames = \array_merge($duplicatedTypeNames, $servicesNames); - } - return $duplicatedTypeNames; - } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php new file mode 100644 index 000000000..7d6a5340d --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Configs/ValueObject/ServiceArguments.php @@ -0,0 +1,52 @@ + + * @readonly + */ + private $params; + /** + * @var array<(string | int), (string | Expr)> + * @readonly + */ + private $envs; + /** + * @param array $params + * @param array $envs + */ + public function __construct(string $className, array $params, array $envs) + { + $this->className = $className; + $this->params = $params; + $this->envs = $envs; + } + public function getClassName() : string + { + return $this->className; + } + /** + * @return array + */ + public function getParams() : array + { + return $this->params; + } + /** + * @return array + */ + public function getEnvs() : array + { + return $this->envs; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/DowngradeSymfony70/Rector/Class_/DowngradeSymfonyCommandAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/DowngradeSymfony70/Rector/Class_/DowngradeSymfonyCommandAttributeRector.php index e2bf1ed18..01a7d3c5a 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/DowngradeSymfony70/Rector/Class_/DowngradeSymfonyCommandAttributeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/DowngradeSymfony70/Rector/Class_/DowngradeSymfonyCommandAttributeRector.php @@ -37,7 +37,8 @@ public function getRuleDefinition() : RuleDefinition return new RuleDefinition('Downgrade Symfony Command Attribute', [new CodeSample(<<<'CODE_SAMPLE' #[AsCommand(name: 'app:create-user', description: 'some description')] class CreateUserCommand extends Command -{} +{ +} CODE_SAMPLE , <<<'CODE_SAMPLE' #[AsCommand(name: 'app:create-user', description: 'some description')] diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/SwiftMailer/Rector/ClassMethod/SwiftMessageToEmailRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/SwiftMailer/Rector/ClassMethod/SwiftMessageToEmailRector.php new file mode 100644 index 000000000..d088087ac --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/SwiftMailer/Rector/ClassMethod/SwiftMessageToEmailRector.php @@ -0,0 +1,199 @@ + + */ + private $basicMapping = ['setSubject' => 'subject', 'setPriority' => 'priority']; + /** + * @var array + */ + private $addressesMapping = ['addBcc' => null, 'addCc' => null, 'addFrom' => null, 'addReplyTo' => null, 'addTo' => null, 'setBcc' => 'bcc', 'setCc' => 'cc', 'setFrom' => 'from', 'setReplyTo' => 'replyTo', 'setTo' => 'to']; + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Convert \\Swift_Message into an \\Symfony\\Component\\Mime\\Email', [new CodeSample(<<<'CODE_SAMPLE' +$message = (new \Swift_Message('Hello Email')) + ->setFrom('send@example.com') + ->setTo(['recipient@example.com' => 'Recipient']) + ->setBody( + $this->renderView( + 'emails/registration.html.twig', + ['name' => $name] + ), + 'text/html' + ) +CODE_SAMPLE +, <<<'CODE_SAMPLE' +$message = (new Email()) + ->from(new Address('send@example.com')) + ->to(new Address('recipient@example.com', 'Recipient')) + ->subject('Hello Email') + ->html($this->renderView( + 'emails/registration.html.twig', + ['name' => $name] + )) +; +CODE_SAMPLE +)]); + } + public function getNodeTypes() : array + { + return [ClassMethod::class]; + } + /** + * @param ClassMethod $node + */ + public function refactor(Node $node) : ?Node + { + $this->traverseNodesWithCallable($node, function (Node $node) : ?Node { + if ($node instanceof ClassMethod && $node->returnType instanceof FullyQualified && $this->isName($node->returnType, self::SWIFT_MESSAGE_FQN)) { + $node->returnType = new FullyQualified(self::EMAIL_FQN); + } + if ($node instanceof Param && $node->type instanceof FullyQualified && $this->isName($node->type, self::SWIFT_MESSAGE_FQN)) { + $node->type = new FullyQualified(self::EMAIL_FQN); + } + if ($node instanceof New_) { + if (!$this->isName($node->class, self::SWIFT_MESSAGE_FQN)) { + return null; + } + $args = $node->getArgs(); + if ($args !== []) { + $node = new MethodCall(new New_(new FullyQualified(self::EMAIL_FQN)), 'subject', [$args[0]]); + } else { + $node->class = new FullyQualified(self::EMAIL_FQN); + } + } + if ($node instanceof MethodCall) { + $name = $this->getName($node->name); + if ($name) { + $objectType = $this->nodeTypeResolver->getType($node->var); + if (!$objectType instanceof ObjectType) { + return null; + } + if (!$objectType->isInstanceOf(self::SWIFT_MESSAGE_FQN)->yes() && !$objectType->isInstanceOf(self::EMAIL_FQN)->yes()) { + return null; + } + $this->handleBasicMapping($node, $name); + $this->handleAddressMapping($node, $name); + $this->handleBody($node, $name); + if ($name === 'attach') { + $this->handleAttach($node); + } + if ($name === 'getId') { + $node = $this->handleId($node); + } + } + } + return $node; + }); + return $node; + } + private function handleBasicMapping(MethodCall $methodCall, string $name) : void + { + if (\array_key_exists($name, $this->basicMapping)) { + $methodCall->name = new Identifier($this->basicMapping[$name]); + } + } + private function handleAddressMapping(MethodCall $methodCall, string $name) : void + { + if (\array_key_exists($name, $this->addressesMapping)) { + if ($this->addressesMapping[$name] !== null) { + $methodCall->name = new Identifier($this->addressesMapping[$name]); + } + if ($methodCall->getArgs() === []) { + return; + } + if (!($firstArg = $methodCall->args[0]) instanceof Arg) { + return; + } + if ($firstArg->value instanceof Array_ && $firstArg->value->items !== []) { + $newArgs = []; + foreach ($firstArg->value->items as $item) { + if ($item instanceof ArrayItem) { + $newArgs[] = $this->nodeFactory->createArg($this->createAddress($item->key === null ? [new Arg($item->value)] : [new Arg($item->key), new Arg($item->value)])); + } + } + $methodCall->args = $newArgs; + } else { + $addressArguments = [new Arg($firstArg->value)]; + if (isset($methodCall->args[1]) && ($secondArg = $methodCall->args[1]) instanceof Arg) { + $addressArguments[] = new Arg($secondArg->value); + } + $methodCall->args = [new Arg($this->createAddress($addressArguments))]; + } + } + } + private function handleBody(MethodCall $methodCall, string $name) : void + { + if (!\in_array($name, ['setBody', 'addPart'], \true)) { + return; + } + if ($methodCall->args[1] instanceof Arg && $methodCall->args[1]->value instanceof String_ && $methodCall->args[1]->value->value === 'text/html') { + $methodCall->name = new Identifier('html'); + } else { + $methodCall->name = new Identifier('text'); + } + $methodCall->args = [$methodCall->args[0]]; + } + private function handleAttach(MethodCall $methodCall) : void + { + $this->traverseNodesWithCallable($methodCall->args[0], function (Node $node) use($methodCall) : Node { + if ($node instanceof StaticCall && $this->isName($node->name, 'fromPath')) { + $methodCall->args[0] = $node->args[0]; + } + if ($node instanceof MethodCall) { + if ($this->isName($node->name, 'setFilename')) { + $methodCall->args[1] = $node->args[0]; + } + if ($this->isName($node->name, 'setContentType')) { + $methodCall->args[2] = $node->args[0]; + } + } + return $node; + }); + $methodCall->name = new Identifier('attachFromPath'); + } + private function handleId(MethodCall $methodCall) : MethodCall + { + $methodCall->name = new Identifier('getHeaders'); + return $this->nodeFactory->createMethodCall($this->nodeFactory->createMethodCall($methodCall, 'get', [$this->nodeFactory->createArg(new String_('Content-ID'))]), 'toString'); + } + /** + * @param Arg[] $addressArguments + */ + private function createAddress(array $addressArguments) : New_ + { + return new New_(new FullyQualified('Symfony\\Component\\Mime\\Address'), $addressArguments); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php index 7d32c01b3..49b4a146e 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony26/Rector/MethodCall/RedirectToRouteRector.php @@ -9,7 +9,7 @@ use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer; -use RectorPrefix202405\Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use RectorPrefix202410\Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony28/Rector/StaticCall/ParseFileRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony28/Rector/StaticCall/ParseFileRector.php index ad1f45a8a..6bcd1522a 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony28/Rector/StaticCall/ParseFileRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony28/Rector/StaticCall/ParseFileRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Symfony\Symfony28\Rector\StaticCall; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Arg; use PhpParser\Node\Expr\StaticCall; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/FormTypeGetParentRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/FormTypeGetParentRector.php index f2db8a9e7..1a45b45cc 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/FormTypeGetParentRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/FormTypeGetParentRector.php @@ -118,7 +118,7 @@ private function isClassAndMethodMatch(Class_ $class, ClassMethod $classMethod) return $this->isObjectType($class, new ObjectType('Symfony\\Component\\Form\\AbstractType')); } if ($this->isName($classMethod->name, 'getExtendedType')) { - return $this->isObjectType($classMethod, new ObjectType('Symfony\\Component\\Form\\AbstractTypeExtension')); + return $this->isObjectType($class, new ObjectType('Symfony\\Component\\Form\\AbstractTypeExtension')); } return \false; } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php index 403ffcc01..62b7bbe08 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony30/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Symfony\Symfony30\Rector\ClassMethod; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Name; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony34/Rector/ClassMethod/ReplaceSensioRouteAnnotationWithSymfonyRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony34/Rector/ClassMethod/ReplaceSensioRouteAnnotationWithSymfonyRector.php index 76f50bd70..464dc02b3 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony34/Rector/ClassMethod/ReplaceSensioRouteAnnotationWithSymfonyRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony34/Rector/ClassMethod/ReplaceSensioRouteAnnotationWithSymfonyRector.php @@ -156,6 +156,6 @@ private function isEmptySensioRoute(array $values) : bool if (!$stringNode instanceof StringNode) { return \false; } - return $singleValue->value->value === '/'; + return $stringNode->value === '/'; } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/FormIsValidRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/FormIsValidRector.php index 70b043a2d..4343aa5ac 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/FormIsValidRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/FormIsValidRector.php @@ -50,7 +50,7 @@ public function refactor(Node $node) : ?Node } // mark child calls with known is submitted if ($this->isName($methodCall->name, 'isSubmitted')) { - $this->traverseNodesWithCallable($node->stmts, function (Node $node) { + $this->traverseNodesWithCallable($node->stmts, static function (Node $node) { $node->setAttribute('has_is_submitted', \true); return null; }); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php index 56a12ccf8..e2b8e6e03 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/MethodCall/ProcessBuilderGetProcessRector.php @@ -5,15 +5,22 @@ use PhpParser\Node; use PhpParser\Node\Expr\MethodCall; -use PHPStan\Type\ObjectType; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Symfony\Tests\Symfony40\Rector\MethodCall\ProcessBuilderGetProcessRector\ProcessBuilderGetProcessRectorTest + * @deprecated This rule is deprecated since Rector 1.1.2, as it can create invalid code. + * This needs a manual change + * + * @see https://github.com/pact-foundation/pact-php/pull/61/files. */ -final class ProcessBuilderGetProcessRector extends AbstractRector +final class ProcessBuilderGetProcessRector extends AbstractRector implements DeprecatedInterface { + /** + * @var bool + */ + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Removes `$processBuilder->getProcess()` calls to $processBuilder in Process in Symfony, because ProcessBuilder was removed. This is part of multi-step Rector and has very narrow focus.', [new CodeSample(<<<'CODE_SAMPLE' @@ -40,12 +47,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->isName($node->name, 'getProcess')) { - return null; - } - if (!$this->isObjectType($node->var, new ObjectType('Symfony\\Component\\Process\\ProcessBuilder'))) { + if ($this->hasWarned) { return null; } - return $node->var; + \trigger_error(\sprintf('The "%s" rule was deprecated, as it cannot change fluent code builder in a reliable way.', self::class)); + \sleep(3); + $this->hasWarned = \true; + return null; } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php index 806b17be2..e8cc04305 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony40/Rector/StaticCall/ProcessBuilderInstanceRector.php @@ -4,17 +4,23 @@ namespace Rector\Symfony\Symfony40\Rector\StaticCall; use PhpParser\Node; -use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\StaticCall; -use PhpParser\Node\Name; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Symfony\Tests\Symfony40\Rector\StaticCall\ProcessBuilderInstanceRector\ProcessBuilderInstanceRectorTest + * @deprecated This rule is deprecated since Rector 1.1.2, as it can create invalid code. + * This needs a manual change + * + * @see https://github.com/pact-foundation/pact-php/pull/61/files. */ -final class ProcessBuilderInstanceRector extends AbstractRector +final class ProcessBuilderInstanceRector extends AbstractRector implements DeprecatedInterface { + /** + * @var bool + */ + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Turns `ProcessBuilder::instance()` to new ProcessBuilder in Process in Symfony. Part of multi-step Rector.', [new CodeSample('$processBuilder = Symfony\\Component\\Process\\ProcessBuilder::instance($args);', '$processBuilder = new Symfony\\Component\\Process\\ProcessBuilder($args);')]); @@ -31,15 +37,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$node->class instanceof Name) { - return null; - } - if (!$this->isName($node->class, 'Symfony\\Component\\Process\\ProcessBuilder')) { - return null; - } - if (!$this->isName($node->name, 'create')) { + if ($this->hasWarned) { return null; } - return new New_($node->class, $node->args); + \trigger_error(\sprintf('The "%s" rule was deprecated, as it cannot change fluent code builder in a reliable way.', self::class)); + \sleep(3); + $this->hasWarned = \true; + return null; } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/MethodCall/ContainerGetToConstructorInjectionRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/MethodCall/ContainerGetToConstructorInjectionRector.php index 058100657..a85d84e78 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/MethodCall/ContainerGetToConstructorInjectionRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/MethodCall/ContainerGetToConstructorInjectionRector.php @@ -4,6 +4,7 @@ namespace Rector\Symfony\Symfony42\Rector\MethodCall; use PhpParser\Node; +use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Name; @@ -105,6 +106,13 @@ public function refactor(Node $node) : ?Node if (!$this->isObjectType($node->var, new ObjectType('Symfony\\Component\\DependencyInjection\\ContainerInterface'))) { return null; } + if ($node->isFirstClassCallable()) { + return null; + } + $args = $node->getArgs(); + if (\count($args) === 1 && $args[0]->value instanceof ClassConstFetch) { + return null; + } $propertyMetadata = $this->dependencyInjectionMethodCallAnalyzer->replaceMethodCallWithPropertyFetchAndDependency($class, $node); if (!$propertyMetadata instanceof PropertyMetadata) { return null; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/New_/StringToArrayArgumentProcessRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/New_/StringToArrayArgumentProcessRector.php index f8956a23f..ef811186f 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/New_/StringToArrayArgumentProcessRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony42/Rector/New_/StringToArrayArgumentProcessRector.php @@ -17,7 +17,7 @@ use Rector\PhpParser\NodeTransformer; use Rector\Rector\AbstractRector; use Rector\Util\Reflection\PrivatesAccessor; -use RectorPrefix202405\Symfony\Component\Console\Input\StringInput; +use RectorPrefix202410\Symfony\Component\Console\Input\StringInput; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -35,7 +35,7 @@ final class StringToArrayArgumentProcessRector extends AbstractRector /** * @var string[] */ - private const EXCLUDED_PROCESS_METHOD_CALLS = ['setWorkingDirectory', 'addOutput', 'addErrorOutput']; + private const EXCLUDED_PROCESS_METHOD_CALLS = ['setWorkingDirectory', 'addOutput', 'addErrorOutput', 'setInput']; public function __construct(NodeTransformer $nodeTransformer) { $this->nodeTransformer = $nodeTransformer; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/ConvertRenderTemplateShortNotationToBundleSyntaxRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/ConvertRenderTemplateShortNotationToBundleSyntaxRector.php index bf25573e8..8c34364f8 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/ConvertRenderTemplateShortNotationToBundleSyntaxRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/ConvertRenderTemplateShortNotationToBundleSyntaxRector.php @@ -3,7 +3,7 @@ declare (strict_types=1); namespace Rector\Symfony\Symfony43\Rector\MethodCall; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Arg; use PhpParser\Node\Expr\MethodCall; diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertIsSuccessfulRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertIsSuccessfulRector.php index 6140141be..f9ea30bb2 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertIsSuccessfulRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertIsSuccessfulRector.php @@ -70,7 +70,7 @@ class SomeClass extends TestCase { public function test() { - $this->assertResponseIsSuccessful(); + $this->assertResponseIsSuccessful(); } } CODE_SAMPLE diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertResponseCodeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertResponseCodeRector.php index dedaacbd1..36c84dd35 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertResponseCodeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertResponseCodeRector.php @@ -12,6 +12,7 @@ use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\Rector\AbstractRector; +use Rector\Symfony\CodeQuality\Enum\ResponseClass; use Rector\Symfony\NodeAnalyzer\SymfonyTestCaseAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -138,7 +139,7 @@ private function processAssertResponseStatusCodeSame($methodCall) return null; } // caller must be a response object - if (!$this->isObjectType($nestedMethodCall->var, new ObjectType('Symfony\\Component\\HttpFoundation\\Response'))) { + if (!$this->isObjectType($nestedMethodCall->var, new ObjectType(ResponseClass::BASIC))) { return null; } $statusCode = $this->valueResolver->getValue($args[0]->value, \true); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php index f47ccb819..3ace3018b 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony43/Rector/MethodCall/WebTestCaseAssertSelectorTextContainsRector.php @@ -4,52 +4,21 @@ namespace Rector\Symfony\Symfony43\Rector\MethodCall; use PhpParser\Node; -use PhpParser\Node\Arg; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; -use PhpParser\Node\Scalar\String_; -use Rector\NodeAnalyzer\ExprAnalyzer; -use Rector\PhpParser\Node\Value\ValueResolver; -use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; -use Rector\Symfony\NodeAnalyzer\SymfonyTestCaseAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @changelog https://symfony.com/blog/new-in-symfony-4-3-better-test-assertions - * @changelog https://github.com/symfony/symfony/pull/30813 - * - * @see \Rector\Symfony\Tests\Symfony43\Rector\MethodCall\WebTestCaseAssertSelectorTextContainsRector\WebTestCaseAssertSelectorTextContainsRectorTest + * @deprecated This rule is deprecated since Rector 1.1.2, as it does not upgrade to valid code. */ -final class WebTestCaseAssertSelectorTextContainsRector extends AbstractRector +final class WebTestCaseAssertSelectorTextContainsRector extends AbstractRector implements DeprecatedInterface { /** - * @readonly - * @var \Rector\Symfony\NodeAnalyzer\SymfonyTestCaseAnalyzer + * @var bool */ - private $symfonyTestCaseAnalyzer; - /** - * @readonly - * @var \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer - */ - private $testsNodeAnalyzer; - /** - * @readonly - * @var \Rector\NodeAnalyzer\ExprAnalyzer - */ - private $exprAnalyzer; - /** - * @readonly - * @var \Rector\PhpParser\Node\Value\ValueResolver - */ - private $valueResolver; - public function __construct(SymfonyTestCaseAnalyzer $symfonyTestCaseAnalyzer, TestsNodeAnalyzer $testsNodeAnalyzer, ExprAnalyzer $exprAnalyzer, ValueResolver $valueResolver) - { - $this->symfonyTestCaseAnalyzer = $symfonyTestCaseAnalyzer; - $this->testsNodeAnalyzer = $testsNodeAnalyzer; - $this->exprAnalyzer = $exprAnalyzer; - $this->valueResolver = $valueResolver; - } + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Simplify use of assertions in WebTestCase to assertSelectorTextContains()', [new CodeSample(<<<'CODE_SAMPLE' @@ -92,47 +61,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->symfonyTestCaseAnalyzer->isInWebTestCase($node)) { - return null; - } - if (!$this->testsNodeAnalyzer->isAssertMethodCallName($node, 'assertContains')) { - return null; - } - $args = $node->getArgs(); - $firstArgValue = $args[1]->value; - if (!$firstArgValue instanceof MethodCall) { + if ($this->hasWarned) { return null; } - $methodCall = $firstArgValue; - if (!$this->isName($methodCall->name, 'text')) { - return null; - } - if (!$methodCall->var instanceof MethodCall) { - return null; - } - $nestedMethodCall = $methodCall->var; - if (!$this->isName($nestedMethodCall->name, 'filter')) { - return null; - } - $newArgs = [$nestedMethodCall->args[0], $args[0]]; - // When we had a custom message argument we want to add it to the new assert. - if (isset($args[2])) { - if ($this->exprAnalyzer->isDynamicExpr($args[2]->value)) { - $newArgs[] = $args[2]->value; - } else { - $newArgs[] = new Arg(new String_($this->valueResolver->getValue($args[2]->value, \true))); - } - } - return $this->replaceFunctionCall($node, $newArgs); - } - /** - * @param Node[] $newArgs - */ - private function replaceFunctionCall(Node $node, array $newArgs) : Node - { - if ($node instanceof StaticCall) { - return $this->nodeFactory->createStaticCall('self', 'assertSelectorTextContains', $newArgs); - } - return $this->nodeFactory->createLocalMethodCall('assertSelectorTextContains', $newArgs); + \trigger_error(\sprintf('The "%s" rule was deprecated, as it does not upgrade to valid code.', self::class)); + \sleep(3); + $this->hasWarned = \true; + return null; } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/ClassMethod/ConsoleExecuteReturnIntRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/ClassMethod/ConsoleExecuteReturnIntRector.php index a3add05d6..0e1eb4605 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/ClassMethod/ConsoleExecuteReturnIntRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/ClassMethod/ConsoleExecuteReturnIntRector.php @@ -134,6 +134,9 @@ private function addReturn0ToExecuteClassMethod(ClassMethod $classMethod) : void } private function isReturnIntegerType(?Expr $expr) : bool { + if ($expr instanceof Int_) { + return \true; + } if ($expr instanceof Expr) { $returnedType = $this->getType($expr); if ($returnedType instanceof IntegerType) { diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php index 7dea6a322..6d46687c1 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony44/Rector/MethodCall/AuthorizationCheckerIsGrantedExtractorRector.php @@ -12,6 +12,7 @@ use PHPStan\Type\ObjectType; use Rector\NodeAnalyzer\ArgsAnalyzer; use Rector\Rector\AbstractRector; +use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -26,13 +27,19 @@ final class AuthorizationCheckerIsGrantedExtractorRector extends AbstractRector * @var \Rector\NodeAnalyzer\ArgsAnalyzer */ private $argsAnalyzer; - public function __construct(ArgsAnalyzer $argsAnalyzer) + /** + * @readonly + * @var \Rector\Symfony\TypeAnalyzer\ControllerAnalyzer + */ + private $controllerAnalyzer; + public function __construct(ArgsAnalyzer $argsAnalyzer, ControllerAnalyzer $controllerAnalyzer) { $this->argsAnalyzer = $argsAnalyzer; + $this->controllerAnalyzer = $controllerAnalyzer; } public function getRuleDefinition() : RuleDefinition { - return new RuleDefinition('Change `$this->authorizationChecker->isGranted([$a, $b])` to `$this->authorizationChecker->isGranted($a) || $this->authorizationChecker->isGranted($b)`', [new CodeSample(<<<'CODE_SAMPLE' + return new RuleDefinition('Change `$this->authorizationChecker->isGranted([$a, $b])` to `$this->authorizationChecker->isGranted($a) || $this->authorizationChecker->isGranted($b)`, also updates AbstractController usages', [new CodeSample(<<<'CODE_SAMPLE' if ($this->authorizationChecker->isGranted(['ROLE_USER', 'ROLE_ADMIN'])) { } CODE_SAMPLE @@ -55,6 +62,9 @@ public function getNodeTypes() : array */ public function refactor(Node $node) { + if ($this->controllerAnalyzer->isInsideController($node)) { + return $this->processControllerMethods($node); + } $objectType = $this->nodeTypeResolver->getType($node->var); if (!$objectType instanceof ObjectType) { return null; @@ -66,18 +76,7 @@ public function refactor(Node $node) if (!$this->nodeNameResolver->isName($node->name, 'isGranted')) { return null; } - $args = $node->getArgs(); - if ($this->argsAnalyzer->hasNamedArg($args)) { - return null; - } - if (!isset($args[0])) { - return null; - } - $value = $args[0]->value; - if (!$value instanceof Array_) { - return null; - } - return $this->processExtractIsGranted($node, $value, $args); + return $this->handleIsGranted($node); } /** * @param Arg[] $args @@ -114,4 +113,35 @@ private function processExtractIsGranted(MethodCall $methodCall, Array_ $array, } return $booleanOr; } + /** + * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\BinaryOp\BooleanOr|null + */ + private function processControllerMethods(MethodCall $methodCall) + { + if ($this->nodeNameResolver->isName($methodCall->name, 'isGranted')) { + return $this->handleIsGranted($methodCall); + } + return null; + } + /** + * @return \PhpParser\Node\Expr\BinaryOp\BooleanOr|null|\PhpParser\Node\Expr\MethodCall + */ + private function handleIsGranted(MethodCall $methodCall) + { + if ($methodCall->isFirstClassCallable()) { + return null; + } + $args = $methodCall->getArgs(); + if ($this->argsAnalyzer->hasNamedArg($args)) { + return null; + } + if (!isset($args[0])) { + return null; + } + $value = $args[0]->value; + if (!$value instanceof Array_) { + return null; + } + return $this->processExtractIsGranted($methodCall, $value, $args); + } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony51/Rector/ClassMethod/RouteCollectionBuilderToRoutingConfiguratorRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony51/Rector/ClassMethod/RouteCollectionBuilderToRoutingConfiguratorRector.php index a78b5fe4e..63818aadb 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony51/Rector/ClassMethod/RouteCollectionBuilderToRoutingConfiguratorRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony51/Rector/ClassMethod/RouteCollectionBuilderToRoutingConfiguratorRector.php @@ -66,7 +66,7 @@ public function getNodeTypes() : array return [Class_::class]; } /** - * @param Node\Stmt\Class_ $node + * @param Class_ $node */ public function refactor(Node $node) : ?Node { diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php index e7e5cfc66..17535d9d4 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony53/Rector/Class_/CommandDescriptionToPropertyRector.php @@ -4,25 +4,23 @@ namespace Rector\Symfony\Symfony53\Rector\Class_; use PhpParser\Node; -use PhpParser\Node\Arg; -use PhpParser\Node\Expr\MethodCall; -use PhpParser\Node\Expr\Variable; -use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\Class_; -use PhpParser\Node\Stmt\ClassMethod; -use PhpParser\Node\Stmt\Expression; -use PhpParser\Node\Stmt\Property; -use PHPStan\Type\ObjectType; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @changelog https://symfony.com/blog/new-in-symfony-5-3-lazy-command-description * - * @see \Rector\Symfony\Tests\Symfony53\Rector\Class_\CommandDescriptionToPropertyRector\CommandDescriptionToPropertyRectorTest + * @deprecated This rule is deprecated since Rector 1.1.2, as Symfony 6.1 introduced native attribute, + * more reliable and validated */ -final class CommandDescriptionToPropertyRector extends AbstractRector +final class CommandDescriptionToPropertyRector extends AbstractRector implements DeprecatedInterface { + /** + * @var bool + */ + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Symfony Command description setters are moved to properties', [new CodeSample(<<<'CODE_SAMPLE' @@ -62,96 +60,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->isObjectType($node, new ObjectType('Symfony\\Component\\Console\\Command\\Command'))) { - return null; - } - // already set → skip - $defaultNameProperty = $node->getProperty('defaultDescription'); - if ($defaultNameProperty instanceof Property) { - return null; - } - $commandDescriptionString = $this->resolveCommandDescriptionFromSetDescription($node); - if (!$commandDescriptionString instanceof String_) { - return null; - } - $defaultDescriptionProperty = $this->createStaticProtectedPropertyWithDefault($commandDescriptionString); - return $this->addDefaultDescriptionProperty($node, $defaultDescriptionProperty); - } - private function resolveCommandDescriptionFromSetDescription(Class_ $class) : ?String_ - { - $classMethod = $class->getMethod('configure'); - if (!$classMethod instanceof ClassMethod || $classMethod->stmts === null) { + if ($this->hasWarned) { return null; } - foreach ($classMethod->stmts as $key => $stmt) { - if (!$stmt instanceof Expression) { - continue; - } - if (!$stmt->expr instanceof MethodCall) { - continue; - } - $methodCall = $stmt->expr; - if ($methodCall->var instanceof Variable) { - return $this->resolveFromNonFluentMethodCall($methodCall, $classMethod, $key); - } - $string = null; - $this->traverseNodesWithCallable($stmt, function (Node $node) use(&$string) { - if ($node instanceof MethodCall && $this->isName($node->name, 'setDescription')) { - $string = $this->matchFirstArgString($node); - // remove nested call - return $node->var; - } - return null; - }); - return $string; - } + \trigger_error(\sprintf('The "%s" rule was deprecated, as its only dead middle step before more solid PHP attributes.', self::class)); + \sleep(3); + $this->hasWarned = \true; return null; } - private function createStaticProtectedPropertyWithDefault(String_ $string) : Property - { - $property = new \PhpParser\Builder\Property('defaultDescription'); - $property->makeProtected(); - $property->makeStatic(); - $property->setDefault($string); - return $property->getNode(); - } - private function addDefaultDescriptionProperty(Class_ $class, Property $defaultDescriptionProperty) : Node - { - // When we have property defaultName insert defaultDescription after it. - foreach ($class->stmts as $key => $stmt) { - if (!$stmt instanceof Property) { - continue; - } - if ($this->isName($stmt, 'defaultName')) { - \array_splice($class->stmts, ++$key, 0, [$defaultDescriptionProperty]); - return $class; - } - } - $class->stmts = \array_merge([$defaultDescriptionProperty], $class->stmts); - return $class; - } - private function matchFirstArgString(MethodCall $methodCall) : ?\PhpParser\Node\Scalar\String_ - { - $arg = $methodCall->getArgs()[0] ?? null; - if (!$arg instanceof Arg) { - return null; - } - if (!$arg->value instanceof String_) { - return null; - } - return $arg->value; - } - private function resolveFromNonFluentMethodCall(MethodCall $methodCall, ClassMethod $classMethod, int $key) : ?String_ - { - if (!$this->isName($methodCall->name, 'setDescription')) { - return null; - } - $string = $this->matchFirstArgString($methodCall); - if (!$string instanceof String_) { - return null; - } - // cleanup fluent call - unset($classMethod->stmts[$key]); - return $string; - } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php index 78604aa38..931e8af1d 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony60/Rector/FuncCall/ReplaceServiceArgumentRector.php @@ -13,7 +13,7 @@ use Rector\Symfony\ValueObject\ReplaceServiceArgument; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @see \Rector\Symfony\Tests\Symfony60\Rector\FuncCall\ReplaceServiceArgumentRector\ReplaceServiceArgumentRectorTest */ diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandConfigureToAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandConfigureToAttributeRector.php new file mode 100644 index 000000000..942f90035 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandConfigureToAttributeRector.php @@ -0,0 +1,177 @@ + + */ + private const METHODS_TO_ATTRIBUTE_NAMES = ['setName' => 'name', 'setDescription' => 'description', 'setAliases' => 'aliases', 'setHidden' => 'hidden']; + public function __construct(PhpAttributeGroupFactory $phpAttributeGroupFactory, ReflectionProvider $reflectionProvider) + { + $this->phpAttributeGroupFactory = $phpAttributeGroupFactory; + $this->reflectionProvider = $reflectionProvider; + } + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::ATTRIBUTES; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Add Symfony\\Component\\Console\\Attribute\\AsCommand to Symfony Commands from configure()', [new CodeSample(<<<'CODE_SAMPLE' +use Symfony\Component\Console\Command\Command; + +final class SunshineCommand extends Command +{ + public function configure() + { + $this->setName('sunshine'); + $this->setDescription('Some description'); + + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; + +#[AsCommand(name: 'sunshine', description: 'Some description')] +final class SunshineCommand extends Command +{ +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + if ($node->isAbstract()) { + return null; + } + if (!$this->reflectionProvider->hasClass(SymfonyAnnotation::AS_COMMAND)) { + return null; + } + if (!$this->isObjectType($node, new ObjectType('Symfony\\Component\\Console\\Command\\Command'))) { + return null; + } + $configureClassMethod = $node->getMethod('configure'); + if (!$configureClassMethod instanceof ClassMethod) { + return null; + } + // handle existing attribute + $asCommandAttribute = null; + $attributeArgs = []; + foreach ($node->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attribute) { + if (!$this->nodeNameResolver->isName($attribute->name, SymfonyAnnotation::AS_COMMAND)) { + continue; + } + $asCommandAttribute = $attribute; + foreach ($asCommandAttribute->args as $arg) { + if ($arg->name === null) { + // when the existing attribute does not use named arguments, we cannot upgrade + return null; + } + $attributeArgs[] = $arg; + } + break 2; + } + } + if (!$asCommandAttribute instanceof Attribute) { + $asCommandAttributeGroup = $this->phpAttributeGroupFactory->createFromClass(SymfonyAnnotation::AS_COMMAND); + $asCommandAttribute = $asCommandAttributeGroup->attrs[0]; + $node->attrGroups[] = $asCommandAttributeGroup; + } + foreach (self::METHODS_TO_ATTRIBUTE_NAMES as $methodName => $attributeName) { + $resolvedExpr = $this->findAndRemoveMethodExpr($configureClassMethod, $methodName); + if ($resolvedExpr instanceof Expr) { + $attributeArgs[] = $this->createNamedArg($attributeName, $resolvedExpr); + } + } + $asCommandAttribute->args = $attributeArgs; + // remove left overs + foreach ((array) $configureClassMethod->stmts as $key => $stmt) { + if ($this->isExpressionVariableThis($stmt)) { + unset($configureClassMethod->stmts[$key]); + } + } + return $node; + } + private function createNamedArg(string $name, Expr $expr) : Arg + { + return new Arg($expr, \false, \false, [], new Identifier($name)); + } + private function findAndRemoveMethodExpr(ClassMethod $classMethod, string $methodName) : ?Expr + { + $expr = null; + $this->traverseNodesWithCallable((array) $classMethod->stmts, function (Node $node) use(&$expr, $methodName) { + // find setName() method call + if (!$node instanceof MethodCall) { + return null; + } + if (!$this->isName($node->name, $methodName)) { + return null; + } + $expr = $node->getArgs()[0]->value; + return $node->var; + }); + return $expr; + } + private function isExpressionVariableThis(Stmt $stmt) : bool + { + if (!$stmt instanceof Expression) { + return \false; + } + if (!$stmt->expr instanceof Variable) { + return \false; + } + $variable = $stmt->expr; + return $this->isName($variable, 'this'); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandPropertyToAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandPropertyToAttributeRector.php index f1ca06f04..060914113 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandPropertyToAttributeRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony61/Rector/Class_/CommandPropertyToAttributeRector.php @@ -7,22 +7,22 @@ use PhpParser\Node\Arg; use PhpParser\Node\Attribute; use PhpParser\Node\AttributeGroup; -use PhpParser\Node\Expr\Array_; -use PhpParser\Node\Scalar\String_; +use PhpParser\Node\Expr; +use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Property; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ObjectType; -use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer; +use Rector\Doctrine\NodeAnalyzer\AttributeFinder; use Rector\PhpAttribute\NodeFactory\PhpAttributeGroupFactory; use Rector\Rector\AbstractRector; use Rector\Symfony\Enum\SymfonyAnnotation; -use Rector\Symfony\NodeAnalyzer\Command\AttributeValueResolver; -use Rector\Symfony\NodeAnalyzer\Command\SetAliasesMethodCallExtractor; +use Rector\Symfony\Enum\SymfonyClass; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @changelog https://symfony.com/doc/current/console.html#registering-the-command * @@ -35,16 +35,6 @@ final class CommandPropertyToAttributeRector extends AbstractRector implements M * @var \Rector\PhpAttribute\NodeFactory\PhpAttributeGroupFactory */ private $phpAttributeGroupFactory; - /** - * @readonly - * @var \Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer - */ - private $phpAttributeAnalyzer; - /** - * @readonly - * @var \Rector\Symfony\NodeAnalyzer\Command\AttributeValueResolver - */ - private $attributeValueResolver; /** * @readonly * @var \PHPStan\Reflection\ReflectionProvider @@ -52,16 +42,14 @@ final class CommandPropertyToAttributeRector extends AbstractRector implements M private $reflectionProvider; /** * @readonly - * @var \Rector\Symfony\NodeAnalyzer\Command\SetAliasesMethodCallExtractor + * @var \Rector\Doctrine\NodeAnalyzer\AttributeFinder */ - private $setAliasesMethodCallExtractor; - public function __construct(PhpAttributeGroupFactory $phpAttributeGroupFactory, PhpAttributeAnalyzer $phpAttributeAnalyzer, AttributeValueResolver $attributeValueResolver, ReflectionProvider $reflectionProvider, SetAliasesMethodCallExtractor $setAliasesMethodCallExtractor) + private $attributeFinder; + public function __construct(PhpAttributeGroupFactory $phpAttributeGroupFactory, ReflectionProvider $reflectionProvider, AttributeFinder $attributeFinder) { $this->phpAttributeGroupFactory = $phpAttributeGroupFactory; - $this->phpAttributeAnalyzer = $phpAttributeAnalyzer; - $this->attributeValueResolver = $attributeValueResolver; $this->reflectionProvider = $reflectionProvider; - $this->setAliasesMethodCallExtractor = $setAliasesMethodCallExtractor; + $this->attributeFinder = $attributeFinder; } public function provideMinPhpVersion() : int { @@ -74,15 +62,16 @@ public function getRuleDefinition() : RuleDefinition final class SunshineCommand extends Command { - /** @var string|null */ public static $defaultName = 'sunshine'; + + public static $defaultDescription = 'some description'; } CODE_SAMPLE , <<<'CODE_SAMPLE' use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; -#[AsCommand('sunshine')] +#[AsCommand(name: 'sunshine', description: 'some description')] final class SunshineCommand extends Command { } @@ -101,141 +90,71 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - if (!$this->isObjectType($node, new ObjectType('Symfony\\Component\\Console\\Command\\Command'))) { + if (!$this->isObjectType($node, new ObjectType(SymfonyClass::COMMAND))) { return null; } + // does attribute already exist? if (!$this->reflectionProvider->hasClass(SymfonyAnnotation::AS_COMMAND)) { return null; } - $defaultName = $this->resolveDefaultName($node); - if ($defaultName === null) { + $defaultNameExpr = $this->resolvePropertyExpr($node, 'defaultName'); + if (!$defaultNameExpr instanceof Expr) { return null; } - $defaultDescription = $this->resolveDefaultDescription($node); - $alisesArray = $this->setAliasesMethodCallExtractor->resolveCommandAliasesFromAttributeOrSetter($node); - return $this->replaceAsCommandAttribute($node, $this->createAttributeGroupAsCommand($defaultName, $defaultDescription, $alisesArray)); + $defaultDescriptionExpr = $this->resolvePropertyExpr($node, 'defaultDescription'); + $existingAsCommandAttribute = $this->attributeFinder->findAttributeByClass($node, SymfonyAnnotation::AS_COMMAND); + $attributeArgs = $this->createAttributeArgs($defaultNameExpr, $defaultDescriptionExpr); + // already has attribute, only add "name" and optionally "description" + if ($existingAsCommandAttribute instanceof Attribute) { + $existingAsCommandAttribute->args = \array_merge($attributeArgs, $existingAsCommandAttribute->args); + return $node; + } + $node->attrGroups[] = $this->createAttributeGroupAsCommand($attributeArgs); + return $node; } - private function createAttributeGroupAsCommand(string $defaultName, ?string $defaultDescription, ?Array_ $aliasesArray) : AttributeGroup + /** + * @param Arg[] $args + */ + private function createAttributeGroupAsCommand(array $args) : AttributeGroup { + Assert::allIsInstanceOf($args, Arg::class); $attributeGroup = $this->phpAttributeGroupFactory->createFromClass(SymfonyAnnotation::AS_COMMAND); - $attributeGroup->attrs[0]->args[] = new Arg(new String_($defaultName)); - if ($defaultDescription !== null) { - $attributeGroup->attrs[0]->args[] = new Arg(new String_($defaultDescription)); - } elseif ($aliasesArray instanceof Array_) { - $attributeGroup->attrs[0]->args[] = new Arg($this->nodeFactory->createNull()); - } - if ($aliasesArray instanceof Array_) { - $attributeGroup->attrs[0]->args[] = new Arg($aliasesArray); - } + $attributeGroup->attrs[0]->args = $args; return $attributeGroup; } - private function getValueFromProperty(Property $property) : ?string - { - if (\count($property->props) !== 1) { - return null; - } - $propertyProperty = $property->props[0]; - if ($propertyProperty->default instanceof String_) { - return $propertyProperty->default->value; - } - return null; - } - private function resolveDefaultName(Class_ $class) : ?string + private function resolvePropertyExpr(Class_ $class, string $propertyName) : ?Expr { foreach ($class->stmts as $key => $stmt) { if (!$stmt instanceof Property) { continue; } - if (!$this->isName($stmt->props[0], 'defaultName')) { + if (!$this->isName($stmt, $propertyName)) { continue; } - $defaultName = $this->getValueFromProperty($stmt); - if ($defaultName !== null) { + $defaultExpr = $stmt->props[0]->default; + if ($defaultExpr instanceof Expr) { // remove property unset($class->stmts[$key]); - return $defaultName; - } - } - return $this->defaultDefaultNameFromAttribute($class); - } - private function resolveDefaultDescription(Class_ $class) : ?string - { - foreach ($class->stmts as $key => $stmt) { - if (!$stmt instanceof Property) { - continue; - } - if (!$this->isName($stmt, 'defaultDescription')) { - continue; - } - $defaultDescription = $this->getValueFromProperty($stmt); - if ($defaultDescription !== null) { - unset($class->stmts[$key]); - return $defaultDescription; - } - } - return $this->resolveDefaultDescriptionFromAttribute($class); - } - private function resolveDefaultDescriptionFromAttribute(Class_ $class) : ?string - { - if ($this->phpAttributeAnalyzer->hasPhpAttribute($class, SymfonyAnnotation::AS_COMMAND)) { - $defaultDescriptionFromArgument = $this->attributeValueResolver->getArgumentValueFromAttribute($class, 1); - if (\is_string($defaultDescriptionFromArgument)) { - return $defaultDescriptionFromArgument; + return $defaultExpr; } } return null; } - private function replaceAsCommandAttribute(Class_ $class, AttributeGroup $createAttributeGroup) : ?Class_ - { - $hasAsCommandAttribute = \false; - $replacedAsCommandAttribute = \false; - foreach ($class->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - if ($this->nodeNameResolver->isName($attribute->name, SymfonyAnnotation::AS_COMMAND)) { - $hasAsCommandAttribute = \true; - $replacedAsCommandAttribute = $this->replaceArguments($attribute, $createAttributeGroup); - } - } - } - if ($hasAsCommandAttribute === \false) { - $class->attrGroups[] = $createAttributeGroup; - $replacedAsCommandAttribute = \true; - } - if ($replacedAsCommandAttribute === \false) { - return null; - } - return $class; - } - private function replaceArguments(Attribute $attribute, AttributeGroup $createAttributeGroup) : bool + private function createNamedArg(string $name, Expr $expr) : Arg { - $replacedAsCommandAttribute = \false; - if (!$attribute->args[0]->value instanceof String_) { - $attribute->args[0] = $createAttributeGroup->attrs[0]->args[0]; - $replacedAsCommandAttribute = \true; - } - if (!isset($attribute->args[1]) && isset($createAttributeGroup->attrs[0]->args[1])) { - $attribute->args[1] = $createAttributeGroup->attrs[0]->args[1]; - $replacedAsCommandAttribute = \true; - } - if (!isset($attribute->args[2]) && isset($createAttributeGroup->attrs[0]->args[2])) { - $attribute->args[2] = $createAttributeGroup->attrs[0]->args[2]; - $replacedAsCommandAttribute = \true; - } - if (!isset($attribute->args[3]) && isset($createAttributeGroup->attrs[0]->args[3])) { - $attribute->args[3] = $createAttributeGroup->attrs[0]->args[3]; - $replacedAsCommandAttribute = \true; - } - return $replacedAsCommandAttribute; + return new Arg($expr, \false, \false, [], new Identifier($name)); } - private function defaultDefaultNameFromAttribute(Class_ $class) : ?string + /** + * @return Arg[] + */ + private function createAttributeArgs(Expr $defaultNameExpr, ?Expr $defaultDescriptionExpr) : array { - if (!$this->phpAttributeAnalyzer->hasPhpAttribute($class, SymfonyAnnotation::AS_COMMAND)) { - return null; - } - $defaultNameFromArgument = $this->attributeValueResolver->getArgumentValueFromAttribute($class, 0); - if (\is_string($defaultNameFromArgument)) { - return $defaultNameFromArgument; + // already has the attribute, add description and name to the front + $attributeArgs = []; + $attributeArgs[] = $this->createNamedArg('name', $defaultNameExpr); + if ($defaultDescriptionExpr instanceof Expr) { + $attributeArgs[] = $this->createNamedArg('description', $defaultDescriptionExpr); } - return null; + return $attributeArgs; } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/ClassMethod/ClassMethod/ArgumentValueResolverToValueResolverRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/ClassMethod/ClassMethod/ArgumentValueResolverToValueResolverRector.php index 7daeed742..5141d86c2 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/ClassMethod/ClassMethod/ArgumentValueResolverToValueResolverRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/ClassMethod/ClassMethod/ArgumentValueResolverToValueResolverRector.php @@ -16,8 +16,8 @@ use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; use Rector\Rector\AbstractRector; -use RectorPrefix202405\Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; -use RectorPrefix202405\Symfony\Component\HttpKernel\Controller\ValueResolverInterface; +use RectorPrefix202410\Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; +use RectorPrefix202410\Symfony\Component\HttpKernel\Controller\ValueResolverInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -38,10 +38,10 @@ public function refactor(Node $node) : ?Node return null; } foreach ($node->getMethods() as $key => $classMethod) { - if ($classMethod->name->toString() === 'supports') { + if ($this->isName($classMethod->name, 'supports')) { [$isIdentical, $supportFirstArg, $supportSecondArg] = $this->extractSupportsArguments($node, $key, $classMethod); } - if ($classMethod->name->toString() === 'resolve' && isset($isIdentical) && isset($supportFirstArg) && isset($supportSecondArg)) { + if ($this->isName($classMethod->name, 'resolve') && isset($isIdentical) && isset($supportFirstArg) && isset($supportSecondArg)) { $this->processResolveMethod($classMethod, $isIdentical, $supportFirstArg, $supportSecondArg); } } @@ -116,15 +116,9 @@ private function extractSupportsArguments(Class_ $class, int $key, ClassMethod $ } return [$isIdentical, $supportFirstArg, $supportSecondArg]; } - /** - * @param mixed $classMethod - * @param mixed $isIdentical - * @param mixed $supportFirstArg - * @param mixed $supportSecondArg - */ - private function processResolveMethod($classMethod, $isIdentical, $supportFirstArg, $supportSecondArg) : void + private function processResolveMethod(ClassMethod $classMethod, bool $isIdentical, Expr $supportFirstArg, Expr $supportSecondArg) : void { $ifCondition = $isIdentical ? new NotIdentical($supportFirstArg, $supportSecondArg) : new Identical($supportFirstArg, $supportSecondArg); - $classMethod->stmts = \array_merge([new If_($ifCondition, ['stmts' => [new Return_(new ConstFetch(new Name('[]')))]])], $classMethod->getStmts()); + $classMethod->stmts = \array_merge([new If_($ifCondition, ['stmts' => [new Return_(new ConstFetch(new Name('[]')))]])], (array) $classMethod->stmts); } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/Class_/SecurityAttributeToIsGrantedAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/Class_/SecurityAttributeToIsGrantedAttributeRector.php new file mode 100644 index 000000000..26e96f2fc --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony62/Rector/Class_/SecurityAttributeToIsGrantedAttributeRector.php @@ -0,0 +1,153 @@ +[\\w]+)(\\"|\')\\)$#'; + /** + * @var string + * @see https://regex101.com/r/NYRPrx/1 + */ + private const IS_GRANTED_AND_SUBJECT_REGEX = '#^is_granted\\((\\"|\')(?[\\w]+)(\\"|\'),\\s+(?\\w+)\\)$#'; + public function provideMinPhpVersion() : int + { + return PhpVersionFeature::ATTRIBUTES; + } + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Replaces #[Security] framework-bundle attribute with Symfony native #[IsGranted] one', [new CodeSample(<<<'CODE_SAMPLE' +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; + +class PostController extends Controller +{ + #[Security("is_granted('ROLE_ADMIN')")] + public function index() + { + } + + #[Security("is_granted('ROLE_ADMIN') and is_granted('ROLE_FRIENDLY_USER')")] + public function list() + { + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +use Symfony\Component\ExpressionLanguage\Expression; +use Symfony\Component\Security\Http\Attribute\IsGranted; + +class PostController extends Controller +{ + #[IsGranted('ROLE_ADMIN')] + public function index() + { + } + + #[IsGranted(new Expression("is_granted('ROLE_ADMIN') and is_granted('ROLE_FRIENDLY_USER')"))] + public function list() + { + } +} +CODE_SAMPLE +)]); + } + /** + * @return array> + */ + public function getNodeTypes() : array + { + return [Class_::class, ClassMethod::class]; + } + /** + * @param Class_|ClassMethod $node + */ + public function refactor(Node $node) : ?Node + { + $hasChanged = \false; + foreach ($node->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attribute) { + if (!$this->isName($attribute->name, self::SECURITY_ATTRIBUTE)) { + continue; + } + $attribute->name = new FullyQualified(self::IS_GRANTED_ATTRIBUTE); + $firstArg = $attribute->args[0]; + $firstArg->name = new Identifier('attribute'); + $firstValue = $firstArg->value; + if ($firstValue instanceof String_) { + $match = Strings::match($firstValue->value, self::IS_GRANTED_AND_SUBJECT_REGEX); + if ($match !== null) { + $firstArg->name = new Identifier('attribute'); + $firstArg->value = new String_($match['role']); + $secondArg = new Arg(new String_($match['subject'])); + $secondArg->name = new Identifier('subject'); + $attribute->args[] = $secondArg; + $hasChanged = \true; + continue; + } + $match = Strings::match($firstValue->value, self::SOLE_IS_GRANTED_REGEX); + // for single role, return it directly + if (isset($match['role'])) { + $firstArg->value = new String_($match['role']); + $hasChanged = \true; + continue; + } + } + $attribute->args[0]->value = $this->wrapToNewExpression($firstArg->value); + $hasChanged = \true; + } + } + if ($hasChanged) { + return $node; + } + return null; + } + /** + * @return \PhpParser\Node\Expr\New_|\PhpParser\Node\Scalar\String_ + */ + private function wrapToNewExpression(Expr $expr) + { + if ($expr instanceof String_) { + $match = Strings::match($expr->value, self::SOLE_IS_GRANTED_REGEX); + // for single role, return it directly + if (isset($match['role'])) { + return new String_($match['role']); + } + } + $args = [new Arg($expr)]; + return new New_(new FullyQualified('Symfony\\Component\\ExpressionLanguage\\Expression'), $args); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php new file mode 100644 index 000000000..3dcf1a98e --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony63/Rector/Class_/ParamAndEnvAttributeRector.php @@ -0,0 +1,133 @@ +[\\w\\.]+)%$#'; + /** + * @var string + * @see https://regex101.com/r/7xpVRP/1 + */ + private const ENV_REGEX = '#%env\\((?\\w+)\\)%$#'; + public function getRuleDefinition() : RuleDefinition + { + return new RuleDefinition('Make param/env use in #[Attribute] more precise', [new CodeSample(<<<'CODE_SAMPLE' +namespace App\Service; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; + +class MessageGenerator +{ + public function __construct( + #[Autowire('%kernel.debug%')] + bool $debugMode, + + #[Autowire('%env(SOME_ENV_VAR)%')] + string $senderName, + ) { + } +} +CODE_SAMPLE +, <<<'CODE_SAMPLE' +namespace App\Service; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; + +class MessageGenerator +{ + public function __construct( + #[Autowire(param: 'kernel.debug')] + bool $debugMode, + + #[Autowire(env: 'SOME_ENV_VAR')] + string $senderName, + ) { + } +} +CODE_SAMPLE +)]); + } + public function getNodeTypes() : array + { + return [Class_::class]; + } + /** + * @param Class_ $node + */ + public function refactor(Node $node) : ?Node + { + $classMethod = $node->getMethod(MethodName::CONSTRUCT); + if (!$classMethod instanceof ClassMethod) { + return null; + } + if ($classMethod->getParams() === []) { + return null; + } + $hasChanged = \false; + foreach ($classMethod->params as $param) { + foreach ($param->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attribute) { + if (!$this->isName($attribute->name, SymfonyAttribute::AUTOWIRE)) { + continue; + } + foreach ($attribute->args as $attributeArg) { + if ($this->isAlreadyEnvParamNamed($attributeArg)) { + continue; + } + // we can handle only string values + if (!$attributeArg->value instanceof String_) { + continue; + } + $envMatch = Strings::match($attributeArg->value->value, self::ENV_REGEX); + if (isset($envMatch['env'])) { + $attributeArg->name = new Identifier('env'); + $attributeArg->value = new String_($envMatch['env']); + $hasChanged = \true; + continue; + } + $paramMatch = Strings::match($attributeArg->value->value, self::PARAMETER_REGEX); + if (isset($paramMatch['param'])) { + $attributeArg->name = new Identifier('param'); + $attributeArg->value = new String_($paramMatch['param']); + $hasChanged = \true; + } + } + } + } + } + if ($hasChanged) { + return $node; + } + return null; + } + private function isAlreadyEnvParamNamed(Arg $arg) : bool + { + if (!$arg->name instanceof Identifier) { + return \false; + } + return \in_array($arg->name->toString(), ['env', 'param'], \true); + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php index 161f274dd..e20e4a9ad 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/rules/Symfony64/Rector/Class_/ChangeRouteAttributeFromAnnotationSubnamespaceRector.php @@ -4,36 +4,36 @@ namespace Rector\Symfony\Symfony64\Rector\Class_; use PhpParser\Node; -use PhpParser\Node\Attribute; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Symfony\Tests\Symfony64\Rector\Class_\ChangeRouteAttributeFromAnnotationSubnamespaceRector + * @deprecated This rule is deprecated since Rector 1.1.2. Use @see RenameAttributeRector rule instead. */ -final class ChangeRouteAttributeFromAnnotationSubnamespaceRector extends AbstractRector +final class ChangeRouteAttributeFromAnnotationSubnamespaceRector extends AbstractRector implements DeprecatedInterface { - private const ANNOTATION_ROUTE = 'Symfony\\Component\\Routing\\Annotation\\Route'; - private const ATTRIBUTE_ROUTE = 'Symfony\\Component\\Routing\\Attribute\\Route'; + /** + * @var bool + */ + private $hasWarned = \false; public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Replace Symfony\\Component\\Routing\\Annotation\\Route by Symfony\\Component\\Routing\\Attribute\\Route when the class use #Route[] attribute', [new CodeSample(<<<'CODE_SAMPLE' - /** - * #[\Symfony\Component\Routing\Annotation\Route("/foo")] - */ - public function create(Request $request): Response - { - return new Response(); - } +#[\Symfony\Component\Routing\Annotation\Route("/foo")] +public function create(Request $request): Response +{ + return new Response(); +} CODE_SAMPLE , <<<'CODE_SAMPLE' - #[\Symfony\Component\Routing\Attribute\Route('/foo')] - public function create(Request $request): Response - { - return new Response(); - } +#[\Symfony\Component\Routing\Attribute\Route('/foo')] +public function create(Request $request): Response +{ + return new Response(); +} CODE_SAMPLE )]); } @@ -46,18 +46,12 @@ public function getNodeTypes() : array */ public function refactor(Node $node) : ?Node { - foreach ($node->attrGroups as $attributeGroup) { - foreach ($attributeGroup->attrs as $attribute) { - if ($this->isSymfonyRouteAttribute($attribute)) { - $attribute->name = new Node\Name\FullyQualified(self::ATTRIBUTE_ROUTE); - return $node; - } - } + if ($this->hasWarned) { + return null; } + \trigger_error(\sprintf('The "%s" rule was deprecated. Use RenameAttributeRector rule instead', self::class)); + \sleep(3); + $this->hasWarned = \true; return null; } - public function isSymfonyRouteAttribute(Node $node) : bool - { - return $node instanceof Attribute && $node->name !== null && (string) $node->name === self::ANNOTATION_ROUTE; - } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Annotation/AnnotationAnalyzer.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Annotation/AnnotationAnalyzer.php index 3a9e108ac..2e8be3391 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Annotation/AnnotationAnalyzer.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Annotation/AnnotationAnalyzer.php @@ -22,17 +22,24 @@ public function __construct(PhpDocInfoFactory $phpDocInfoFactory) } public function hasClassMethodWithTemplateAnnotation(Class_ $class) : bool { + $classTemplateAnnotation = $this->getDoctrineAnnotationTagValueNode($class, SymfonyAnnotation::TEMPLATE); + if ($classTemplateAnnotation instanceof DoctrineAnnotationTagValueNode) { + return \true; + } foreach ($class->getMethods() as $classMethod) { - $templateDoctrineAnnotationTagValueNode = $this->getDoctrineAnnotationTagValueNode($classMethod, SymfonyAnnotation::TEMPLATE); - if ($templateDoctrineAnnotationTagValueNode instanceof DoctrineAnnotationTagValueNode) { + $classMethodTemplateAnnotation = $this->getDoctrineAnnotationTagValueNode($classMethod, SymfonyAnnotation::TEMPLATE); + if ($classMethodTemplateAnnotation instanceof DoctrineAnnotationTagValueNode) { return \true; } } return \false; } - public function getDoctrineAnnotationTagValueNode(ClassMethod $classMethod, string $annotationClass) : ?DoctrineAnnotationTagValueNode + /** + * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\ClassMethod $node + */ + public function getDoctrineAnnotationTagValueNode($node, string $annotationClass) : ?DoctrineAnnotationTagValueNode { - $phpDocInfo = $this->phpDocInfoFactory->createFromNode($classMethod); + $phpDocInfo = $this->phpDocInfoFactory->createFromNode($node); if (!$phpDocInfo instanceof PhpDocInfo) { return null; } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/NodeAnalyzer/ControllerMethodAnalyzer.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/NodeAnalyzer/ControllerMethodAnalyzer.php index d498af476..54fe9a5ca 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/NodeAnalyzer/ControllerMethodAnalyzer.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/NodeAnalyzer/ControllerMethodAnalyzer.php @@ -3,7 +3,6 @@ declare (strict_types=1); namespace Rector\Symfony\Bridge\NodeAnalyzer; -use PhpParser\Node; use PhpParser\Node\Stmt\ClassMethod; use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer; final class ControllerMethodAnalyzer @@ -20,14 +19,11 @@ public function __construct(ControllerAnalyzer $controllerAnalyzer) /** * Detect if is Action() in Controller */ - public function isAction(Node $node) : bool + public function isAction(ClassMethod $classMethod) : bool { - if (!$node instanceof ClassMethod) { + if (!$this->controllerAnalyzer->isInsideController($classMethod)) { return \false; } - if (!$this->controllerAnalyzer->isInsideController($node)) { - return \false; - } - return $node->isPublic() && !$node->isStatic(); + return $classMethod->isPublic() && !$classMethod->isStatic(); } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/ContainerServiceProvider.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/ContainerServiceProvider.php index 9a6e49815..9ebb7b4bd 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/ContainerServiceProvider.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/ContainerServiceProvider.php @@ -6,8 +6,8 @@ use Rector\Configuration\Option; use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Exception\ShouldNotHappenException; -use RectorPrefix202405\Symfony\Component\DependencyInjection\Container; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\DependencyInjection\Container; +use RectorPrefix202410\Webmozart\Assert\Assert; final class ContainerServiceProvider { /** diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/Routing/SymfonyRoutesProvider.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/Routing/SymfonyRoutesProvider.php index 6a28343a3..117fbce3a 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/Routing/SymfonyRoutesProvider.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Bridge/Symfony/Routing/SymfonyRoutesProvider.php @@ -6,8 +6,8 @@ use Rector\Symfony\Bridge\Symfony\ContainerServiceProvider; use Rector\Symfony\Contract\Bridge\Symfony\Routing\SymfonyRoutesProviderInterface; use Rector\Symfony\ValueObject\SymfonyRouteMetadata; -use RectorPrefix202405\Symfony\Component\Routing\RouterInterface; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Symfony\Component\Routing\RouterInterface; +use RectorPrefix202410\Webmozart\Assert\Assert; /** * @api part of AddRouteAnnotationRector */ diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Enum/SymfonyAttribute.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Enum/SymfonyAttribute.php new file mode 100644 index 000000000..1f48e2ffb --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Enum/SymfonyAttribute.php @@ -0,0 +1,12 @@ +nodeNameResolver = $nodeNameResolver; - } - /** - * @return string|\PhpParser\Node\Expr\ConstFetch|\PhpParser\Node\Expr\Array_|null - */ - public function getArgumentValueFromAttribute(Class_ $class, int $argumentIndexKey) - { - foreach ($class->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attribute) { - if (!$this->nodeNameResolver->isName($attribute->name, SymfonyAnnotation::AS_COMMAND)) { - continue; - } - if (!isset($attribute->args[$argumentIndexKey])) { - continue; - } - $arg = $attribute->args[$argumentIndexKey]; - if ($arg->value instanceof String_) { - return $arg->value->value; - } elseif ($arg->value instanceof ConstFetch || $arg->value instanceof Array_) { - return $arg->value; - } - } - } - return null; - } -} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/Command/SetAliasesMethodCallExtractor.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/Command/SetAliasesMethodCallExtractor.php deleted file mode 100644 index cbfb4b6d9..000000000 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/Command/SetAliasesMethodCallExtractor.php +++ /dev/null @@ -1,127 +0,0 @@ -phpAttributeAnalyzer = $phpAttributeAnalyzer; - $this->nodeNameResolver = $nodeNameResolver; - $this->nodeTypeResolver = $nodeTypeResolver; - $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; - $this->attributeValueResolver = $attributeValueResolver; - } - public function resolveCommandAliasesFromAttributeOrSetter(Class_ $class) : ?Array_ - { - $classMethod = $class->getMethod('configure'); - if (!$classMethod instanceof ClassMethod) { - return $this->resolveCommandAliasesFromAttribute($class); - } - if ($classMethod->stmts === null) { - return null; - } - $aliasesArray = $this->resolveFromStmtSetterMethodCall($classMethod); - if ($aliasesArray instanceof Array_) { - return $aliasesArray; - } - $aliasesArray = null; - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (Node $node) use(&$aliasesArray) { - if (!$node instanceof MethodCall) { - return null; - } - if (!$this->isSetAliasesMethodCall($node)) { - return null; - } - $firstArg = $node->getArgs()[0]; - $firstArgValue = $firstArg->value; - if (!$firstArgValue instanceof Array_) { - return null; - } - $aliasesArray = $firstArgValue; - return $node->var; - }); - return $aliasesArray; - } - private function resolveCommandAliasesFromAttribute(Class_ $class) : ?Array_ - { - if (!$this->phpAttributeAnalyzer->hasPhpAttribute($class, SymfonyAnnotation::AS_COMMAND)) { - return null; - } - $commandAliasesFromArgument = $this->attributeValueResolver->getArgumentValueFromAttribute($class, 2); - if ($commandAliasesFromArgument instanceof Array_) { - return $commandAliasesFromArgument; - } - return null; - } - private function resolveFromStmtSetterMethodCall(ClassMethod $classMethod) : ?\PhpParser\Node\Expr\Array_ - { - if ($classMethod->stmts === null) { - return null; - } - foreach ($classMethod->stmts as $key => $stmt) { - if (!$stmt instanceof Expression) { - continue; - } - if (!$stmt->expr instanceof MethodCall) { - continue; - } - $methodCall = $stmt->expr; - if (!$this->isSetAliasesMethodCall($methodCall)) { - continue; - } - $arg = $methodCall->getArgs()[0]; - if (!$arg->value instanceof Array_) { - return null; - } - unset($classMethod->stmts[$key]); - return $arg->value; - } - return null; - } - private function isSetAliasesMethodCall(MethodCall $methodCall) : bool - { - if (!$this->nodeNameResolver->isName($methodCall->name, 'setAliases')) { - return \false; - } - return $this->nodeTypeResolver->isObjectType($methodCall->var, new ObjectType('Symfony\\Component\\Console\\Command\\Command')); - } -} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/SymfonyTestCaseAnalyzer.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/SymfonyTestCaseAnalyzer.php index 8b98b6bc0..de3531d1e 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/SymfonyTestCaseAnalyzer.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/NodeAnalyzer/SymfonyTestCaseAnalyzer.php @@ -25,6 +25,9 @@ public function isInWebTestCase(Node $node) : bool } return $classReflection->isSubclassOf('Symfony\\Bundle\\FrameworkBundle\\Test\\WebTestCase'); } + /** + * @api + */ public function isInKernelTestCase(Node $node) : bool { $classReflection = $this->reflectionResolver->resolveClassReflection($node); diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/PhpParser/NamedSimplePhpParser.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/PhpParser/NamedSimplePhpParser.php new file mode 100644 index 000000000..348458db8 --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/PhpParser/NamedSimplePhpParser.php @@ -0,0 +1,37 @@ +phpParser = $parserFactory->create(ParserFactory::ONLY_PHP7); + } + /** + * @return Stmt[] + */ + public function parseString(string $content) : array + { + $stmts = $this->phpParser->parse($content); + if ($stmts === null) { + return []; + } + $nodeTraverser = new NodeTraverser(); + $nodeTraverser->addVisitor(new NameResolver()); + $nodeTraverser->traverse($stmts); + return $stmts; + } +} diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php index 51e713ac3..c17bb227b 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/FOSRestSetList.php @@ -3,10 +3,11 @@ declare (strict_types=1); namespace Rector\Symfony\Set; +use Rector\Set\Contract\SetListInterface; /** * @api used in public */ -final class FOSRestSetList +final class FOSRestSetList implements SetListInterface { /** * @var string diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/JMSSetList.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/JMSSetList.php index 5c233bd1c..99c3e40af 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/JMSSetList.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/JMSSetList.php @@ -3,10 +3,11 @@ declare (strict_types=1); namespace Rector\Symfony\Set; +use Rector\Set\Contract\SetListInterface; /** * @api */ -final class JMSSetList +final class JMSSetList implements SetListInterface { /** * @var string diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php index 612f20380..0076ff3f8 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SensiolabsSetList.php @@ -3,10 +3,11 @@ declare (strict_types=1); namespace Rector\Symfony\Set; +use Rector\Set\Contract\SetListInterface; /** * @api */ -final class SensiolabsSetList +final class SensiolabsSetList implements SetListInterface { /** * @var string diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SetProvider/SymfonySetProvider.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SetProvider/SymfonySetProvider.php new file mode 100644 index 000000000..19e58131a --- /dev/null +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/Set/SetProvider/SymfonySetProvider.php @@ -0,0 +1,56 @@ +nodeTypeResolver = $nodeTypeResolver; $this->getMethodAwareObjectTypes = [new ObjectType('Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController'), new ObjectType('Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller'), new ObjectType('Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerTrait')]; } - public function isGetMethodAwareType(Node $node) : bool + public function isGetMethodAwareType(Expr $expr) : bool { - return $this->nodeTypeResolver->isObjectTypes($node, $this->getMethodAwareObjectTypes); + return $this->nodeTypeResolver->isObjectTypes($expr, $this->getMethodAwareObjectTypes); } } diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObject/IntlBundleClassToNewClass.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObject/IntlBundleClassToNewClass.php index 58e6cd1f3..a25bcb319 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObject/IntlBundleClassToNewClass.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObject/IntlBundleClassToNewClass.php @@ -4,7 +4,7 @@ namespace Rector\Symfony\ValueObject; use Rector\Validation\RectorAssert; -use RectorPrefix202405\Webmozart\Assert\Assert; +use RectorPrefix202410\Webmozart\Assert\Assert; final class IntlBundleClassToNewClass { /** diff --git a/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObjectFactory/ServiceMapFactory.php b/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObjectFactory/ServiceMapFactory.php index 101bdc04e..4e72737b7 100644 --- a/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObjectFactory/ServiceMapFactory.php +++ b/vendor/rector/rector/vendor/rector/rector-symfony/src/ValueObjectFactory/ServiceMapFactory.php @@ -3,9 +3,9 @@ declare (strict_types=1); namespace Rector\Symfony\ValueObjectFactory; -use RectorPrefix202405\Nette\Utils\FileSystem; -use RectorPrefix202405\Nette\Utils\Json; -use RectorPrefix202405\Nette\Utils\Strings; +use RectorPrefix202410\Nette\Utils\FileSystem; +use RectorPrefix202410\Nette\Utils\Json; +use RectorPrefix202410\Nette\Utils\Strings; use Rector\Symfony\Exception\XmlContainerNotExistsException; use Rector\Symfony\ValueObject\ServiceDefinition; use Rector\Symfony\ValueObject\ServiceMap\ServiceMap; diff --git a/vendor/rector/rector/vendor/scoper-autoload.php b/vendor/rector/rector/vendor/scoper-autoload.php index 33b0d4e87..3cb9c4e9e 100644 --- a/vendor/rector/rector/vendor/scoper-autoload.php +++ b/vendor/rector/rector/vendor/scoper-autoload.php @@ -14,7 +14,7 @@ // Restore the backup and ensure the excluded files are properly marked as loaded $GLOBALS['__composer_autoload_files'] = \array_merge( $existingComposerAutoloadFiles, - \array_fill_keys(['0e6d7bf4a5811bfa5cf40c5ccd6fae6a', '5928a00fa978807cf85d90ec3f4b0147'], true) + \array_fill_keys(['5928a00fa978807cf85d90ec3f4b0147', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a'], true) ); return $loader; @@ -29,58 +29,63 @@ function humbug_phpscoper_expose_class($exposed, $prefixed) { } } } -humbug_phpscoper_expose_class('AutoloadIncluder', 'RectorPrefix202405\AutoloadIncluder'); -humbug_phpscoper_expose_class('ComposerAutoloaderInit70e3025dac7e7555f69a9b4ca9e3dfde', 'RectorPrefix202405\ComposerAutoloaderInit70e3025dac7e7555f69a9b4ca9e3dfde'); -humbug_phpscoper_expose_class('Product', 'RectorPrefix202405\Product'); +humbug_phpscoper_expose_class('AutoloadIncluder', 'RectorPrefix202410\AutoloadIncluder'); +humbug_phpscoper_expose_class('ComposerAutoloaderInit7c12491db1a700dd78980ecb6595c088', 'RectorPrefix202410\ComposerAutoloaderInit7c12491db1a700dd78980ecb6595c088'); +humbug_phpscoper_expose_class('Product', 'RectorPrefix202410\Product'); // Function aliases. For more information see: // https://github.com/humbug/php-scoper/blob/master/docs/further-reading.md#function-aliases -if (!function_exists('dump_node')) { function dump_node() { return \RectorPrefix202405\dump_node(...func_get_args()); } } -if (!function_exists('formatErrorMessage')) { function formatErrorMessage() { return \RectorPrefix202405\formatErrorMessage(...func_get_args()); } } -if (!function_exists('includeIfExists')) { function includeIfExists() { return \RectorPrefix202405\includeIfExists(...func_get_args()); } } -if (!function_exists('mb_check_encoding')) { function mb_check_encoding() { return \RectorPrefix202405\mb_check_encoding(...func_get_args()); } } -if (!function_exists('mb_chr')) { function mb_chr() { return \RectorPrefix202405\mb_chr(...func_get_args()); } } -if (!function_exists('mb_convert_case')) { function mb_convert_case() { return \RectorPrefix202405\mb_convert_case(...func_get_args()); } } -if (!function_exists('mb_convert_encoding')) { function mb_convert_encoding() { return \RectorPrefix202405\mb_convert_encoding(...func_get_args()); } } -if (!function_exists('mb_convert_variables')) { function mb_convert_variables() { return \RectorPrefix202405\mb_convert_variables(...func_get_args()); } } -if (!function_exists('mb_decode_mimeheader')) { function mb_decode_mimeheader() { return \RectorPrefix202405\mb_decode_mimeheader(...func_get_args()); } } -if (!function_exists('mb_decode_numericentity')) { function mb_decode_numericentity() { return \RectorPrefix202405\mb_decode_numericentity(...func_get_args()); } } -if (!function_exists('mb_detect_encoding')) { function mb_detect_encoding() { return \RectorPrefix202405\mb_detect_encoding(...func_get_args()); } } -if (!function_exists('mb_detect_order')) { function mb_detect_order() { return \RectorPrefix202405\mb_detect_order(...func_get_args()); } } -if (!function_exists('mb_encode_mimeheader')) { function mb_encode_mimeheader() { return \RectorPrefix202405\mb_encode_mimeheader(...func_get_args()); } } -if (!function_exists('mb_encode_numericentity')) { function mb_encode_numericentity() { return \RectorPrefix202405\mb_encode_numericentity(...func_get_args()); } } -if (!function_exists('mb_encoding_aliases')) { function mb_encoding_aliases() { return \RectorPrefix202405\mb_encoding_aliases(...func_get_args()); } } -if (!function_exists('mb_get_info')) { function mb_get_info() { return \RectorPrefix202405\mb_get_info(...func_get_args()); } } -if (!function_exists('mb_http_input')) { function mb_http_input() { return \RectorPrefix202405\mb_http_input(...func_get_args()); } } -if (!function_exists('mb_http_output')) { function mb_http_output() { return \RectorPrefix202405\mb_http_output(...func_get_args()); } } -if (!function_exists('mb_internal_encoding')) { function mb_internal_encoding() { return \RectorPrefix202405\mb_internal_encoding(...func_get_args()); } } -if (!function_exists('mb_language')) { function mb_language() { return \RectorPrefix202405\mb_language(...func_get_args()); } } -if (!function_exists('mb_list_encodings')) { function mb_list_encodings() { return \RectorPrefix202405\mb_list_encodings(...func_get_args()); } } -if (!function_exists('mb_ord')) { function mb_ord() { return \RectorPrefix202405\mb_ord(...func_get_args()); } } -if (!function_exists('mb_output_handler')) { function mb_output_handler() { return \RectorPrefix202405\mb_output_handler(...func_get_args()); } } -if (!function_exists('mb_parse_str')) { function mb_parse_str() { return \RectorPrefix202405\mb_parse_str(...func_get_args()); } } -if (!function_exists('mb_scrub')) { function mb_scrub() { return \RectorPrefix202405\mb_scrub(...func_get_args()); } } -if (!function_exists('mb_str_pad')) { function mb_str_pad() { return \RectorPrefix202405\mb_str_pad(...func_get_args()); } } -if (!function_exists('mb_str_split')) { function mb_str_split() { return \RectorPrefix202405\mb_str_split(...func_get_args()); } } -if (!function_exists('mb_stripos')) { function mb_stripos() { return \RectorPrefix202405\mb_stripos(...func_get_args()); } } -if (!function_exists('mb_stristr')) { function mb_stristr() { return \RectorPrefix202405\mb_stristr(...func_get_args()); } } -if (!function_exists('mb_strlen')) { function mb_strlen() { return \RectorPrefix202405\mb_strlen(...func_get_args()); } } -if (!function_exists('mb_strpos')) { function mb_strpos() { return \RectorPrefix202405\mb_strpos(...func_get_args()); } } -if (!function_exists('mb_strrchr')) { function mb_strrchr() { return \RectorPrefix202405\mb_strrchr(...func_get_args()); } } -if (!function_exists('mb_strrichr')) { function mb_strrichr() { return \RectorPrefix202405\mb_strrichr(...func_get_args()); } } -if (!function_exists('mb_strripos')) { function mb_strripos() { return \RectorPrefix202405\mb_strripos(...func_get_args()); } } -if (!function_exists('mb_strrpos')) { function mb_strrpos() { return \RectorPrefix202405\mb_strrpos(...func_get_args()); } } -if (!function_exists('mb_strstr')) { function mb_strstr() { return \RectorPrefix202405\mb_strstr(...func_get_args()); } } -if (!function_exists('mb_strtolower')) { function mb_strtolower() { return \RectorPrefix202405\mb_strtolower(...func_get_args()); } } -if (!function_exists('mb_strtoupper')) { function mb_strtoupper() { return \RectorPrefix202405\mb_strtoupper(...func_get_args()); } } -if (!function_exists('mb_strwidth')) { function mb_strwidth() { return \RectorPrefix202405\mb_strwidth(...func_get_args()); } } -if (!function_exists('mb_substitute_character')) { function mb_substitute_character() { return \RectorPrefix202405\mb_substitute_character(...func_get_args()); } } -if (!function_exists('mb_substr')) { function mb_substr() { return \RectorPrefix202405\mb_substr(...func_get_args()); } } -if (!function_exists('mb_substr_count')) { function mb_substr_count() { return \RectorPrefix202405\mb_substr_count(...func_get_args()); } } -if (!function_exists('parseArgs')) { function parseArgs() { return \RectorPrefix202405\parseArgs(...func_get_args()); } } -if (!function_exists('print_node')) { function print_node() { return \RectorPrefix202405\print_node(...func_get_args()); } } -if (!function_exists('showHelp')) { function showHelp() { return \RectorPrefix202405\showHelp(...func_get_args()); } } -if (!function_exists('trigger_deprecation')) { function trigger_deprecation() { return \RectorPrefix202405\trigger_deprecation(...func_get_args()); } } -if (!function_exists('uv_poll_init_socket')) { function uv_poll_init_socket() { return \RectorPrefix202405\uv_poll_init_socket(...func_get_args()); } } +if (!function_exists('dump_node')) { function dump_node() { return \RectorPrefix202410\dump_node(...func_get_args()); } } +if (!function_exists('formatErrorMessage')) { function formatErrorMessage() { return \RectorPrefix202410\formatErrorMessage(...func_get_args()); } } +if (!function_exists('includeIfExists')) { function includeIfExists() { return \RectorPrefix202410\includeIfExists(...func_get_args()); } } +if (!function_exists('mb_check_encoding')) { function mb_check_encoding() { return \RectorPrefix202410\mb_check_encoding(...func_get_args()); } } +if (!function_exists('mb_chr')) { function mb_chr() { return \RectorPrefix202410\mb_chr(...func_get_args()); } } +if (!function_exists('mb_convert_case')) { function mb_convert_case() { return \RectorPrefix202410\mb_convert_case(...func_get_args()); } } +if (!function_exists('mb_convert_encoding')) { function mb_convert_encoding() { return \RectorPrefix202410\mb_convert_encoding(...func_get_args()); } } +if (!function_exists('mb_convert_variables')) { function mb_convert_variables() { return \RectorPrefix202410\mb_convert_variables(...func_get_args()); } } +if (!function_exists('mb_decode_mimeheader')) { function mb_decode_mimeheader() { return \RectorPrefix202410\mb_decode_mimeheader(...func_get_args()); } } +if (!function_exists('mb_decode_numericentity')) { function mb_decode_numericentity() { return \RectorPrefix202410\mb_decode_numericentity(...func_get_args()); } } +if (!function_exists('mb_detect_encoding')) { function mb_detect_encoding() { return \RectorPrefix202410\mb_detect_encoding(...func_get_args()); } } +if (!function_exists('mb_detect_order')) { function mb_detect_order() { return \RectorPrefix202410\mb_detect_order(...func_get_args()); } } +if (!function_exists('mb_encode_mimeheader')) { function mb_encode_mimeheader() { return \RectorPrefix202410\mb_encode_mimeheader(...func_get_args()); } } +if (!function_exists('mb_encode_numericentity')) { function mb_encode_numericentity() { return \RectorPrefix202410\mb_encode_numericentity(...func_get_args()); } } +if (!function_exists('mb_encoding_aliases')) { function mb_encoding_aliases() { return \RectorPrefix202410\mb_encoding_aliases(...func_get_args()); } } +if (!function_exists('mb_get_info')) { function mb_get_info() { return \RectorPrefix202410\mb_get_info(...func_get_args()); } } +if (!function_exists('mb_http_input')) { function mb_http_input() { return \RectorPrefix202410\mb_http_input(...func_get_args()); } } +if (!function_exists('mb_http_output')) { function mb_http_output() { return \RectorPrefix202410\mb_http_output(...func_get_args()); } } +if (!function_exists('mb_internal_encoding')) { function mb_internal_encoding() { return \RectorPrefix202410\mb_internal_encoding(...func_get_args()); } } +if (!function_exists('mb_language')) { function mb_language() { return \RectorPrefix202410\mb_language(...func_get_args()); } } +if (!function_exists('mb_lcfirst')) { function mb_lcfirst() { return \RectorPrefix202410\mb_lcfirst(...func_get_args()); } } +if (!function_exists('mb_list_encodings')) { function mb_list_encodings() { return \RectorPrefix202410\mb_list_encodings(...func_get_args()); } } +if (!function_exists('mb_ltrim')) { function mb_ltrim() { return \RectorPrefix202410\mb_ltrim(...func_get_args()); } } +if (!function_exists('mb_ord')) { function mb_ord() { return \RectorPrefix202410\mb_ord(...func_get_args()); } } +if (!function_exists('mb_output_handler')) { function mb_output_handler() { return \RectorPrefix202410\mb_output_handler(...func_get_args()); } } +if (!function_exists('mb_parse_str')) { function mb_parse_str() { return \RectorPrefix202410\mb_parse_str(...func_get_args()); } } +if (!function_exists('mb_rtrim')) { function mb_rtrim() { return \RectorPrefix202410\mb_rtrim(...func_get_args()); } } +if (!function_exists('mb_scrub')) { function mb_scrub() { return \RectorPrefix202410\mb_scrub(...func_get_args()); } } +if (!function_exists('mb_str_pad')) { function mb_str_pad() { return \RectorPrefix202410\mb_str_pad(...func_get_args()); } } +if (!function_exists('mb_str_split')) { function mb_str_split() { return \RectorPrefix202410\mb_str_split(...func_get_args()); } } +if (!function_exists('mb_stripos')) { function mb_stripos() { return \RectorPrefix202410\mb_stripos(...func_get_args()); } } +if (!function_exists('mb_stristr')) { function mb_stristr() { return \RectorPrefix202410\mb_stristr(...func_get_args()); } } +if (!function_exists('mb_strlen')) { function mb_strlen() { return \RectorPrefix202410\mb_strlen(...func_get_args()); } } +if (!function_exists('mb_strpos')) { function mb_strpos() { return \RectorPrefix202410\mb_strpos(...func_get_args()); } } +if (!function_exists('mb_strrchr')) { function mb_strrchr() { return \RectorPrefix202410\mb_strrchr(...func_get_args()); } } +if (!function_exists('mb_strrichr')) { function mb_strrichr() { return \RectorPrefix202410\mb_strrichr(...func_get_args()); } } +if (!function_exists('mb_strripos')) { function mb_strripos() { return \RectorPrefix202410\mb_strripos(...func_get_args()); } } +if (!function_exists('mb_strrpos')) { function mb_strrpos() { return \RectorPrefix202410\mb_strrpos(...func_get_args()); } } +if (!function_exists('mb_strstr')) { function mb_strstr() { return \RectorPrefix202410\mb_strstr(...func_get_args()); } } +if (!function_exists('mb_strtolower')) { function mb_strtolower() { return \RectorPrefix202410\mb_strtolower(...func_get_args()); } } +if (!function_exists('mb_strtoupper')) { function mb_strtoupper() { return \RectorPrefix202410\mb_strtoupper(...func_get_args()); } } +if (!function_exists('mb_strwidth')) { function mb_strwidth() { return \RectorPrefix202410\mb_strwidth(...func_get_args()); } } +if (!function_exists('mb_substitute_character')) { function mb_substitute_character() { return \RectorPrefix202410\mb_substitute_character(...func_get_args()); } } +if (!function_exists('mb_substr')) { function mb_substr() { return \RectorPrefix202410\mb_substr(...func_get_args()); } } +if (!function_exists('mb_substr_count')) { function mb_substr_count() { return \RectorPrefix202410\mb_substr_count(...func_get_args()); } } +if (!function_exists('mb_trim')) { function mb_trim() { return \RectorPrefix202410\mb_trim(...func_get_args()); } } +if (!function_exists('mb_ucfirst')) { function mb_ucfirst() { return \RectorPrefix202410\mb_ucfirst(...func_get_args()); } } +if (!function_exists('parseArgs')) { function parseArgs() { return \RectorPrefix202410\parseArgs(...func_get_args()); } } +if (!function_exists('print_node')) { function print_node() { return \RectorPrefix202410\print_node(...func_get_args()); } } +if (!function_exists('showHelp')) { function showHelp() { return \RectorPrefix202410\showHelp(...func_get_args()); } } +if (!function_exists('trigger_deprecation')) { function trigger_deprecation() { return \RectorPrefix202410\trigger_deprecation(...func_get_args()); } } +if (!function_exists('uv_poll_init_socket')) { function uv_poll_init_socket() { return \RectorPrefix202410\uv_poll_init_socket(...func_get_args()); } } return $loader; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Chunk.php b/vendor/rector/rector/vendor/sebastian/diff/src/Chunk.php index 64ae92b78..f691a0ad0 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Chunk.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Chunk.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use ArrayIterator; use IteratorAggregate; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Diff.php b/vendor/rector/rector/vendor/sebastian/diff/src/Diff.php index 1d4b48485..6a29b038f 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Diff.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Diff.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use ArrayIterator; use IteratorAggregate; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Differ.php b/vendor/rector/rector/vendor/sebastian/diff/src/Differ.php index 8a6b0582b..9eec32e08 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Differ.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Differ.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use const PHP_INT_SIZE; use const PREG_SPLIT_DELIM_CAPTURE; @@ -28,7 +28,7 @@ use function reset; use function str_ends_with; use function substr; -use RectorPrefix202405\SebastianBergmann\Diff\Output\DiffOutputBuilderInterface; +use RectorPrefix202410\SebastianBergmann\Diff\Output\DiffOutputBuilderInterface; final class Differ { public const OLD = 0; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Exception/ConfigurationException.php b/vendor/rector/rector/vendor/sebastian/diff/src/Exception/ConfigurationException.php index b695c00a7..b5f139c91 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Exception/ConfigurationException.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Exception/ConfigurationException.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use function gettype; use function is_object; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Exception/Exception.php b/vendor/rector/rector/vendor/sebastian/diff/src/Exception/Exception.php index 61c833a36..bbfa0f538 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Exception/Exception.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Exception/Exception.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use Throwable; interface Exception extends Throwable diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Exception/InvalidArgumentException.php b/vendor/rector/rector/vendor/sebastian/diff/src/Exception/InvalidArgumentException.php index 1376f4727..b2489154a 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Exception/InvalidArgumentException.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Exception/InvalidArgumentException.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; class InvalidArgumentException extends \InvalidArgumentException implements Exception { diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Line.php b/vendor/rector/rector/vendor/sebastian/diff/src/Line.php index 13680d7ae..ba5fac5e8 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Line.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Line.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; final class Line { diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php b/vendor/rector/rector/vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php index bf7310831..e05ec276e 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; interface LongestCommonSubsequenceCalculator { diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php b/vendor/rector/rector/vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php index 6c8c48682..05c24abfe 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use function array_fill; use function array_merge; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php b/vendor/rector/rector/vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php index 7da064817..f20a19a00 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff\Output; +namespace RectorPrefix202410\SebastianBergmann\Diff\Output; use function count; abstract class AbstractChunkOutputBuilder implements DiffOutputBuilderInterface diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php b/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php index c1eea9c40..f1ff4ccd2 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff\Output; +namespace RectorPrefix202410\SebastianBergmann\Diff\Output; use function fclose; use function fopen; @@ -17,7 +17,7 @@ use function str_ends_with; use function stream_get_contents; use function substr; -use RectorPrefix202405\SebastianBergmann\Diff\Differ; +use RectorPrefix202410\SebastianBergmann\Diff\Differ; /** * Builds a diff string representation in a loose unified diff format * listing only changes lines. Does not include line numbers. diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php b/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php index de9c29bdb..1ad66a3b4 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff\Output; +namespace RectorPrefix202410\SebastianBergmann\Diff\Output; /** * Defines how an output builder should take a generated diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php b/vendor/rector/rector/vendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php index 2a82106c3..c07c4e5be 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff\Output; +namespace RectorPrefix202410\SebastianBergmann\Diff\Output; use function array_merge; use function array_splice; @@ -25,8 +25,8 @@ use function sprintf; use function stream_get_contents; use function substr; -use RectorPrefix202405\SebastianBergmann\Diff\ConfigurationException; -use RectorPrefix202405\SebastianBergmann\Diff\Differ; +use RectorPrefix202410\SebastianBergmann\Diff\ConfigurationException; +use RectorPrefix202410\SebastianBergmann\Diff\Differ; /** * Strict Unified diff output builder. * diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php b/vendor/rector/rector/vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php index ebaf18e31..08b83a92c 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff\Output; +namespace RectorPrefix202410\SebastianBergmann\Diff\Output; use function array_splice; use function count; @@ -21,7 +21,7 @@ use function str_ends_with; use function stream_get_contents; use function substr; -use RectorPrefix202405\SebastianBergmann\Diff\Differ; +use RectorPrefix202410\SebastianBergmann\Diff\Differ; /** * Builds a diff string representation in unified diff format in chunks. */ diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/Parser.php b/vendor/rector/rector/vendor/sebastian/diff/src/Parser.php index 1f3983675..9b7a0ee77 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/Parser.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/Parser.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use function array_pop; use function assert; diff --git a/vendor/rector/rector/vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php b/vendor/rector/rector/vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php index cf8b334b3..74f6cd3ec 100644 --- a/vendor/rector/rector/vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php +++ b/vendor/rector/rector/vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php @@ -9,7 +9,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\SebastianBergmann\Diff; +namespace RectorPrefix202410\SebastianBergmann\Diff; use function array_reverse; use function count; diff --git a/vendor/rector/rector/vendor/symfony/console/Application.php b/vendor/rector/rector/vendor/symfony/console/Application.php index c23272feb..2f6a855a4 100644 --- a/vendor/rector/rector/vendor/symfony/console/Application.php +++ b/vendor/rector/rector/vendor/symfony/console/Application.php @@ -8,51 +8,51 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console; +namespace RectorPrefix202410\Symfony\Component\Console; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Command\CompleteCommand; -use RectorPrefix202405\Symfony\Component\Console\Command\DumpCompletionCommand; -use RectorPrefix202405\Symfony\Component\Console\Command\HelpCommand; -use RectorPrefix202405\Symfony\Component\Console\Command\LazyCommand; -use RectorPrefix202405\Symfony\Component\Console\Command\ListCommand; -use RectorPrefix202405\Symfony\Component\Console\Command\SignalableCommandInterface; -use RectorPrefix202405\Symfony\Component\Console\CommandLoader\CommandLoaderInterface; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Completion\Suggestion; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleCommandEvent; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleErrorEvent; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleSignalEvent; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleTerminateEvent; -use RectorPrefix202405\Symfony\Component\Console\Exception\CommandNotFoundException; -use RectorPrefix202405\Symfony\Component\Console\Exception\ExceptionInterface; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Console\Exception\NamespaceNotFoundException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Helper\DebugFormatterHelper; -use RectorPrefix202405\Symfony\Component\Console\Helper\DescriptorHelper; -use RectorPrefix202405\Symfony\Component\Console\Helper\FormatterHelper; -use RectorPrefix202405\Symfony\Component\Console\Helper\Helper; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperSet; -use RectorPrefix202405\Symfony\Component\Console\Helper\ProcessHelper; -use RectorPrefix202405\Symfony\Component\Console\Helper\QuestionHelper; -use RectorPrefix202405\Symfony\Component\Console\Input\ArgvInput; -use RectorPrefix202405\Symfony\Component\Console\Input\ArrayInput; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputAwareInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutput; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\SignalRegistry\SignalRegistry; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; -use RectorPrefix202405\Symfony\Component\ErrorHandler\ErrorHandler; -use RectorPrefix202405\Symfony\Contracts\EventDispatcher\EventDispatcherInterface; -use RectorPrefix202405\Symfony\Contracts\Service\ResetInterface; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Command\CompleteCommand; +use RectorPrefix202410\Symfony\Component\Console\Command\DumpCompletionCommand; +use RectorPrefix202410\Symfony\Component\Console\Command\HelpCommand; +use RectorPrefix202410\Symfony\Component\Console\Command\LazyCommand; +use RectorPrefix202410\Symfony\Component\Console\Command\ListCommand; +use RectorPrefix202410\Symfony\Component\Console\Command\SignalableCommandInterface; +use RectorPrefix202410\Symfony\Component\Console\CommandLoader\CommandLoaderInterface; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Completion\Suggestion; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleCommandEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleErrorEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleSignalEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleTerminateEvent; +use RectorPrefix202410\Symfony\Component\Console\Exception\CommandNotFoundException; +use RectorPrefix202410\Symfony\Component\Console\Exception\ExceptionInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Exception\NamespaceNotFoundException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Helper\DebugFormatterHelper; +use RectorPrefix202410\Symfony\Component\Console\Helper\DescriptorHelper; +use RectorPrefix202410\Symfony\Component\Console\Helper\FormatterHelper; +use RectorPrefix202410\Symfony\Component\Console\Helper\Helper; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperSet; +use RectorPrefix202410\Symfony\Component\Console\Helper\ProcessHelper; +use RectorPrefix202410\Symfony\Component\Console\Helper\QuestionHelper; +use RectorPrefix202410\Symfony\Component\Console\Input\ArgvInput; +use RectorPrefix202410\Symfony\Component\Console\Input\ArrayInput; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputAwareInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutput; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\SignalRegistry\SignalRegistry; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\ErrorHandler\ErrorHandler; +use RectorPrefix202410\Symfony\Contracts\EventDispatcher\EventDispatcherInterface; +use RectorPrefix202410\Symfony\Contracts\Service\ResetInterface; /** * An Application is the container for a collection of commands. * diff --git a/vendor/rector/rector/vendor/symfony/console/Attribute/AsCommand.php b/vendor/rector/rector/vendor/symfony/console/Attribute/AsCommand.php index 026fd1326..f68d3421f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Attribute/AsCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Attribute/AsCommand.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Attribute; +namespace RectorPrefix202410\Symfony\Component\Console\Attribute; /** * Service tag to autoconfigure commands. diff --git a/vendor/rector/rector/vendor/symfony/console/CI/GithubActionReporter.php b/vendor/rector/rector/vendor/symfony/console/CI/GithubActionReporter.php index 1697528ad..5cf1a22fe 100644 --- a/vendor/rector/rector/vendor/symfony/console/CI/GithubActionReporter.php +++ b/vendor/rector/rector/vendor/symfony/console/CI/GithubActionReporter.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\CI; +namespace RectorPrefix202410\Symfony\Component\Console\CI; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Utility class for Github actions. * diff --git a/vendor/rector/rector/vendor/symfony/console/Color.php b/vendor/rector/rector/vendor/symfony/console/Color.php index c83a4ba12..df9444136 100644 --- a/vendor/rector/rector/vendor/symfony/console/Color.php +++ b/vendor/rector/rector/vendor/symfony/console/Color.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console; +namespace RectorPrefix202410\Symfony\Component\Console; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; /** * @author Fabien Potencier */ diff --git a/vendor/rector/rector/vendor/symfony/console/Command/Command.php b/vendor/rector/rector/vendor/symfony/console/Command/Command.php index 72dd5d097..47e9d7d4c 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/Command.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/Command.php @@ -8,23 +8,23 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Attribute\AsCommand; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Completion\Suggestion; -use RectorPrefix202405\Symfony\Component\Console\Exception\ExceptionInterface; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperInterface; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperSet; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Attribute\AsCommand; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Completion\Suggestion; +use RectorPrefix202410\Symfony\Component\Console\Exception\ExceptionInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperInterface; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperSet; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Base class for all commands. * diff --git a/vendor/rector/rector/vendor/symfony/console/Command/CompleteCommand.php b/vendor/rector/rector/vendor/symfony/console/Command/CompleteCommand.php index af0c5ee8e..d0c067c62 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/CompleteCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/CompleteCommand.php @@ -8,20 +8,20 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Attribute\AsCommand; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Completion\Output\BashCompletionOutput; -use RectorPrefix202405\Symfony\Component\Console\Completion\Output\CompletionOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Completion\Output\FishCompletionOutput; -use RectorPrefix202405\Symfony\Component\Console\Completion\Output\ZshCompletionOutput; -use RectorPrefix202405\Symfony\Component\Console\Exception\CommandNotFoundException; -use RectorPrefix202405\Symfony\Component\Console\Exception\ExceptionInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Attribute\AsCommand; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Completion\Output\BashCompletionOutput; +use RectorPrefix202410\Symfony\Component\Console\Completion\Output\CompletionOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Completion\Output\FishCompletionOutput; +use RectorPrefix202410\Symfony\Component\Console\Completion\Output\ZshCompletionOutput; +use RectorPrefix202410\Symfony\Component\Console\Exception\CommandNotFoundException; +use RectorPrefix202410\Symfony\Component\Console\Exception\ExceptionInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Responsible for providing the values to the shell completion. * diff --git a/vendor/rector/rector/vendor/symfony/console/Command/DumpCompletionCommand.php b/vendor/rector/rector/vendor/symfony/console/Command/DumpCompletionCommand.php index 476006da7..921222e1f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/DumpCompletionCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/DumpCompletionCommand.php @@ -8,15 +8,15 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Attribute\AsCommand; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Console\Attribute\AsCommand; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * Dumps the completion script for the current shell. * diff --git a/vendor/rector/rector/vendor/symfony/console/Command/HelpCommand.php b/vendor/rector/rector/vendor/symfony/console/Command/HelpCommand.php index 48d96b94c..acb3801ce 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/HelpCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/HelpCommand.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\ApplicationDescription; -use RectorPrefix202405\Symfony\Component\Console\Helper\DescriptorHelper; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\ApplicationDescription; +use RectorPrefix202410\Symfony\Component\Console\Helper\DescriptorHelper; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * HelpCommand displays the help for a given command. * diff --git a/vendor/rector/rector/vendor/symfony/console/Command/LazyCommand.php b/vendor/rector/rector/vendor/symfony/console/Command/LazyCommand.php index 71d37b237..32efe7309 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/LazyCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/LazyCommand.php @@ -8,17 +8,17 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Completion\Suggestion; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperInterface; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperSet; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Completion\Suggestion; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperInterface; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperSet; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Nicolas Grekas */ diff --git a/vendor/rector/rector/vendor/symfony/console/Command/ListCommand.php b/vendor/rector/rector/vendor/symfony/console/Command/ListCommand.php index 60890c89c..bfc24ac2f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/ListCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/ListCommand.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; - -use RectorPrefix202405\Symfony\Component\Console\Descriptor\ApplicationDescription; -use RectorPrefix202405\Symfony\Component\Console\Helper\DescriptorHelper; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +namespace RectorPrefix202410\Symfony\Component\Console\Command; + +use RectorPrefix202410\Symfony\Component\Console\Descriptor\ApplicationDescription; +use RectorPrefix202410\Symfony\Component\Console\Helper\DescriptorHelper; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * ListCommand displays the list of all available commands for the application. * diff --git a/vendor/rector/rector/vendor/symfony/console/Command/LockableTrait.php b/vendor/rector/rector/vendor/symfony/console/Command/LockableTrait.php index 4c59a0f01..7fc272805 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/LockableTrait.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/LockableTrait.php @@ -8,13 +8,13 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Lock\LockFactory; -use RectorPrefix202405\Symfony\Component\Lock\LockInterface; -use RectorPrefix202405\Symfony\Component\Lock\Store\FlockStore; -use RectorPrefix202405\Symfony\Component\Lock\Store\SemaphoreStore; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Lock\LockFactory; +use RectorPrefix202410\Symfony\Component\Lock\LockInterface; +use RectorPrefix202410\Symfony\Component\Lock\Store\FlockStore; +use RectorPrefix202410\Symfony\Component\Lock\Store\SemaphoreStore; /** * Basic lock feature for commands. * diff --git a/vendor/rector/rector/vendor/symfony/console/Command/SignalableCommandInterface.php b/vendor/rector/rector/vendor/symfony/console/Command/SignalableCommandInterface.php index 6db9a577c..8f41e2808 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/SignalableCommandInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/SignalableCommandInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; /** * Interface for command reacting to signal. diff --git a/vendor/rector/rector/vendor/symfony/console/Command/TraceableCommand.php b/vendor/rector/rector/vendor/symfony/console/Command/TraceableCommand.php index c1e22a27d..0b0372038 100644 --- a/vendor/rector/rector/vendor/symfony/console/Command/TraceableCommand.php +++ b/vendor/rector/rector/vendor/symfony/console/Command/TraceableCommand.php @@ -8,18 +8,18 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Command; +namespace RectorPrefix202410\Symfony\Component\Console\Command; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperInterface; -use RectorPrefix202405\Symfony\Component\Console\Helper\HelperSet; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Stopwatch\Stopwatch; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperInterface; +use RectorPrefix202410\Symfony\Component\Console\Helper\HelperSet; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Stopwatch\Stopwatch; /** * @internal * diff --git a/vendor/rector/rector/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php b/vendor/rector/rector/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php index 4270ec370..89d20e31d 100644 --- a/vendor/rector/rector/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\CommandLoader; +namespace RectorPrefix202410\Symfony\Component\Console\CommandLoader; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\CommandNotFoundException; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Exception\CommandNotFoundException; /** * @author Robin Chalas */ diff --git a/vendor/rector/rector/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php b/vendor/rector/rector/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php index 119b3b49d..d25efbcea 100644 --- a/vendor/rector/rector/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php +++ b/vendor/rector/rector/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\CommandLoader; +namespace RectorPrefix202410\Symfony\Component\Console\CommandLoader; -use RectorPrefix202405\Psr\Container\ContainerInterface; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\CommandNotFoundException; +use RectorPrefix202410\Psr\Container\ContainerInterface; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Exception\CommandNotFoundException; /** * Loads commands from a PSR-11 container. * diff --git a/vendor/rector/rector/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php b/vendor/rector/rector/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php index eecb8401d..69614d907 100644 --- a/vendor/rector/rector/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php +++ b/vendor/rector/rector/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\CommandLoader; +namespace RectorPrefix202410\Symfony\Component\Console\CommandLoader; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\CommandNotFoundException; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Exception\CommandNotFoundException; /** * A simple command loader using factories to instantiate commands lazily. * diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/CompletionInput.php b/vendor/rector/rector/vendor/symfony/console/Completion/CompletionInput.php index 62e481f63..5dc1660db 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/CompletionInput.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/CompletionInput.php @@ -8,12 +8,12 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion; +namespace RectorPrefix202410\Symfony\Component\Console\Completion; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Input\ArgvInput; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Input\ArgvInput; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; /** * An input specialized for shell completion. * @@ -62,7 +62,7 @@ public static function fromString(string $inputStr, int $currentIndex) : self * Create an input based on an COMP_WORDS token list. * * @param string[] $tokens the set of split tokens (e.g. COMP_WORDS or argv) - * @param $currentIndex the index of the cursor (e.g. COMP_CWORD) + * @param int $currentIndex the index of the cursor (e.g. COMP_CWORD) */ public static function fromTokens(array $tokens, int $currentIndex) : self { diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/CompletionSuggestions.php b/vendor/rector/rector/vendor/symfony/console/Completion/CompletionSuggestions.php index 49357c979..6a5e98fe4 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/CompletionSuggestions.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/CompletionSuggestions.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion; +namespace RectorPrefix202410\Symfony\Component\Console\Completion; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; /** * Stores all completion suggestions for the current input. * diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/Output/BashCompletionOutput.php b/vendor/rector/rector/vendor/symfony/console/Completion/Output/BashCompletionOutput.php index 706d97a05..5977ea607 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/Output/BashCompletionOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/Output/BashCompletionOutput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Completion\Output; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Wouter de Jong */ diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php b/vendor/rector/rector/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php index 585ecc600..b9e465a29 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Completion\Output; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Transforms the {@see CompletionSuggestions} object into output readable by the shell completion. * diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/Output/FishCompletionOutput.php b/vendor/rector/rector/vendor/symfony/console/Completion/Output/FishCompletionOutput.php index 6dae40aa1..e79b430a3 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/Output/FishCompletionOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/Output/FishCompletionOutput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Completion\Output; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Guillaume Aveline */ diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/Output/ZshCompletionOutput.php b/vendor/rector/rector/vendor/symfony/console/Completion/Output/ZshCompletionOutput.php index abec149c7..2e920bfac 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/Output/ZshCompletionOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/Output/ZshCompletionOutput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Completion\Output; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Jitendra A */ diff --git a/vendor/rector/rector/vendor/symfony/console/Completion/Suggestion.php b/vendor/rector/rector/vendor/symfony/console/Completion/Suggestion.php index 442f69201..800c7f266 100644 --- a/vendor/rector/rector/vendor/symfony/console/Completion/Suggestion.php +++ b/vendor/rector/rector/vendor/symfony/console/Completion/Suggestion.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Completion; +namespace RectorPrefix202410\Symfony\Component\Console\Completion; /** * Represents a single suggested value. diff --git a/vendor/rector/rector/vendor/symfony/console/ConsoleEvents.php b/vendor/rector/rector/vendor/symfony/console/ConsoleEvents.php index f9db7f742..11fc70a68 100644 --- a/vendor/rector/rector/vendor/symfony/console/ConsoleEvents.php +++ b/vendor/rector/rector/vendor/symfony/console/ConsoleEvents.php @@ -8,12 +8,12 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console; +namespace RectorPrefix202410\Symfony\Component\Console; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleCommandEvent; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleErrorEvent; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleSignalEvent; -use RectorPrefix202405\Symfony\Component\Console\Event\ConsoleTerminateEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleCommandEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleErrorEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleSignalEvent; +use RectorPrefix202410\Symfony\Component\Console\Event\ConsoleTerminateEvent; /** * Contains all events dispatched by an Application. * diff --git a/vendor/rector/rector/vendor/symfony/console/Cursor.php b/vendor/rector/rector/vendor/symfony/console/Cursor.php index 5977b7c7b..846a86c04 100644 --- a/vendor/rector/rector/vendor/symfony/console/Cursor.php +++ b/vendor/rector/rector/vendor/symfony/console/Cursor.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console; +namespace RectorPrefix202410\Symfony\Component\Console; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Pierre du Plessis */ diff --git a/vendor/rector/rector/vendor/symfony/console/DataCollector/CommandDataCollector.php b/vendor/rector/rector/vendor/symfony/console/DataCollector/CommandDataCollector.php index 953d10ec1..3e3310576 100644 --- a/vendor/rector/rector/vendor/symfony/console/DataCollector/CommandDataCollector.php +++ b/vendor/rector/rector/vendor/symfony/console/DataCollector/CommandDataCollector.php @@ -8,16 +8,16 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\DataCollector; +namespace RectorPrefix202410\Symfony\Component\Console\DataCollector; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Debug\CliRequest; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\SignalRegistry\SignalMap; -use RectorPrefix202405\Symfony\Component\HttpFoundation\Request; -use RectorPrefix202405\Symfony\Component\HttpFoundation\Response; -use RectorPrefix202405\Symfony\Component\HttpKernel\DataCollector\DataCollector; -use RectorPrefix202405\Symfony\Component\VarDumper\Cloner\Data; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Debug\CliRequest; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\SignalRegistry\SignalMap; +use RectorPrefix202410\Symfony\Component\HttpFoundation\Request; +use RectorPrefix202410\Symfony\Component\HttpFoundation\Response; +use RectorPrefix202410\Symfony\Component\HttpKernel\DataCollector\DataCollector; +use RectorPrefix202410\Symfony\Component\VarDumper\Cloner\Data; /** * @internal * diff --git a/vendor/rector/rector/vendor/symfony/console/Debug/CliRequest.php b/vendor/rector/rector/vendor/symfony/console/Debug/CliRequest.php index 95cd97c01..d85757a86 100644 --- a/vendor/rector/rector/vendor/symfony/console/Debug/CliRequest.php +++ b/vendor/rector/rector/vendor/symfony/console/Debug/CliRequest.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Debug; +namespace RectorPrefix202410\Symfony\Component\Console\Debug; -use RectorPrefix202405\Symfony\Component\Console\Command\TraceableCommand; -use RectorPrefix202405\Symfony\Component\HttpFoundation\Request; -use RectorPrefix202405\Symfony\Component\HttpFoundation\Response; +use RectorPrefix202410\Symfony\Component\Console\Command\TraceableCommand; +use RectorPrefix202410\Symfony\Component\HttpFoundation\Request; +use RectorPrefix202410\Symfony\Component\HttpFoundation\Response; /** * @internal */ diff --git a/vendor/rector/rector/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php b/vendor/rector/rector/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php index 08bc9aad7..1f5be2939 100644 --- a/vendor/rector/rector/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +++ b/vendor/rector/rector/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php @@ -8,18 +8,18 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\DependencyInjection; +namespace RectorPrefix202410\Symfony\Component\Console\DependencyInjection; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Command\LazyCommand; -use RectorPrefix202405\Symfony\Component\Console\CommandLoader\ContainerCommandLoader; -use RectorPrefix202405\Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; -use RectorPrefix202405\Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use RectorPrefix202405\Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; -use RectorPrefix202405\Symfony\Component\DependencyInjection\ContainerBuilder; -use RectorPrefix202405\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\DependencyInjection\Reference; -use RectorPrefix202405\Symfony\Component\DependencyInjection\TypedReference; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Command\LazyCommand; +use RectorPrefix202410\Symfony\Component\Console\CommandLoader\ContainerCommandLoader; +use RectorPrefix202410\Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use RectorPrefix202410\Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use RectorPrefix202410\Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; +use RectorPrefix202410\Symfony\Component\DependencyInjection\ContainerBuilder; +use RectorPrefix202410\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\DependencyInjection\Reference; +use RectorPrefix202410\Symfony\Component\DependencyInjection\TypedReference; /** * Registers console commands. * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/ApplicationDescription.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/ApplicationDescription.php index 50ec9deac..703444b69 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/ApplicationDescription.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/ApplicationDescription.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\CommandNotFoundException; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Exception\CommandNotFoundException; /** * @author Jean-François Simon * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/Descriptor.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/Descriptor.php index ac2f52702..5de43aade 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/Descriptor.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/Descriptor.php @@ -8,15 +8,15 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Jean-François Simon * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/DescriptorInterface.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/DescriptorInterface.php index 170ade4d2..3a99a53df 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/DescriptorInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/DescriptorInterface.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Descriptor interface. * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/JsonDescriptor.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/JsonDescriptor.php index 1521a285b..42bc8cdef 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/JsonDescriptor.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/JsonDescriptor.php @@ -8,13 +8,13 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; /** * JSON descriptor. * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/MarkdownDescriptor.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/MarkdownDescriptor.php index 59e8ce477..1588deacb 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/MarkdownDescriptor.php @@ -8,15 +8,15 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Helper\Helper; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Helper\Helper; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Markdown descriptor. * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php index 3c0ab18f7..155aa5a6f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php @@ -8,16 +8,16 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Helper\Helper; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\String\UnicodeString; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Helper\Helper; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\String\UnicodeString; class ReStructuredTextDescriptor extends Descriptor { //

diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/TextDescriptor.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/TextDescriptor.php index df6557134..ee2b5ccb5 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/TextDescriptor.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/TextDescriptor.php @@ -8,15 +8,15 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Helper\Helper; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Helper\Helper; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; /** * Text descriptor. * diff --git a/vendor/rector/rector/vendor/symfony/console/Descriptor/XmlDescriptor.php b/vendor/rector/rector/vendor/symfony/console/Descriptor/XmlDescriptor.php index 4beabf311..684a503b9 100644 --- a/vendor/rector/rector/vendor/symfony/console/Descriptor/XmlDescriptor.php +++ b/vendor/rector/rector/vendor/symfony/console/Descriptor/XmlDescriptor.php @@ -8,13 +8,13 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Descriptor; +namespace RectorPrefix202410\Symfony\Component\Console\Descriptor; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputDefinition; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputDefinition; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; /** * XML descriptor. * diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/CommandNotFoundException.php b/vendor/rector/rector/vendor/symfony/console/Exception/CommandNotFoundException.php index 9f24f5a59..c6d777da1 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/CommandNotFoundException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/CommandNotFoundException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * Represents an incorrect command name typed in the console. diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/ExceptionInterface.php b/vendor/rector/rector/vendor/symfony/console/Exception/ExceptionInterface.php index 913586547..649dd1c8c 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/ExceptionInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/ExceptionInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * ExceptionInterface. diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/InvalidArgumentException.php b/vendor/rector/rector/vendor/symfony/console/Exception/InvalidArgumentException.php index faa7be0b8..5d0ba69b5 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/InvalidArgumentException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/InvalidArgumentException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * @author Jérôme Tamarelle diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/InvalidOptionException.php b/vendor/rector/rector/vendor/symfony/console/Exception/InvalidOptionException.php index cf0632797..755499e90 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/InvalidOptionException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/InvalidOptionException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * Represents an incorrect option name or value typed in the console. diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/LogicException.php b/vendor/rector/rector/vendor/symfony/console/Exception/LogicException.php index fa56f7f1c..90719f99b 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/LogicException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/LogicException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * @author Jérôme Tamarelle diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/MissingInputException.php b/vendor/rector/rector/vendor/symfony/console/Exception/MissingInputException.php index c32f390c2..baeac115d 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/MissingInputException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/MissingInputException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * Represents failure to read input from stdin. diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/NamespaceNotFoundException.php b/vendor/rector/rector/vendor/symfony/console/Exception/NamespaceNotFoundException.php index f07293c78..70431edf2 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/NamespaceNotFoundException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/NamespaceNotFoundException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * Represents an incorrect namespace typed in the console. diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/RunCommandFailedException.php b/vendor/rector/rector/vendor/symfony/console/Exception/RunCommandFailedException.php index f2d3cc3ac..83b18979a 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/RunCommandFailedException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/RunCommandFailedException.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; -use RectorPrefix202405\Symfony\Component\Console\Messenger\RunCommandContext; +use RectorPrefix202410\Symfony\Component\Console\Messenger\RunCommandContext; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/console/Exception/RuntimeException.php b/vendor/rector/rector/vendor/symfony/console/Exception/RuntimeException.php index 58a24b690..a63b4e347 100644 --- a/vendor/rector/rector/vendor/symfony/console/Exception/RuntimeException.php +++ b/vendor/rector/rector/vendor/symfony/console/Exception/RuntimeException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Exception; +namespace RectorPrefix202410\Symfony\Component\Console\Exception; /** * @author Jérôme Tamarelle diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatter.php b/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatter.php index 38db870b9..e17eee015 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatter.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatter.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; /** * @author Tien Xuan Vo diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php b/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php index f66a841fd..f5cd8984d 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; /** * @author Tien Xuan Vo diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatter.php b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatter.php index 33fffdb45..6f7da50a1 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatter.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatter.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use function RectorPrefix202405\Symfony\Component\String\b; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use function RectorPrefix202410\Symfony\Component\String\b; /** * Formatter class for console output. * diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterInterface.php b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterInterface.php index 680b19129..7a233d263 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; /** * Formatter interface for console output. diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyle.php index 1008c9e1b..5228e8646 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyle.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyle.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; -use RectorPrefix202405\Symfony\Component\Console\Color; +use RectorPrefix202410\Symfony\Component\Console\Color; /** * Formatter style class for defining styles. * diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php index 8ed6bf559..c21bbf401 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; /** * Formatter style interface for defining styles. diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php index a0e44186e..d8641e59f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Contracts\Service\ResetInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Contracts\Service\ResetInterface; /** * @author Jean-François Simon */ diff --git a/vendor/rector/rector/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php b/vendor/rector/rector/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php index b8c3b7916..9a72c3f3b 100644 --- a/vendor/rector/rector/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Formatter; +namespace RectorPrefix202410\Symfony\Component\Console\Formatter; /** * Formatter interface for console output that supports word wrapping. diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/DebugFormatterHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/DebugFormatterHelper.php index 1a7b973a3..ad906d891 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/DebugFormatterHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/DebugFormatterHelper.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; /** * Helps outputting debug information when running an external program from a command. diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/DescriptorHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/DescriptorHelper.php index 44ff603d2..b89300927 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/DescriptorHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/DescriptorHelper.php @@ -8,16 +8,16 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\DescriptorInterface; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\JsonDescriptor; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\MarkdownDescriptor; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\ReStructuredTextDescriptor; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\TextDescriptor; -use RectorPrefix202405\Symfony\Component\Console\Descriptor\XmlDescriptor; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\DescriptorInterface; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\JsonDescriptor; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\MarkdownDescriptor; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\ReStructuredTextDescriptor; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\TextDescriptor; +use RectorPrefix202410\Symfony\Component\Console\Descriptor\XmlDescriptor; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * This class adds helper method to describe objects in various formats. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/Dumper.php b/vendor/rector/rector/vendor/symfony/console/Helper/Dumper.php index 2a1deace7..7fef0ef07 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/Dumper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/Dumper.php @@ -8,12 +8,12 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\VarDumper\Cloner\ClonerInterface; -use RectorPrefix202405\Symfony\Component\VarDumper\Cloner\VarCloner; -use RectorPrefix202405\Symfony\Component\VarDumper\Dumper\CliDumper; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\VarDumper\Cloner\ClonerInterface; +use RectorPrefix202410\Symfony\Component\VarDumper\Cloner\VarCloner; +use RectorPrefix202410\Symfony\Component\VarDumper\Dumper\CliDumper; /** * @author Roland Franssen */ diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/FormatterHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/FormatterHelper.php index 01a39ed72..87d7beb42 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/FormatterHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/FormatterHelper.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; /** * The Formatter class provides helpers to format messages. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/Helper.php b/vendor/rector/rector/vendor/symfony/console/Helper/Helper.php index 648f2d74c..15d208c06 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/Helper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/Helper.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; -use RectorPrefix202405\Symfony\Component\String\UnicodeString; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\String\UnicodeString; /** * Helper is the base class for all helper classes. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/HelperInterface.php b/vendor/rector/rector/vendor/symfony/console/Helper/HelperInterface.php index e6cef2c20..a112548cc 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/HelperInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/HelperInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; /** * HelperInterface is the interface all helpers must implement. diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/HelperSet.php b/vendor/rector/rector/vendor/symfony/console/Helper/HelperSet.php index e83683aac..27391278d 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/HelperSet.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/HelperSet.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; /** * HelperSet represents a set of helpers to be used with a command. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/InputAwareHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/InputAwareHelper.php index cdbb48015..8c6066b38 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/InputAwareHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/InputAwareHelper.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Input\InputAwareInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputAwareInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; /** * An implementation of InputAwareInterface for Helpers. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/OutputWrapper.php b/vendor/rector/rector/vendor/symfony/console/Helper/OutputWrapper.php index d7cbff860..0a410127c 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/OutputWrapper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/OutputWrapper.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; /** * Simple output wrapper for "tagged outputs" instead of wordwrap(). This solution is based on a StackOverflow diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/ProcessHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/ProcessHelper.php index 2d53c9916..91b8d8dc4 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/ProcessHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/ProcessHelper.php @@ -8,12 +8,12 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Process\Exception\ProcessFailedException; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Process\Exception\ProcessFailedException; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * The ProcessHelper class provides helpers to run external processes. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/ProgressBar.php b/vendor/rector/rector/vendor/symfony/console/Helper/ProgressBar.php index 72f288e32..7bded0741 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/ProgressBar.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/ProgressBar.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Cursor; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleSectionOutput; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Terminal; +use RectorPrefix202410\Symfony\Component\Console\Cursor; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleSectionOutput; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Terminal; /** * The ProgressBar provides helpers to display progress output. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/ProgressIndicator.php b/vendor/rector/rector/vendor/symfony/console/Helper/ProgressIndicator.php index 04869a632..64a0457b6 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/ProgressIndicator.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/ProgressIndicator.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/QuestionHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/QuestionHelper.php index e476ec85a..f2e961d14 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/QuestionHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/QuestionHelper.php @@ -8,22 +8,22 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Cursor; -use RectorPrefix202405\Symfony\Component\Console\Exception\MissingInputException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterStyle; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\StreamableInputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleSectionOutput; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Question\ChoiceQuestion; -use RectorPrefix202405\Symfony\Component\Console\Question\Question; -use RectorPrefix202405\Symfony\Component\Console\Terminal; -use function RectorPrefix202405\Symfony\Component\String\s; +use RectorPrefix202410\Symfony\Component\Console\Cursor; +use RectorPrefix202410\Symfony\Component\Console\Exception\MissingInputException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterStyle; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\StreamableInputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleSectionOutput; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Question\ChoiceQuestion; +use RectorPrefix202410\Symfony\Component\Console\Question\Question; +use RectorPrefix202410\Symfony\Component\Console\Terminal; +use function RectorPrefix202410\Symfony\Component\String\s; /** * The QuestionHelper class provides helpers to interact with the user. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/vendor/rector/rector/vendor/symfony/console/Helper/SymfonyQuestionHelper.php index f29d21a9f..a719aa14e 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/SymfonyQuestionHelper.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Question\ChoiceQuestion; -use RectorPrefix202405\Symfony\Component\Console\Question\ConfirmationQuestion; -use RectorPrefix202405\Symfony\Component\Console\Question\Question; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Question\ChoiceQuestion; +use RectorPrefix202410\Symfony\Component\Console\Question\ConfirmationQuestion; +use RectorPrefix202410\Symfony\Component\Console\Question\Question; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; /** * Symfony Style Guide compliant question helper. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/Table.php b/vendor/rector/rector/vendor/symfony/console/Helper/Table.php index cb08fc874..1e7a6b3cb 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/Table.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/Table.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Formatter\WrappableOutputFormatterInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleSectionOutput; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Formatter\WrappableOutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleSectionOutput; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Provides helpers to display a table. * diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/TableCell.php b/vendor/rector/rector/vendor/symfony/console/Helper/TableCell.php index 38e2312dc..5239c2ddf 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/TableCell.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/TableCell.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; /** * @author Abdellatif Ait boudad */ diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/TableCellStyle.php b/vendor/rector/rector/vendor/symfony/console/Helper/TableCellStyle.php index 43a29e6c9..8d0928408 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/TableCellStyle.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/TableCellStyle.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; /** * @author Yewhen Khoptynskyi */ diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/TableRows.php b/vendor/rector/rector/vendor/symfony/console/Helper/TableRows.php index 6a57fa610..e48c04bd8 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/TableRows.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/TableRows.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; /** * @internal diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/TableSeparator.php b/vendor/rector/rector/vendor/symfony/console/Helper/TableSeparator.php index 3f57a83bb..07f3f1f76 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/TableSeparator.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/TableSeparator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; /** * Marks a row as being a separator. diff --git a/vendor/rector/rector/vendor/symfony/console/Helper/TableStyle.php b/vendor/rector/rector/vendor/symfony/console/Helper/TableStyle.php index 6e7d5d4cc..fa32b13b2 100644 --- a/vendor/rector/rector/vendor/symfony/console/Helper/TableStyle.php +++ b/vendor/rector/rector/vendor/symfony/console/Helper/TableStyle.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Helper; +namespace RectorPrefix202410\Symfony\Component\Console\Helper; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; /** * Defines the styles for a Table. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/ArgvInput.php b/vendor/rector/rector/vendor/symfony/console/Input/ArgvInput.php index 4320bb700..743926b6c 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/ArgvInput.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/ArgvInput.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; /** * ArgvInput represents an input coming from the CLI arguments. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/ArrayInput.php b/vendor/rector/rector/vendor/symfony/console/Input/ArrayInput.php index bfb0fa3b6..fda304485 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/ArrayInput.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/ArrayInput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidOptionException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidOptionException; /** * ArrayInput represents an input provided as an array. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/Input.php b/vendor/rector/rector/vendor/symfony/console/Input/Input.php index 825fd1be0..06b66c818 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/Input.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/Input.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; /** * Input is the base class for all concrete Input classes. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/InputArgument.php b/vendor/rector/rector/vendor/symfony/console/Input/InputArgument.php index e439e86fc..f523be7d1 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/InputArgument.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/InputArgument.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Completion\Suggestion; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Completion\Suggestion; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; /** * Represents a command line argument. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/InputAwareInterface.php b/vendor/rector/rector/vendor/symfony/console/Input/InputAwareInterface.php index f8d69ca45..a04e48cc4 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/InputAwareInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/InputAwareInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; /** * InputAwareInterface should be implemented by classes that depends on the diff --git a/vendor/rector/rector/vendor/symfony/console/Input/InputDefinition.php b/vendor/rector/rector/vendor/symfony/console/Input/InputDefinition.php index f45c65b29..971b5c283 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/InputDefinition.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/InputDefinition.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; /** * A InputDefinition represents a set of valid command line arguments and options. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/InputInterface.php b/vendor/rector/rector/vendor/symfony/console/Input/InputInterface.php index daee83b3d..d0993c98b 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/InputInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/InputInterface.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; /** * InputInterface is the interface implemented by all input classes. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/InputOption.php b/vendor/rector/rector/vendor/symfony/console/Input/InputOption.php index 0a16fb52c..abbc9b33f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/InputOption.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/InputOption.php @@ -8,14 +8,14 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Completion\Suggestion; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Completion\Suggestion; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; /** * Represents a command line option. * diff --git a/vendor/rector/rector/vendor/symfony/console/Input/StreamableInputInterface.php b/vendor/rector/rector/vendor/symfony/console/Input/StreamableInputInterface.php index a4fd5d401..f5d75b6fc 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/StreamableInputInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/StreamableInputInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; /** * StreamableInputInterface is the interface implemented by all input classes diff --git a/vendor/rector/rector/vendor/symfony/console/Input/StringInput.php b/vendor/rector/rector/vendor/symfony/console/Input/StringInput.php index d0c148593..ff1eba2d9 100644 --- a/vendor/rector/rector/vendor/symfony/console/Input/StringInput.php +++ b/vendor/rector/rector/vendor/symfony/console/Input/StringInput.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Input; +namespace RectorPrefix202410\Symfony\Component\Console\Input; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; /** * StringInput represents an input provided as a string. * diff --git a/vendor/rector/rector/vendor/symfony/console/Logger/ConsoleLogger.php b/vendor/rector/rector/vendor/symfony/console/Logger/ConsoleLogger.php index 3659492d7..759f71bc8 100644 --- a/vendor/rector/rector/vendor/symfony/console/Logger/ConsoleLogger.php +++ b/vendor/rector/rector/vendor/symfony/console/Logger/ConsoleLogger.php @@ -8,13 +8,13 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Logger; +namespace RectorPrefix202410\Symfony\Component\Console\Logger; -use RectorPrefix202405\Psr\Log\AbstractLogger; -use RectorPrefix202405\Psr\Log\InvalidArgumentException; -use RectorPrefix202405\Psr\Log\LogLevel; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Psr\Log\AbstractLogger; +use RectorPrefix202410\Psr\Log\InvalidArgumentException; +use RectorPrefix202410\Psr\Log\LogLevel; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * PSR-3 compliant console logger. * diff --git a/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandContext.php b/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandContext.php index d0b3531bd..60b89d5f0 100644 --- a/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandContext.php +++ b/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandContext.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Messenger; +namespace RectorPrefix202410\Symfony\Component\Console\Messenger; /** * @author Kevin Bond diff --git a/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessage.php b/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessage.php index a7588a5bb..2e981691e 100644 --- a/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessage.php +++ b/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessage.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Messenger; +namespace RectorPrefix202410\Symfony\Component\Console\Messenger; -use RectorPrefix202405\Symfony\Component\Console\Exception\RunCommandFailedException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RunCommandFailedException; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessageHandler.php b/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessageHandler.php index 657c280a3..106b25b84 100644 --- a/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessageHandler.php +++ b/vendor/rector/rector/vendor/symfony/console/Messenger/RunCommandMessageHandler.php @@ -8,13 +8,13 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Messenger; +namespace RectorPrefix202410\Symfony\Component\Console\Messenger; -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Exception\RunCommandFailedException; -use RectorPrefix202405\Symfony\Component\Console\Input\StringInput; -use RectorPrefix202405\Symfony\Component\Console\Output\BufferedOutput; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Exception\RunCommandFailedException; +use RectorPrefix202410\Symfony\Component\Console\Input\StringInput; +use RectorPrefix202410\Symfony\Component\Console\Output\BufferedOutput; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/console/Output/AnsiColorMode.php b/vendor/rector/rector/vendor/symfony/console/Output/AnsiColorMode.php index 83ef03c0c..3f540f668 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/AnsiColorMode.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/AnsiColorMode.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; class AnsiColorMode { public const Ansi4 = 'ansi4'; diff --git a/vendor/rector/rector/vendor/symfony/console/Output/BufferedOutput.php b/vendor/rector/rector/vendor/symfony/console/Output/BufferedOutput.php index a5bbdf6ab..d135ac8e0 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/BufferedOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/BufferedOutput.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; /** * @author Jean-François Simon diff --git a/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutput.php b/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutput.php index b01e4009a..472cc42a1 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutput.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; /** * ConsoleOutput is the default class for all CLI output. It uses STDOUT and STDERR. * diff --git a/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutputInterface.php b/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutputInterface.php index b7957682a..315ae392e 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutputInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/ConsoleOutputInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; /** * ConsoleOutputInterface is the interface implemented by ConsoleOutput class. diff --git a/vendor/rector/rector/vendor/symfony/console/Output/ConsoleSectionOutput.php b/vendor/rector/rector/vendor/symfony/console/Output/ConsoleSectionOutput.php index 248194829..e759414f7 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/ConsoleSectionOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/ConsoleSectionOutput.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; -use RectorPrefix202405\Symfony\Component\Console\Helper\Helper; -use RectorPrefix202405\Symfony\Component\Console\Terminal; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Helper\Helper; +use RectorPrefix202410\Symfony\Component\Console\Terminal; /** * @author Pierre du Plessis * @author Gabriel Ostrolucký diff --git a/vendor/rector/rector/vendor/symfony/console/Output/NullOutput.php b/vendor/rector/rector/vendor/symfony/console/Output/NullOutput.php index fa310bbc4..db030ec11 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/NullOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/NullOutput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Formatter\NullOutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Formatter\NullOutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; /** * NullOutput suppresses all output. * diff --git a/vendor/rector/rector/vendor/symfony/console/Output/Output.php b/vendor/rector/rector/vendor/symfony/console/Output/Output.php index 5c39e34b0..b8e2a9757 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/Output.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/Output.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; /** * Base class for output classes. * diff --git a/vendor/rector/rector/vendor/symfony/console/Output/OutputInterface.php b/vendor/rector/rector/vendor/symfony/console/Output/OutputInterface.php index 3ad81d7b3..ed64411e9 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/OutputInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/OutputInterface.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; /** * OutputInterface is the interface implemented by all Output classes. * diff --git a/vendor/rector/rector/vendor/symfony/console/Output/StreamOutput.php b/vendor/rector/rector/vendor/symfony/console/Output/StreamOutput.php index e232100d1..7178e3eaa 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/StreamOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/StreamOutput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; /** * StreamOutput writes the output to a given stream. * @@ -82,7 +82,7 @@ protected function doWrite(string $message, bool $newline) protected function hasColorSupport() : bool { // Follow https://no-color.org/ - if (isset($_SERVER['NO_COLOR']) || \false !== \getenv('NO_COLOR')) { + if ('' !== (($_SERVER['NO_COLOR'] ?? \getenv('NO_COLOR'))[0] ?? '')) { return \false; } // Detect msysgit/mingw and assume this is a tty because detection diff --git a/vendor/rector/rector/vendor/symfony/console/Output/TrimmedBufferOutput.php b/vendor/rector/rector/vendor/symfony/console/Output/TrimmedBufferOutput.php index c1e7eb25f..acca9c208 100644 --- a/vendor/rector/rector/vendor/symfony/console/Output/TrimmedBufferOutput.php +++ b/vendor/rector/rector/vendor/symfony/console/Output/TrimmedBufferOutput.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Output; +namespace RectorPrefix202410\Symfony\Component\Console\Output; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; /** * A BufferedOutput that keeps only the last N chars. * diff --git a/vendor/rector/rector/vendor/symfony/console/Question/ChoiceQuestion.php b/vendor/rector/rector/vendor/symfony/console/Question/ChoiceQuestion.php index f5fb59aac..963284306 100644 --- a/vendor/rector/rector/vendor/symfony/console/Question/ChoiceQuestion.php +++ b/vendor/rector/rector/vendor/symfony/console/Question/ChoiceQuestion.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Question; +namespace RectorPrefix202410\Symfony\Component\Console\Question; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; /** * Represents a choice question. * @@ -35,9 +35,9 @@ class ChoiceQuestion extends Question */ private $errorMessage = 'Value "%s" is invalid'; /** - * @param string $question The question to ask to the user - * @param array $choices The list of available choices - * @param mixed $default The default answer to return + * @param string $question The question to ask to the user + * @param array $choices The list of available choices + * @param string|bool|int|float|null $default The default answer to return */ public function __construct(string $question, array $choices, $default = null) { diff --git a/vendor/rector/rector/vendor/symfony/console/Question/ConfirmationQuestion.php b/vendor/rector/rector/vendor/symfony/console/Question/ConfirmationQuestion.php index d11aaa87e..5360d1420 100644 --- a/vendor/rector/rector/vendor/symfony/console/Question/ConfirmationQuestion.php +++ b/vendor/rector/rector/vendor/symfony/console/Question/ConfirmationQuestion.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Question; +namespace RectorPrefix202410\Symfony\Component\Console\Question; /** * Represents a yes/no question. diff --git a/vendor/rector/rector/vendor/symfony/console/Question/Question.php b/vendor/rector/rector/vendor/symfony/console/Question/Question.php index 0462050c7..6de89cfca 100644 --- a/vendor/rector/rector/vendor/symfony/console/Question/Question.php +++ b/vendor/rector/rector/vendor/symfony/console/Question/Question.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Question; +namespace RectorPrefix202410\Symfony\Component\Console\Question; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\LogicException; /** * Represents a Question. * diff --git a/vendor/rector/rector/vendor/symfony/console/Resources/completion.bash b/vendor/rector/rector/vendor/symfony/console/Resources/completion.bash index 0d76eacc3..64c6a338f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Resources/completion.bash +++ b/vendor/rector/rector/vendor/symfony/console/Resources/completion.bash @@ -17,7 +17,7 @@ _sf_{{ COMMAND_NAME }}() { done # Use newline as only separator to allow space in completion values - IFS=$'\n' + local IFS=$'\n' local sf_cmd="${COMP_WORDS[0]}" # for an alias, get the real script behind it diff --git a/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalMap.php b/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalMap.php index 2e2651226..4b8596948 100644 --- a/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalMap.php +++ b/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalMap.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\SignalRegistry; +namespace RectorPrefix202410\Symfony\Component\Console\SignalRegistry; /** * @author Grégoire Pineau diff --git a/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalRegistry.php b/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalRegistry.php index 3a64bfc94..9ded1ce8c 100644 --- a/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalRegistry.php +++ b/vendor/rector/rector/vendor/symfony/console/SignalRegistry/SignalRegistry.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\SignalRegistry; +namespace RectorPrefix202410\Symfony\Component\Console\SignalRegistry; final class SignalRegistry { diff --git a/vendor/rector/rector/vendor/symfony/console/SingleCommandApplication.php b/vendor/rector/rector/vendor/symfony/console/SingleCommandApplication.php index 63f13004e..e7db8173d 100644 --- a/vendor/rector/rector/vendor/symfony/console/SingleCommandApplication.php +++ b/vendor/rector/rector/vendor/symfony/console/SingleCommandApplication.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console; +namespace RectorPrefix202410\Symfony\Component\Console; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * @author Grégoire Pineau */ diff --git a/vendor/rector/rector/vendor/symfony/console/Style/OutputStyle.php b/vendor/rector/rector/vendor/symfony/console/Style/OutputStyle.php index 36956f9a3..361d25185 100644 --- a/vendor/rector/rector/vendor/symfony/console/Style/OutputStyle.php +++ b/vendor/rector/rector/vendor/symfony/console/Style/OutputStyle.php @@ -8,12 +8,12 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Style; +namespace RectorPrefix202410\Symfony\Component\Console\Style; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatterInterface; -use RectorPrefix202405\Symfony\Component\Console\Helper\ProgressBar; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatterInterface; +use RectorPrefix202410\Symfony\Component\Console\Helper\ProgressBar; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; /** * Decorates output to add console style guide helpers. * diff --git a/vendor/rector/rector/vendor/symfony/console/Style/StyleInterface.php b/vendor/rector/rector/vendor/symfony/console/Style/StyleInterface.php index 72d0839ed..5e2b64c0f 100644 --- a/vendor/rector/rector/vendor/symfony/console/Style/StyleInterface.php +++ b/vendor/rector/rector/vendor/symfony/console/Style/StyleInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Style; +namespace RectorPrefix202410\Symfony\Component\Console\Style; /** * Output style helpers. diff --git a/vendor/rector/rector/vendor/symfony/console/Style/SymfonyStyle.php b/vendor/rector/rector/vendor/symfony/console/Style/SymfonyStyle.php index ec02bc3b5..14ad54c90 100644 --- a/vendor/rector/rector/vendor/symfony/console/Style/SymfonyStyle.php +++ b/vendor/rector/rector/vendor/symfony/console/Style/SymfonyStyle.php @@ -8,27 +8,27 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console\Style; +namespace RectorPrefix202410\Symfony\Component\Console\Style; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Formatter\OutputFormatter; -use RectorPrefix202405\Symfony\Component\Console\Helper\Helper; -use RectorPrefix202405\Symfony\Component\Console\Helper\OutputWrapper; -use RectorPrefix202405\Symfony\Component\Console\Helper\ProgressBar; -use RectorPrefix202405\Symfony\Component\Console\Helper\SymfonyQuestionHelper; -use RectorPrefix202405\Symfony\Component\Console\Helper\Table; -use RectorPrefix202405\Symfony\Component\Console\Helper\TableCell; -use RectorPrefix202405\Symfony\Component\Console\Helper\TableSeparator; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleOutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\ConsoleSectionOutput; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Output\TrimmedBufferOutput; -use RectorPrefix202405\Symfony\Component\Console\Question\ChoiceQuestion; -use RectorPrefix202405\Symfony\Component\Console\Question\ConfirmationQuestion; -use RectorPrefix202405\Symfony\Component\Console\Question\Question; -use RectorPrefix202405\Symfony\Component\Console\Terminal; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Formatter\OutputFormatter; +use RectorPrefix202410\Symfony\Component\Console\Helper\Helper; +use RectorPrefix202410\Symfony\Component\Console\Helper\OutputWrapper; +use RectorPrefix202410\Symfony\Component\Console\Helper\ProgressBar; +use RectorPrefix202410\Symfony\Component\Console\Helper\SymfonyQuestionHelper; +use RectorPrefix202410\Symfony\Component\Console\Helper\Table; +use RectorPrefix202410\Symfony\Component\Console\Helper\TableCell; +use RectorPrefix202410\Symfony\Component\Console\Helper\TableSeparator; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleOutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\ConsoleSectionOutput; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Output\TrimmedBufferOutput; +use RectorPrefix202410\Symfony\Component\Console\Question\ChoiceQuestion; +use RectorPrefix202410\Symfony\Component\Console\Question\ConfirmationQuestion; +use RectorPrefix202410\Symfony\Component\Console\Question\Question; +use RectorPrefix202410\Symfony\Component\Console\Terminal; /** * Output decorator helpers for the Symfony Style Guide. * diff --git a/vendor/rector/rector/vendor/symfony/console/Terminal.php b/vendor/rector/rector/vendor/symfony/console/Terminal.php index b7778ec9e..17feb7a92 100644 --- a/vendor/rector/rector/vendor/symfony/console/Terminal.php +++ b/vendor/rector/rector/vendor/symfony/console/Terminal.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Console; +namespace RectorPrefix202410\Symfony\Component\Console; -use RectorPrefix202405\Symfony\Component\Console\Output\AnsiColorMode; +use RectorPrefix202410\Symfony\Component\Console\Output\AnsiColorMode; class Terminal { public const DEFAULT_COLOR_MODE = AnsiColorMode::Ansi4; @@ -193,8 +193,7 @@ private static function readFromProcess($command) : ?string } $descriptorspec = [1 => ['pipe', 'w'], 2 => ['pipe', 'w']]; $cp = \function_exists('sapi_windows_cp_set') ? \sapi_windows_cp_get() : 0; - $process = \proc_open(\is_array($command) ? \implode(' ', \array_map('escapeshellarg', $command)) : $command, $descriptorspec, $pipes, null, null, ['suppress_errors' => \true]); - if (!\is_resource($process)) { + if (!($process = \proc_open(\is_array($command) ? \implode(' ', \array_map('escapeshellarg', $command)) : $command, $descriptorspec, $pipes, null, null, ['suppress_errors' => \true]))) { return null; } $info = \stream_get_contents($pipes[1]); diff --git a/vendor/rector/rector/vendor/symfony/console/composer.json b/vendor/rector/rector/vendor/symfony/console/composer.json index fc4eb2163..709f84c9e 100644 --- a/vendor/rector/rector/vendor/symfony/console/composer.json +++ b/vendor/rector/rector/vendor/symfony/console/composer.json @@ -52,7 +52,7 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Console\\": "" + "RectorPrefix202410\\Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "\/Tests\/" diff --git a/vendor/rector/rector/vendor/symfony/deprecation-contracts/function.php b/vendor/rector/rector/vendor/symfony/deprecation-contracts/function.php index debc9eae1..01ad89154 100644 --- a/vendor/rector/rector/vendor/symfony/deprecation-contracts/function.php +++ b/vendor/rector/rector/vendor/symfony/deprecation-contracts/function.php @@ -1,6 +1,6 @@ diff --git a/vendor/rector/rector/vendor/symfony/filesystem/Exception/RuntimeException.php b/vendor/rector/rector/vendor/symfony/filesystem/Exception/RuntimeException.php index c9a7a651c..ec473a30c 100644 --- a/vendor/rector/rector/vendor/symfony/filesystem/Exception/RuntimeException.php +++ b/vendor/rector/rector/vendor/symfony/filesystem/Exception/RuntimeException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Filesystem\Exception; +namespace RectorPrefix202410\Symfony\Component\Filesystem\Exception; /** * @author Théo Fidry diff --git a/vendor/rector/rector/vendor/symfony/filesystem/Filesystem.php b/vendor/rector/rector/vendor/symfony/filesystem/Filesystem.php index 43298be21..d31b26c20 100644 --- a/vendor/rector/rector/vendor/symfony/filesystem/Filesystem.php +++ b/vendor/rector/rector/vendor/symfony/filesystem/Filesystem.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Filesystem; +namespace RectorPrefix202410\Symfony\Component\Filesystem; -use RectorPrefix202405\Symfony\Component\Filesystem\Exception\FileNotFoundException; -use RectorPrefix202405\Symfony\Component\Filesystem\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Filesystem\Exception\IOException; +use RectorPrefix202410\Symfony\Component\Filesystem\Exception\FileNotFoundException; +use RectorPrefix202410\Symfony\Component\Filesystem\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Filesystem\Exception\IOException; /** * Provides basic utility to manipulate the file system. * @@ -157,7 +157,7 @@ private static function doRemove(array $files, bool $isRecursive) : void } } elseif (\is_dir($file)) { if (!$isRecursive) { - $tmpName = \dirname(\realpath($file)) . '/.' . \strrev(\strtr(\base64_encode(\random_bytes(2)), '/=', '-_')); + $tmpName = \dirname(\realpath($file)) . '/.!' . \strrev(\strtr(\base64_encode(\random_bytes(2)), '/=', '-!')); if (\file_exists($tmpName)) { try { self::doRemove([$tmpName], \true); @@ -211,6 +211,9 @@ public function chmod($files, int $mode, int $umask = 00, bool $recursive = \fal /** * Change the owner of an array of files or directories. * + * This method always throws on Windows, as the underlying PHP function is not supported. + * @see https://www.php.net/chown + * * @param string|int $user A user name or number * @param bool $recursive Whether change the owner recursively or not * @@ -239,6 +242,9 @@ public function chown($files, $user, bool $recursive = \false) /** * Change the group of an array of files or directories. * + * This method always throws on Windows, as the underlying PHP function is not supported. + * @see https://www.php.net/chgrp + * * @param string|int $group A group name or number * @param bool $recursive Whether change the group recursively or not * @@ -594,10 +600,13 @@ public function dumpFile(string $filename, $content) if (\false === self::box('file_put_contents', $tmpFile, $content)) { throw new IOException(\sprintf('Failed to write file "%s": ', $filename) . self::$lastError, 0, null, $filename); } - self::box('chmod', $tmpFile, @\fileperms($filename) ?: 0666 & ~\umask()); + self::box('chmod', $tmpFile, self::box('fileperms', $filename) ?: 0666 & ~\umask()); $this->rename($tmpFile, $filename, \true); } finally { if (\file_exists($tmpFile)) { + if ('\\' === \DIRECTORY_SEPARATOR && !\is_writable($tmpFile)) { + self::box('chmod', $tmpFile, self::box('fileperms', $tmpFile) | 0200); + } self::box('unlink', $tmpFile); } } diff --git a/vendor/rector/rector/vendor/symfony/filesystem/Path.php b/vendor/rector/rector/vendor/symfony/filesystem/Path.php index 1c8988ad2..b9fa7c960 100644 --- a/vendor/rector/rector/vendor/symfony/filesystem/Path.php +++ b/vendor/rector/rector/vendor/symfony/filesystem/Path.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Filesystem; +namespace RectorPrefix202410\Symfony\Component\Filesystem; -use RectorPrefix202405\Symfony\Component\Filesystem\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Filesystem\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Filesystem\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Filesystem\Exception\RuntimeException; /** * Contains utility methods for handling path strings. * @@ -314,7 +314,7 @@ public static function isAbsolute(string $path) : bool return \false; } // Strip scheme - if (\false !== ($schemeSeparatorPosition = \strpos($path, '://'))) { + if (\false !== ($schemeSeparatorPosition = \strpos($path, '://')) && 1 !== $schemeSeparatorPosition) { $path = \substr($path, $schemeSeparatorPosition + 3); } $firstCharacter = $path[0]; diff --git a/vendor/rector/rector/vendor/symfony/filesystem/composer.json b/vendor/rector/rector/vendor/symfony/filesystem/composer.json index 15f452795..8e03be27c 100644 --- a/vendor/rector/rector/vendor/symfony/filesystem/composer.json +++ b/vendor/rector/rector/vendor/symfony/filesystem/composer.json @@ -18,12 +18,14 @@ "require": { "php": ">=8.1", "symfony\/polyfill-ctype": "~1.8", - "symfony\/polyfill-mbstring": "~1.8", - "symfony\/process": "^5.4|^6.4" + "symfony\/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony\/process": "^5.4|^6.4|^7.0" }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Filesystem\\": "" + "RectorPrefix202410\\Symfony\\Component\\Filesystem\\": "" }, "exclude-from-classmap": [ "\/Tests\/" diff --git a/vendor/rector/rector/vendor/symfony/finder/Comparator/Comparator.php b/vendor/rector/rector/vendor/symfony/finder/Comparator/Comparator.php index 9c020681d..e3adac9f5 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Comparator/Comparator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Comparator/Comparator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Comparator; +namespace RectorPrefix202410\Symfony\Component\Finder\Comparator; /** * @author Fabien Potencier diff --git a/vendor/rector/rector/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/rector/rector/vendor/symfony/finder/Comparator/DateComparator.php index a953fe4c5..d7417d04a 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Comparator/DateComparator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Comparator/DateComparator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Comparator; +namespace RectorPrefix202410\Symfony\Component\Finder\Comparator; /** * DateCompare compiles date comparisons. diff --git a/vendor/rector/rector/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/rector/rector/vendor/symfony/finder/Comparator/NumberComparator.php index eafc19748..33d8f7904 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Comparator/NumberComparator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Comparator/NumberComparator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Comparator; +namespace RectorPrefix202410\Symfony\Component\Finder\Comparator; /** * NumberComparator compiles a simple comparison to an anonymous diff --git a/vendor/rector/rector/vendor/symfony/finder/Exception/AccessDeniedException.php b/vendor/rector/rector/vendor/symfony/finder/Exception/AccessDeniedException.php index fcb3b6f0a..9957e100e 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Exception/AccessDeniedException.php +++ b/vendor/rector/rector/vendor/symfony/finder/Exception/AccessDeniedException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Exception; +namespace RectorPrefix202410\Symfony\Component\Finder\Exception; /** * @author Jean-François Simon diff --git a/vendor/rector/rector/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/vendor/rector/rector/vendor/symfony/finder/Exception/DirectoryNotFoundException.php index b27fc3520..5bfd1c5a5 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Exception/DirectoryNotFoundException.php +++ b/vendor/rector/rector/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Exception; +namespace RectorPrefix202410\Symfony\Component\Finder\Exception; /** * @author Andreas Erhard diff --git a/vendor/rector/rector/vendor/symfony/finder/Finder.php b/vendor/rector/rector/vendor/symfony/finder/Finder.php index 2262f647d..246f82b20 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Finder.php +++ b/vendor/rector/rector/vendor/symfony/finder/Finder.php @@ -8,20 +8,20 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder; +namespace RectorPrefix202410\Symfony\Component\Finder; -use RectorPrefix202405\Symfony\Component\Finder\Comparator\DateComparator; -use RectorPrefix202405\Symfony\Component\Finder\Comparator\NumberComparator; -use RectorPrefix202405\Symfony\Component\Finder\Exception\DirectoryNotFoundException; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\CustomFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\DateRangeFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\FilecontentFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\FilenameFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\LazyIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; -use RectorPrefix202405\Symfony\Component\Finder\Iterator\SortableIterator; +use RectorPrefix202410\Symfony\Component\Finder\Comparator\DateComparator; +use RectorPrefix202410\Symfony\Component\Finder\Comparator\NumberComparator; +use RectorPrefix202410\Symfony\Component\Finder\Exception\DirectoryNotFoundException; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\CustomFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\DateRangeFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\FilecontentFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\LazyIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; +use RectorPrefix202410\Symfony\Component\Finder\Iterator\SortableIterator; /** * Finder allows to build rules to find files and directories. * diff --git a/vendor/rector/rector/vendor/symfony/finder/Gitignore.php b/vendor/rector/rector/vendor/symfony/finder/Gitignore.php index bd5a13ed4..372fbc58e 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Gitignore.php +++ b/vendor/rector/rector/vendor/symfony/finder/Gitignore.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder; +namespace RectorPrefix202410\Symfony\Component\Finder; /** * Gitignore matches against text. diff --git a/vendor/rector/rector/vendor/symfony/finder/Glob.php b/vendor/rector/rector/vendor/symfony/finder/Glob.php index ab0d3494a..64fcc9882 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Glob.php +++ b/vendor/rector/rector/vendor/symfony/finder/Glob.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder; +namespace RectorPrefix202410\Symfony\Component\Finder; /** * Glob matches globbing patterns against text. diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/CustomFilterIterator.php index 966549e1a..c2c2b59ba 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/CustomFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; /** * CustomFilterIterator filters files by applying anonymous functions. diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php index 436916ab3..2a35c5bf1 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\Comparator\DateComparator; +use RectorPrefix202410\Symfony\Component\Finder\Comparator\DateComparator; /** * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). * diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php index 6efc44602..a97f25c74 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; /** * DepthRangeFilterIterator limits the directory depth. diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php index 5b6f7129e..6fbe79829 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; /** * ExcludeDirectoryFilterIterator filters out directories. * diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php index 8682df5bd..e94b62402 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; /** * FileTypeFilterIterator only keeps files, directories, or both. diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php index 08c15a7fb..79fc5f43a 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; /** * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). * diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/FilenameFilterIterator.php index db7a7372b..738a1220c 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\Glob; +use RectorPrefix202410\Symfony\Component\Finder\Glob; /** * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). * diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/LazyIterator.php index 9d077b0c1..9742a38f2 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/LazyIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/LazyIterator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; /** * @author Jérémy Derussé diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php index c1554c67b..ed76ecd24 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; /** * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/PathFilterIterator.php index 23b88215f..e961bdf41 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/PathFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; /** * PathFilterIterator filters files by path patterns (e.g. some/special/dir). * diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php index 4d3117f4c..d794cb8f2 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\Exception\AccessDeniedException; -use RectorPrefix202405\Symfony\Component\Finder\SplFileInfo; +use RectorPrefix202410\Symfony\Component\Finder\Exception\AccessDeniedException; +use RectorPrefix202410\Symfony\Component\Finder\SplFileInfo; /** * Extends the \RecursiveDirectoryIterator to support relative paths. * @@ -71,7 +71,8 @@ public function current() : SplFileInfo $subPathname .= $this->directorySeparator; } $subPathname .= $this->getFilename(); - if ('/' !== ($basePath = $this->rootPath)) { + $basePath = $this->rootPath; + if ('/' !== $basePath && \substr_compare($basePath, $this->directorySeparator, -\strlen($this->directorySeparator)) !== 0 && \substr_compare($basePath, '/', -\strlen('/')) !== 0) { $basePath .= $this->directorySeparator; } return new SplFileInfo($basePath . $subPathname, $this->subPath, $subPathname); diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php index 5f57f95e8..76f720e86 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\Comparator\NumberComparator; +use RectorPrefix202410\Symfony\Component\Finder\Comparator\NumberComparator; /** * SizeRangeFilterIterator filters out files that are not in the given size range. * diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/SortableIterator.php index 444d74639..976c3e25d 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/SortableIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/SortableIterator.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; /** * SortableIterator applies a sort on a given Iterator. diff --git a/vendor/rector/rector/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/vendor/rector/rector/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php index d04ffc36c..ff0469e24 100644 --- a/vendor/rector/rector/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php +++ b/vendor/rector/rector/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder\Iterator; +namespace RectorPrefix202410\Symfony\Component\Finder\Iterator; -use RectorPrefix202405\Symfony\Component\Finder\Gitignore; +use RectorPrefix202410\Symfony\Component\Finder\Gitignore; /** * @extends \FilterIterator */ diff --git a/vendor/rector/rector/vendor/symfony/finder/SplFileInfo.php b/vendor/rector/rector/vendor/symfony/finder/SplFileInfo.php index 55ae1e3d4..e05322c45 100644 --- a/vendor/rector/rector/vendor/symfony/finder/SplFileInfo.php +++ b/vendor/rector/rector/vendor/symfony/finder/SplFileInfo.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Finder; +namespace RectorPrefix202410\Symfony\Component\Finder; /** * Extends \SplFileInfo to support relative paths. diff --git a/vendor/rector/rector/vendor/symfony/finder/composer.json b/vendor/rector/rector/vendor/symfony/finder/composer.json index a38abe9f5..1ed5e3a70 100644 --- a/vendor/rector/rector/vendor/symfony/finder/composer.json +++ b/vendor/rector/rector/vendor/symfony/finder/composer.json @@ -23,7 +23,7 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Finder\\": "" + "RectorPrefix202410\\Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "\/Tests\/" diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Mbstring.php index 3b0a3eb27..910838a33 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -47,6 +47,11 @@ * - mb_strstr - Finds first occurrence of a string within another * - mb_strwidth - Return width of string * - mb_substr_count - Count the number of substring occurrences + * - mb_ucfirst - Make a string's first character uppercase + * - mb_lcfirst - Make a string's first character lowercase + * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string + * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string + * - mb_rtrim - Strip whitespace (or other characters) from the end of a string * * Not implemented: * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) @@ -73,6 +78,13 @@ final class Mbstring private static $internalEncoding = 'UTF-8'; public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { + if (\is_array($s)) { + $r = []; + foreach ($s as $str) { + $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding); + } + return $r; + } if (\is_array($fromEncoding) || null !== $fromEncoding && \false !== \strpos($fromEncoding, ',')) { $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); } else { @@ -337,10 +349,6 @@ public static function mb_encoding_aliases($encoding) } public static function mb_check_encoding($var = null, $encoding = null) { - if (\PHP_VERSION_ID < 70200 && \is_array($var)) { - \trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); - return null; - } if (null === $encoding) { if (null === $var) { return \false; @@ -656,22 +664,15 @@ public static function mb_ord($s, $encoding = null) } return $code; } - public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null) : string + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null) : string { if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], \true)) { throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); } if (null === $encoding) { $encoding = self::mb_internal_encoding(); - } - try { - $validEncoding = @self::mb_check_encoding('', $encoding); - } catch (\ValueError $e) { - throw new \ValueError(\sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); - } - // BC for PHP 7.3 and lower - if (!$validEncoding) { - throw new \ValueError(\sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } else { + self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given'); } if (self::mb_strlen($pad_string, $encoding) <= 0) { throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); @@ -691,6 +692,28 @@ public static function mb_str_pad(string $string, int $length, string $pad_strin return self::mb_substr(\str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding) . $string . self::mb_substr(\str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); } } + public static function mb_ucfirst(string $string, ?string $encoding = null) : string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_ucfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given'); + } + $firstChar = \mb_substr($string, 0, 1, $encoding); + $firstChar = \mb_convert_case($firstChar, \MB_CASE_TITLE, $encoding); + return $firstChar . \mb_substr($string, 1, null, $encoding); + } + public static function mb_lcfirst(string $string, ?string $encoding = null) : string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_lcfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given'); + } + $firstChar = \mb_substr($string, 0, 1, $encoding); + $firstChar = \mb_convert_case($firstChar, \MB_CASE_LOWER, $encoding); + return $firstChar . \mb_substr($string, 1, null, $encoding); + } private static function getSubpart($pos, $part, $haystack, $encoding) { if (\false === $pos) { @@ -750,4 +773,63 @@ private static function getEncoding($encoding) } return $encoding; } + public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null) : string + { + return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__); + } + public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null) : string + { + return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__); + } + public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null) : string + { + return self::mb_internal_trim('{[%s]+$}D', $string, $characters, $encoding, __FUNCTION__); + } + private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function) : string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, $function . '(): Argument #3 ($encoding) must be a valid encoding, "%s" given'); + } + if ('' === $characters) { + return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding); + } + if ('UTF-8' === $encoding) { + $encoding = null; + if (!\preg_match('//u', $string)) { + $string = @\iconv('UTF-8', 'UTF-8//IGNORE', $string); + } + if (null !== $characters && !\preg_match('//u', $characters)) { + $characters = @\iconv('UTF-8', 'UTF-8//IGNORE', $characters); + } + } else { + $string = \iconv($encoding, 'UTF-8//IGNORE', $string); + if (null !== $characters) { + $characters = \iconv($encoding, 'UTF-8//IGNORE', $characters); + } + } + if (null === $characters) { + $characters = "\\0 \f\n\r\t\v             

   …᠎"; + } else { + $characters = \preg_quote($characters); + } + $string = \preg_replace(\sprintf($regex, $characters), '', $string); + if (null === $encoding) { + return $string; + } + return \iconv('UTF-8', $encoding . '//IGNORE', $string); + } + private static function assertEncoding(string $encoding, string $errorFormat) : void + { + try { + $validEncoding = @self::mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(\sprintf($errorFormat, $encoding)); + } + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(\sprintf($errorFormat, $encoding)); + } + } } diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php index 1fb9c696f..668ad7606 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php @@ -1,5 +1,5 @@ 'i̇', 'µ' => 'μ', 'ſ' => 's', 'ͅ' => 'ι', 'ς' => 'σ', 'ϐ' => 'β', 'ϑ' => 'θ', 'ϕ' => 'φ', 'ϖ' => 'π', 'ϰ' => 'κ', 'ϱ' => 'ρ', 'ϵ' => 'ε', 'ẛ' => 'ṡ', 'ι' => 'ι', 'ß' => 'ss', 'ʼn' => 'ʼn', 'ǰ' => 'ǰ', 'ΐ' => 'ΐ', 'ΰ' => 'ΰ', 'և' => 'եւ', 'ẖ' => 'ẖ', 'ẗ' => 'ẗ', 'ẘ' => 'ẘ', 'ẙ' => 'ẙ', 'ẚ' => 'aʾ', 'ẞ' => 'ss', 'ὐ' => 'ὐ', 'ὒ' => 'ὒ', 'ὔ' => 'ὔ', 'ὖ' => 'ὖ', 'ᾀ' => 'ἀι', 'ᾁ' => 'ἁι', 'ᾂ' => 'ἂι', 'ᾃ' => 'ἃι', 'ᾄ' => 'ἄι', 'ᾅ' => 'ἅι', 'ᾆ' => 'ἆι', 'ᾇ' => 'ἇι', 'ᾈ' => 'ἀι', 'ᾉ' => 'ἁι', 'ᾊ' => 'ἂι', 'ᾋ' => 'ἃι', 'ᾌ' => 'ἄι', 'ᾍ' => 'ἅι', 'ᾎ' => 'ἆι', 'ᾏ' => 'ἇι', 'ᾐ' => 'ἠι', 'ᾑ' => 'ἡι', 'ᾒ' => 'ἢι', 'ᾓ' => 'ἣι', 'ᾔ' => 'ἤι', 'ᾕ' => 'ἥι', 'ᾖ' => 'ἦι', 'ᾗ' => 'ἧι', 'ᾘ' => 'ἠι', 'ᾙ' => 'ἡι', 'ᾚ' => 'ἢι', 'ᾛ' => 'ἣι', 'ᾜ' => 'ἤι', 'ᾝ' => 'ἥι', 'ᾞ' => 'ἦι', 'ᾟ' => 'ἧι', 'ᾠ' => 'ὠι', 'ᾡ' => 'ὡι', 'ᾢ' => 'ὢι', 'ᾣ' => 'ὣι', 'ᾤ' => 'ὤι', 'ᾥ' => 'ὥι', 'ᾦ' => 'ὦι', 'ᾧ' => 'ὧι', 'ᾨ' => 'ὠι', 'ᾩ' => 'ὡι', 'ᾪ' => 'ὢι', 'ᾫ' => 'ὣι', 'ᾬ' => 'ὤι', 'ᾭ' => 'ὥι', 'ᾮ' => 'ὦι', 'ᾯ' => 'ὧι', 'ᾲ' => 'ὰι', 'ᾳ' => 'αι', 'ᾴ' => 'άι', 'ᾶ' => 'ᾶ', 'ᾷ' => 'ᾶι', 'ᾼ' => 'αι', 'ῂ' => 'ὴι', 'ῃ' => 'ηι', 'ῄ' => 'ήι', 'ῆ' => 'ῆ', 'ῇ' => 'ῆι', 'ῌ' => 'ηι', 'ῒ' => 'ῒ', 'ῖ' => 'ῖ', 'ῗ' => 'ῗ', 'ῢ' => 'ῢ', 'ῤ' => 'ῤ', 'ῦ' => 'ῦ', 'ῧ' => 'ῧ', 'ῲ' => 'ὼι', 'ῳ' => 'ωι', 'ῴ' => 'ώι', 'ῶ' => 'ῶ', 'ῷ' => 'ῶι', 'ῼ' => 'ωι', 'ff' => 'ff', 'fi' => 'fi', 'fl' => 'fl', 'ffi' => 'ffi', 'ffl' => 'ffl', 'ſt' => 'st', 'st' => 'st', 'ﬓ' => 'մն', 'ﬔ' => 'մե', 'ﬕ' => 'մի', 'ﬖ' => 'վն', 'ﬗ' => 'մխ']; diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php index 2e544233d..c1daf7d47 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -1,5 +1,5 @@ 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd', 'E' => 'e', 'F' => 'f', 'G' => 'g', 'H' => 'h', 'I' => 'i', 'J' => 'j', 'K' => 'k', 'L' => 'l', 'M' => 'm', 'N' => 'n', 'O' => 'o', 'P' => 'p', 'Q' => 'q', 'R' => 'r', 'S' => 's', 'T' => 't', 'U' => 'u', 'V' => 'v', 'W' => 'w', 'X' => 'x', 'Y' => 'y', 'Z' => 'z', 'À' => 'à', 'Á' => 'á', 'Â' => 'â', 'Ã' => 'ã', 'Ä' => 'ä', 'Å' => 'å', 'Æ' => 'æ', 'Ç' => 'ç', 'È' => 'è', 'É' => 'é', 'Ê' => 'ê', 'Ë' => 'ë', 'Ì' => 'ì', 'Í' => 'í', 'Î' => 'î', 'Ï' => 'ï', 'Ð' => 'ð', 'Ñ' => 'ñ', 'Ò' => 'ò', 'Ó' => 'ó', 'Ô' => 'ô', 'Õ' => 'õ', 'Ö' => 'ö', 'Ø' => 'ø', 'Ù' => 'ù', 'Ú' => 'ú', 'Û' => 'û', 'Ü' => 'ü', 'Ý' => 'ý', 'Þ' => 'þ', 'Ā' => 'ā', 'Ă' => 'ă', 'Ą' => 'ą', 'Ć' => 'ć', 'Ĉ' => 'ĉ', 'Ċ' => 'ċ', 'Č' => 'č', 'Ď' => 'ď', 'Đ' => 'đ', 'Ē' => 'ē', 'Ĕ' => 'ĕ', 'Ė' => 'ė', 'Ę' => 'ę', 'Ě' => 'ě', 'Ĝ' => 'ĝ', 'Ğ' => 'ğ', 'Ġ' => 'ġ', 'Ģ' => 'ģ', 'Ĥ' => 'ĥ', 'Ħ' => 'ħ', 'Ĩ' => 'ĩ', 'Ī' => 'ī', 'Ĭ' => 'ĭ', 'Į' => 'į', 'İ' => 'i̇', 'IJ' => 'ij', 'Ĵ' => 'ĵ', 'Ķ' => 'ķ', 'Ĺ' => 'ĺ', 'Ļ' => 'ļ', 'Ľ' => 'ľ', 'Ŀ' => 'ŀ', 'Ł' => 'ł', 'Ń' => 'ń', 'Ņ' => 'ņ', 'Ň' => 'ň', 'Ŋ' => 'ŋ', 'Ō' => 'ō', 'Ŏ' => 'ŏ', 'Ő' => 'ő', 'Œ' => 'œ', 'Ŕ' => 'ŕ', 'Ŗ' => 'ŗ', 'Ř' => 'ř', 'Ś' => 'ś', 'Ŝ' => 'ŝ', 'Ş' => 'ş', 'Š' => 'š', 'Ţ' => 'ţ', 'Ť' => 'ť', 'Ŧ' => 'ŧ', 'Ũ' => 'ũ', 'Ū' => 'ū', 'Ŭ' => 'ŭ', 'Ů' => 'ů', 'Ű' => 'ű', 'Ų' => 'ų', 'Ŵ' => 'ŵ', 'Ŷ' => 'ŷ', 'Ÿ' => 'ÿ', 'Ź' => 'ź', 'Ż' => 'ż', 'Ž' => 'ž', 'Ɓ' => 'ɓ', 'Ƃ' => 'ƃ', 'Ƅ' => 'ƅ', 'Ɔ' => 'ɔ', 'Ƈ' => 'ƈ', 'Ɖ' => 'ɖ', 'Ɗ' => 'ɗ', 'Ƌ' => 'ƌ', 'Ǝ' => 'ǝ', 'Ə' => 'ə', 'Ɛ' => 'ɛ', 'Ƒ' => 'ƒ', 'Ɠ' => 'ɠ', 'Ɣ' => 'ɣ', 'Ɩ' => 'ɩ', 'Ɨ' => 'ɨ', 'Ƙ' => 'ƙ', 'Ɯ' => 'ɯ', 'Ɲ' => 'ɲ', 'Ɵ' => 'ɵ', 'Ơ' => 'ơ', 'Ƣ' => 'ƣ', 'Ƥ' => 'ƥ', 'Ʀ' => 'ʀ', 'Ƨ' => 'ƨ', 'Ʃ' => 'ʃ', 'Ƭ' => 'ƭ', 'Ʈ' => 'ʈ', 'Ư' => 'ư', 'Ʊ' => 'ʊ', 'Ʋ' => 'ʋ', 'Ƴ' => 'ƴ', 'Ƶ' => 'ƶ', 'Ʒ' => 'ʒ', 'Ƹ' => 'ƹ', 'Ƽ' => 'ƽ', 'DŽ' => 'dž', 'Dž' => 'dž', 'LJ' => 'lj', 'Lj' => 'lj', 'NJ' => 'nj', 'Nj' => 'nj', 'Ǎ' => 'ǎ', 'Ǐ' => 'ǐ', 'Ǒ' => 'ǒ', 'Ǔ' => 'ǔ', 'Ǖ' => 'ǖ', 'Ǘ' => 'ǘ', 'Ǚ' => 'ǚ', 'Ǜ' => 'ǜ', 'Ǟ' => 'ǟ', 'Ǡ' => 'ǡ', 'Ǣ' => 'ǣ', 'Ǥ' => 'ǥ', 'Ǧ' => 'ǧ', 'Ǩ' => 'ǩ', 'Ǫ' => 'ǫ', 'Ǭ' => 'ǭ', 'Ǯ' => 'ǯ', 'DZ' => 'dz', 'Dz' => 'dz', 'Ǵ' => 'ǵ', 'Ƕ' => 'ƕ', 'Ƿ' => 'ƿ', 'Ǹ' => 'ǹ', 'Ǻ' => 'ǻ', 'Ǽ' => 'ǽ', 'Ǿ' => 'ǿ', 'Ȁ' => 'ȁ', 'Ȃ' => 'ȃ', 'Ȅ' => 'ȅ', 'Ȇ' => 'ȇ', 'Ȉ' => 'ȉ', 'Ȋ' => 'ȋ', 'Ȍ' => 'ȍ', 'Ȏ' => 'ȏ', 'Ȑ' => 'ȑ', 'Ȓ' => 'ȓ', 'Ȕ' => 'ȕ', 'Ȗ' => 'ȗ', 'Ș' => 'ș', 'Ț' => 'ț', 'Ȝ' => 'ȝ', 'Ȟ' => 'ȟ', 'Ƞ' => 'ƞ', 'Ȣ' => 'ȣ', 'Ȥ' => 'ȥ', 'Ȧ' => 'ȧ', 'Ȩ' => 'ȩ', 'Ȫ' => 'ȫ', 'Ȭ' => 'ȭ', 'Ȯ' => 'ȯ', 'Ȱ' => 'ȱ', 'Ȳ' => 'ȳ', 'Ⱥ' => 'ⱥ', 'Ȼ' => 'ȼ', 'Ƚ' => 'ƚ', 'Ⱦ' => 'ⱦ', 'Ɂ' => 'ɂ', 'Ƀ' => 'ƀ', 'Ʉ' => 'ʉ', 'Ʌ' => 'ʌ', 'Ɇ' => 'ɇ', 'Ɉ' => 'ɉ', 'Ɋ' => 'ɋ', 'Ɍ' => 'ɍ', 'Ɏ' => 'ɏ', 'Ͱ' => 'ͱ', 'Ͳ' => 'ͳ', 'Ͷ' => 'ͷ', 'Ϳ' => 'ϳ', 'Ά' => 'ά', 'Έ' => 'έ', 'Ή' => 'ή', 'Ί' => 'ί', 'Ό' => 'ό', 'Ύ' => 'ύ', 'Ώ' => 'ώ', 'Α' => 'α', 'Β' => 'β', 'Γ' => 'γ', 'Δ' => 'δ', 'Ε' => 'ε', 'Ζ' => 'ζ', 'Η' => 'η', 'Θ' => 'θ', 'Ι' => 'ι', 'Κ' => 'κ', 'Λ' => 'λ', 'Μ' => 'μ', 'Ν' => 'ν', 'Ξ' => 'ξ', 'Ο' => 'ο', 'Π' => 'π', 'Ρ' => 'ρ', 'Σ' => 'σ', 'Τ' => 'τ', 'Υ' => 'υ', 'Φ' => 'φ', 'Χ' => 'χ', 'Ψ' => 'ψ', 'Ω' => 'ω', 'Ϊ' => 'ϊ', 'Ϋ' => 'ϋ', 'Ϗ' => 'ϗ', 'Ϙ' => 'ϙ', 'Ϛ' => 'ϛ', 'Ϝ' => 'ϝ', 'Ϟ' => 'ϟ', 'Ϡ' => 'ϡ', 'Ϣ' => 'ϣ', 'Ϥ' => 'ϥ', 'Ϧ' => 'ϧ', 'Ϩ' => 'ϩ', 'Ϫ' => 'ϫ', 'Ϭ' => 'ϭ', 'Ϯ' => 'ϯ', 'ϴ' => 'θ', 'Ϸ' => 'ϸ', 'Ϲ' => 'ϲ', 'Ϻ' => 'ϻ', 'Ͻ' => 'ͻ', 'Ͼ' => 'ͼ', 'Ͽ' => 'ͽ', 'Ѐ' => 'ѐ', 'Ё' => 'ё', 'Ђ' => 'ђ', 'Ѓ' => 'ѓ', 'Є' => 'є', 'Ѕ' => 'ѕ', 'І' => 'і', 'Ї' => 'ї', 'Ј' => 'ј', 'Љ' => 'љ', 'Њ' => 'њ', 'Ћ' => 'ћ', 'Ќ' => 'ќ', 'Ѝ' => 'ѝ', 'Ў' => 'ў', 'Џ' => 'џ', 'А' => 'а', 'Б' => 'б', 'В' => 'в', 'Г' => 'г', 'Д' => 'д', 'Е' => 'е', 'Ж' => 'ж', 'З' => 'з', 'И' => 'и', 'Й' => 'й', 'К' => 'к', 'Л' => 'л', 'М' => 'м', 'Н' => 'н', 'О' => 'о', 'П' => 'п', 'Р' => 'р', 'С' => 'с', 'Т' => 'т', 'У' => 'у', 'Ф' => 'ф', 'Х' => 'х', 'Ц' => 'ц', 'Ч' => 'ч', 'Ш' => 'ш', 'Щ' => 'щ', 'Ъ' => 'ъ', 'Ы' => 'ы', 'Ь' => 'ь', 'Э' => 'э', 'Ю' => 'ю', 'Я' => 'я', 'Ѡ' => 'ѡ', 'Ѣ' => 'ѣ', 'Ѥ' => 'ѥ', 'Ѧ' => 'ѧ', 'Ѩ' => 'ѩ', 'Ѫ' => 'ѫ', 'Ѭ' => 'ѭ', 'Ѯ' => 'ѯ', 'Ѱ' => 'ѱ', 'Ѳ' => 'ѳ', 'Ѵ' => 'ѵ', 'Ѷ' => 'ѷ', 'Ѹ' => 'ѹ', 'Ѻ' => 'ѻ', 'Ѽ' => 'ѽ', 'Ѿ' => 'ѿ', 'Ҁ' => 'ҁ', 'Ҋ' => 'ҋ', 'Ҍ' => 'ҍ', 'Ҏ' => 'ҏ', 'Ґ' => 'ґ', 'Ғ' => 'ғ', 'Ҕ' => 'ҕ', 'Җ' => 'җ', 'Ҙ' => 'ҙ', 'Қ' => 'қ', 'Ҝ' => 'ҝ', 'Ҟ' => 'ҟ', 'Ҡ' => 'ҡ', 'Ң' => 'ң', 'Ҥ' => 'ҥ', 'Ҧ' => 'ҧ', 'Ҩ' => 'ҩ', 'Ҫ' => 'ҫ', 'Ҭ' => 'ҭ', 'Ү' => 'ү', 'Ұ' => 'ұ', 'Ҳ' => 'ҳ', 'Ҵ' => 'ҵ', 'Ҷ' => 'ҷ', 'Ҹ' => 'ҹ', 'Һ' => 'һ', 'Ҽ' => 'ҽ', 'Ҿ' => 'ҿ', 'Ӏ' => 'ӏ', 'Ӂ' => 'ӂ', 'Ӄ' => 'ӄ', 'Ӆ' => 'ӆ', 'Ӈ' => 'ӈ', 'Ӊ' => 'ӊ', 'Ӌ' => 'ӌ', 'Ӎ' => 'ӎ', 'Ӑ' => 'ӑ', 'Ӓ' => 'ӓ', 'Ӕ' => 'ӕ', 'Ӗ' => 'ӗ', 'Ә' => 'ә', 'Ӛ' => 'ӛ', 'Ӝ' => 'ӝ', 'Ӟ' => 'ӟ', 'Ӡ' => 'ӡ', 'Ӣ' => 'ӣ', 'Ӥ' => 'ӥ', 'Ӧ' => 'ӧ', 'Ө' => 'ө', 'Ӫ' => 'ӫ', 'Ӭ' => 'ӭ', 'Ӯ' => 'ӯ', 'Ӱ' => 'ӱ', 'Ӳ' => 'ӳ', 'Ӵ' => 'ӵ', 'Ӷ' => 'ӷ', 'Ӹ' => 'ӹ', 'Ӻ' => 'ӻ', 'Ӽ' => 'ӽ', 'Ӿ' => 'ӿ', 'Ԁ' => 'ԁ', 'Ԃ' => 'ԃ', 'Ԅ' => 'ԅ', 'Ԇ' => 'ԇ', 'Ԉ' => 'ԉ', 'Ԋ' => 'ԋ', 'Ԍ' => 'ԍ', 'Ԏ' => 'ԏ', 'Ԑ' => 'ԑ', 'Ԓ' => 'ԓ', 'Ԕ' => 'ԕ', 'Ԗ' => 'ԗ', 'Ԙ' => 'ԙ', 'Ԛ' => 'ԛ', 'Ԝ' => 'ԝ', 'Ԟ' => 'ԟ', 'Ԡ' => 'ԡ', 'Ԣ' => 'ԣ', 'Ԥ' => 'ԥ', 'Ԧ' => 'ԧ', 'Ԩ' => 'ԩ', 'Ԫ' => 'ԫ', 'Ԭ' => 'ԭ', 'Ԯ' => 'ԯ', 'Ա' => 'ա', 'Բ' => 'բ', 'Գ' => 'գ', 'Դ' => 'դ', 'Ե' => 'ե', 'Զ' => 'զ', 'Է' => 'է', 'Ը' => 'ը', 'Թ' => 'թ', 'Ժ' => 'ժ', 'Ի' => 'ի', 'Լ' => 'լ', 'Խ' => 'խ', 'Ծ' => 'ծ', 'Կ' => 'կ', 'Հ' => 'հ', 'Ձ' => 'ձ', 'Ղ' => 'ղ', 'Ճ' => 'ճ', 'Մ' => 'մ', 'Յ' => 'յ', 'Ն' => 'ն', 'Շ' => 'շ', 'Ո' => 'ո', 'Չ' => 'չ', 'Պ' => 'պ', 'Ջ' => 'ջ', 'Ռ' => 'ռ', 'Ս' => 'ս', 'Վ' => 'վ', 'Տ' => 'տ', 'Ր' => 'ր', 'Ց' => 'ց', 'Ւ' => 'ւ', 'Փ' => 'փ', 'Ք' => 'ք', 'Օ' => 'օ', 'Ֆ' => 'ֆ', 'Ⴀ' => 'ⴀ', 'Ⴁ' => 'ⴁ', 'Ⴂ' => 'ⴂ', 'Ⴃ' => 'ⴃ', 'Ⴄ' => 'ⴄ', 'Ⴅ' => 'ⴅ', 'Ⴆ' => 'ⴆ', 'Ⴇ' => 'ⴇ', 'Ⴈ' => 'ⴈ', 'Ⴉ' => 'ⴉ', 'Ⴊ' => 'ⴊ', 'Ⴋ' => 'ⴋ', 'Ⴌ' => 'ⴌ', 'Ⴍ' => 'ⴍ', 'Ⴎ' => 'ⴎ', 'Ⴏ' => 'ⴏ', 'Ⴐ' => 'ⴐ', 'Ⴑ' => 'ⴑ', 'Ⴒ' => 'ⴒ', 'Ⴓ' => 'ⴓ', 'Ⴔ' => 'ⴔ', 'Ⴕ' => 'ⴕ', 'Ⴖ' => 'ⴖ', 'Ⴗ' => 'ⴗ', 'Ⴘ' => 'ⴘ', 'Ⴙ' => 'ⴙ', 'Ⴚ' => 'ⴚ', 'Ⴛ' => 'ⴛ', 'Ⴜ' => 'ⴜ', 'Ⴝ' => 'ⴝ', 'Ⴞ' => 'ⴞ', 'Ⴟ' => 'ⴟ', 'Ⴠ' => 'ⴠ', 'Ⴡ' => 'ⴡ', 'Ⴢ' => 'ⴢ', 'Ⴣ' => 'ⴣ', 'Ⴤ' => 'ⴤ', 'Ⴥ' => 'ⴥ', 'Ⴧ' => 'ⴧ', 'Ⴭ' => 'ⴭ', 'Ꭰ' => 'ꭰ', 'Ꭱ' => 'ꭱ', 'Ꭲ' => 'ꭲ', 'Ꭳ' => 'ꭳ', 'Ꭴ' => 'ꭴ', 'Ꭵ' => 'ꭵ', 'Ꭶ' => 'ꭶ', 'Ꭷ' => 'ꭷ', 'Ꭸ' => 'ꭸ', 'Ꭹ' => 'ꭹ', 'Ꭺ' => 'ꭺ', 'Ꭻ' => 'ꭻ', 'Ꭼ' => 'ꭼ', 'Ꭽ' => 'ꭽ', 'Ꭾ' => 'ꭾ', 'Ꭿ' => 'ꭿ', 'Ꮀ' => 'ꮀ', 'Ꮁ' => 'ꮁ', 'Ꮂ' => 'ꮂ', 'Ꮃ' => 'ꮃ', 'Ꮄ' => 'ꮄ', 'Ꮅ' => 'ꮅ', 'Ꮆ' => 'ꮆ', 'Ꮇ' => 'ꮇ', 'Ꮈ' => 'ꮈ', 'Ꮉ' => 'ꮉ', 'Ꮊ' => 'ꮊ', 'Ꮋ' => 'ꮋ', 'Ꮌ' => 'ꮌ', 'Ꮍ' => 'ꮍ', 'Ꮎ' => 'ꮎ', 'Ꮏ' => 'ꮏ', 'Ꮐ' => 'ꮐ', 'Ꮑ' => 'ꮑ', 'Ꮒ' => 'ꮒ', 'Ꮓ' => 'ꮓ', 'Ꮔ' => 'ꮔ', 'Ꮕ' => 'ꮕ', 'Ꮖ' => 'ꮖ', 'Ꮗ' => 'ꮗ', 'Ꮘ' => 'ꮘ', 'Ꮙ' => 'ꮙ', 'Ꮚ' => 'ꮚ', 'Ꮛ' => 'ꮛ', 'Ꮜ' => 'ꮜ', 'Ꮝ' => 'ꮝ', 'Ꮞ' => 'ꮞ', 'Ꮟ' => 'ꮟ', 'Ꮠ' => 'ꮠ', 'Ꮡ' => 'ꮡ', 'Ꮢ' => 'ꮢ', 'Ꮣ' => 'ꮣ', 'Ꮤ' => 'ꮤ', 'Ꮥ' => 'ꮥ', 'Ꮦ' => 'ꮦ', 'Ꮧ' => 'ꮧ', 'Ꮨ' => 'ꮨ', 'Ꮩ' => 'ꮩ', 'Ꮪ' => 'ꮪ', 'Ꮫ' => 'ꮫ', 'Ꮬ' => 'ꮬ', 'Ꮭ' => 'ꮭ', 'Ꮮ' => 'ꮮ', 'Ꮯ' => 'ꮯ', 'Ꮰ' => 'ꮰ', 'Ꮱ' => 'ꮱ', 'Ꮲ' => 'ꮲ', 'Ꮳ' => 'ꮳ', 'Ꮴ' => 'ꮴ', 'Ꮵ' => 'ꮵ', 'Ꮶ' => 'ꮶ', 'Ꮷ' => 'ꮷ', 'Ꮸ' => 'ꮸ', 'Ꮹ' => 'ꮹ', 'Ꮺ' => 'ꮺ', 'Ꮻ' => 'ꮻ', 'Ꮼ' => 'ꮼ', 'Ꮽ' => 'ꮽ', 'Ꮾ' => 'ꮾ', 'Ꮿ' => 'ꮿ', 'Ᏸ' => 'ᏸ', 'Ᏹ' => 'ᏹ', 'Ᏺ' => 'ᏺ', 'Ᏻ' => 'ᏻ', 'Ᏼ' => 'ᏼ', 'Ᏽ' => 'ᏽ', 'Ა' => 'ა', 'Ბ' => 'ბ', 'Გ' => 'გ', 'Დ' => 'დ', 'Ე' => 'ე', 'Ვ' => 'ვ', 'Ზ' => 'ზ', 'Თ' => 'თ', 'Ი' => 'ი', 'Კ' => 'კ', 'Ლ' => 'ლ', 'Მ' => 'მ', 'Ნ' => 'ნ', 'Ო' => 'ო', 'Პ' => 'პ', 'Ჟ' => 'ჟ', 'Რ' => 'რ', 'Ს' => 'ს', 'Ტ' => 'ტ', 'Უ' => 'უ', 'Ფ' => 'ფ', 'Ქ' => 'ქ', 'Ღ' => 'ღ', 'Ყ' => 'ყ', 'Შ' => 'შ', 'Ჩ' => 'ჩ', 'Ც' => 'ც', 'Ძ' => 'ძ', 'Წ' => 'წ', 'Ჭ' => 'ჭ', 'Ხ' => 'ხ', 'Ჯ' => 'ჯ', 'Ჰ' => 'ჰ', 'Ჱ' => 'ჱ', 'Ჲ' => 'ჲ', 'Ჳ' => 'ჳ', 'Ჴ' => 'ჴ', 'Ჵ' => 'ჵ', 'Ჶ' => 'ჶ', 'Ჷ' => 'ჷ', 'Ჸ' => 'ჸ', 'Ჹ' => 'ჹ', 'Ჺ' => 'ჺ', 'Ჽ' => 'ჽ', 'Ჾ' => 'ჾ', 'Ჿ' => 'ჿ', 'Ḁ' => 'ḁ', 'Ḃ' => 'ḃ', 'Ḅ' => 'ḅ', 'Ḇ' => 'ḇ', 'Ḉ' => 'ḉ', 'Ḋ' => 'ḋ', 'Ḍ' => 'ḍ', 'Ḏ' => 'ḏ', 'Ḑ' => 'ḑ', 'Ḓ' => 'ḓ', 'Ḕ' => 'ḕ', 'Ḗ' => 'ḗ', 'Ḙ' => 'ḙ', 'Ḛ' => 'ḛ', 'Ḝ' => 'ḝ', 'Ḟ' => 'ḟ', 'Ḡ' => 'ḡ', 'Ḣ' => 'ḣ', 'Ḥ' => 'ḥ', 'Ḧ' => 'ḧ', 'Ḩ' => 'ḩ', 'Ḫ' => 'ḫ', 'Ḭ' => 'ḭ', 'Ḯ' => 'ḯ', 'Ḱ' => 'ḱ', 'Ḳ' => 'ḳ', 'Ḵ' => 'ḵ', 'Ḷ' => 'ḷ', 'Ḹ' => 'ḹ', 'Ḻ' => 'ḻ', 'Ḽ' => 'ḽ', 'Ḿ' => 'ḿ', 'Ṁ' => 'ṁ', 'Ṃ' => 'ṃ', 'Ṅ' => 'ṅ', 'Ṇ' => 'ṇ', 'Ṉ' => 'ṉ', 'Ṋ' => 'ṋ', 'Ṍ' => 'ṍ', 'Ṏ' => 'ṏ', 'Ṑ' => 'ṑ', 'Ṓ' => 'ṓ', 'Ṕ' => 'ṕ', 'Ṗ' => 'ṗ', 'Ṙ' => 'ṙ', 'Ṛ' => 'ṛ', 'Ṝ' => 'ṝ', 'Ṟ' => 'ṟ', 'Ṡ' => 'ṡ', 'Ṣ' => 'ṣ', 'Ṥ' => 'ṥ', 'Ṧ' => 'ṧ', 'Ṩ' => 'ṩ', 'Ṫ' => 'ṫ', 'Ṭ' => 'ṭ', 'Ṯ' => 'ṯ', 'Ṱ' => 'ṱ', 'Ṳ' => 'ṳ', 'Ṵ' => 'ṵ', 'Ṷ' => 'ṷ', 'Ṹ' => 'ṹ', 'Ṻ' => 'ṻ', 'Ṽ' => 'ṽ', 'Ṿ' => 'ṿ', 'Ẁ' => 'ẁ', 'Ẃ' => 'ẃ', 'Ẅ' => 'ẅ', 'Ẇ' => 'ẇ', 'Ẉ' => 'ẉ', 'Ẋ' => 'ẋ', 'Ẍ' => 'ẍ', 'Ẏ' => 'ẏ', 'Ẑ' => 'ẑ', 'Ẓ' => 'ẓ', 'Ẕ' => 'ẕ', 'ẞ' => 'ß', 'Ạ' => 'ạ', 'Ả' => 'ả', 'Ấ' => 'ấ', 'Ầ' => 'ầ', 'Ẩ' => 'ẩ', 'Ẫ' => 'ẫ', 'Ậ' => 'ậ', 'Ắ' => 'ắ', 'Ằ' => 'ằ', 'Ẳ' => 'ẳ', 'Ẵ' => 'ẵ', 'Ặ' => 'ặ', 'Ẹ' => 'ẹ', 'Ẻ' => 'ẻ', 'Ẽ' => 'ẽ', 'Ế' => 'ế', 'Ề' => 'ề', 'Ể' => 'ể', 'Ễ' => 'ễ', 'Ệ' => 'ệ', 'Ỉ' => 'ỉ', 'Ị' => 'ị', 'Ọ' => 'ọ', 'Ỏ' => 'ỏ', 'Ố' => 'ố', 'Ồ' => 'ồ', 'Ổ' => 'ổ', 'Ỗ' => 'ỗ', 'Ộ' => 'ộ', 'Ớ' => 'ớ', 'Ờ' => 'ờ', 'Ở' => 'ở', 'Ỡ' => 'ỡ', 'Ợ' => 'ợ', 'Ụ' => 'ụ', 'Ủ' => 'ủ', 'Ứ' => 'ứ', 'Ừ' => 'ừ', 'Ử' => 'ử', 'Ữ' => 'ữ', 'Ự' => 'ự', 'Ỳ' => 'ỳ', 'Ỵ' => 'ỵ', 'Ỷ' => 'ỷ', 'Ỹ' => 'ỹ', 'Ỻ' => 'ỻ', 'Ỽ' => 'ỽ', 'Ỿ' => 'ỿ', 'Ἀ' => 'ἀ', 'Ἁ' => 'ἁ', 'Ἂ' => 'ἂ', 'Ἃ' => 'ἃ', 'Ἄ' => 'ἄ', 'Ἅ' => 'ἅ', 'Ἆ' => 'ἆ', 'Ἇ' => 'ἇ', 'Ἐ' => 'ἐ', 'Ἑ' => 'ἑ', 'Ἒ' => 'ἒ', 'Ἓ' => 'ἓ', 'Ἔ' => 'ἔ', 'Ἕ' => 'ἕ', 'Ἠ' => 'ἠ', 'Ἡ' => 'ἡ', 'Ἢ' => 'ἢ', 'Ἣ' => 'ἣ', 'Ἤ' => 'ἤ', 'Ἥ' => 'ἥ', 'Ἦ' => 'ἦ', 'Ἧ' => 'ἧ', 'Ἰ' => 'ἰ', 'Ἱ' => 'ἱ', 'Ἲ' => 'ἲ', 'Ἳ' => 'ἳ', 'Ἴ' => 'ἴ', 'Ἵ' => 'ἵ', 'Ἶ' => 'ἶ', 'Ἷ' => 'ἷ', 'Ὀ' => 'ὀ', 'Ὁ' => 'ὁ', 'Ὂ' => 'ὂ', 'Ὃ' => 'ὃ', 'Ὄ' => 'ὄ', 'Ὅ' => 'ὅ', 'Ὑ' => 'ὑ', 'Ὓ' => 'ὓ', 'Ὕ' => 'ὕ', 'Ὗ' => 'ὗ', 'Ὠ' => 'ὠ', 'Ὡ' => 'ὡ', 'Ὢ' => 'ὢ', 'Ὣ' => 'ὣ', 'Ὤ' => 'ὤ', 'Ὥ' => 'ὥ', 'Ὦ' => 'ὦ', 'Ὧ' => 'ὧ', 'ᾈ' => 'ᾀ', 'ᾉ' => 'ᾁ', 'ᾊ' => 'ᾂ', 'ᾋ' => 'ᾃ', 'ᾌ' => 'ᾄ', 'ᾍ' => 'ᾅ', 'ᾎ' => 'ᾆ', 'ᾏ' => 'ᾇ', 'ᾘ' => 'ᾐ', 'ᾙ' => 'ᾑ', 'ᾚ' => 'ᾒ', 'ᾛ' => 'ᾓ', 'ᾜ' => 'ᾔ', 'ᾝ' => 'ᾕ', 'ᾞ' => 'ᾖ', 'ᾟ' => 'ᾗ', 'ᾨ' => 'ᾠ', 'ᾩ' => 'ᾡ', 'ᾪ' => 'ᾢ', 'ᾫ' => 'ᾣ', 'ᾬ' => 'ᾤ', 'ᾭ' => 'ᾥ', 'ᾮ' => 'ᾦ', 'ᾯ' => 'ᾧ', 'Ᾰ' => 'ᾰ', 'Ᾱ' => 'ᾱ', 'Ὰ' => 'ὰ', 'Ά' => 'ά', 'ᾼ' => 'ᾳ', 'Ὲ' => 'ὲ', 'Έ' => 'έ', 'Ὴ' => 'ὴ', 'Ή' => 'ή', 'ῌ' => 'ῃ', 'Ῐ' => 'ῐ', 'Ῑ' => 'ῑ', 'Ὶ' => 'ὶ', 'Ί' => 'ί', 'Ῠ' => 'ῠ', 'Ῡ' => 'ῡ', 'Ὺ' => 'ὺ', 'Ύ' => 'ύ', 'Ῥ' => 'ῥ', 'Ὸ' => 'ὸ', 'Ό' => 'ό', 'Ὼ' => 'ὼ', 'Ώ' => 'ώ', 'ῼ' => 'ῳ', 'Ω' => 'ω', 'K' => 'k', 'Å' => 'å', 'Ⅎ' => 'ⅎ', 'Ⅰ' => 'ⅰ', 'Ⅱ' => 'ⅱ', 'Ⅲ' => 'ⅲ', 'Ⅳ' => 'ⅳ', 'Ⅴ' => 'ⅴ', 'Ⅵ' => 'ⅵ', 'Ⅶ' => 'ⅶ', 'Ⅷ' => 'ⅷ', 'Ⅸ' => 'ⅸ', 'Ⅹ' => 'ⅹ', 'Ⅺ' => 'ⅺ', 'Ⅻ' => 'ⅻ', 'Ⅼ' => 'ⅼ', 'Ⅽ' => 'ⅽ', 'Ⅾ' => 'ⅾ', 'Ⅿ' => 'ⅿ', 'Ↄ' => 'ↄ', 'Ⓐ' => 'ⓐ', 'Ⓑ' => 'ⓑ', 'Ⓒ' => 'ⓒ', 'Ⓓ' => 'ⓓ', 'Ⓔ' => 'ⓔ', 'Ⓕ' => 'ⓕ', 'Ⓖ' => 'ⓖ', 'Ⓗ' => 'ⓗ', 'Ⓘ' => 'ⓘ', 'Ⓙ' => 'ⓙ', 'Ⓚ' => 'ⓚ', 'Ⓛ' => 'ⓛ', 'Ⓜ' => 'ⓜ', 'Ⓝ' => 'ⓝ', 'Ⓞ' => 'ⓞ', 'Ⓟ' => 'ⓟ', 'Ⓠ' => 'ⓠ', 'Ⓡ' => 'ⓡ', 'Ⓢ' => 'ⓢ', 'Ⓣ' => 'ⓣ', 'Ⓤ' => 'ⓤ', 'Ⓥ' => 'ⓥ', 'Ⓦ' => 'ⓦ', 'Ⓧ' => 'ⓧ', 'Ⓨ' => 'ⓨ', 'Ⓩ' => 'ⓩ', 'Ⰰ' => 'ⰰ', 'Ⰱ' => 'ⰱ', 'Ⰲ' => 'ⰲ', 'Ⰳ' => 'ⰳ', 'Ⰴ' => 'ⰴ', 'Ⰵ' => 'ⰵ', 'Ⰶ' => 'ⰶ', 'Ⰷ' => 'ⰷ', 'Ⰸ' => 'ⰸ', 'Ⰹ' => 'ⰹ', 'Ⰺ' => 'ⰺ', 'Ⰻ' => 'ⰻ', 'Ⰼ' => 'ⰼ', 'Ⰽ' => 'ⰽ', 'Ⰾ' => 'ⰾ', 'Ⰿ' => 'ⰿ', 'Ⱀ' => 'ⱀ', 'Ⱁ' => 'ⱁ', 'Ⱂ' => 'ⱂ', 'Ⱃ' => 'ⱃ', 'Ⱄ' => 'ⱄ', 'Ⱅ' => 'ⱅ', 'Ⱆ' => 'ⱆ', 'Ⱇ' => 'ⱇ', 'Ⱈ' => 'ⱈ', 'Ⱉ' => 'ⱉ', 'Ⱊ' => 'ⱊ', 'Ⱋ' => 'ⱋ', 'Ⱌ' => 'ⱌ', 'Ⱍ' => 'ⱍ', 'Ⱎ' => 'ⱎ', 'Ⱏ' => 'ⱏ', 'Ⱐ' => 'ⱐ', 'Ⱑ' => 'ⱑ', 'Ⱒ' => 'ⱒ', 'Ⱓ' => 'ⱓ', 'Ⱔ' => 'ⱔ', 'Ⱕ' => 'ⱕ', 'Ⱖ' => 'ⱖ', 'Ⱗ' => 'ⱗ', 'Ⱘ' => 'ⱘ', 'Ⱙ' => 'ⱙ', 'Ⱚ' => 'ⱚ', 'Ⱛ' => 'ⱛ', 'Ⱜ' => 'ⱜ', 'Ⱝ' => 'ⱝ', 'Ⱞ' => 'ⱞ', 'Ⱡ' => 'ⱡ', 'Ɫ' => 'ɫ', 'Ᵽ' => 'ᵽ', 'Ɽ' => 'ɽ', 'Ⱨ' => 'ⱨ', 'Ⱪ' => 'ⱪ', 'Ⱬ' => 'ⱬ', 'Ɑ' => 'ɑ', 'Ɱ' => 'ɱ', 'Ɐ' => 'ɐ', 'Ɒ' => 'ɒ', 'Ⱳ' => 'ⱳ', 'Ⱶ' => 'ⱶ', 'Ȿ' => 'ȿ', 'Ɀ' => 'ɀ', 'Ⲁ' => 'ⲁ', 'Ⲃ' => 'ⲃ', 'Ⲅ' => 'ⲅ', 'Ⲇ' => 'ⲇ', 'Ⲉ' => 'ⲉ', 'Ⲋ' => 'ⲋ', 'Ⲍ' => 'ⲍ', 'Ⲏ' => 'ⲏ', 'Ⲑ' => 'ⲑ', 'Ⲓ' => 'ⲓ', 'Ⲕ' => 'ⲕ', 'Ⲗ' => 'ⲗ', 'Ⲙ' => 'ⲙ', 'Ⲛ' => 'ⲛ', 'Ⲝ' => 'ⲝ', 'Ⲟ' => 'ⲟ', 'Ⲡ' => 'ⲡ', 'Ⲣ' => 'ⲣ', 'Ⲥ' => 'ⲥ', 'Ⲧ' => 'ⲧ', 'Ⲩ' => 'ⲩ', 'Ⲫ' => 'ⲫ', 'Ⲭ' => 'ⲭ', 'Ⲯ' => 'ⲯ', 'Ⲱ' => 'ⲱ', 'Ⲳ' => 'ⲳ', 'Ⲵ' => 'ⲵ', 'Ⲷ' => 'ⲷ', 'Ⲹ' => 'ⲹ', 'Ⲻ' => 'ⲻ', 'Ⲽ' => 'ⲽ', 'Ⲿ' => 'ⲿ', 'Ⳁ' => 'ⳁ', 'Ⳃ' => 'ⳃ', 'Ⳅ' => 'ⳅ', 'Ⳇ' => 'ⳇ', 'Ⳉ' => 'ⳉ', 'Ⳋ' => 'ⳋ', 'Ⳍ' => 'ⳍ', 'Ⳏ' => 'ⳏ', 'Ⳑ' => 'ⳑ', 'Ⳓ' => 'ⳓ', 'Ⳕ' => 'ⳕ', 'Ⳗ' => 'ⳗ', 'Ⳙ' => 'ⳙ', 'Ⳛ' => 'ⳛ', 'Ⳝ' => 'ⳝ', 'Ⳟ' => 'ⳟ', 'Ⳡ' => 'ⳡ', 'Ⳣ' => 'ⳣ', 'Ⳬ' => 'ⳬ', 'Ⳮ' => 'ⳮ', 'Ⳳ' => 'ⳳ', 'Ꙁ' => 'ꙁ', 'Ꙃ' => 'ꙃ', 'Ꙅ' => 'ꙅ', 'Ꙇ' => 'ꙇ', 'Ꙉ' => 'ꙉ', 'Ꙋ' => 'ꙋ', 'Ꙍ' => 'ꙍ', 'Ꙏ' => 'ꙏ', 'Ꙑ' => 'ꙑ', 'Ꙓ' => 'ꙓ', 'Ꙕ' => 'ꙕ', 'Ꙗ' => 'ꙗ', 'Ꙙ' => 'ꙙ', 'Ꙛ' => 'ꙛ', 'Ꙝ' => 'ꙝ', 'Ꙟ' => 'ꙟ', 'Ꙡ' => 'ꙡ', 'Ꙣ' => 'ꙣ', 'Ꙥ' => 'ꙥ', 'Ꙧ' => 'ꙧ', 'Ꙩ' => 'ꙩ', 'Ꙫ' => 'ꙫ', 'Ꙭ' => 'ꙭ', 'Ꚁ' => 'ꚁ', 'Ꚃ' => 'ꚃ', 'Ꚅ' => 'ꚅ', 'Ꚇ' => 'ꚇ', 'Ꚉ' => 'ꚉ', 'Ꚋ' => 'ꚋ', 'Ꚍ' => 'ꚍ', 'Ꚏ' => 'ꚏ', 'Ꚑ' => 'ꚑ', 'Ꚓ' => 'ꚓ', 'Ꚕ' => 'ꚕ', 'Ꚗ' => 'ꚗ', 'Ꚙ' => 'ꚙ', 'Ꚛ' => 'ꚛ', 'Ꜣ' => 'ꜣ', 'Ꜥ' => 'ꜥ', 'Ꜧ' => 'ꜧ', 'Ꜩ' => 'ꜩ', 'Ꜫ' => 'ꜫ', 'Ꜭ' => 'ꜭ', 'Ꜯ' => 'ꜯ', 'Ꜳ' => 'ꜳ', 'Ꜵ' => 'ꜵ', 'Ꜷ' => 'ꜷ', 'Ꜹ' => 'ꜹ', 'Ꜻ' => 'ꜻ', 'Ꜽ' => 'ꜽ', 'Ꜿ' => 'ꜿ', 'Ꝁ' => 'ꝁ', 'Ꝃ' => 'ꝃ', 'Ꝅ' => 'ꝅ', 'Ꝇ' => 'ꝇ', 'Ꝉ' => 'ꝉ', 'Ꝋ' => 'ꝋ', 'Ꝍ' => 'ꝍ', 'Ꝏ' => 'ꝏ', 'Ꝑ' => 'ꝑ', 'Ꝓ' => 'ꝓ', 'Ꝕ' => 'ꝕ', 'Ꝗ' => 'ꝗ', 'Ꝙ' => 'ꝙ', 'Ꝛ' => 'ꝛ', 'Ꝝ' => 'ꝝ', 'Ꝟ' => 'ꝟ', 'Ꝡ' => 'ꝡ', 'Ꝣ' => 'ꝣ', 'Ꝥ' => 'ꝥ', 'Ꝧ' => 'ꝧ', 'Ꝩ' => 'ꝩ', 'Ꝫ' => 'ꝫ', 'Ꝭ' => 'ꝭ', 'Ꝯ' => 'ꝯ', 'Ꝺ' => 'ꝺ', 'Ꝼ' => 'ꝼ', 'Ᵹ' => 'ᵹ', 'Ꝿ' => 'ꝿ', 'Ꞁ' => 'ꞁ', 'Ꞃ' => 'ꞃ', 'Ꞅ' => 'ꞅ', 'Ꞇ' => 'ꞇ', 'Ꞌ' => 'ꞌ', 'Ɥ' => 'ɥ', 'Ꞑ' => 'ꞑ', 'Ꞓ' => 'ꞓ', 'Ꞗ' => 'ꞗ', 'Ꞙ' => 'ꞙ', 'Ꞛ' => 'ꞛ', 'Ꞝ' => 'ꞝ', 'Ꞟ' => 'ꞟ', 'Ꞡ' => 'ꞡ', 'Ꞣ' => 'ꞣ', 'Ꞥ' => 'ꞥ', 'Ꞧ' => 'ꞧ', 'Ꞩ' => 'ꞩ', 'Ɦ' => 'ɦ', 'Ɜ' => 'ɜ', 'Ɡ' => 'ɡ', 'Ɬ' => 'ɬ', 'Ɪ' => 'ɪ', 'Ʞ' => 'ʞ', 'Ʇ' => 'ʇ', 'Ʝ' => 'ʝ', 'Ꭓ' => 'ꭓ', 'Ꞵ' => 'ꞵ', 'Ꞷ' => 'ꞷ', 'Ꞹ' => 'ꞹ', 'Ꞻ' => 'ꞻ', 'Ꞽ' => 'ꞽ', 'Ꞿ' => 'ꞿ', 'Ꟃ' => 'ꟃ', 'Ꞔ' => 'ꞔ', 'Ʂ' => 'ʂ', 'Ᶎ' => 'ᶎ', 'Ꟈ' => 'ꟈ', 'Ꟊ' => 'ꟊ', 'Ꟶ' => 'ꟶ', 'A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd', 'E' => 'e', 'F' => 'f', 'G' => 'g', 'H' => 'h', 'I' => 'i', 'J' => 'j', 'K' => 'k', 'L' => 'l', 'M' => 'm', 'N' => 'n', 'O' => 'o', 'P' => 'p', 'Q' => 'q', 'R' => 'r', 'S' => 's', 'T' => 't', 'U' => 'u', 'V' => 'v', 'W' => 'w', 'X' => 'x', 'Y' => 'y', 'Z' => 'z', '𐐀' => '𐐨', '𐐁' => '𐐩', '𐐂' => '𐐪', '𐐃' => '𐐫', '𐐄' => '𐐬', '𐐅' => '𐐭', '𐐆' => '𐐮', '𐐇' => '𐐯', '𐐈' => '𐐰', '𐐉' => '𐐱', '𐐊' => '𐐲', '𐐋' => '𐐳', '𐐌' => '𐐴', '𐐍' => '𐐵', '𐐎' => '𐐶', '𐐏' => '𐐷', '𐐐' => '𐐸', '𐐑' => '𐐹', '𐐒' => '𐐺', '𐐓' => '𐐻', '𐐔' => '𐐼', '𐐕' => '𐐽', '𐐖' => '𐐾', '𐐗' => '𐐿', '𐐘' => '𐑀', '𐐙' => '𐑁', '𐐚' => '𐑂', '𐐛' => '𐑃', '𐐜' => '𐑄', '𐐝' => '𐑅', '𐐞' => '𐑆', '𐐟' => '𐑇', '𐐠' => '𐑈', '𐐡' => '𐑉', '𐐢' => '𐑊', '𐐣' => '𐑋', '𐐤' => '𐑌', '𐐥' => '𐑍', '𐐦' => '𐑎', '𐐧' => '𐑏', '𐒰' => '𐓘', '𐒱' => '𐓙', '𐒲' => '𐓚', '𐒳' => '𐓛', '𐒴' => '𐓜', '𐒵' => '𐓝', '𐒶' => '𐓞', '𐒷' => '𐓟', '𐒸' => '𐓠', '𐒹' => '𐓡', '𐒺' => '𐓢', '𐒻' => '𐓣', '𐒼' => '𐓤', '𐒽' => '𐓥', '𐒾' => '𐓦', '𐒿' => '𐓧', '𐓀' => '𐓨', '𐓁' => '𐓩', '𐓂' => '𐓪', '𐓃' => '𐓫', '𐓄' => '𐓬', '𐓅' => '𐓭', '𐓆' => '𐓮', '𐓇' => '𐓯', '𐓈' => '𐓰', '𐓉' => '𐓱', '𐓊' => '𐓲', '𐓋' => '𐓳', '𐓌' => '𐓴', '𐓍' => '𐓵', '𐓎' => '𐓶', '𐓏' => '𐓷', '𐓐' => '𐓸', '𐓑' => '𐓹', '𐓒' => '𐓺', '𐓓' => '𐓻', '𐲀' => '𐳀', '𐲁' => '𐳁', '𐲂' => '𐳂', '𐲃' => '𐳃', '𐲄' => '𐳄', '𐲅' => '𐳅', '𐲆' => '𐳆', '𐲇' => '𐳇', '𐲈' => '𐳈', '𐲉' => '𐳉', '𐲊' => '𐳊', '𐲋' => '𐳋', '𐲌' => '𐳌', '𐲍' => '𐳍', '𐲎' => '𐳎', '𐲏' => '𐳏', '𐲐' => '𐳐', '𐲑' => '𐳑', '𐲒' => '𐳒', '𐲓' => '𐳓', '𐲔' => '𐳔', '𐲕' => '𐳕', '𐲖' => '𐳖', '𐲗' => '𐳗', '𐲘' => '𐳘', '𐲙' => '𐳙', '𐲚' => '𐳚', '𐲛' => '𐳛', '𐲜' => '𐳜', '𐲝' => '𐳝', '𐲞' => '𐳞', '𐲟' => '𐳟', '𐲠' => '𐳠', '𐲡' => '𐳡', '𐲢' => '𐳢', '𐲣' => '𐳣', '𐲤' => '𐳤', '𐲥' => '𐳥', '𐲦' => '𐳦', '𐲧' => '𐳧', '𐲨' => '𐳨', '𐲩' => '𐳩', '𐲪' => '𐳪', '𐲫' => '𐳫', '𐲬' => '𐳬', '𐲭' => '𐳭', '𐲮' => '𐳮', '𐲯' => '𐳯', '𐲰' => '𐳰', '𐲱' => '𐳱', '𐲲' => '𐳲', '𑢠' => '𑣀', '𑢡' => '𑣁', '𑢢' => '𑣂', '𑢣' => '𑣃', '𑢤' => '𑣄', '𑢥' => '𑣅', '𑢦' => '𑣆', '𑢧' => '𑣇', '𑢨' => '𑣈', '𑢩' => '𑣉', '𑢪' => '𑣊', '𑢫' => '𑣋', '𑢬' => '𑣌', '𑢭' => '𑣍', '𑢮' => '𑣎', '𑢯' => '𑣏', '𑢰' => '𑣐', '𑢱' => '𑣑', '𑢲' => '𑣒', '𑢳' => '𑣓', '𑢴' => '𑣔', '𑢵' => '𑣕', '𑢶' => '𑣖', '𑢷' => '𑣗', '𑢸' => '𑣘', '𑢹' => '𑣙', '𑢺' => '𑣚', '𑢻' => '𑣛', '𑢼' => '𑣜', '𑢽' => '𑣝', '𑢾' => '𑣞', '𑢿' => '𑣟', '𖹀' => '𖹠', '𖹁' => '𖹡', '𖹂' => '𖹢', '𖹃' => '𖹣', '𖹄' => '𖹤', '𖹅' => '𖹥', '𖹆' => '𖹦', '𖹇' => '𖹧', '𖹈' => '𖹨', '𖹉' => '𖹩', '𖹊' => '𖹪', '𖹋' => '𖹫', '𖹌' => '𖹬', '𖹍' => '𖹭', '𖹎' => '𖹮', '𖹏' => '𖹯', '𖹐' => '𖹰', '𖹑' => '𖹱', '𖹒' => '𖹲', '𖹓' => '𖹳', '𖹔' => '𖹴', '𖹕' => '𖹵', '𖹖' => '𖹶', '𖹗' => '𖹷', '𖹘' => '𖹸', '𖹙' => '𖹹', '𖹚' => '𖹺', '𖹛' => '𖹻', '𖹜' => '𖹼', '𖹝' => '𖹽', '𖹞' => '𖹾', '𖹟' => '𖹿', '𞤀' => '𞤢', '𞤁' => '𞤣', '𞤂' => '𞤤', '𞤃' => '𞤥', '𞤄' => '𞤦', '𞤅' => '𞤧', '𞤆' => '𞤨', '𞤇' => '𞤩', '𞤈' => '𞤪', '𞤉' => '𞤫', '𞤊' => '𞤬', '𞤋' => '𞤭', '𞤌' => '𞤮', '𞤍' => '𞤯', '𞤎' => '𞤰', '𞤏' => '𞤱', '𞤐' => '𞤲', '𞤑' => '𞤳', '𞤒' => '𞤴', '𞤓' => '𞤵', '𞤔' => '𞤶', '𞤕' => '𞤷', '𞤖' => '𞤸', '𞤗' => '𞤹', '𞤘' => '𞤺', '𞤙' => '𞤻', '𞤚' => '𞤼', '𞤛' => '𞤽', '𞤜' => '𞤾', '𞤝' => '𞤿', '𞤞' => '𞥀', '𞤟' => '𞥁', '𞤠' => '𞥂', '𞤡' => '𞥃'); diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php index f8aa4c018..ac21c79ba 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php @@ -1,6 +1,6 @@ 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D', 'e' => 'E', 'f' => 'F', 'g' => 'G', 'h' => 'H', 'i' => 'I', 'j' => 'J', 'k' => 'K', 'l' => 'L', 'm' => 'M', 'n' => 'N', 'o' => 'O', 'p' => 'P', 'q' => 'Q', 'r' => 'R', 's' => 'S', 't' => 'T', 'u' => 'U', 'v' => 'V', 'w' => 'W', 'x' => 'X', 'y' => 'Y', 'z' => 'Z', 'µ' => 'Μ', 'à' => 'À', 'á' => 'Á', 'â' => 'Â', 'ã' => 'Ã', 'ä' => 'Ä', 'å' => 'Å', 'æ' => 'Æ', 'ç' => 'Ç', 'è' => 'È', 'é' => 'É', 'ê' => 'Ê', 'ë' => 'Ë', 'ì' => 'Ì', 'í' => 'Í', 'î' => 'Î', 'ï' => 'Ï', 'ð' => 'Ð', 'ñ' => 'Ñ', 'ò' => 'Ò', 'ó' => 'Ó', 'ô' => 'Ô', 'õ' => 'Õ', 'ö' => 'Ö', 'ø' => 'Ø', 'ù' => 'Ù', 'ú' => 'Ú', 'û' => 'Û', 'ü' => 'Ü', 'ý' => 'Ý', 'þ' => 'Þ', 'ÿ' => 'Ÿ', 'ā' => 'Ā', 'ă' => 'Ă', 'ą' => 'Ą', 'ć' => 'Ć', 'ĉ' => 'Ĉ', 'ċ' => 'Ċ', 'č' => 'Č', 'ď' => 'Ď', 'đ' => 'Đ', 'ē' => 'Ē', 'ĕ' => 'Ĕ', 'ė' => 'Ė', 'ę' => 'Ę', 'ě' => 'Ě', 'ĝ' => 'Ĝ', 'ğ' => 'Ğ', 'ġ' => 'Ġ', 'ģ' => 'Ģ', 'ĥ' => 'Ĥ', 'ħ' => 'Ħ', 'ĩ' => 'Ĩ', 'ī' => 'Ī', 'ĭ' => 'Ĭ', 'į' => 'Į', 'ı' => 'I', 'ij' => 'IJ', 'ĵ' => 'Ĵ', 'ķ' => 'Ķ', 'ĺ' => 'Ĺ', 'ļ' => 'Ļ', 'ľ' => 'Ľ', 'ŀ' => 'Ŀ', 'ł' => 'Ł', 'ń' => 'Ń', 'ņ' => 'Ņ', 'ň' => 'Ň', 'ŋ' => 'Ŋ', 'ō' => 'Ō', 'ŏ' => 'Ŏ', 'ő' => 'Ő', 'œ' => 'Œ', 'ŕ' => 'Ŕ', 'ŗ' => 'Ŗ', 'ř' => 'Ř', 'ś' => 'Ś', 'ŝ' => 'Ŝ', 'ş' => 'Ş', 'š' => 'Š', 'ţ' => 'Ţ', 'ť' => 'Ť', 'ŧ' => 'Ŧ', 'ũ' => 'Ũ', 'ū' => 'Ū', 'ŭ' => 'Ŭ', 'ů' => 'Ů', 'ű' => 'Ű', 'ų' => 'Ų', 'ŵ' => 'Ŵ', 'ŷ' => 'Ŷ', 'ź' => 'Ź', 'ż' => 'Ż', 'ž' => 'Ž', 'ſ' => 'S', 'ƀ' => 'Ƀ', 'ƃ' => 'Ƃ', 'ƅ' => 'Ƅ', 'ƈ' => 'Ƈ', 'ƌ' => 'Ƌ', 'ƒ' => 'Ƒ', 'ƕ' => 'Ƕ', 'ƙ' => 'Ƙ', 'ƚ' => 'Ƚ', 'ƞ' => 'Ƞ', 'ơ' => 'Ơ', 'ƣ' => 'Ƣ', 'ƥ' => 'Ƥ', 'ƨ' => 'Ƨ', 'ƭ' => 'Ƭ', 'ư' => 'Ư', 'ƴ' => 'Ƴ', 'ƶ' => 'Ƶ', 'ƹ' => 'Ƹ', 'ƽ' => 'Ƽ', 'ƿ' => 'Ƿ', 'Dž' => 'DŽ', 'dž' => 'DŽ', 'Lj' => 'LJ', 'lj' => 'LJ', 'Nj' => 'NJ', 'nj' => 'NJ', 'ǎ' => 'Ǎ', 'ǐ' => 'Ǐ', 'ǒ' => 'Ǒ', 'ǔ' => 'Ǔ', 'ǖ' => 'Ǖ', 'ǘ' => 'Ǘ', 'ǚ' => 'Ǚ', 'ǜ' => 'Ǜ', 'ǝ' => 'Ǝ', 'ǟ' => 'Ǟ', 'ǡ' => 'Ǡ', 'ǣ' => 'Ǣ', 'ǥ' => 'Ǥ', 'ǧ' => 'Ǧ', 'ǩ' => 'Ǩ', 'ǫ' => 'Ǫ', 'ǭ' => 'Ǭ', 'ǯ' => 'Ǯ', 'Dz' => 'DZ', 'dz' => 'DZ', 'ǵ' => 'Ǵ', 'ǹ' => 'Ǹ', 'ǻ' => 'Ǻ', 'ǽ' => 'Ǽ', 'ǿ' => 'Ǿ', 'ȁ' => 'Ȁ', 'ȃ' => 'Ȃ', 'ȅ' => 'Ȅ', 'ȇ' => 'Ȇ', 'ȉ' => 'Ȉ', 'ȋ' => 'Ȋ', 'ȍ' => 'Ȍ', 'ȏ' => 'Ȏ', 'ȑ' => 'Ȑ', 'ȓ' => 'Ȓ', 'ȕ' => 'Ȕ', 'ȗ' => 'Ȗ', 'ș' => 'Ș', 'ț' => 'Ț', 'ȝ' => 'Ȝ', 'ȟ' => 'Ȟ', 'ȣ' => 'Ȣ', 'ȥ' => 'Ȥ', 'ȧ' => 'Ȧ', 'ȩ' => 'Ȩ', 'ȫ' => 'Ȫ', 'ȭ' => 'Ȭ', 'ȯ' => 'Ȯ', 'ȱ' => 'Ȱ', 'ȳ' => 'Ȳ', 'ȼ' => 'Ȼ', 'ȿ' => 'Ȿ', 'ɀ' => 'Ɀ', 'ɂ' => 'Ɂ', 'ɇ' => 'Ɇ', 'ɉ' => 'Ɉ', 'ɋ' => 'Ɋ', 'ɍ' => 'Ɍ', 'ɏ' => 'Ɏ', 'ɐ' => 'Ɐ', 'ɑ' => 'Ɑ', 'ɒ' => 'Ɒ', 'ɓ' => 'Ɓ', 'ɔ' => 'Ɔ', 'ɖ' => 'Ɖ', 'ɗ' => 'Ɗ', 'ə' => 'Ə', 'ɛ' => 'Ɛ', 'ɜ' => 'Ɜ', 'ɠ' => 'Ɠ', 'ɡ' => 'Ɡ', 'ɣ' => 'Ɣ', 'ɥ' => 'Ɥ', 'ɦ' => 'Ɦ', 'ɨ' => 'Ɨ', 'ɩ' => 'Ɩ', 'ɪ' => 'Ɪ', 'ɫ' => 'Ɫ', 'ɬ' => 'Ɬ', 'ɯ' => 'Ɯ', 'ɱ' => 'Ɱ', 'ɲ' => 'Ɲ', 'ɵ' => 'Ɵ', 'ɽ' => 'Ɽ', 'ʀ' => 'Ʀ', 'ʂ' => 'Ʂ', 'ʃ' => 'Ʃ', 'ʇ' => 'Ʇ', 'ʈ' => 'Ʈ', 'ʉ' => 'Ʉ', 'ʊ' => 'Ʊ', 'ʋ' => 'Ʋ', 'ʌ' => 'Ʌ', 'ʒ' => 'Ʒ', 'ʝ' => 'Ʝ', 'ʞ' => 'Ʞ', 'ͅ' => 'Ι', 'ͱ' => 'Ͱ', 'ͳ' => 'Ͳ', 'ͷ' => 'Ͷ', 'ͻ' => 'Ͻ', 'ͼ' => 'Ͼ', 'ͽ' => 'Ͽ', 'ά' => 'Ά', 'έ' => 'Έ', 'ή' => 'Ή', 'ί' => 'Ί', 'α' => 'Α', 'β' => 'Β', 'γ' => 'Γ', 'δ' => 'Δ', 'ε' => 'Ε', 'ζ' => 'Ζ', 'η' => 'Η', 'θ' => 'Θ', 'ι' => 'Ι', 'κ' => 'Κ', 'λ' => 'Λ', 'μ' => 'Μ', 'ν' => 'Ν', 'ξ' => 'Ξ', 'ο' => 'Ο', 'π' => 'Π', 'ρ' => 'Ρ', 'ς' => 'Σ', 'σ' => 'Σ', 'τ' => 'Τ', 'υ' => 'Υ', 'φ' => 'Φ', 'χ' => 'Χ', 'ψ' => 'Ψ', 'ω' => 'Ω', 'ϊ' => 'Ϊ', 'ϋ' => 'Ϋ', 'ό' => 'Ό', 'ύ' => 'Ύ', 'ώ' => 'Ώ', 'ϐ' => 'Β', 'ϑ' => 'Θ', 'ϕ' => 'Φ', 'ϖ' => 'Π', 'ϗ' => 'Ϗ', 'ϙ' => 'Ϙ', 'ϛ' => 'Ϛ', 'ϝ' => 'Ϝ', 'ϟ' => 'Ϟ', 'ϡ' => 'Ϡ', 'ϣ' => 'Ϣ', 'ϥ' => 'Ϥ', 'ϧ' => 'Ϧ', 'ϩ' => 'Ϩ', 'ϫ' => 'Ϫ', 'ϭ' => 'Ϭ', 'ϯ' => 'Ϯ', 'ϰ' => 'Κ', 'ϱ' => 'Ρ', 'ϲ' => 'Ϲ', 'ϳ' => 'Ϳ', 'ϵ' => 'Ε', 'ϸ' => 'Ϸ', 'ϻ' => 'Ϻ', 'а' => 'А', 'б' => 'Б', 'в' => 'В', 'г' => 'Г', 'д' => 'Д', 'е' => 'Е', 'ж' => 'Ж', 'з' => 'З', 'и' => 'И', 'й' => 'Й', 'к' => 'К', 'л' => 'Л', 'м' => 'М', 'н' => 'Н', 'о' => 'О', 'п' => 'П', 'р' => 'Р', 'с' => 'С', 'т' => 'Т', 'у' => 'У', 'ф' => 'Ф', 'х' => 'Х', 'ц' => 'Ц', 'ч' => 'Ч', 'ш' => 'Ш', 'щ' => 'Щ', 'ъ' => 'Ъ', 'ы' => 'Ы', 'ь' => 'Ь', 'э' => 'Э', 'ю' => 'Ю', 'я' => 'Я', 'ѐ' => 'Ѐ', 'ё' => 'Ё', 'ђ' => 'Ђ', 'ѓ' => 'Ѓ', 'є' => 'Є', 'ѕ' => 'Ѕ', 'і' => 'І', 'ї' => 'Ї', 'ј' => 'Ј', 'љ' => 'Љ', 'њ' => 'Њ', 'ћ' => 'Ћ', 'ќ' => 'Ќ', 'ѝ' => 'Ѝ', 'ў' => 'Ў', 'џ' => 'Џ', 'ѡ' => 'Ѡ', 'ѣ' => 'Ѣ', 'ѥ' => 'Ѥ', 'ѧ' => 'Ѧ', 'ѩ' => 'Ѩ', 'ѫ' => 'Ѫ', 'ѭ' => 'Ѭ', 'ѯ' => 'Ѯ', 'ѱ' => 'Ѱ', 'ѳ' => 'Ѳ', 'ѵ' => 'Ѵ', 'ѷ' => 'Ѷ', 'ѹ' => 'Ѹ', 'ѻ' => 'Ѻ', 'ѽ' => 'Ѽ', 'ѿ' => 'Ѿ', 'ҁ' => 'Ҁ', 'ҋ' => 'Ҋ', 'ҍ' => 'Ҍ', 'ҏ' => 'Ҏ', 'ґ' => 'Ґ', 'ғ' => 'Ғ', 'ҕ' => 'Ҕ', 'җ' => 'Җ', 'ҙ' => 'Ҙ', 'қ' => 'Қ', 'ҝ' => 'Ҝ', 'ҟ' => 'Ҟ', 'ҡ' => 'Ҡ', 'ң' => 'Ң', 'ҥ' => 'Ҥ', 'ҧ' => 'Ҧ', 'ҩ' => 'Ҩ', 'ҫ' => 'Ҫ', 'ҭ' => 'Ҭ', 'ү' => 'Ү', 'ұ' => 'Ұ', 'ҳ' => 'Ҳ', 'ҵ' => 'Ҵ', 'ҷ' => 'Ҷ', 'ҹ' => 'Ҹ', 'һ' => 'Һ', 'ҽ' => 'Ҽ', 'ҿ' => 'Ҿ', 'ӂ' => 'Ӂ', 'ӄ' => 'Ӄ', 'ӆ' => 'Ӆ', 'ӈ' => 'Ӈ', 'ӊ' => 'Ӊ', 'ӌ' => 'Ӌ', 'ӎ' => 'Ӎ', 'ӏ' => 'Ӏ', 'ӑ' => 'Ӑ', 'ӓ' => 'Ӓ', 'ӕ' => 'Ӕ', 'ӗ' => 'Ӗ', 'ә' => 'Ә', 'ӛ' => 'Ӛ', 'ӝ' => 'Ӝ', 'ӟ' => 'Ӟ', 'ӡ' => 'Ӡ', 'ӣ' => 'Ӣ', 'ӥ' => 'Ӥ', 'ӧ' => 'Ӧ', 'ө' => 'Ө', 'ӫ' => 'Ӫ', 'ӭ' => 'Ӭ', 'ӯ' => 'Ӯ', 'ӱ' => 'Ӱ', 'ӳ' => 'Ӳ', 'ӵ' => 'Ӵ', 'ӷ' => 'Ӷ', 'ӹ' => 'Ӹ', 'ӻ' => 'Ӻ', 'ӽ' => 'Ӽ', 'ӿ' => 'Ӿ', 'ԁ' => 'Ԁ', 'ԃ' => 'Ԃ', 'ԅ' => 'Ԅ', 'ԇ' => 'Ԇ', 'ԉ' => 'Ԉ', 'ԋ' => 'Ԋ', 'ԍ' => 'Ԍ', 'ԏ' => 'Ԏ', 'ԑ' => 'Ԑ', 'ԓ' => 'Ԓ', 'ԕ' => 'Ԕ', 'ԗ' => 'Ԗ', 'ԙ' => 'Ԙ', 'ԛ' => 'Ԛ', 'ԝ' => 'Ԝ', 'ԟ' => 'Ԟ', 'ԡ' => 'Ԡ', 'ԣ' => 'Ԣ', 'ԥ' => 'Ԥ', 'ԧ' => 'Ԧ', 'ԩ' => 'Ԩ', 'ԫ' => 'Ԫ', 'ԭ' => 'Ԭ', 'ԯ' => 'Ԯ', 'ա' => 'Ա', 'բ' => 'Բ', 'գ' => 'Գ', 'դ' => 'Դ', 'ե' => 'Ե', 'զ' => 'Զ', 'է' => 'Է', 'ը' => 'Ը', 'թ' => 'Թ', 'ժ' => 'Ժ', 'ի' => 'Ի', 'լ' => 'Լ', 'խ' => 'Խ', 'ծ' => 'Ծ', 'կ' => 'Կ', 'հ' => 'Հ', 'ձ' => 'Ձ', 'ղ' => 'Ղ', 'ճ' => 'Ճ', 'մ' => 'Մ', 'յ' => 'Յ', 'ն' => 'Ն', 'շ' => 'Շ', 'ո' => 'Ո', 'չ' => 'Չ', 'պ' => 'Պ', 'ջ' => 'Ջ', 'ռ' => 'Ռ', 'ս' => 'Ս', 'վ' => 'Վ', 'տ' => 'Տ', 'ր' => 'Ր', 'ց' => 'Ց', 'ւ' => 'Ւ', 'փ' => 'Փ', 'ք' => 'Ք', 'օ' => 'Օ', 'ֆ' => 'Ֆ', 'ა' => 'Ა', 'ბ' => 'Ბ', 'გ' => 'Გ', 'დ' => 'Დ', 'ე' => 'Ე', 'ვ' => 'Ვ', 'ზ' => 'Ზ', 'თ' => 'Თ', 'ი' => 'Ი', 'კ' => 'Კ', 'ლ' => 'Ლ', 'მ' => 'Მ', 'ნ' => 'Ნ', 'ო' => 'Ო', 'პ' => 'Პ', 'ჟ' => 'Ჟ', 'რ' => 'Რ', 'ს' => 'Ს', 'ტ' => 'Ტ', 'უ' => 'Უ', 'ფ' => 'Ფ', 'ქ' => 'Ქ', 'ღ' => 'Ღ', 'ყ' => 'Ყ', 'შ' => 'Შ', 'ჩ' => 'Ჩ', 'ც' => 'Ც', 'ძ' => 'Ძ', 'წ' => 'Წ', 'ჭ' => 'Ჭ', 'ხ' => 'Ხ', 'ჯ' => 'Ჯ', 'ჰ' => 'Ჰ', 'ჱ' => 'Ჱ', 'ჲ' => 'Ჲ', 'ჳ' => 'Ჳ', 'ჴ' => 'Ჴ', 'ჵ' => 'Ჵ', 'ჶ' => 'Ჶ', 'ჷ' => 'Ჷ', 'ჸ' => 'Ჸ', 'ჹ' => 'Ჹ', 'ჺ' => 'Ჺ', 'ჽ' => 'Ჽ', 'ჾ' => 'Ჾ', 'ჿ' => 'Ჿ', 'ᏸ' => 'Ᏸ', 'ᏹ' => 'Ᏹ', 'ᏺ' => 'Ᏺ', 'ᏻ' => 'Ᏻ', 'ᏼ' => 'Ᏼ', 'ᏽ' => 'Ᏽ', 'ᲀ' => 'В', 'ᲁ' => 'Д', 'ᲂ' => 'О', 'ᲃ' => 'С', 'ᲄ' => 'Т', 'ᲅ' => 'Т', 'ᲆ' => 'Ъ', 'ᲇ' => 'Ѣ', 'ᲈ' => 'Ꙋ', 'ᵹ' => 'Ᵹ', 'ᵽ' => 'Ᵽ', 'ᶎ' => 'Ᶎ', 'ḁ' => 'Ḁ', 'ḃ' => 'Ḃ', 'ḅ' => 'Ḅ', 'ḇ' => 'Ḇ', 'ḉ' => 'Ḉ', 'ḋ' => 'Ḋ', 'ḍ' => 'Ḍ', 'ḏ' => 'Ḏ', 'ḑ' => 'Ḑ', 'ḓ' => 'Ḓ', 'ḕ' => 'Ḕ', 'ḗ' => 'Ḗ', 'ḙ' => 'Ḙ', 'ḛ' => 'Ḛ', 'ḝ' => 'Ḝ', 'ḟ' => 'Ḟ', 'ḡ' => 'Ḡ', 'ḣ' => 'Ḣ', 'ḥ' => 'Ḥ', 'ḧ' => 'Ḧ', 'ḩ' => 'Ḩ', 'ḫ' => 'Ḫ', 'ḭ' => 'Ḭ', 'ḯ' => 'Ḯ', 'ḱ' => 'Ḱ', 'ḳ' => 'Ḳ', 'ḵ' => 'Ḵ', 'ḷ' => 'Ḷ', 'ḹ' => 'Ḹ', 'ḻ' => 'Ḻ', 'ḽ' => 'Ḽ', 'ḿ' => 'Ḿ', 'ṁ' => 'Ṁ', 'ṃ' => 'Ṃ', 'ṅ' => 'Ṅ', 'ṇ' => 'Ṇ', 'ṉ' => 'Ṉ', 'ṋ' => 'Ṋ', 'ṍ' => 'Ṍ', 'ṏ' => 'Ṏ', 'ṑ' => 'Ṑ', 'ṓ' => 'Ṓ', 'ṕ' => 'Ṕ', 'ṗ' => 'Ṗ', 'ṙ' => 'Ṙ', 'ṛ' => 'Ṛ', 'ṝ' => 'Ṝ', 'ṟ' => 'Ṟ', 'ṡ' => 'Ṡ', 'ṣ' => 'Ṣ', 'ṥ' => 'Ṥ', 'ṧ' => 'Ṧ', 'ṩ' => 'Ṩ', 'ṫ' => 'Ṫ', 'ṭ' => 'Ṭ', 'ṯ' => 'Ṯ', 'ṱ' => 'Ṱ', 'ṳ' => 'Ṳ', 'ṵ' => 'Ṵ', 'ṷ' => 'Ṷ', 'ṹ' => 'Ṹ', 'ṻ' => 'Ṻ', 'ṽ' => 'Ṽ', 'ṿ' => 'Ṿ', 'ẁ' => 'Ẁ', 'ẃ' => 'Ẃ', 'ẅ' => 'Ẅ', 'ẇ' => 'Ẇ', 'ẉ' => 'Ẉ', 'ẋ' => 'Ẋ', 'ẍ' => 'Ẍ', 'ẏ' => 'Ẏ', 'ẑ' => 'Ẑ', 'ẓ' => 'Ẓ', 'ẕ' => 'Ẕ', 'ẛ' => 'Ṡ', 'ạ' => 'Ạ', 'ả' => 'Ả', 'ấ' => 'Ấ', 'ầ' => 'Ầ', 'ẩ' => 'Ẩ', 'ẫ' => 'Ẫ', 'ậ' => 'Ậ', 'ắ' => 'Ắ', 'ằ' => 'Ằ', 'ẳ' => 'Ẳ', 'ẵ' => 'Ẵ', 'ặ' => 'Ặ', 'ẹ' => 'Ẹ', 'ẻ' => 'Ẻ', 'ẽ' => 'Ẽ', 'ế' => 'Ế', 'ề' => 'Ề', 'ể' => 'Ể', 'ễ' => 'Ễ', 'ệ' => 'Ệ', 'ỉ' => 'Ỉ', 'ị' => 'Ị', 'ọ' => 'Ọ', 'ỏ' => 'Ỏ', 'ố' => 'Ố', 'ồ' => 'Ồ', 'ổ' => 'Ổ', 'ỗ' => 'Ỗ', 'ộ' => 'Ộ', 'ớ' => 'Ớ', 'ờ' => 'Ờ', 'ở' => 'Ở', 'ỡ' => 'Ỡ', 'ợ' => 'Ợ', 'ụ' => 'Ụ', 'ủ' => 'Ủ', 'ứ' => 'Ứ', 'ừ' => 'Ừ', 'ử' => 'Ử', 'ữ' => 'Ữ', 'ự' => 'Ự', 'ỳ' => 'Ỳ', 'ỵ' => 'Ỵ', 'ỷ' => 'Ỷ', 'ỹ' => 'Ỹ', 'ỻ' => 'Ỻ', 'ỽ' => 'Ỽ', 'ỿ' => 'Ỿ', 'ἀ' => 'Ἀ', 'ἁ' => 'Ἁ', 'ἂ' => 'Ἂ', 'ἃ' => 'Ἃ', 'ἄ' => 'Ἄ', 'ἅ' => 'Ἅ', 'ἆ' => 'Ἆ', 'ἇ' => 'Ἇ', 'ἐ' => 'Ἐ', 'ἑ' => 'Ἑ', 'ἒ' => 'Ἒ', 'ἓ' => 'Ἓ', 'ἔ' => 'Ἔ', 'ἕ' => 'Ἕ', 'ἠ' => 'Ἠ', 'ἡ' => 'Ἡ', 'ἢ' => 'Ἢ', 'ἣ' => 'Ἣ', 'ἤ' => 'Ἤ', 'ἥ' => 'Ἥ', 'ἦ' => 'Ἦ', 'ἧ' => 'Ἧ', 'ἰ' => 'Ἰ', 'ἱ' => 'Ἱ', 'ἲ' => 'Ἲ', 'ἳ' => 'Ἳ', 'ἴ' => 'Ἴ', 'ἵ' => 'Ἵ', 'ἶ' => 'Ἶ', 'ἷ' => 'Ἷ', 'ὀ' => 'Ὀ', 'ὁ' => 'Ὁ', 'ὂ' => 'Ὂ', 'ὃ' => 'Ὃ', 'ὄ' => 'Ὄ', 'ὅ' => 'Ὅ', 'ὑ' => 'Ὑ', 'ὓ' => 'Ὓ', 'ὕ' => 'Ὕ', 'ὗ' => 'Ὗ', 'ὠ' => 'Ὠ', 'ὡ' => 'Ὡ', 'ὢ' => 'Ὢ', 'ὣ' => 'Ὣ', 'ὤ' => 'Ὤ', 'ὥ' => 'Ὥ', 'ὦ' => 'Ὦ', 'ὧ' => 'Ὧ', 'ὰ' => 'Ὰ', 'ά' => 'Ά', 'ὲ' => 'Ὲ', 'έ' => 'Έ', 'ὴ' => 'Ὴ', 'ή' => 'Ή', 'ὶ' => 'Ὶ', 'ί' => 'Ί', 'ὸ' => 'Ὸ', 'ό' => 'Ό', 'ὺ' => 'Ὺ', 'ύ' => 'Ύ', 'ὼ' => 'Ὼ', 'ώ' => 'Ώ', 'ᾀ' => 'ἈΙ', 'ᾁ' => 'ἉΙ', 'ᾂ' => 'ἊΙ', 'ᾃ' => 'ἋΙ', 'ᾄ' => 'ἌΙ', 'ᾅ' => 'ἍΙ', 'ᾆ' => 'ἎΙ', 'ᾇ' => 'ἏΙ', 'ᾐ' => 'ἨΙ', 'ᾑ' => 'ἩΙ', 'ᾒ' => 'ἪΙ', 'ᾓ' => 'ἫΙ', 'ᾔ' => 'ἬΙ', 'ᾕ' => 'ἭΙ', 'ᾖ' => 'ἮΙ', 'ᾗ' => 'ἯΙ', 'ᾠ' => 'ὨΙ', 'ᾡ' => 'ὩΙ', 'ᾢ' => 'ὪΙ', 'ᾣ' => 'ὫΙ', 'ᾤ' => 'ὬΙ', 'ᾥ' => 'ὭΙ', 'ᾦ' => 'ὮΙ', 'ᾧ' => 'ὯΙ', 'ᾰ' => 'Ᾰ', 'ᾱ' => 'Ᾱ', 'ᾳ' => 'ΑΙ', 'ι' => 'Ι', 'ῃ' => 'ΗΙ', 'ῐ' => 'Ῐ', 'ῑ' => 'Ῑ', 'ῠ' => 'Ῠ', 'ῡ' => 'Ῡ', 'ῥ' => 'Ῥ', 'ῳ' => 'ΩΙ', 'ⅎ' => 'Ⅎ', 'ⅰ' => 'Ⅰ', 'ⅱ' => 'Ⅱ', 'ⅲ' => 'Ⅲ', 'ⅳ' => 'Ⅳ', 'ⅴ' => 'Ⅴ', 'ⅵ' => 'Ⅵ', 'ⅶ' => 'Ⅶ', 'ⅷ' => 'Ⅷ', 'ⅸ' => 'Ⅸ', 'ⅹ' => 'Ⅹ', 'ⅺ' => 'Ⅺ', 'ⅻ' => 'Ⅻ', 'ⅼ' => 'Ⅼ', 'ⅽ' => 'Ⅽ', 'ⅾ' => 'Ⅾ', 'ⅿ' => 'Ⅿ', 'ↄ' => 'Ↄ', 'ⓐ' => 'Ⓐ', 'ⓑ' => 'Ⓑ', 'ⓒ' => 'Ⓒ', 'ⓓ' => 'Ⓓ', 'ⓔ' => 'Ⓔ', 'ⓕ' => 'Ⓕ', 'ⓖ' => 'Ⓖ', 'ⓗ' => 'Ⓗ', 'ⓘ' => 'Ⓘ', 'ⓙ' => 'Ⓙ', 'ⓚ' => 'Ⓚ', 'ⓛ' => 'Ⓛ', 'ⓜ' => 'Ⓜ', 'ⓝ' => 'Ⓝ', 'ⓞ' => 'Ⓞ', 'ⓟ' => 'Ⓟ', 'ⓠ' => 'Ⓠ', 'ⓡ' => 'Ⓡ', 'ⓢ' => 'Ⓢ', 'ⓣ' => 'Ⓣ', 'ⓤ' => 'Ⓤ', 'ⓥ' => 'Ⓥ', 'ⓦ' => 'Ⓦ', 'ⓧ' => 'Ⓧ', 'ⓨ' => 'Ⓨ', 'ⓩ' => 'Ⓩ', 'ⰰ' => 'Ⰰ', 'ⰱ' => 'Ⰱ', 'ⰲ' => 'Ⰲ', 'ⰳ' => 'Ⰳ', 'ⰴ' => 'Ⰴ', 'ⰵ' => 'Ⰵ', 'ⰶ' => 'Ⰶ', 'ⰷ' => 'Ⰷ', 'ⰸ' => 'Ⰸ', 'ⰹ' => 'Ⰹ', 'ⰺ' => 'Ⰺ', 'ⰻ' => 'Ⰻ', 'ⰼ' => 'Ⰼ', 'ⰽ' => 'Ⰽ', 'ⰾ' => 'Ⰾ', 'ⰿ' => 'Ⰿ', 'ⱀ' => 'Ⱀ', 'ⱁ' => 'Ⱁ', 'ⱂ' => 'Ⱂ', 'ⱃ' => 'Ⱃ', 'ⱄ' => 'Ⱄ', 'ⱅ' => 'Ⱅ', 'ⱆ' => 'Ⱆ', 'ⱇ' => 'Ⱇ', 'ⱈ' => 'Ⱈ', 'ⱉ' => 'Ⱉ', 'ⱊ' => 'Ⱊ', 'ⱋ' => 'Ⱋ', 'ⱌ' => 'Ⱌ', 'ⱍ' => 'Ⱍ', 'ⱎ' => 'Ⱎ', 'ⱏ' => 'Ⱏ', 'ⱐ' => 'Ⱐ', 'ⱑ' => 'Ⱑ', 'ⱒ' => 'Ⱒ', 'ⱓ' => 'Ⱓ', 'ⱔ' => 'Ⱔ', 'ⱕ' => 'Ⱕ', 'ⱖ' => 'Ⱖ', 'ⱗ' => 'Ⱗ', 'ⱘ' => 'Ⱘ', 'ⱙ' => 'Ⱙ', 'ⱚ' => 'Ⱚ', 'ⱛ' => 'Ⱛ', 'ⱜ' => 'Ⱜ', 'ⱝ' => 'Ⱝ', 'ⱞ' => 'Ⱞ', 'ⱡ' => 'Ⱡ', 'ⱥ' => 'Ⱥ', 'ⱦ' => 'Ⱦ', 'ⱨ' => 'Ⱨ', 'ⱪ' => 'Ⱪ', 'ⱬ' => 'Ⱬ', 'ⱳ' => 'Ⱳ', 'ⱶ' => 'Ⱶ', 'ⲁ' => 'Ⲁ', 'ⲃ' => 'Ⲃ', 'ⲅ' => 'Ⲅ', 'ⲇ' => 'Ⲇ', 'ⲉ' => 'Ⲉ', 'ⲋ' => 'Ⲋ', 'ⲍ' => 'Ⲍ', 'ⲏ' => 'Ⲏ', 'ⲑ' => 'Ⲑ', 'ⲓ' => 'Ⲓ', 'ⲕ' => 'Ⲕ', 'ⲗ' => 'Ⲗ', 'ⲙ' => 'Ⲙ', 'ⲛ' => 'Ⲛ', 'ⲝ' => 'Ⲝ', 'ⲟ' => 'Ⲟ', 'ⲡ' => 'Ⲡ', 'ⲣ' => 'Ⲣ', 'ⲥ' => 'Ⲥ', 'ⲧ' => 'Ⲧ', 'ⲩ' => 'Ⲩ', 'ⲫ' => 'Ⲫ', 'ⲭ' => 'Ⲭ', 'ⲯ' => 'Ⲯ', 'ⲱ' => 'Ⲱ', 'ⲳ' => 'Ⲳ', 'ⲵ' => 'Ⲵ', 'ⲷ' => 'Ⲷ', 'ⲹ' => 'Ⲹ', 'ⲻ' => 'Ⲻ', 'ⲽ' => 'Ⲽ', 'ⲿ' => 'Ⲿ', 'ⳁ' => 'Ⳁ', 'ⳃ' => 'Ⳃ', 'ⳅ' => 'Ⳅ', 'ⳇ' => 'Ⳇ', 'ⳉ' => 'Ⳉ', 'ⳋ' => 'Ⳋ', 'ⳍ' => 'Ⳍ', 'ⳏ' => 'Ⳏ', 'ⳑ' => 'Ⳑ', 'ⳓ' => 'Ⳓ', 'ⳕ' => 'Ⳕ', 'ⳗ' => 'Ⳗ', 'ⳙ' => 'Ⳙ', 'ⳛ' => 'Ⳛ', 'ⳝ' => 'Ⳝ', 'ⳟ' => 'Ⳟ', 'ⳡ' => 'Ⳡ', 'ⳣ' => 'Ⳣ', 'ⳬ' => 'Ⳬ', 'ⳮ' => 'Ⳮ', 'ⳳ' => 'Ⳳ', 'ⴀ' => 'Ⴀ', 'ⴁ' => 'Ⴁ', 'ⴂ' => 'Ⴂ', 'ⴃ' => 'Ⴃ', 'ⴄ' => 'Ⴄ', 'ⴅ' => 'Ⴅ', 'ⴆ' => 'Ⴆ', 'ⴇ' => 'Ⴇ', 'ⴈ' => 'Ⴈ', 'ⴉ' => 'Ⴉ', 'ⴊ' => 'Ⴊ', 'ⴋ' => 'Ⴋ', 'ⴌ' => 'Ⴌ', 'ⴍ' => 'Ⴍ', 'ⴎ' => 'Ⴎ', 'ⴏ' => 'Ⴏ', 'ⴐ' => 'Ⴐ', 'ⴑ' => 'Ⴑ', 'ⴒ' => 'Ⴒ', 'ⴓ' => 'Ⴓ', 'ⴔ' => 'Ⴔ', 'ⴕ' => 'Ⴕ', 'ⴖ' => 'Ⴖ', 'ⴗ' => 'Ⴗ', 'ⴘ' => 'Ⴘ', 'ⴙ' => 'Ⴙ', 'ⴚ' => 'Ⴚ', 'ⴛ' => 'Ⴛ', 'ⴜ' => 'Ⴜ', 'ⴝ' => 'Ⴝ', 'ⴞ' => 'Ⴞ', 'ⴟ' => 'Ⴟ', 'ⴠ' => 'Ⴠ', 'ⴡ' => 'Ⴡ', 'ⴢ' => 'Ⴢ', 'ⴣ' => 'Ⴣ', 'ⴤ' => 'Ⴤ', 'ⴥ' => 'Ⴥ', 'ⴧ' => 'Ⴧ', 'ⴭ' => 'Ⴭ', 'ꙁ' => 'Ꙁ', 'ꙃ' => 'Ꙃ', 'ꙅ' => 'Ꙅ', 'ꙇ' => 'Ꙇ', 'ꙉ' => 'Ꙉ', 'ꙋ' => 'Ꙋ', 'ꙍ' => 'Ꙍ', 'ꙏ' => 'Ꙏ', 'ꙑ' => 'Ꙑ', 'ꙓ' => 'Ꙓ', 'ꙕ' => 'Ꙕ', 'ꙗ' => 'Ꙗ', 'ꙙ' => 'Ꙙ', 'ꙛ' => 'Ꙛ', 'ꙝ' => 'Ꙝ', 'ꙟ' => 'Ꙟ', 'ꙡ' => 'Ꙡ', 'ꙣ' => 'Ꙣ', 'ꙥ' => 'Ꙥ', 'ꙧ' => 'Ꙧ', 'ꙩ' => 'Ꙩ', 'ꙫ' => 'Ꙫ', 'ꙭ' => 'Ꙭ', 'ꚁ' => 'Ꚁ', 'ꚃ' => 'Ꚃ', 'ꚅ' => 'Ꚅ', 'ꚇ' => 'Ꚇ', 'ꚉ' => 'Ꚉ', 'ꚋ' => 'Ꚋ', 'ꚍ' => 'Ꚍ', 'ꚏ' => 'Ꚏ', 'ꚑ' => 'Ꚑ', 'ꚓ' => 'Ꚓ', 'ꚕ' => 'Ꚕ', 'ꚗ' => 'Ꚗ', 'ꚙ' => 'Ꚙ', 'ꚛ' => 'Ꚛ', 'ꜣ' => 'Ꜣ', 'ꜥ' => 'Ꜥ', 'ꜧ' => 'Ꜧ', 'ꜩ' => 'Ꜩ', 'ꜫ' => 'Ꜫ', 'ꜭ' => 'Ꜭ', 'ꜯ' => 'Ꜯ', 'ꜳ' => 'Ꜳ', 'ꜵ' => 'Ꜵ', 'ꜷ' => 'Ꜷ', 'ꜹ' => 'Ꜹ', 'ꜻ' => 'Ꜻ', 'ꜽ' => 'Ꜽ', 'ꜿ' => 'Ꜿ', 'ꝁ' => 'Ꝁ', 'ꝃ' => 'Ꝃ', 'ꝅ' => 'Ꝅ', 'ꝇ' => 'Ꝇ', 'ꝉ' => 'Ꝉ', 'ꝋ' => 'Ꝋ', 'ꝍ' => 'Ꝍ', 'ꝏ' => 'Ꝏ', 'ꝑ' => 'Ꝑ', 'ꝓ' => 'Ꝓ', 'ꝕ' => 'Ꝕ', 'ꝗ' => 'Ꝗ', 'ꝙ' => 'Ꝙ', 'ꝛ' => 'Ꝛ', 'ꝝ' => 'Ꝝ', 'ꝟ' => 'Ꝟ', 'ꝡ' => 'Ꝡ', 'ꝣ' => 'Ꝣ', 'ꝥ' => 'Ꝥ', 'ꝧ' => 'Ꝧ', 'ꝩ' => 'Ꝩ', 'ꝫ' => 'Ꝫ', 'ꝭ' => 'Ꝭ', 'ꝯ' => 'Ꝯ', 'ꝺ' => 'Ꝺ', 'ꝼ' => 'Ꝼ', 'ꝿ' => 'Ꝿ', 'ꞁ' => 'Ꞁ', 'ꞃ' => 'Ꞃ', 'ꞅ' => 'Ꞅ', 'ꞇ' => 'Ꞇ', 'ꞌ' => 'Ꞌ', 'ꞑ' => 'Ꞑ', 'ꞓ' => 'Ꞓ', 'ꞔ' => 'Ꞔ', 'ꞗ' => 'Ꞗ', 'ꞙ' => 'Ꞙ', 'ꞛ' => 'Ꞛ', 'ꞝ' => 'Ꞝ', 'ꞟ' => 'Ꞟ', 'ꞡ' => 'Ꞡ', 'ꞣ' => 'Ꞣ', 'ꞥ' => 'Ꞥ', 'ꞧ' => 'Ꞧ', 'ꞩ' => 'Ꞩ', 'ꞵ' => 'Ꞵ', 'ꞷ' => 'Ꞷ', 'ꞹ' => 'Ꞹ', 'ꞻ' => 'Ꞻ', 'ꞽ' => 'Ꞽ', 'ꞿ' => 'Ꞿ', 'ꟃ' => 'Ꟃ', 'ꟈ' => 'Ꟈ', 'ꟊ' => 'Ꟊ', 'ꟶ' => 'Ꟶ', 'ꭓ' => 'Ꭓ', 'ꭰ' => 'Ꭰ', 'ꭱ' => 'Ꭱ', 'ꭲ' => 'Ꭲ', 'ꭳ' => 'Ꭳ', 'ꭴ' => 'Ꭴ', 'ꭵ' => 'Ꭵ', 'ꭶ' => 'Ꭶ', 'ꭷ' => 'Ꭷ', 'ꭸ' => 'Ꭸ', 'ꭹ' => 'Ꭹ', 'ꭺ' => 'Ꭺ', 'ꭻ' => 'Ꭻ', 'ꭼ' => 'Ꭼ', 'ꭽ' => 'Ꭽ', 'ꭾ' => 'Ꭾ', 'ꭿ' => 'Ꭿ', 'ꮀ' => 'Ꮀ', 'ꮁ' => 'Ꮁ', 'ꮂ' => 'Ꮂ', 'ꮃ' => 'Ꮃ', 'ꮄ' => 'Ꮄ', 'ꮅ' => 'Ꮅ', 'ꮆ' => 'Ꮆ', 'ꮇ' => 'Ꮇ', 'ꮈ' => 'Ꮈ', 'ꮉ' => 'Ꮉ', 'ꮊ' => 'Ꮊ', 'ꮋ' => 'Ꮋ', 'ꮌ' => 'Ꮌ', 'ꮍ' => 'Ꮍ', 'ꮎ' => 'Ꮎ', 'ꮏ' => 'Ꮏ', 'ꮐ' => 'Ꮐ', 'ꮑ' => 'Ꮑ', 'ꮒ' => 'Ꮒ', 'ꮓ' => 'Ꮓ', 'ꮔ' => 'Ꮔ', 'ꮕ' => 'Ꮕ', 'ꮖ' => 'Ꮖ', 'ꮗ' => 'Ꮗ', 'ꮘ' => 'Ꮘ', 'ꮙ' => 'Ꮙ', 'ꮚ' => 'Ꮚ', 'ꮛ' => 'Ꮛ', 'ꮜ' => 'Ꮜ', 'ꮝ' => 'Ꮝ', 'ꮞ' => 'Ꮞ', 'ꮟ' => 'Ꮟ', 'ꮠ' => 'Ꮠ', 'ꮡ' => 'Ꮡ', 'ꮢ' => 'Ꮢ', 'ꮣ' => 'Ꮣ', 'ꮤ' => 'Ꮤ', 'ꮥ' => 'Ꮥ', 'ꮦ' => 'Ꮦ', 'ꮧ' => 'Ꮧ', 'ꮨ' => 'Ꮨ', 'ꮩ' => 'Ꮩ', 'ꮪ' => 'Ꮪ', 'ꮫ' => 'Ꮫ', 'ꮬ' => 'Ꮬ', 'ꮭ' => 'Ꮭ', 'ꮮ' => 'Ꮮ', 'ꮯ' => 'Ꮯ', 'ꮰ' => 'Ꮰ', 'ꮱ' => 'Ꮱ', 'ꮲ' => 'Ꮲ', 'ꮳ' => 'Ꮳ', 'ꮴ' => 'Ꮴ', 'ꮵ' => 'Ꮵ', 'ꮶ' => 'Ꮶ', 'ꮷ' => 'Ꮷ', 'ꮸ' => 'Ꮸ', 'ꮹ' => 'Ꮹ', 'ꮺ' => 'Ꮺ', 'ꮻ' => 'Ꮻ', 'ꮼ' => 'Ꮼ', 'ꮽ' => 'Ꮽ', 'ꮾ' => 'Ꮾ', 'ꮿ' => 'Ꮿ', 'a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D', 'e' => 'E', 'f' => 'F', 'g' => 'G', 'h' => 'H', 'i' => 'I', 'j' => 'J', 'k' => 'K', 'l' => 'L', 'm' => 'M', 'n' => 'N', 'o' => 'O', 'p' => 'P', 'q' => 'Q', 'r' => 'R', 's' => 'S', 't' => 'T', 'u' => 'U', 'v' => 'V', 'w' => 'W', 'x' => 'X', 'y' => 'Y', 'z' => 'Z', '𐐨' => '𐐀', '𐐩' => '𐐁', '𐐪' => '𐐂', '𐐫' => '𐐃', '𐐬' => '𐐄', '𐐭' => '𐐅', '𐐮' => '𐐆', '𐐯' => '𐐇', '𐐰' => '𐐈', '𐐱' => '𐐉', '𐐲' => '𐐊', '𐐳' => '𐐋', '𐐴' => '𐐌', '𐐵' => '𐐍', '𐐶' => '𐐎', '𐐷' => '𐐏', '𐐸' => '𐐐', '𐐹' => '𐐑', '𐐺' => '𐐒', '𐐻' => '𐐓', '𐐼' => '𐐔', '𐐽' => '𐐕', '𐐾' => '𐐖', '𐐿' => '𐐗', '𐑀' => '𐐘', '𐑁' => '𐐙', '𐑂' => '𐐚', '𐑃' => '𐐛', '𐑄' => '𐐜', '𐑅' => '𐐝', '𐑆' => '𐐞', '𐑇' => '𐐟', '𐑈' => '𐐠', '𐑉' => '𐐡', '𐑊' => '𐐢', '𐑋' => '𐐣', '𐑌' => '𐐤', '𐑍' => '𐐥', '𐑎' => '𐐦', '𐑏' => '𐐧', '𐓘' => '𐒰', '𐓙' => '𐒱', '𐓚' => '𐒲', '𐓛' => '𐒳', '𐓜' => '𐒴', '𐓝' => '𐒵', '𐓞' => '𐒶', '𐓟' => '𐒷', '𐓠' => '𐒸', '𐓡' => '𐒹', '𐓢' => '𐒺', '𐓣' => '𐒻', '𐓤' => '𐒼', '𐓥' => '𐒽', '𐓦' => '𐒾', '𐓧' => '𐒿', '𐓨' => '𐓀', '𐓩' => '𐓁', '𐓪' => '𐓂', '𐓫' => '𐓃', '𐓬' => '𐓄', '𐓭' => '𐓅', '𐓮' => '𐓆', '𐓯' => '𐓇', '𐓰' => '𐓈', '𐓱' => '𐓉', '𐓲' => '𐓊', '𐓳' => '𐓋', '𐓴' => '𐓌', '𐓵' => '𐓍', '𐓶' => '𐓎', '𐓷' => '𐓏', '𐓸' => '𐓐', '𐓹' => '𐓑', '𐓺' => '𐓒', '𐓻' => '𐓓', '𐳀' => '𐲀', '𐳁' => '𐲁', '𐳂' => '𐲂', '𐳃' => '𐲃', '𐳄' => '𐲄', '𐳅' => '𐲅', '𐳆' => '𐲆', '𐳇' => '𐲇', '𐳈' => '𐲈', '𐳉' => '𐲉', '𐳊' => '𐲊', '𐳋' => '𐲋', '𐳌' => '𐲌', '𐳍' => '𐲍', '𐳎' => '𐲎', '𐳏' => '𐲏', '𐳐' => '𐲐', '𐳑' => '𐲑', '𐳒' => '𐲒', '𐳓' => '𐲓', '𐳔' => '𐲔', '𐳕' => '𐲕', '𐳖' => '𐲖', '𐳗' => '𐲗', '𐳘' => '𐲘', '𐳙' => '𐲙', '𐳚' => '𐲚', '𐳛' => '𐲛', '𐳜' => '𐲜', '𐳝' => '𐲝', '𐳞' => '𐲞', '𐳟' => '𐲟', '𐳠' => '𐲠', '𐳡' => '𐲡', '𐳢' => '𐲢', '𐳣' => '𐲣', '𐳤' => '𐲤', '𐳥' => '𐲥', '𐳦' => '𐲦', '𐳧' => '𐲧', '𐳨' => '𐲨', '𐳩' => '𐲩', '𐳪' => '𐲪', '𐳫' => '𐲫', '𐳬' => '𐲬', '𐳭' => '𐲭', '𐳮' => '𐲮', '𐳯' => '𐲯', '𐳰' => '𐲰', '𐳱' => '𐲱', '𐳲' => '𐲲', '𑣀' => '𑢠', '𑣁' => '𑢡', '𑣂' => '𑢢', '𑣃' => '𑢣', '𑣄' => '𑢤', '𑣅' => '𑢥', '𑣆' => '𑢦', '𑣇' => '𑢧', '𑣈' => '𑢨', '𑣉' => '𑢩', '𑣊' => '𑢪', '𑣋' => '𑢫', '𑣌' => '𑢬', '𑣍' => '𑢭', '𑣎' => '𑢮', '𑣏' => '𑢯', '𑣐' => '𑢰', '𑣑' => '𑢱', '𑣒' => '𑢲', '𑣓' => '𑢳', '𑣔' => '𑢴', '𑣕' => '𑢵', '𑣖' => '𑢶', '𑣗' => '𑢷', '𑣘' => '𑢸', '𑣙' => '𑢹', '𑣚' => '𑢺', '𑣛' => '𑢻', '𑣜' => '𑢼', '𑣝' => '𑢽', '𑣞' => '𑢾', '𑣟' => '𑢿', '𖹠' => '𖹀', '𖹡' => '𖹁', '𖹢' => '𖹂', '𖹣' => '𖹃', '𖹤' => '𖹄', '𖹥' => '𖹅', '𖹦' => '𖹆', '𖹧' => '𖹇', '𖹨' => '𖹈', '𖹩' => '𖹉', '𖹪' => '𖹊', '𖹫' => '𖹋', '𖹬' => '𖹌', '𖹭' => '𖹍', '𖹮' => '𖹎', '𖹯' => '𖹏', '𖹰' => '𖹐', '𖹱' => '𖹑', '𖹲' => '𖹒', '𖹳' => '𖹓', '𖹴' => '𖹔', '𖹵' => '𖹕', '𖹶' => '𖹖', '𖹷' => '𖹗', '𖹸' => '𖹘', '𖹹' => '𖹙', '𖹺' => '𖹚', '𖹻' => '𖹛', '𖹼' => '𖹜', '𖹽' => '𖹝', '𖹾' => '𖹞', '𖹿' => '𖹟', '𞤢' => '𞤀', '𞤣' => '𞤁', '𞤤' => '𞤂', '𞤥' => '𞤃', '𞤦' => '𞤄', '𞤧' => '𞤅', '𞤨' => '𞤆', '𞤩' => '𞤇', '𞤪' => '𞤈', '𞤫' => '𞤉', '𞤬' => '𞤊', '𞤭' => '𞤋', '𞤮' => '𞤌', '𞤯' => '𞤍', '𞤰' => '𞤎', '𞤱' => '𞤏', '𞤲' => '𞤐', '𞤳' => '𞤑', '𞤴' => '𞤒', '𞤵' => '𞤓', '𞤶' => '𞤔', '𞤷' => '𞤕', '𞤸' => '𞤖', '𞤹' => '𞤗', '𞤺' => '𞤘', '𞤻' => '𞤙', '𞤼' => '𞤚', '𞤽' => '𞤛', '𞤾' => '𞤜', '𞤿' => '𞤝', '𞥀' => '𞤞', '𞥁' => '𞤟', '𞥂' => '𞤠', '𞥃' => '𞤡', 'ß' => 'SS', 'ff' => 'FF', 'fi' => 'FI', 'fl' => 'FL', 'ffi' => 'FFI', 'ffl' => 'FFL', 'ſt' => 'ST', 'st' => 'ST', 'և' => 'ԵՒ', 'ﬓ' => 'ՄՆ', 'ﬔ' => 'ՄԵ', 'ﬕ' => 'ՄԻ', 'ﬖ' => 'ՎՆ', 'ﬗ' => 'ՄԽ', 'ʼn' => 'ʼN', 'ΐ' => 'Ϊ́', 'ΰ' => 'Ϋ́', 'ǰ' => 'J̌', 'ẖ' => 'H̱', 'ẗ' => 'T̈', 'ẘ' => 'W̊', 'ẙ' => 'Y̊', 'ẚ' => 'Aʾ', 'ὐ' => 'Υ̓', 'ὒ' => 'Υ̓̀', 'ὔ' => 'Υ̓́', 'ὖ' => 'Υ̓͂', 'ᾶ' => 'Α͂', 'ῆ' => 'Η͂', 'ῒ' => 'Ϊ̀', 'ΐ' => 'Ϊ́', 'ῖ' => 'Ι͂', 'ῗ' => 'Ϊ͂', 'ῢ' => 'Ϋ̀', 'ΰ' => 'Ϋ́', 'ῤ' => 'Ρ̓', 'ῦ' => 'Υ͂', 'ῧ' => 'Ϋ͂', 'ῶ' => 'Ω͂', 'ᾈ' => 'ἈΙ', 'ᾉ' => 'ἉΙ', 'ᾊ' => 'ἊΙ', 'ᾋ' => 'ἋΙ', 'ᾌ' => 'ἌΙ', 'ᾍ' => 'ἍΙ', 'ᾎ' => 'ἎΙ', 'ᾏ' => 'ἏΙ', 'ᾘ' => 'ἨΙ', 'ᾙ' => 'ἩΙ', 'ᾚ' => 'ἪΙ', 'ᾛ' => 'ἫΙ', 'ᾜ' => 'ἬΙ', 'ᾝ' => 'ἭΙ', 'ᾞ' => 'ἮΙ', 'ᾟ' => 'ἯΙ', 'ᾨ' => 'ὨΙ', 'ᾩ' => 'ὩΙ', 'ᾪ' => 'ὪΙ', 'ᾫ' => 'ὫΙ', 'ᾬ' => 'ὬΙ', 'ᾭ' => 'ὭΙ', 'ᾮ' => 'ὮΙ', 'ᾯ' => 'ὯΙ', 'ᾼ' => 'ΑΙ', 'ῌ' => 'ΗΙ', 'ῼ' => 'ΩΙ', 'ᾲ' => 'ᾺΙ', 'ᾴ' => 'ΆΙ', 'ῂ' => 'ῊΙ', 'ῄ' => 'ΉΙ', 'ῲ' => 'ῺΙ', 'ῴ' => 'ΏΙ', 'ᾷ' => 'Α͂Ι', 'ῇ' => 'Η͂Ι', 'ῷ' => 'Ω͂Ι'); diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap.php index ecf1a0352..ff51ae079 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap.php +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -136,6 +136,27 @@ function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstrin function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } } +if (!function_exists('mb_ucfirst')) { + function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); } +} + +if (!function_exists('mb_lcfirst')) { + function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } +} + +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap80.php b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap80.php index e5d45a627..9226d5df5 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap80.php +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -144,7 +144,7 @@ function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = fa } if (!function_exists('mb_get_info')) { /** - * @return mixed[]|int|string|false + * @return mixed[]|int|string|false|null */ function mb_get_info(?string $type = 'all') { return p\Mbstring::mb_get_info((string) $type); } } @@ -203,6 +203,26 @@ function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = nul function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } } +if (!function_exists('mb_ucfirst')) { + function mb_ucfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); } +} + +if (!function_exists('mb_lcfirst')) { + function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } +} + +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/composer.json b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/composer.json index e5067e8ab..38d53f819 100644 --- a/vendor/rector/rector/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/rector/rector/vendor/symfony/polyfill-mbstring/composer.json @@ -22,7 +22,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/ExceptionInterface.php b/vendor/rector/rector/vendor/symfony/process/Exception/ExceptionInterface.php index 6b692013c..44fac05e9 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/ExceptionInterface.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/ExceptionInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; /** * Marker Interface for the Process Component. diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/InvalidArgumentException.php b/vendor/rector/rector/vendor/symfony/process/Exception/InvalidArgumentException.php index 9f232814c..7790c527d 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/InvalidArgumentException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/InvalidArgumentException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; /** * InvalidArgumentException for the Process Component. diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/LogicException.php b/vendor/rector/rector/vendor/symfony/process/Exception/LogicException.php index e8025ba7d..0820de6f4 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/LogicException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/LogicException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; /** * LogicException for the Process Component. diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/ProcessFailedException.php b/vendor/rector/rector/vendor/symfony/process/Exception/ProcessFailedException.php index 07bff020b..d5f9b3d23 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/ProcessFailedException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/ProcessFailedException.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * Exception for failed processes. * diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/ProcessSignaledException.php b/vendor/rector/rector/vendor/symfony/process/Exception/ProcessSignaledException.php index f62071bd2..01d32617e 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/ProcessSignaledException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/ProcessSignaledException.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * Exception that is thrown when a process has been signaled. * diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/ProcessTimedOutException.php b/vendor/rector/rector/vendor/symfony/process/Exception/ProcessTimedOutException.php index 4ef9f9401..46c43b5fd 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/ProcessTimedOutException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/ProcessTimedOutException.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * Exception that is thrown when a process times out. * diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/RunProcessFailedException.php b/vendor/rector/rector/vendor/symfony/process/Exception/RunProcessFailedException.php index ae557bd29..625a2a290 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/RunProcessFailedException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/RunProcessFailedException.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; -use RectorPrefix202405\Symfony\Component\Process\Messenger\RunProcessContext; +use RectorPrefix202410\Symfony\Component\Process\Messenger\RunProcessContext; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/process/Exception/RuntimeException.php b/vendor/rector/rector/vendor/symfony/process/Exception/RuntimeException.php index 09dc8712d..215092ca5 100644 --- a/vendor/rector/rector/vendor/symfony/process/Exception/RuntimeException.php +++ b/vendor/rector/rector/vendor/symfony/process/Exception/RuntimeException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Exception; +namespace RectorPrefix202410\Symfony\Component\Process\Exception; /** * RuntimeException for the Process Component. diff --git a/vendor/rector/rector/vendor/symfony/process/ExecutableFinder.php b/vendor/rector/rector/vendor/symfony/process/ExecutableFinder.php index b3d859fd8..777769401 100644 --- a/vendor/rector/rector/vendor/symfony/process/ExecutableFinder.php +++ b/vendor/rector/rector/vendor/symfony/process/ExecutableFinder.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; /** * Generic executable finder. diff --git a/vendor/rector/rector/vendor/symfony/process/InputStream.php b/vendor/rector/rector/vendor/symfony/process/InputStream.php index 4fea67fe1..510ed1ffe 100644 --- a/vendor/rector/rector/vendor/symfony/process/InputStream.php +++ b/vendor/rector/rector/vendor/symfony/process/InputStream.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; -use RectorPrefix202405\Symfony\Component\Process\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Process\Exception\RuntimeException; /** * Provides a way to continuously write to the input of a Process until the InputStream is closed. * diff --git a/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessContext.php b/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessContext.php index 83feefa87..cbbadec86 100644 --- a/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessContext.php +++ b/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessContext.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Messenger; +namespace RectorPrefix202410\Symfony\Component\Process\Messenger; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessage.php b/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessage.php index 685e4086d..50ba9251d 100644 --- a/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessage.php +++ b/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessage.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Messenger; +namespace RectorPrefix202410\Symfony\Component\Process\Messenger; /** * @author Kevin Bond diff --git a/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessageHandler.php b/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessageHandler.php index 4f0831c13..f1a5486c2 100644 --- a/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessageHandler.php +++ b/vendor/rector/rector/vendor/symfony/process/Messenger/RunProcessMessageHandler.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Messenger; +namespace RectorPrefix202410\Symfony\Component\Process\Messenger; -use RectorPrefix202405\Symfony\Component\Process\Exception\ProcessFailedException; -use RectorPrefix202405\Symfony\Component\Process\Exception\RunProcessFailedException; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Exception\ProcessFailedException; +use RectorPrefix202410\Symfony\Component\Process\Exception\RunProcessFailedException; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * @author Kevin Bond */ diff --git a/vendor/rector/rector/vendor/symfony/process/PhpExecutableFinder.php b/vendor/rector/rector/vendor/symfony/process/PhpExecutableFinder.php index 3a8557e4b..3556159d3 100644 --- a/vendor/rector/rector/vendor/symfony/process/PhpExecutableFinder.php +++ b/vendor/rector/rector/vendor/symfony/process/PhpExecutableFinder.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; /** * An executable finder specifically designed for the PHP executable. diff --git a/vendor/rector/rector/vendor/symfony/process/PhpProcess.php b/vendor/rector/rector/vendor/symfony/process/PhpProcess.php index 3f7865018..44fdbe777 100644 --- a/vendor/rector/rector/vendor/symfony/process/PhpProcess.php +++ b/vendor/rector/rector/vendor/symfony/process/PhpProcess.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; -use RectorPrefix202405\Symfony\Component\Process\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Process\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Process\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Process\Exception\RuntimeException; /** * PhpProcess runs a PHP script in an independent process. * diff --git a/vendor/rector/rector/vendor/symfony/process/PhpSubprocess.php b/vendor/rector/rector/vendor/symfony/process/PhpSubprocess.php index 2d631d143..c795af560 100644 --- a/vendor/rector/rector/vendor/symfony/process/PhpSubprocess.php +++ b/vendor/rector/rector/vendor/symfony/process/PhpSubprocess.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; -use RectorPrefix202405\Symfony\Component\Process\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Process\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Process\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Process\Exception\RuntimeException; /** * PhpSubprocess runs a PHP command as a subprocess while keeping the original php.ini settings. * @@ -96,7 +96,7 @@ private function writeTmpIni(array $iniFiles, string $tmpDir) : string throw new RuntimeException('Unable to read ini: ' . $file); } // Check and remove directives after HOST and PATH sections - if (\preg_match('/^\\s*\\[(?:PATH|HOST)\\s*=/mi', $data, $matches)) { + if (\preg_match('/^\\s*\\[(?:PATH|HOST)\\s*=/mi', $data, $matches, \PREG_OFFSET_CAPTURE)) { $data = \substr($data, 0, $matches[0][1]); } $content .= $data . "\n"; diff --git a/vendor/rector/rector/vendor/symfony/process/Pipes/AbstractPipes.php b/vendor/rector/rector/vendor/symfony/process/Pipes/AbstractPipes.php index 78f7e2e12..82acc4568 100644 --- a/vendor/rector/rector/vendor/symfony/process/Pipes/AbstractPipes.php +++ b/vendor/rector/rector/vendor/symfony/process/Pipes/AbstractPipes.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Pipes; +namespace RectorPrefix202410\Symfony\Component\Process\Pipes; -use RectorPrefix202405\Symfony\Component\Process\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Process\Exception\InvalidArgumentException; /** * @author Romain Neutron * diff --git a/vendor/rector/rector/vendor/symfony/process/Pipes/PipesInterface.php b/vendor/rector/rector/vendor/symfony/process/Pipes/PipesInterface.php index a1f5d1b81..d0dfda0a5 100644 --- a/vendor/rector/rector/vendor/symfony/process/Pipes/PipesInterface.php +++ b/vendor/rector/rector/vendor/symfony/process/Pipes/PipesInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Pipes; +namespace RectorPrefix202410\Symfony\Component\Process\Pipes; /** * PipesInterface manages descriptors and pipes for the use of proc_open. diff --git a/vendor/rector/rector/vendor/symfony/process/Pipes/UnixPipes.php b/vendor/rector/rector/vendor/symfony/process/Pipes/UnixPipes.php index 5243994dc..b9cdc37f9 100644 --- a/vendor/rector/rector/vendor/symfony/process/Pipes/UnixPipes.php +++ b/vendor/rector/rector/vendor/symfony/process/Pipes/UnixPipes.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Pipes; +namespace RectorPrefix202410\Symfony\Component\Process\Pipes; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * UnixPipes implementation uses unix pipes as handles. * diff --git a/vendor/rector/rector/vendor/symfony/process/Pipes/WindowsPipes.php b/vendor/rector/rector/vendor/symfony/process/Pipes/WindowsPipes.php index 9eb88ad97..043ac3118 100644 --- a/vendor/rector/rector/vendor/symfony/process/Pipes/WindowsPipes.php +++ b/vendor/rector/rector/vendor/symfony/process/Pipes/WindowsPipes.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process\Pipes; +namespace RectorPrefix202410\Symfony\Component\Process\Pipes; -use RectorPrefix202405\Symfony\Component\Process\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Process\Process; +use RectorPrefix202410\Symfony\Component\Process\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Process\Process; /** * WindowsPipes implementation uses temporary files as handles. * diff --git a/vendor/rector/rector/vendor/symfony/process/Process.php b/vendor/rector/rector/vendor/symfony/process/Process.php index e94c7bcc4..88bb22419 100644 --- a/vendor/rector/rector/vendor/symfony/process/Process.php +++ b/vendor/rector/rector/vendor/symfony/process/Process.php @@ -8,16 +8,16 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; -use RectorPrefix202405\Symfony\Component\Process\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Process\Exception\LogicException; -use RectorPrefix202405\Symfony\Component\Process\Exception\ProcessFailedException; -use RectorPrefix202405\Symfony\Component\Process\Exception\ProcessSignaledException; -use RectorPrefix202405\Symfony\Component\Process\Exception\ProcessTimedOutException; -use RectorPrefix202405\Symfony\Component\Process\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Process\Pipes\UnixPipes; -use RectorPrefix202405\Symfony\Component\Process\Pipes\WindowsPipes; +use RectorPrefix202410\Symfony\Component\Process\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Process\Exception\LogicException; +use RectorPrefix202410\Symfony\Component\Process\Exception\ProcessFailedException; +use RectorPrefix202410\Symfony\Component\Process\Exception\ProcessSignaledException; +use RectorPrefix202410\Symfony\Component\Process\Exception\ProcessTimedOutException; +use RectorPrefix202410\Symfony\Component\Process\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Process\Pipes\UnixPipes; +use RectorPrefix202410\Symfony\Component\Process\Pipes\WindowsPipes; /** * Process is a thin wrapper around proc_* functions to easily * start independent PHP processes. @@ -378,7 +378,7 @@ public function start(?callable $callback = null, array $env = []) throw new RuntimeException(\sprintf('The provided cwd "%s" does not exist.', $this->cwd)); } $process = @\proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options); - if (!\is_resource($process)) { + if (!$process) { throw new RuntimeException('Unable to launch a new process.'); } $this->process = $process; @@ -1117,7 +1117,7 @@ public function setOptions(array $options) public static function isTtySupported() : bool { static $isTtySupported; - return $isTtySupported = $isTtySupported ?? '/' === \DIRECTORY_SEPARATOR && \stream_isatty(\STDOUT); + return $isTtySupported = $isTtySupported ?? '/' === \DIRECTORY_SEPARATOR && \stream_isatty(\STDOUT) && @\is_writable('/dev/tty'); } /** * Returns whether PTY is supported on the current operating system. @@ -1278,8 +1278,9 @@ private function readPipes(bool $blocking, bool $close) : void private function close() : int { $this->processPipes->close(); - if (\is_resource($this->process)) { + if ($this->process) { \proc_close($this->process); + $this->process = null; } $this->exitcode = $this->processInformation['exitcode']; $this->status = self::STATUS_TERMINATED; diff --git a/vendor/rector/rector/vendor/symfony/process/ProcessUtils.php b/vendor/rector/rector/vendor/symfony/process/ProcessUtils.php index 3be6dfd31..a9576dcd2 100644 --- a/vendor/rector/rector/vendor/symfony/process/ProcessUtils.php +++ b/vendor/rector/rector/vendor/symfony/process/ProcessUtils.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Process; +namespace RectorPrefix202410\Symfony\Component\Process; -use RectorPrefix202405\Symfony\Component\Process\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Process\Exception\InvalidArgumentException; /** * ProcessUtils is a bunch of utility methods. * diff --git a/vendor/rector/rector/vendor/symfony/process/composer.json b/vendor/rector/rector/vendor/symfony/process/composer.json index 669927a09..b8c6f7b6b 100644 --- a/vendor/rector/rector/vendor/symfony/process/composer.json +++ b/vendor/rector/rector/vendor/symfony/process/composer.json @@ -20,7 +20,7 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Process\\": "" + "RectorPrefix202410\\Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "\/Tests\/" diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/Required.php b/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/Required.php index 6315c4a40..7cb46f2a3 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/Required.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/Required.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service\Attribute; +namespace RectorPrefix202410\Symfony\Contracts\Service\Attribute; /** * A required dependency. diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/SubscribedService.php b/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/SubscribedService.php index 5053cbd6e..aa88b88a0 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/SubscribedService.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/Attribute/SubscribedService.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service\Attribute; +namespace RectorPrefix202410\Symfony\Contracts\Service\Attribute; -use RectorPrefix202405\Symfony\Contracts\Service\ServiceMethodsSubscriberTrait; -use RectorPrefix202405\Symfony\Contracts\Service\ServiceSubscriberInterface; +use RectorPrefix202410\Symfony\Contracts\Service\ServiceMethodsSubscriberTrait; +use RectorPrefix202410\Symfony\Contracts\Service\ServiceSubscriberInterface; /** * For use as the return value for {@see ServiceSubscriberInterface}. * diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ResetInterface.php b/vendor/rector/rector/vendor/symfony/service-contracts/ResetInterface.php index 63083f469..c0542820d 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ResetInterface.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ResetInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; /** * Provides a way to reset an object to its initial state. diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceCollectionInterface.php b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceCollectionInterface.php index 3e25b305e..612d029a0 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceCollectionInterface.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceCollectionInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; /** * A ServiceProviderInterface that is also countable and iterable. diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceLocatorTrait.php b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceLocatorTrait.php index eddc45e4b..3c0d9bb1c 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceLocatorTrait.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceLocatorTrait.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; -use RectorPrefix202405\Psr\Container\ContainerExceptionInterface; -use RectorPrefix202405\Psr\Container\NotFoundExceptionInterface; +use RectorPrefix202410\Psr\Container\ContainerExceptionInterface; +use RectorPrefix202410\Psr\Container\NotFoundExceptionInterface; // Help opcache.preload discover always-needed symbols \class_exists(ContainerExceptionInterface::class); \class_exists(NotFoundExceptionInterface::class); diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php index 8ed425360..5b233e1ad 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; -use RectorPrefix202405\Psr\Container\ContainerInterface; -use RectorPrefix202405\Symfony\Contracts\Service\Attribute\Required; -use RectorPrefix202405\Symfony\Contracts\Service\Attribute\SubscribedService; +use RectorPrefix202410\Psr\Container\ContainerInterface; +use RectorPrefix202410\Symfony\Contracts\Service\Attribute\Required; +use RectorPrefix202410\Symfony\Contracts\Service\Attribute\SubscribedService; /** * Implementation of ServiceSubscriberInterface that determines subscribed services * from methods that have the #[SubscribedService] attribute. diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceProviderInterface.php b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceProviderInterface.php index a8caacbf8..9c543ff90 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceProviderInterface.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceProviderInterface.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; -use RectorPrefix202405\Psr\Container\ContainerInterface; +use RectorPrefix202410\Psr\Container\ContainerInterface; /** * A ServiceProviderInterface exposes the identifiers and the types of services provided by a container. * diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberInterface.php b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberInterface.php index bd95e9b20..9f504c3d4 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberInterface.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberInterface.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; -use RectorPrefix202405\Symfony\Contracts\Service\Attribute\SubscribedService; +use RectorPrefix202410\Symfony\Contracts\Service\Attribute\SubscribedService; /** * A ServiceSubscriber exposes its dependencies via the static {@link getSubscribedServices} method. * diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberTrait.php b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberTrait.php index e778dc216..9d7293a37 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberTrait.php +++ b/vendor/rector/rector/vendor/symfony/service-contracts/ServiceSubscriberTrait.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Contracts\Service; +namespace RectorPrefix202410\Symfony\Contracts\Service; -use RectorPrefix202405\Psr\Container\ContainerInterface; -use RectorPrefix202405\Symfony\Contracts\Service\Attribute\Required; -use RectorPrefix202405\Symfony\Contracts\Service\Attribute\SubscribedService; +use RectorPrefix202410\Psr\Container\ContainerInterface; +use RectorPrefix202410\Symfony\Contracts\Service\Attribute\Required; +use RectorPrefix202410\Symfony\Contracts\Service\Attribute\SubscribedService; trigger_deprecation('symfony/contracts', 'v3.5', '"%s" is deprecated, use "ServiceMethodsSubscriberTrait" instead.', ServiceSubscriberTrait::class); /** * Implementation of ServiceSubscriberInterface that determines subscribed services diff --git a/vendor/rector/rector/vendor/symfony/service-contracts/composer.json b/vendor/rector/rector/vendor/symfony/service-contracts/composer.json index 0724723da..77089faf8 100644 --- a/vendor/rector/rector/vendor/symfony/service-contracts/composer.json +++ b/vendor/rector/rector/vendor/symfony/service-contracts/composer.json @@ -32,7 +32,7 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Contracts\\Service\\": "" + "RectorPrefix202410\\Symfony\\Contracts\\Service\\": "" }, "exclude-from-classmap": [ "\/Test\/" diff --git a/vendor/rector/rector/vendor/symfony/yaml/Command/LintCommand.php b/vendor/rector/rector/vendor/symfony/yaml/Command/LintCommand.php index 500914e2f..aeea111d7 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Command/LintCommand.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Command/LintCommand.php @@ -8,23 +8,23 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml\Command; +namespace RectorPrefix202410\Symfony\Component\Yaml\Command; -use RectorPrefix202405\Symfony\Component\Console\Attribute\AsCommand; -use RectorPrefix202405\Symfony\Component\Console\CI\GithubActionReporter; -use RectorPrefix202405\Symfony\Component\Console\Command\Command; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionInput; -use RectorPrefix202405\Symfony\Component\Console\Completion\CompletionSuggestions; -use RectorPrefix202405\Symfony\Component\Console\Exception\InvalidArgumentException; -use RectorPrefix202405\Symfony\Component\Console\Exception\RuntimeException; -use RectorPrefix202405\Symfony\Component\Console\Input\InputArgument; -use RectorPrefix202405\Symfony\Component\Console\Input\InputInterface; -use RectorPrefix202405\Symfony\Component\Console\Input\InputOption; -use RectorPrefix202405\Symfony\Component\Console\Output\OutputInterface; -use RectorPrefix202405\Symfony\Component\Console\Style\SymfonyStyle; -use RectorPrefix202405\Symfony\Component\Yaml\Exception\ParseException; -use RectorPrefix202405\Symfony\Component\Yaml\Parser; -use RectorPrefix202405\Symfony\Component\Yaml\Yaml; +use RectorPrefix202410\Symfony\Component\Console\Attribute\AsCommand; +use RectorPrefix202410\Symfony\Component\Console\CI\GithubActionReporter; +use RectorPrefix202410\Symfony\Component\Console\Command\Command; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionInput; +use RectorPrefix202410\Symfony\Component\Console\Completion\CompletionSuggestions; +use RectorPrefix202410\Symfony\Component\Console\Exception\InvalidArgumentException; +use RectorPrefix202410\Symfony\Component\Console\Exception\RuntimeException; +use RectorPrefix202410\Symfony\Component\Console\Input\InputArgument; +use RectorPrefix202410\Symfony\Component\Console\Input\InputInterface; +use RectorPrefix202410\Symfony\Component\Console\Input\InputOption; +use RectorPrefix202410\Symfony\Component\Console\Output\OutputInterface; +use RectorPrefix202410\Symfony\Component\Console\Style\SymfonyStyle; +use RectorPrefix202410\Symfony\Component\Yaml\Exception\ParseException; +use RectorPrefix202410\Symfony\Component\Yaml\Parser; +use RectorPrefix202410\Symfony\Component\Yaml\Yaml; /** * Validates YAML files syntax and outputs encountered errors. * @@ -59,10 +59,7 @@ public function __construct(?string $name = null, ?callable $directoryIteratorPr $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : \Closure::fromCallable($directoryIteratorProvider); $this->isReadableProvider = null === $isReadableProvider ? null : \Closure::fromCallable($isReadableProvider); } - /** - * @return void - */ - protected function configure() + protected function configure() : void { $this->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN')->addOption('format', null, InputOption::VALUE_REQUIRED, \sprintf('The output format ("%s")', \implode('", "', $this->getAvailableFormatOptions())))->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude')->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null)->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT diff --git a/vendor/rector/rector/vendor/symfony/yaml/Dumper.php b/vendor/rector/rector/vendor/symfony/yaml/Dumper.php index f44168233..140ad1d3b 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Dumper.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Dumper.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml; +namespace RectorPrefix202410\Symfony\Component\Yaml; -use RectorPrefix202405\Symfony\Component\Yaml\Tag\TaggedValue; +use RectorPrefix202410\Symfony\Component\Yaml\Tag\TaggedValue; /** * Dumper dumps PHP variables to YAML strings. * @@ -46,9 +46,9 @@ public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0) : $prefix = $indent ? \str_repeat(' ', $indent) : ''; $dumpObjectAsInlineMap = \true; if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { - $dumpObjectAsInlineMap = empty((array) $input); + $dumpObjectAsInlineMap = !(array) $input; } - if ($inline <= 0 || !\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap || empty($input)) { + if ($inline <= 0 || !\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap || !$input) { $output .= $prefix . Inline::dump($input, $flags); } elseif ($input instanceof TaggedValue) { $output .= $this->dumpTaggedValue($input, $inline, $indent, $flags, $prefix); @@ -100,9 +100,9 @@ public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0) : } $dumpObjectAsInlineMap = \true; if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { - $dumpObjectAsInlineMap = empty((array) $value); + $dumpObjectAsInlineMap = !(array) $value; } - $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); + $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || !$value; $output .= \sprintf('%s%s%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags) . ':' : '-', $willBeInlined ? ' ' : "\n", $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags)) . ($willBeInlined ? "\n" : ''); } } @@ -132,7 +132,7 @@ private function getBlockIndentationIndicator(string $value) : string // http://www.yaml.org/spec/1.2/spec.html#id2793979 foreach ($lines as $line) { if ('' !== \trim($line, ' ')) { - return ' ' === \substr($line, 0, 1) ? (string) $this->indentation : ''; + return \strncmp($line, ' ', \strlen(' ')) === 0 ? (string) $this->indentation : ''; } } return ''; diff --git a/vendor/rector/rector/vendor/symfony/yaml/Escaper.php b/vendor/rector/rector/vendor/symfony/yaml/Escaper.php index 531667c96..e8982a504 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Escaper.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Escaper.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml; +namespace RectorPrefix202410\Symfony\Component\Yaml; /** * Escaper encapsulates escaping rules for single and double-quoted @@ -60,7 +60,7 @@ public static function requiresSingleQuoting(string $value) : bool } // Determines if the PHP value contains any single characters that would // cause it to require single quoting in YAML. - return 0 < \preg_match('/[ \\s \' " \\: \\{ \\} \\[ \\] , & \\* \\# \\?] | \\A[ \\- ? | < > = ! % @ ` \\p{Zs}]/xu', $value); + return 0 < \preg_match('/[\\s\'"\\:\\{\\}\\[\\],&\\*\\#\\?] | \\A[\\-?|<>=!%@`\\p{Zs}]/xu', $value); } /** * Escapes and surrounds a PHP value with single quotes. diff --git a/vendor/rector/rector/vendor/symfony/yaml/Exception/DumpException.php b/vendor/rector/rector/vendor/symfony/yaml/Exception/DumpException.php index 29c8a8c60..bbc45c067 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Exception/DumpException.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Exception/DumpException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml\Exception; +namespace RectorPrefix202410\Symfony\Component\Yaml\Exception; /** * Exception class thrown when an error occurs during dumping. diff --git a/vendor/rector/rector/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/rector/rector/vendor/symfony/yaml/Exception/ExceptionInterface.php index 52e56acc2..927eb49ba 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Exception/ExceptionInterface.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Exception/ExceptionInterface.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml\Exception; +namespace RectorPrefix202410\Symfony\Component\Yaml\Exception; /** * Exception interface for all exceptions thrown by the component. diff --git a/vendor/rector/rector/vendor/symfony/yaml/Exception/ParseException.php b/vendor/rector/rector/vendor/symfony/yaml/Exception/ParseException.php index 6945ddb0c..e20e1d7a1 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Exception/ParseException.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Exception/ParseException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml\Exception; +namespace RectorPrefix202410\Symfony\Component\Yaml\Exception; /** * Exception class thrown when an error occurs during parsing. @@ -18,33 +18,33 @@ class ParseException extends RuntimeException { /** - * @var string|null + * @var string */ - private $parsedFile; + private $rawMessage; /** * @var int */ - private $parsedLine; + private $parsedLine = -1; /** * @var string|null */ private $snippet; /** - * @var string + * @var string|null */ - private $rawMessage; + private $parsedFile; /** - * @param string $message The error message + * @param string $rawMessage The error message * @param int $parsedLine The line where the error occurred * @param string|null $snippet The snippet of code near the problem * @param string|null $parsedFile The file name where the error occurred */ - public function __construct(string $message, int $parsedLine = -1, ?string $snippet = null, ?string $parsedFile = null, ?\Throwable $previous = null) + public function __construct(string $rawMessage, int $parsedLine = -1, ?string $snippet = null, ?string $parsedFile = null, ?\Throwable $previous = null) { - $this->parsedFile = $parsedFile; + $this->rawMessage = $rawMessage; $this->parsedLine = $parsedLine; $this->snippet = $snippet; - $this->rawMessage = $message; + $this->parsedFile = $parsedFile; $this->updateRepr(); parent::__construct($this->message, 0, $previous); } @@ -57,10 +57,8 @@ public function getSnippet() : string } /** * Sets the snippet of code near the error. - * - * @return void */ - public function setSnippet(string $snippet) + public function setSnippet(string $snippet) : void { $this->snippet = $snippet; $this->updateRepr(); @@ -76,10 +74,8 @@ public function getParsedFile() : string } /** * Sets the filename where the error occurred. - * - * @return void */ - public function setParsedFile(string $parsedFile) + public function setParsedFile(string $parsedFile) : void { $this->parsedFile = $parsedFile; $this->updateRepr(); @@ -93,10 +89,8 @@ public function getParsedLine() : int } /** * Sets the line where the error occurred. - * - * @return void */ - public function setParsedLine(int $parsedLine) + public function setParsedLine(int $parsedLine) : void { $this->parsedLine = $parsedLine; $this->updateRepr(); diff --git a/vendor/rector/rector/vendor/symfony/yaml/Exception/RuntimeException.php b/vendor/rector/rector/vendor/symfony/yaml/Exception/RuntimeException.php index 32b266148..3fa116ccd 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Exception/RuntimeException.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Exception/RuntimeException.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml\Exception; +namespace RectorPrefix202410\Symfony\Component\Yaml\Exception; /** * Exception class thrown when an error occurs during parsing. diff --git a/vendor/rector/rector/vendor/symfony/yaml/Inline.php b/vendor/rector/rector/vendor/symfony/yaml/Inline.php index fffdb5506..f100ad1c3 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Inline.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Inline.php @@ -8,11 +8,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml; +namespace RectorPrefix202410\Symfony\Component\Yaml; -use RectorPrefix202405\Symfony\Component\Yaml\Exception\DumpException; -use RectorPrefix202405\Symfony\Component\Yaml\Exception\ParseException; -use RectorPrefix202405\Symfony\Component\Yaml\Tag\TaggedValue; +use RectorPrefix202410\Symfony\Component\Yaml\Exception\DumpException; +use RectorPrefix202410\Symfony\Component\Yaml\Exception\ParseException; +use RectorPrefix202410\Symfony\Component\Yaml\Tag\TaggedValue; /** * Inline implements a YAML parser/dumper for the YAML inline syntax. * @@ -125,7 +125,7 @@ public static function dump($value, int $flags = 0) : string } })()); case $value instanceof \UnitEnum: - return \sprintf('!php/const %s::%s', \get_class($value), $value->name); + return \sprintf('!php/enum %s::%s', \get_class($value), $value->name); case \is_object($value): if ($value instanceof TaggedValue) { return '!' . $value->getTag() . ' ' . self::dump($value->getValue(), $flags); @@ -332,11 +332,17 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, $len = \strlen($sequence); ++$i; // [foo, bar, ...] + $lastToken = null; while ($i < $len) { if (']' === $sequence[$i]) { return $output; } if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + if (',' === $sequence[$i] && (null === $lastToken || 'separator' === $lastToken)) { + $output[] = null; + } elseif (',' === $sequence[$i]) { + $lastToken = 'separator'; + } ++$i; continue; } @@ -372,6 +378,7 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, $value = new TaggedValue($tag, $value); } $output[] = $value; + $lastToken = 'value'; ++$i; } throw new ParseException(\sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); @@ -582,22 +589,27 @@ private static function evaluateScalar(string $scalar, int $flags, array &$refer throw new ParseException('Missing value for tag "!php/enum".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); } $i = 0; - $enum = self::parseScalar(\substr($scalar, 10), 0, null, $i, \false); - if ($useValue = \substr_compare($enum, '->value', -\strlen('->value')) === 0) { - $enum = \substr($enum, 0, -7); - } - if (!\defined($enum)) { + $enumName = self::parseScalar(\substr($scalar, 10), 0, null, $i, \false); + $useName = \strpos($enumName, '::') !== \false; + $enum = $useName ? \strstr($enumName, '::', \true) : $enumName; + if (!\class_exists($enum)) { throw new ParseException(\sprintf('The enum "%s" is not defined.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); } - $value = \constant($enum); - if (!$value instanceof \UnitEnum) { - throw new ParseException(\sprintf('The string "%s" is not the name of a valid enum.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + if (!$useName) { + return $enum::cases(); + } + if ($useValue = \substr_compare($enumName, '->value', -\strlen('->value')) === 0) { + $enumName = \substr($enumName, 0, -7); } + if (!\defined($enumName)) { + throw new ParseException(\sprintf('The string "%s" is not the name of a valid enum.', $enumName), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + $value = \constant($enumName); if (!$useValue) { return $value; } if (!$value instanceof \BackedEnum) { - throw new ParseException(\sprintf('The enum "%s" defines no value next to its name.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + throw new ParseException(\sprintf('The enum "%s" defines no value next to its name.', $enumName), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); } return $value->value; } @@ -638,8 +650,13 @@ private static function evaluateScalar(string $scalar, int $flags, array &$refer case Parser::preg_match('/^(-|\\+)?[0-9][0-9_]*(\\.[0-9_]+)?$/', $scalar): return (float) \str_replace('_', '', $scalar); case Parser::preg_match(self::getTimestampRegex(), $scalar): - // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. - $time = new \DateTimeImmutable($scalar, new \DateTimeZone('UTC')); + try { + // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. + $time = new \DateTimeImmutable($scalar, new \DateTimeZone('UTC')); + } catch (\Exception $e) { + // Some dates accepted by the regex are not valid dates. + throw new ParseException(\sprintf('The date "%s" could not be parsed as it is an invalid date.', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename, $e); + } if (Yaml::PARSE_DATETIME & $flags) { return $time; } diff --git a/vendor/rector/rector/vendor/symfony/yaml/Parser.php b/vendor/rector/rector/vendor/symfony/yaml/Parser.php index b69d04966..7896c85fa 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Parser.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Parser.php @@ -8,10 +8,10 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml; +namespace RectorPrefix202410\Symfony\Component\Yaml; -use RectorPrefix202405\Symfony\Component\Yaml\Exception\ParseException; -use RectorPrefix202405\Symfony\Component\Yaml\Tag\TaggedValue; +use RectorPrefix202410\Symfony\Component\Yaml\Exception\ParseException; +use RectorPrefix202410\Symfony\Component\Yaml\Tag\TaggedValue; /** * Parser parses YAML strings to convert them to PHP arrays. * @@ -199,10 +199,7 @@ private function doParse(string $value, int $flags) $this->refs[$isRef] = \end($data); \array_pop($this->refsBeingParsed); } - } elseif (self::preg_match('#^(?P(?:![^\\s]++\\s++)?(?:' . Inline::REGEX_QUOTED_STRING . '|(?:!?!php/const:)?[^ \'"\\[\\{!].*?)) *\\:(( |\\t)++(?P.+))?$#u', \rtrim($this->currentLine), $values) && (\strpos($values['key'], ' #') === \false || \in_array($values['key'][0], ['"', "'"]))) { - if (\strncmp($values['key'], '!php/const:', \strlen('!php/const:')) === 0) { - trigger_deprecation('symfony/yaml', '6.2', 'YAML syntax for key "%s" is deprecated and replaced by "!php/const %s".', $values['key'], \substr($values['key'], 11)); - } + } elseif (self::preg_match('#^(?P(?:![^\\s]++\\s++)?(?:' . Inline::REGEX_QUOTED_STRING . '|[^ \'"\\[\\{!].*?)) *\\:(( |\\t)++(?P.+))?$#u', \rtrim($this->currentLine), $values) && (\strpos($values['key'], ' #') === \false || \in_array($values['key'][0], ['"', "'"]))) { if ($context && 'sequence' == $context) { throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); } @@ -384,7 +381,7 @@ private function doParse(string $value, int $flags) if ('---' === $this->currentLine) { throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); } - if ($deprecatedUsage = isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1]) { + if (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1]) { throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); } // 1-liner optionally followed by newline(s) @@ -409,7 +406,7 @@ private function doParse(string $value, int $flags) continue; } // If the indentation is not consistent at offset 0, it is to be considered as a ParseError - if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { + if (0 === $this->offset && isset($line[0]) && ' ' === $line[0]) { throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); } if (\strpos($line, ': ') !== \false) { @@ -455,7 +452,7 @@ private function doParse(string $value, int $flags) } $data = $object; } - return empty($data) ? null : $data; + return $data ?: null; } /** * @return mixed diff --git a/vendor/rector/rector/vendor/symfony/yaml/Resources/bin/yaml-lint b/vendor/rector/rector/vendor/symfony/yaml/Resources/bin/yaml-lint index b46716b06..54c8121d7 100755 --- a/vendor/rector/rector/vendor/symfony/yaml/Resources/bin/yaml-lint +++ b/vendor/rector/rector/vendor/symfony/yaml/Resources/bin/yaml-lint @@ -1,6 +1,6 @@ #!/usr/bin/env php */ -use RectorPrefix202405\Symfony\Component\Console\Application; -use RectorPrefix202405\Symfony\Component\Yaml\Command\LintCommand; +use RectorPrefix202410\Symfony\Component\Console\Application; +use RectorPrefix202410\Symfony\Component\Yaml\Command\LintCommand; function includeIfExists(string $file) : bool { return \file_exists($file) && (include $file); diff --git a/vendor/rector/rector/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/rector/rector/vendor/symfony/yaml/Tag/TaggedValue.php index e37e93b11..f8f938430 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Tag/TaggedValue.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Tag/TaggedValue.php @@ -8,7 +8,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml\Tag; +namespace RectorPrefix202410\Symfony\Component\Yaml\Tag; /** * @author Nicolas Grekas diff --git a/vendor/rector/rector/vendor/symfony/yaml/Unescaper.php b/vendor/rector/rector/vendor/symfony/yaml/Unescaper.php index 5a5d6b694..4c584efe3 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Unescaper.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Unescaper.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml; +namespace RectorPrefix202410\Symfony\Component\Yaml; -use RectorPrefix202405\Symfony\Component\Yaml\Exception\ParseException; +use RectorPrefix202410\Symfony\Component\Yaml\Exception\ParseException; /** * Unescaper encapsulates unescaping rules for single and double-quoted * YAML strings. diff --git a/vendor/rector/rector/vendor/symfony/yaml/Yaml.php b/vendor/rector/rector/vendor/symfony/yaml/Yaml.php index 0c50e2bf5..87b94377b 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/Yaml.php +++ b/vendor/rector/rector/vendor/symfony/yaml/Yaml.php @@ -8,9 +8,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace RectorPrefix202405\Symfony\Component\Yaml; +namespace RectorPrefix202410\Symfony\Component\Yaml; -use RectorPrefix202405\Symfony\Component\Yaml\Exception\ParseException; +use RectorPrefix202410\Symfony\Component\Yaml\Exception\ParseException; /** * Yaml offers convenience methods to load and dump YAML. * diff --git a/vendor/rector/rector/vendor/symfony/yaml/composer.json b/vendor/rector/rector/vendor/symfony/yaml/composer.json index 337767920..e9ed9f298 100644 --- a/vendor/rector/rector/vendor/symfony/yaml/composer.json +++ b/vendor/rector/rector/vendor/symfony/yaml/composer.json @@ -16,19 +16,18 @@ } ], "require": { - "php": ">=8.1", - "symfony\/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony\/polyfill-ctype": "^1.8" }, "require-dev": { - "symfony\/console": "^5.4|^6.0|^7.0" + "symfony\/console": "^6.4|^7.0" }, "conflict": { - "symfony\/console": "<5.4" + "symfony\/console": "<6.4" }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symfony\\Component\\Yaml\\": "" + "RectorPrefix202410\\Symfony\\Component\\Yaml\\": "" }, "exclude-from-classmap": [ "\/Tests\/" diff --git a/vendor/rector/rector/vendor/symplify/easy-parallel/composer.json b/vendor/rector/rector/vendor/symplify/easy-parallel/composer.json index 0b6e114b9..0f1fa8d1d 100644 --- a/vendor/rector/rector/vendor/symplify/easy-parallel/composer.json +++ b/vendor/rector/rector/vendor/symplify/easy-parallel/composer.json @@ -20,12 +20,12 @@ }, "autoload": { "psr-4": { - "RectorPrefix202405\\Symplify\\EasyParallel\\": "src" + "RectorPrefix202410\\Symplify\\EasyParallel\\": "src" } }, "autoload-dev": { "psr-4": { - "RectorPrefix202405\\Symplify\\EasyParallel\\Tests\\": "tests" + "RectorPrefix202410\\Symplify\\EasyParallel\\Tests\\": "tests" } }, "scripts": { diff --git a/vendor/rector/rector/vendor/symplify/easy-parallel/config/config.php b/vendor/rector/rector/vendor/symplify/easy-parallel/config/config.php index e90f37a8d..6f9a8c502 100644 --- a/vendor/rector/rector/vendor/symplify/easy-parallel/config/config.php +++ b/vendor/rector/rector/vendor/symplify/easy-parallel/config/config.php @@ -1,9 +1,9 @@ services(); $services->defaults()->public()->autowire(); diff --git a/vendor/rector/rector/vendor/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php b/vendor/rector/rector/vendor/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php index 6f825b3ef..3ac3d5fdb 100644 --- a/vendor/rector/rector/vendor/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php +++ b/vendor/rector/rector/vendor/symplify/easy-parallel/src/CommandLine/WorkerCommandLineFactory.php @@ -1,12 +1,12 @@ true]); - if (!\is_resource($process)) { + if (!$process = proc_open($command, $descriptorspec, $pipes, null, null, ['suppress_errors' => true])) { return null; } diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php index c5cfa4714..9f6ed46f0 100644 --- a/vendor/symfony/filesystem/Filesystem.php +++ b/vendor/symfony/filesystem/Filesystem.php @@ -173,7 +173,7 @@ private static function doRemove(array $files, bool $isRecursive): void } } elseif (is_dir($file)) { if (!$isRecursive) { - $tmpName = \dirname(realpath($file)).'/.'.strrev(strtr(base64_encode(random_bytes(2)), '/=', '-_')); + $tmpName = \dirname(realpath($file)).'/.!'.strrev(strtr(base64_encode(random_bytes(2)), '/=', '-!')); if (file_exists($tmpName)) { try { @@ -233,6 +233,9 @@ public function chmod($files, int $mode, int $umask = 0000, bool $recursive = fa /** * Change the owner of an array of files or directories. * + * This method always throws on Windows, as the underlying PHP function is not supported. + * @see https://www.php.net/chown + * * @param string|iterable $files A filename, an array of files, or a \Traversable instance to change owner * @param string|int $user A user name or number * @param bool $recursive Whether change the owner recursively or not @@ -260,6 +263,9 @@ public function chown($files, $user, bool $recursive = false) /** * Change the group of an array of files or directories. * + * This method always throws on Windows, as the underlying PHP function is not supported. + * @see https://www.php.net/chgrp + * * @param string|iterable $files A filename, an array of files, or a \Traversable instance to change group * @param string|int $group A group name or number * @param bool $recursive Whether change the group recursively or not @@ -691,11 +697,15 @@ public function dumpFile(string $filename, $content) throw new IOException(sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); } - self::box('chmod', $tmpFile, @fileperms($filename) ?: 0666 & ~umask()); + self::box('chmod', $tmpFile, self::box('fileperms', $filename) ?: 0666 & ~umask()); $this->rename($tmpFile, $filename, true); } finally { if (file_exists($tmpFile)) { + if ('\\' === \DIRECTORY_SEPARATOR && !is_writable($tmpFile)) { + self::box('chmod', $tmpFile, self::box('fileperms', $tmpFile) | 0200); + } + self::box('unlink', $tmpFile); } } diff --git a/vendor/symfony/filesystem/Path.php b/vendor/symfony/filesystem/Path.php index 858e1623e..eb6d8ea08 100644 --- a/vendor/symfony/filesystem/Path.php +++ b/vendor/symfony/filesystem/Path.php @@ -368,7 +368,7 @@ public static function isAbsolute(string $path): bool } // Strip scheme - if (false !== $schemeSeparatorPosition = strpos($path, '://')) { + if (false !== ($schemeSeparatorPosition = strpos($path, '://')) && 1 !== $schemeSeparatorPosition) { $path = substr($path, $schemeSeparatorPosition + 3); } diff --git a/vendor/symfony/filesystem/composer.json b/vendor/symfony/filesystem/composer.json index 95e9f3f03..5811ef590 100644 --- a/vendor/symfony/filesystem/composer.json +++ b/vendor/symfony/filesystem/composer.json @@ -19,7 +19,9 @@ "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { "symfony/process": "^5.4|^6.4" }, "autoload": { diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php index 886dae588..ac5d720ef 100644 --- a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -70,8 +70,9 @@ public function current() $subPathname .= $this->directorySeparator; } $subPathname .= $this->getFilename(); + $basePath = $this->rootPath; - if ('/' !== $basePath = $this->rootPath) { + if ('/' !== $basePath && !str_ends_with($basePath, $this->directorySeparator) && !str_ends_with($basePath, '/')) { $basePath .= $this->directorySeparator; } diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json index b222fdab9..131ca7adb 100644 --- a/vendor/symfony/polyfill-ctype/composer.json +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" diff --git a/vendor/symfony/polyfill-intl-grapheme/composer.json b/vendor/symfony/polyfill-intl-grapheme/composer.json index a20d3faaf..0eea417d7 100644 --- a/vendor/symfony/polyfill-intl-grapheme/composer.json +++ b/vendor/symfony/polyfill-intl-grapheme/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, diff --git a/vendor/symfony/polyfill-intl-normalizer/composer.json b/vendor/symfony/polyfill-intl-normalizer/composer.json index 1b93573ae..9bd04e887 100644 --- a/vendor/symfony/polyfill-intl-normalizer/composer.json +++ b/vendor/symfony/polyfill-intl-normalizer/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php index 2e0b96940..3d45c9d9a 100644 --- a/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -48,6 +48,11 @@ * - mb_strstr - Finds first occurrence of a string within another * - mb_strwidth - Return width of string * - mb_substr_count - Count the number of substring occurrences + * - mb_ucfirst - Make a string's first character uppercase + * - mb_lcfirst - Make a string's first character lowercase + * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string + * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string + * - mb_rtrim - Strip whitespace (or other characters) from the end of a string * * Not implemented: * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) @@ -80,6 +85,15 @@ final class Mbstring public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { + if (\is_array($s)) { + $r = []; + foreach ($s as $str) { + $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding); + } + + return $r; + } + if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) { $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); } else { @@ -410,12 +424,6 @@ public static function mb_encoding_aliases($encoding) public static function mb_check_encoding($var = null, $encoding = null) { - if (PHP_VERSION_ID < 70200 && \is_array($var)) { - trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); - - return null; - } - if (null === $encoding) { if (null === $var) { return false; @@ -437,7 +445,6 @@ public static function mb_check_encoding($var = null, $encoding = null) } return true; - } public static function mb_detect_encoding($str, $encodingList = null, $strict = false) @@ -827,7 +834,7 @@ public static function mb_ord($s, $encoding = null) return $code; } - public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null): string { if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); @@ -835,17 +842,8 @@ public static function mb_str_pad(string $string, int $length, string $pad_strin if (null === $encoding) { $encoding = self::mb_internal_encoding(); - } - - try { - $validEncoding = @self::mb_check_encoding('', $encoding); - } catch (\ValueError $e) { - throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); - } - - // BC for PHP 7.3 and lower - if (!$validEncoding) { - throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } else { + self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given'); } if (self::mb_strlen($pad_string, $encoding) <= 0) { @@ -871,6 +869,34 @@ public static function mb_str_pad(string $string, int $length, string $pad_strin } } + public static function mb_ucfirst(string $string, ?string $encoding = null): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_ucfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given'); + } + + $firstChar = mb_substr($string, 0, 1, $encoding); + $firstChar = mb_convert_case($firstChar, \MB_CASE_TITLE, $encoding); + + return $firstChar.mb_substr($string, 1, null, $encoding); + } + + public static function mb_lcfirst(string $string, ?string $encoding = null): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, 'mb_lcfirst(): Argument #2 ($encoding) must be a valid encoding, "%s" given'); + } + + $firstChar = mb_substr($string, 0, 1, $encoding); + $firstChar = mb_convert_case($firstChar, \MB_CASE_LOWER, $encoding); + + return $firstChar.mb_substr($string, 1, null, $encoding); + } + private static function getSubpart($pos, $part, $haystack, $encoding) { if (false === $pos) { @@ -944,4 +970,76 @@ private static function getEncoding($encoding) return $encoding; } + + public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{[%s]+$}D', $string, $characters, $encoding, __FUNCTION__); + } + + private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, $function.'(): Argument #3 ($encoding) must be a valid encoding, "%s" given'); + } + + if ('' === $characters) { + return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding); + } + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $string)) { + $string = @iconv('UTF-8', 'UTF-8//IGNORE', $string); + } + if (null !== $characters && !preg_match('//u', $characters)) { + $characters = @iconv('UTF-8', 'UTF-8//IGNORE', $characters); + } + } else { + $string = iconv($encoding, 'UTF-8//IGNORE', $string); + + if (null !== $characters) { + $characters = iconv($encoding, 'UTF-8//IGNORE', $characters); + } + } + + if (null === $characters) { + $characters = "\\0 \f\n\r\t\v\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}"; + } else { + $characters = preg_quote($characters); + } + + $string = preg_replace(sprintf($regex, $characters), '', $string); + + if (null === $encoding) { + return $string; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $string); + } + + private static function assertEncoding(string $encoding, string $errorFormat): void + { + try { + $validEncoding = @self::mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(sprintf($errorFormat, $encoding)); + } + + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(sprintf($errorFormat, $encoding)); + } + } } diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php index ecf1a0352..ff51ae079 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -136,6 +136,27 @@ function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstrin function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } } +if (!function_exists('mb_ucfirst')) { + function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); } +} + +if (!function_exists('mb_lcfirst')) { + function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } +} + +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/symfony/polyfill-mbstring/bootstrap80.php b/vendor/symfony/polyfill-mbstring/bootstrap80.php index 2f9fb5b42..5be7d2018 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap80.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -93,7 +93,7 @@ function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?strin function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } } if (!function_exists('mb_get_info')) { - function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); } + function mb_get_info(?string $type = 'all'): array|string|int|false|null { return p\Mbstring::mb_get_info((string) $type); } } if (!function_exists('mb_http_output')) { function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } @@ -132,6 +132,26 @@ function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = nul function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } } +if (!function_exists('mb_ucfirst')) { + function mb_ucfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); } +} + +if (!function_exists('mb_lcfirst')) { + function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } +} + +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json index bd99d4b9d..4ed241a33 100644 --- a/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" diff --git a/vendor/symfony/polyfill-php73/composer.json b/vendor/symfony/polyfill-php73/composer.json index 3d47d1541..09d98cb87 100644 --- a/vendor/symfony/polyfill-php73/composer.json +++ b/vendor/symfony/polyfill-php73/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php73\\": "" }, diff --git a/vendor/symfony/polyfill-php80/composer.json b/vendor/symfony/polyfill-php80/composer.json index 46ccde203..a503b039a 100644 --- a/vendor/symfony/polyfill-php80/composer.json +++ b/vendor/symfony/polyfill-php80/composer.json @@ -20,7 +20,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, diff --git a/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php b/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php index eb5952ee3..5ff93fcaf 100644 --- a/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php +++ b/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php @@ -32,7 +32,7 @@ public function __set(string $name, $value): void } if (is_object($value) ? !method_exists($value, '__toString') : !is_scalar($value)) { - throw new \TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string'); + throw new TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string'); } $this->name = 'data://application/octet-stream;base64,'.base64_encode($value); diff --git a/vendor/symfony/polyfill-php81/composer.json b/vendor/symfony/polyfill-php81/composer.json index 381af79ac..28b6408ea 100644 --- a/vendor/symfony/polyfill-php81/composer.json +++ b/vendor/symfony/polyfill-php81/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, diff --git a/vendor/symfony/process/ExecutableFinder.php b/vendor/symfony/process/ExecutableFinder.php index f392c962e..6dc00b7c2 100644 --- a/vendor/symfony/process/ExecutableFinder.php +++ b/vendor/symfony/process/ExecutableFinder.php @@ -48,25 +48,10 @@ public function addSuffix(string $suffix) */ public function find(string $name, ?string $default = null, array $extraDirs = []) { - if (\ini_get('open_basedir')) { - $searchPath = array_merge(explode(\PATH_SEPARATOR, \ini_get('open_basedir')), $extraDirs); - $dirs = []; - foreach ($searchPath as $path) { - // Silencing against https://bugs.php.net/69240 - if (@is_dir($path)) { - $dirs[] = $path; - } else { - if (basename($path) == $name && @is_executable($path)) { - return $path; - } - } - } - } else { - $dirs = array_merge( - explode(\PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')), - $extraDirs - ); - } + $dirs = array_merge( + explode(\PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')), + $extraDirs + ); $suffixes = ['']; if ('\\' === \DIRECTORY_SEPARATOR) { @@ -78,9 +63,18 @@ public function find(string $name, ?string $default = null, array $extraDirs = [ if (@is_file($file = $dir.\DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === \DIRECTORY_SEPARATOR || @is_executable($file))) { return $file; } + + if (!@is_dir($dir) && basename($dir) === $name.$suffix && @is_executable($dir)) { + return $dir; + } } } + $command = '\\' === \DIRECTORY_SEPARATOR ? 'where' : 'command -v --'; + if (\function_exists('exec') && ($executablePath = strtok(@exec($command.' '.escapeshellarg($name)), \PHP_EOL)) && @is_executable($executablePath)) { + return $executablePath; + } + return $default; } } diff --git a/vendor/symfony/process/PhpExecutableFinder.php b/vendor/symfony/process/PhpExecutableFinder.php index 45dbcca43..54fe74434 100644 --- a/vendor/symfony/process/PhpExecutableFinder.php +++ b/vendor/symfony/process/PhpExecutableFinder.php @@ -36,7 +36,7 @@ public function find(bool $includeArgs = true) if ($php = getenv('PHP_BINARY')) { if (!is_executable($php)) { $command = '\\' === \DIRECTORY_SEPARATOR ? 'where' : 'command -v --'; - if ($php = strtok(exec($command.' '.escapeshellarg($php)), \PHP_EOL)) { + if (\function_exists('exec') && $php = strtok(exec($command.' '.escapeshellarg($php)), \PHP_EOL)) { if (!is_executable($php)) { return false; } diff --git a/vendor/symfony/process/Process.php b/vendor/symfony/process/Process.php index a4b0a784c..62addf1e7 100644 --- a/vendor/symfony/process/Process.php +++ b/vendor/symfony/process/Process.php @@ -352,7 +352,7 @@ public function start(?callable $callback = null, array $env = []) $this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options); - if (!\is_resource($this->process)) { + if (!$this->process) { throw new RuntimeException('Unable to launch a new process.'); } $this->status = self::STATUS_STARTED; @@ -1456,8 +1456,9 @@ private function readPipes(bool $blocking, bool $close) private function close(): int { $this->processPipes->close(); - if (\is_resource($this->process)) { + if ($this->process) { proc_close($this->process); + $this->process = null; } $this->exitcode = $this->processInformation['exitcode']; $this->status = self::STATUS_TERMINATED; diff --git a/vendor/symfony/string/AbstractUnicodeString.php b/vendor/symfony/string/AbstractUnicodeString.php index 52123f507..21aa22e18 100644 --- a/vendor/symfony/string/AbstractUnicodeString.php +++ b/vendor/symfony/string/AbstractUnicodeString.php @@ -162,7 +162,7 @@ public function ascii(array $rules = []): self public function camel(): parent { $str = clone $this; - $str->string = str_replace(' ', '', preg_replace_callback('/\b.(?![A-Z]{2,})/u', static function ($m) use (&$i) { + $str->string = str_replace(' ', '', preg_replace_callback('/\b.(?!\p{Lu})/u', static function ($m) use (&$i) { return 1 === ++$i ? ('İ' === $m[0] ? 'i̇' : mb_strtolower($m[0], 'UTF-8')) : mb_convert_case($m[0], \MB_CASE_TITLE, 'UTF-8'); }, preg_replace('/[^\pL0-9]++/u', ' ', $this->string))); @@ -195,7 +195,7 @@ public function folded(bool $compat = true): parent if (!$compat || \PHP_VERSION_ID < 70300 || !\defined('Normalizer::NFKC_CF')) { $str->string = normalizer_normalize($str->string, $compat ? \Normalizer::NFKC : \Normalizer::NFC); - $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $this->string), 'UTF-8'); + $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $str->string), 'UTF-8'); } else { $str->string = normalizer_normalize($str->string, \Normalizer::NFKC_CF); } diff --git a/vendor/symfony/string/Inflector/EnglishInflector.php b/vendor/symfony/string/Inflector/EnglishInflector.php index 60eace3c9..9557e3507 100644 --- a/vendor/symfony/string/Inflector/EnglishInflector.php +++ b/vendor/symfony/string/Inflector/EnglishInflector.php @@ -25,8 +25,32 @@ final class EnglishInflector implements InflectorInterface // Fourth entry: Whether the suffix may succeed a consonant // Fifth entry: singular suffix, normal - // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) - ['a', 1, true, true, ['on', 'um']], + // bacteria (bacterium) + ['airetcab', 8, true, true, 'bacterium'], + + // corpora (corpus) + ['aroproc', 7, true, true, 'corpus'], + + // criteria (criterion) + ['airetirc', 8, true, true, 'criterion'], + + // curricula (curriculum) + ['alucirruc', 9, true, true, 'curriculum'], + + // genera (genus) + ['areneg', 6, true, true, 'genus'], + + // media (medium) + ['aidem', 5, true, true, 'medium'], + + // memoranda (memorandum) + ['adnaromem', 9, true, true, 'memorandum'], + + // phenomena (phenomenon) + ['anemonehp', 9, true, true, 'phenomenon'], + + // strata (stratum) + ['atarts', 6, true, true, 'stratum'], // nebulae (nebula) ['ea', 2, true, true, 'a'], @@ -97,6 +121,9 @@ final class EnglishInflector implements InflectorInterface // statuses (status) ['sesutats', 8, true, true, 'status'], + // article (articles), ancle (ancles) + ['sel', 3, true, true, 'le'], + // analyses (analysis), ellipses (ellipsis), fungi (fungus), // neuroses (neurosis), theses (thesis), emphases (emphasis), // oases (oasis), crises (crisis), houses (house), bases (base), @@ -141,7 +168,7 @@ final class EnglishInflector implements InflectorInterface // shoes (shoe) ['se', 2, true, true, ['', 'e']], - // status (status) + // status (status) ['sutats', 6, true, true, 'status'], // tags (tag) @@ -238,7 +265,10 @@ final class EnglishInflector implements InflectorInterface // teeth (tooth) ['htoot', 5, true, true, 'teeth'], - // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) + // albums (album) + ['mubla', 5, true, true, 'albums'], + + // bacteria (bacterium), curricula (curriculum), media (medium), memoranda (memorandum), phenomena (phenomenon), strata (stratum) ['mu', 2, true, true, 'a'], // men (man), women (woman) @@ -247,20 +277,11 @@ final class EnglishInflector implements InflectorInterface // people (person) ['nosrep', 6, true, true, ['persons', 'people']], - // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) - ['noi', 3, true, true, 'ions'], - - // coupon (coupons) - ['nop', 3, true, true, 'pons'], - - // seasons (season), treasons (treason), poisons (poison), lessons (lesson) - ['nos', 3, true, true, 'sons'], + // criteria (criterion) + ['noiretirc', 9, true, true, 'criteria'], - // icons (icon) - ['noc', 3, true, true, 'cons'], - - // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) - ['no', 2, true, true, 'a'], + // phenomena (phenomenon) + ['nonemonehp', 10, true, true, 'phenomena'], // echoes (echo) ['ohce', 4, true, true, 'echoes'], @@ -271,6 +292,9 @@ final class EnglishInflector implements InflectorInterface // atlases (atlas) ['salta', 5, true, true, 'atlases'], + // aliases (alias) + ['saila', 5, true, true, 'aliases'], + // irises (iris) ['siri', 4, true, true, 'irises'], @@ -396,11 +420,11 @@ final class EnglishInflector implements InflectorInterface // aircraft 'tfarcria', + + // hardware + 'erawdrah', ]; - /** - * {@inheritdoc} - */ public function singularize(string $plural): array { $pluralRev = strrev($plural); @@ -432,7 +456,7 @@ public function singularize(string $plural): array if ($j === $suffixLength) { // Is there any character preceding the suffix in the plural string? if ($j < $pluralLength) { - $nextIsVowel = false !== strpos('aeiou', $lowerPluralRev[$j]); + $nextIsVowel = str_contains('aeiou', $lowerPluralRev[$j]); if (!$map[2] && $nextIsVowel) { // suffix may not succeed a vowel but next char is one @@ -477,9 +501,6 @@ public function singularize(string $plural): array return [$plural]; } - /** - * {@inheritdoc} - */ public function pluralize(string $singular): array { $singularRev = strrev($singular); @@ -512,7 +533,7 @@ public function pluralize(string $singular): array if ($j === $suffixLength) { // Is there any character preceding the suffix in the plural string? if ($j < $singularLength) { - $nextIsVowel = false !== strpos('aeiou', $lowerSingularRev[$j]); + $nextIsVowel = str_contains('aeiou', $lowerSingularRev[$j]); if (!$map[2] && $nextIsVowel) { // suffix may not succeed a vowel but next char is one diff --git a/vendor/symfony/string/Resources/data/wcswidth_table_wide.php b/vendor/symfony/string/Resources/data/wcswidth_table_wide.php index 8314c8fd5..6a7509421 100644 --- a/vendor/symfony/string/Resources/data/wcswidth_table_wide.php +++ b/vendor/symfony/string/Resources/data/wcswidth_table_wide.php @@ -3,8 +3,8 @@ /* * This file has been auto-generated by the Symfony String Component for internal use. * - * Unicode version: 15.1.0 - * Date: 2023-09-13T11:47:12+00:00 + * Unicode version: 16.0.0 + * Date: 2024-09-11T08:21:22+00:00 */ return [ @@ -44,6 +44,10 @@ 9748, 9749, ], + [ + 9776, + 9783, + ], [ 9800, 9811, @@ -52,6 +56,10 @@ 9855, 9855, ], + [ + 9866, + 9871, + ], [ 9875, 9875, @@ -394,7 +402,7 @@ ], [ 12736, - 12771, + 12773, ], [ 12783, @@ -452,6 +460,10 @@ 13312, 19903, ], + [ + 19904, + 19967, + ], [ 19968, 40959, @@ -836,6 +848,10 @@ 101120, 101589, ], + [ + 101631, + 101631, + ], [ 101632, 101640, @@ -880,6 +896,14 @@ 110960, 111355, ], + [ + 119552, + 119638, + ], + [ + 119648, + 119670, + ], [ 126980, 126980, @@ -1054,23 +1078,19 @@ ], [ 129664, - 129672, - ], - [ - 129680, - 129725, + 129673, ], [ - 129727, - 129733, + 129679, + 129734, ], [ 129742, - 129755, + 129756, ], [ - 129760, - 129768, + 129759, + 129769, ], [ 129776, diff --git a/vendor/symfony/string/Resources/data/wcswidth_table_zero.php b/vendor/symfony/string/Resources/data/wcswidth_table_zero.php index e5b26a215..fdd7f3c7e 100644 --- a/vendor/symfony/string/Resources/data/wcswidth_table_zero.php +++ b/vendor/symfony/string/Resources/data/wcswidth_table_zero.php @@ -3,8 +3,8 @@ /* * This file has been auto-generated by the Symfony String Component for internal use. * - * Unicode version: 15.1.0 - * Date: 2023-09-13T11:47:13+00:00 + * Unicode version: 16.0.0 + * Date: 2024-09-11T08:21:22+00:00 */ return [ @@ -109,7 +109,7 @@ 2139, ], [ - 2200, + 2199, 2207, ], [ @@ -916,12 +916,16 @@ 68900, 68903, ], + [ + 68969, + 68973, + ], [ 69291, 69292, ], [ - 69373, + 69372, 69375, ], [ @@ -1044,6 +1048,26 @@ 70512, 70516, ], + [ + 70587, + 70592, + ], + [ + 70606, + 70606, + ], + [ + 70608, + 70608, + ], + [ + 70610, + 70610, + ], + [ + 70625, + 70626, + ], [ 70712, 70719, @@ -1122,6 +1146,10 @@ ], [ 71453, + 71453, + ], + [ + 71455, 71455, ], [ @@ -1276,6 +1304,10 @@ 73538, 73538, ], + [ + 73562, + 73562, + ], [ 78912, 78912, @@ -1284,6 +1316,14 @@ 78919, 78933, ], + [ + 90398, + 90409, + ], + [ + 90413, + 90415, + ], [ 92912, 92916, @@ -1400,6 +1440,10 @@ 124140, 124143, ], + [ + 124398, + 124399, + ], [ 125136, 125142,