diff --git a/config/set/downgrade-php81.php b/config/set/downgrade-php81.php
index c045b53c..52cdce05 100644
--- a/config/set/downgrade-php81.php
+++ b/config/set/downgrade-php81.php
@@ -33,7 +33,6 @@
DowngradePhp81ResourceReturnToObjectRector::class,
DowngradeReadonlyPropertyRector::class,
DowngradeArraySpreadRector::class,
- // DowngradeArraySpreadStringKeyRector::class,
DowngradeArrayIsListRector::class,
DowngradeSetAccessibleReflectionPropertyRector::class,
DowngradeIsEnumRector::class,
diff --git a/docs/rector_rules_overview.md b/docs/rector_rules_overview.md
deleted file mode 100644
index 05507c39..00000000
--- a/docs/rector_rules_overview.md
+++ /dev/null
@@ -1,1542 +0,0 @@
-# 74 Rules Overview
-
-**This overview is deprecated and replaced by more advanced web search. There you can search and filter by nodes, copy-paste configs for configurable rules and more.**
-
-Use https://getrector.com/find-rule?query=downgrade+rules instead!
-
----
-
-## ArrowFunctionToAnonymousFunctionRector
-
-Replace arrow functions with anonymous functions
-
-- class: [`Rector\DowngradePhp74\Rector\ArrowFunction\ArrowFunctionToAnonymousFunctionRector`](../rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
- $delimiter = ",";
-- $callable = fn($matches) => $delimiter . strtolower($matches[1]);
-+ $callable = function ($matches) use ($delimiter) {
-+ return $delimiter . strtolower($matches[1]);
-+ };
- }
- }
-```
-
-
-
-## DowngradeAbstractPrivateMethodInTraitRector
-
-Remove "abstract" from private methods in traits and adds an empty function body
-
-- class: [`Rector\DowngradePhp80\Rector\ClassMethod\DowngradeAbstractPrivateMethodInTraitRector`](../rules/DowngradePhp80/Rector/ClassMethod/DowngradeAbstractPrivateMethodInTraitRector.php)
-
-```diff
- trait SomeTrait
- {
-- abstract private function someAbstractPrivateFunction();
-+ private function someAbstractPrivateFunction() {}
- }
-```
-
-
-
-## DowngradeArbitraryExpressionsSupportRector
-
-Replace arbitrary expressions used with new or instanceof
-
-- class: [`Rector\DowngradePhp80\Rector\New_\DowngradeArbitraryExpressionsSupportRector`](../rules/DowngradePhp80/Rector/New_/DowngradeArbitraryExpressionsSupportRector.php)
-
-```diff
- function getObjectClassName() {
- return stdClass::class;
- }
-
--$object = new (getObjectClassName());
-+$className = getObjectClassName();
-+$object = new $className();
-```
-
-
-
-## DowngradeArrayFilterNullableCallbackRector
-
-Unset nullable callback on array_filter
-
-- class: [`Rector\DowngradePhp80\Rector\FuncCall\DowngradeArrayFilterNullableCallbackRector`](../rules/DowngradePhp80/Rector/FuncCall/DowngradeArrayFilterNullableCallbackRector.php)
-
-```diff
- class SomeClass
- {
- public function run($callback = null)
- {
- $data = [[]];
-- var_dump(array_filter($data, null));
-+ var_dump(array_filter($data));
- }
- }
-```
-
-
-
-## DowngradeArrayIsListRector
-
-Replace `array_is_list()` function
-
-- class: [`Rector\DowngradePhp81\Rector\FuncCall\DowngradeArrayIsListRector`](../rules/DowngradePhp81/Rector/FuncCall/DowngradeArrayIsListRector.php)
-
-```diff
--array_is_list([1 => 'apple', 'orange']);
-+$arrayIsList = function (array $array) : bool {
-+ if (function_exists('array_is_list')) {
-+ return array_is_list($array);
-+ }
-+
-+ if ($array === []) {
-+ return true;
-+ }
-+
-+ $current_key = 0;
-+ foreach ($array as $key => $noop) {
-+ if ($key !== $current_key) {
-+ return false;
-+ }
-+ ++$current_key;
-+ }
-+
-+ return true;
-+};
-+$arrayIsList([1 => 'apple', 'orange']);
-```
-
-
-
-## DowngradeArrayKeyFirstLastRector
-
-Downgrade `array_key_first()` and `array_key_last()` functions
-
-- class: [`Rector\DowngradePhp73\Rector\FuncCall\DowngradeArrayKeyFirstLastRector`](../rules/DowngradePhp73/Rector/FuncCall/DowngradeArrayKeyFirstLastRector.php)
-
-```diff
- class SomeClass
- {
- public function run($items)
- {
-- $firstItemKey = array_key_first($items);
-+ reset($items);
-+ $firstItemKey = key($items);
- }
- }
-```
-
-
-
-## DowngradeArrayMergeCallWithoutArgumentsRector
-
-Add missing param to `array_merge` and `array_merge_recursive`
-
-- class: [`Rector\DowngradePhp74\Rector\FuncCall\DowngradeArrayMergeCallWithoutArgumentsRector`](../rules/DowngradePhp74/Rector/FuncCall/DowngradeArrayMergeCallWithoutArgumentsRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- array_merge();
-- array_merge_recursive();
-+ array_merge([]);
-+ array_merge_recursive([]);
- }
- }
-```
-
-
-
-## DowngradeArraySpreadRector
-
-Replace array spread with array_merge function
-
-- class: [`Rector\DowngradePhp74\Rector\Array_\DowngradeArraySpreadRector`](../rules/DowngradePhp74/Rector/Array_/DowngradeArraySpreadRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
- $parts = ['apple', 'pear'];
-- $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
-+ $fruits = array_merge(['banana', 'orange'], $parts, ['watermelon']);
- }
-
- public function runWithIterable()
- {
-- $fruits = ['banana', 'orange', ...new ArrayIterator(['durian', 'kiwi']), 'watermelon'];
-+ $fruits = array_merge(
-+ ['banana', 'orange'],
-+ is_array(new ArrayIterator(['durian', 'kiwi'])) ?
-+ new ArrayIterator(['durian', 'kiwi']) :
-+ iterator_to_array(new ArrayIterator(['durian', 'kiwi'])),
-+ ['watermelon']
-+ );
- }
- }
-```
-
-
-
-## DowngradeArraySpreadStringKeyRector
-
-Replace array spread with string key to array_merge function
-
-- class: [`Rector\DowngradePhp81\Rector\Array_\DowngradeArraySpreadStringKeyRector`](../rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php)
-
-```diff
- $parts = ['a' => 'b'];
- $parts2 = ['c' => 'd'];
-
--$result = [...$parts, ...$parts2];
-+$result = array_merge($parts, $parts2);
-```
-
-
-
-## DowngradeAttributeToAnnotationRector
-
-Refactor PHP attribute markers to annotations notation
-
-:wrench: **configure it!**
-
-- class: [`Rector\DowngradePhp80\Rector\Class_\DowngradeAttributeToAnnotationRector`](../rules/DowngradePhp80/Rector/Class_/DowngradeAttributeToAnnotationRector.php)
-
-```diff
- use Symfony\Component\Routing\Annotation\Route;
-
- class SymfonyRoute
- {
-- #[Route(path: '/path', name: 'action')]
-+ /**
-+ * @Route("/path", name="action")
-+ */
- public function action()
- {
- }
- }
-```
-
-
-
-## DowngradeClassOnObjectToGetClassRector
-
-Change `$object::class` to get_class($object)
-
-- class: [`Rector\DowngradePhp80\Rector\ClassConstFetch\DowngradeClassOnObjectToGetClassRector`](../rules/DowngradePhp80/Rector/ClassConstFetch/DowngradeClassOnObjectToGetClassRector.php)
-
-```diff
- class SomeClass
- {
- public function run($object)
- {
-- return $object::class;
-+ return get_class($object);
- }
- }
-```
-
-
-
-## DowngradeContravariantArgumentTypeRector
-
-Remove contravariant argument type declarations
-
-- class: [`Rector\DowngradePhp74\Rector\ClassMethod\DowngradeContravariantArgumentTypeRector`](../rules/DowngradePhp74/Rector/ClassMethod/DowngradeContravariantArgumentTypeRector.php)
-
-```diff
- class ParentType {}
- class ChildType extends ParentType {}
-
- class A
- {
- public function contraVariantArguments(ChildType $type)
- {
- }
- }
-
- class B extends A
- {
-- public function contraVariantArguments(ParentType $type)
-+ /**
-+ * @param ParentType $type
-+ */
-+ public function contraVariantArguments($type)
- {
- }
- }
-```
-
-
-
-## DowngradeCovariantReturnTypeRector
-
-Make method return same type as parent
-
-- class: [`Rector\DowngradePhp74\Rector\ClassMethod\DowngradeCovariantReturnTypeRector`](../rules/DowngradePhp74/Rector/ClassMethod/DowngradeCovariantReturnTypeRector.php)
-
-```diff
- class ParentType {}
- class ChildType extends ParentType {}
-
- class A
- {
- public function covariantReturnTypes(): ParentType
- {
- }
- }
-
- class B extends A
- {
-- public function covariantReturnTypes(): ChildType
-+ /**
-+ * @return ChildType
-+ */
-+ public function covariantReturnTypes(): ParentType
- {
- }
- }
-```
-
-
-
-## DowngradeDereferenceableOperationRector
-
-Add parentheses around non-dereferenceable expressions.
-
-- class: [`Rector\DowngradePhp80\Rector\ArrayDimFetch\DowngradeDereferenceableOperationRector`](../rules/DowngradePhp80/Rector/ArrayDimFetch/DowngradeDereferenceableOperationRector.php)
-
-```diff
- function getFirstChar(string $str, string $suffix = '')
- {
-- return "$str$suffix"[0];
-+ return ("$str$suffix")[0];
- }
-```
-
-
-
-## DowngradeEnumToConstantListClassRector
-
-Downgrade enum to constant list class
-
-- class: [`Rector\DowngradePhp80\Rector\Enum_\DowngradeEnumToConstantListClassRector`](../rules/DowngradePhp80/Rector/Enum_/DowngradeEnumToConstantListClassRector.php)
-
-```diff
--enum Direction
-+class Direction
- {
-- case LEFT;
-+ public const LEFT = 'left';
-
-- case RIGHT;
-+ public const RIGHT = 'right';
- }
-```
-
-
-
-## DowngradeFinalizePublicClassConstantRector
-
-Remove final from class constants
-
-- class: [`Rector\DowngradePhp81\Rector\ClassConst\DowngradeFinalizePublicClassConstantRector`](../rules/DowngradePhp81/Rector/ClassConst/DowngradeFinalizePublicClassConstantRector.php)
-
-```diff
- class SomeClass
- {
-- final public const NAME = 'value';
-+ public const NAME = 'value';
- }
-```
-
-
-
-## DowngradeFirstClassCallableSyntaxRector
-
-Replace variadic placeholders usage by `Closure::fromCallable()`
-
-- class: [`Rector\DowngradePhp81\Rector\FuncCall\DowngradeFirstClassCallableSyntaxRector`](../rules/DowngradePhp81/Rector/FuncCall/DowngradeFirstClassCallableSyntaxRector.php)
-
-```diff
--$cb = strlen(...);
-+$cb = \Closure::fromCallable('strlen');
-```
-
-
-
-## DowngradeFlexibleHeredocSyntaxRector
-
-Remove indentation from heredoc/nowdoc
-
-- class: [`Rector\DowngradePhp73\Rector\String_\DowngradeFlexibleHeredocSyntaxRector`](../rules/DowngradePhp73/Rector/String_/DowngradeFlexibleHeredocSyntaxRector.php)
-
-```diff
- $query = <<
-
-## DowngradeFreadFwriteFalsyToNegationRector
-
-Changes `fread()` or `fwrite()` compare to false to negation check
-
-- class: [`Rector\DowngradePhp74\Rector\Identical\DowngradeFreadFwriteFalsyToNegationRector`](../rules/DowngradePhp74/Rector/Identical/DowngradeFreadFwriteFalsyToNegationRector.php)
-
-```diff
--fread($handle, $length) === false;
--fwrite($fp, '1') === false;
-+!fread($handle, $length);
-+!fwrite($fp, '1');
-```
-
-
-
-## DowngradeHashAlgorithmXxHashRector
-
-Downgrade hash algorithm xxh32, xxh64, xxh3 or xxh128 by default to md5. You can configure the algorithm to downgrade.
-
-- class: [`Rector\DowngradePhp81\Rector\FuncCall\DowngradeHashAlgorithmXxHashRector`](../rules/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHashRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- return hash('xxh128', 'some-data-to-hash');
-+ return hash('md5', 'some-data-to-hash');
- }
- }
-```
-
-
-
-## DowngradeIsCountableRector
-
-Downgrade `is_countable()` to former version
-
-- class: [`Rector\DowngradePhp73\Rector\FuncCall\DowngradeIsCountableRector`](../rules/DowngradePhp73/Rector/FuncCall/DowngradeIsCountableRector.php)
-
-```diff
- $items = [];
--return is_countable($items);
-+return is_array($items) || $items instanceof Countable;
-```
-
-
-
-## DowngradeIsEnumRector
-
-Downgrades `isEnum()` on class reflection
-
-- class: [`Rector\DowngradePhp81\Rector\MethodCall\DowngradeIsEnumRector`](../rules/DowngradePhp81/Rector/MethodCall/DowngradeIsEnumRector.php)
-
-```diff
- class SomeClass
- {
- public function run(ReflectionClass $reflectionClass)
- {
-- return $reflectionClass->isEnum();
-+ return method_exists($reflectionClass, 'isEnum') ? $reflectionClass->isEnum() : false;
- }
- }
-```
-
-
-
-## DowngradeJsonDecodeNullAssociativeArgRector
-
-Downgrade `json_decode()` with null associative argument function
-
-- class: [`Rector\DowngradePhp72\Rector\FuncCall\DowngradeJsonDecodeNullAssociativeArgRector`](../rules/DowngradePhp72/Rector/FuncCall/DowngradeJsonDecodeNullAssociativeArgRector.php)
-
-```diff
- function exactlyNull(string $json)
- {
-- $value = json_decode($json, null);
-+ $value = json_decode($json, true);
- }
-
- function possiblyNull(string $json, ?bool $associative)
- {
-- $value = json_decode($json, $associative);
-+ $value = json_decode($json, $associative === null ?: $associative);
- }
-```
-
-
-
-## DowngradeListReferenceAssignmentRector
-
-Convert the list reference assignment to its equivalent PHP 7.2 code
-
-- class: [`Rector\DowngradePhp73\Rector\List_\DowngradeListReferenceAssignmentRector`](../rules/DowngradePhp73/Rector/List_/DowngradeListReferenceAssignmentRector.php)
-
-```diff
- class SomeClass
- {
- public function run($string)
- {
- $array = [1, 2, 3];
-- list($a, &$b) = $array;
-+ list($a) = $array;
-+ $b =& $array[1];
-
-- [&$c, $d, &$e] = $array;
-+ [$c, $d, $e] = $array;
-+ $c =& $array[0];
-+ $e =& $array[2];
-
-- list(&$a, &$b) = $array;
-+ $a =& $array[0];
-+ $b =& $array[1];
- }
- }
-```
-
-
-
-## DowngradeMatchToSwitchRector
-
-Downgrade `match()` to `switch()`
-
-- class: [`Rector\DowngradePhp80\Rector\Expression\DowngradeMatchToSwitchRector`](../rules/DowngradePhp80/Rector/Expression/DowngradeMatchToSwitchRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- $message = match ($statusCode) {
-- 200, 300 => null,
-- 400 => 'not found',
-- default => 'unknown status code',
-- };
-+ switch ($statusCode) {
-+ case 200:
-+ case 300:
-+ $message = null;
-+ break;
-+ case 400:
-+ $message = 'not found';
-+ break;
-+ default:
-+ $message = 'unknown status code';
-+ break;
-+ }
- }
- }
-```
-
-
-
-## DowngradeMixedTypeDeclarationRector
-
-Remove the "mixed" param and return type, add a `@param` and `@return` tag instead
-
-- class: [`Rector\DowngradePhp80\Rector\FunctionLike\DowngradeMixedTypeDeclarationRector`](../rules/DowngradePhp80/Rector/FunctionLike/DowngradeMixedTypeDeclarationRector.php)
-
-```diff
- class SomeClass
- {
-- public function someFunction(mixed $anything): mixed
-+ /**
-+ * @param mixed $anything
-+ * @return mixed
-+ */
-+ public function someFunction($anything)
- {
- }
- }
-```
-
-
-
-## DowngradeMixedTypeTypedPropertyRector
-
-Removes mixed type property type definition, adding `@var` annotations instead.
-
-- class: [`Rector\DowngradePhp80\Rector\Property\DowngradeMixedTypeTypedPropertyRector`](../rules/DowngradePhp80/Rector/Property/DowngradeMixedTypeTypedPropertyRector.php)
-
-```diff
- class SomeClass
- {
-- private mixed $property;
-+ /**
-+ * @var mixed
-+ */
-+ private $property;
- }
-```
-
-
-
-## DowngradeNamedArgumentRector
-
-Remove named argument
-
-- class: [`Rector\DowngradePhp80\Rector\MethodCall\DowngradeNamedArgumentRector`](../rules/DowngradePhp80/Rector/MethodCall/DowngradeNamedArgumentRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- $this->execute(b: 100);
-+ $this->execute(null, 100);
- }
-
- private function execute($a = null, $b = null)
- {
- }
- }
-```
-
-
-
-## DowngradeNeverTypeDeclarationRector
-
-Remove "never" return type, add a `"@return` never" tag instead
-
-- class: [`Rector\DowngradePhp81\Rector\FunctionLike\DowngradeNeverTypeDeclarationRector`](../rules/DowngradePhp81/Rector/FunctionLike/DowngradeNeverTypeDeclarationRector.php)
-
-```diff
--function someFunction(): never
-+/**
-+ * @return never
-+ */
-+function someFunction()
- {
- }
-```
-
-
-
-## DowngradeNewInInitializerRector
-
-Replace New in initializers
-
-- class: [`Rector\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector`](../rules/DowngradePhp81/Rector/FunctionLike/DowngradeNewInInitializerRector.php)
-
-```diff
- class SomeClass
- {
- public function __construct(
-- private Logger $logger = new NullLogger,
-+ private ?Logger $logger = null,
- ) {
-+ $this->logger = $logger ?? new NullLogger;
- }
- }
-```
-
-
-
-## DowngradeNonCapturingCatchesRector
-
-Downgrade catch () without variable to one
-
-- class: [`Rector\DowngradePhp80\Rector\Catch_\DowngradeNonCapturingCatchesRector`](../rules/DowngradePhp80/Rector/Catch_/DowngradeNonCapturingCatchesRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
- try {
- // code
-- } catch (\Exception) {
-+ } catch (\Exception $exception) {
- // error
- }
- }
- }
-```
-
-
-
-## DowngradeNullCoalescingOperatorRector
-
-Remove null coalescing operator ??=
-
-- class: [`Rector\DowngradePhp74\Rector\Coalesce\DowngradeNullCoalescingOperatorRector`](../rules/DowngradePhp74/Rector/Coalesce/DowngradeNullCoalescingOperatorRector.php)
-
-```diff
- $array = [];
--$array['user_id'] ??= 'value';
-+$array['user_id'] = $array['user_id'] ?? 'value';
-```
-
-
-
-## DowngradeNullsafeToTernaryOperatorRector
-
-Change nullsafe operator to ternary operator rector
-
-- class: [`Rector\DowngradePhp80\Rector\NullsafeMethodCall\DowngradeNullsafeToTernaryOperatorRector`](../rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php)
-
-```diff
--$dateAsString = $booking->getStartDate()?->asDateTimeString();
-+$dateAsString = ($bookingGetStartDate = $booking->getStartDate()) ? $bookingGetStartDate->asDateTimeString() : null;
-```
-
-
-
-## DowngradeNumberFormatNoFourthArgRector
-
-Downgrade number_format arg to fill 4th arg when only 3rd arg filled
-
-- class: [`Rector\DowngradePhp80\Rector\FuncCall\DowngradeNumberFormatNoFourthArgRector`](../rules/DowngradePhp80/Rector/FuncCall/DowngradeNumberFormatNoFourthArgRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- return number_format(1000, 2, ',');
-+ return number_format(1000, 2, ',', ',');
- }
- }
-```
-
-
-
-## DowngradeNumericLiteralSeparatorRector
-
-Remove "_" as thousands separator in numbers
-
-- class: [`Rector\DowngradePhp74\Rector\LNumber\DowngradeNumericLiteralSeparatorRector`](../rules/DowngradePhp74/Rector/LNumber/DowngradeNumericLiteralSeparatorRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- $int = 1_000;
-- $float = 1_000_500.001;
-+ $int = 1000;
-+ $float = 1000500.001;
- }
- }
-```
-
-
-
-## DowngradeObjectTypeDeclarationRector
-
-Remove the "object" param and return type, add a `@param` and `@return` tags instead
-
-- class: [`Rector\DowngradePhp72\Rector\FunctionLike\DowngradeObjectTypeDeclarationRector`](../rules/DowngradePhp72/Rector/FunctionLike/DowngradeObjectTypeDeclarationRector.php)
-
-```diff
- class SomeClass
- {
-- public function someFunction(object $someObject): object
-+ /**
-+ * @param object $someObject
-+ * @return object
-+ */
-+ public function someFunction($someObject)
- {
- }
- }
-```
-
-
-
-## DowngradeOctalNumberRector
-
-Downgrades octal numbers to decimal ones
-
-- class: [`Rector\DowngradePhp81\Rector\LNumber\DowngradeOctalNumberRector`](../rules/DowngradePhp81/Rector/LNumber/DowngradeOctalNumberRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- return 0o777;
-+ return 0777;
- }
- }
-```
-
-
-
-## DowngradeParameterTypeWideningRector
-
-Change param type to match the lowest type in whole family tree
-
-:wrench: **configure it!**
-
-- class: [`Rector\DowngradePhp72\Rector\ClassMethod\DowngradeParameterTypeWideningRector`](../rules/DowngradePhp72/Rector/ClassMethod/DowngradeParameterTypeWideningRector.php)
-
-```diff
- interface SomeInterface
- {
-- public function test(array $input);
-+ /**
-+ * @param mixed[] $input
-+ */
-+ public function test($input);
- }
- final class SomeClass implements SomeInterface
- {
- public function test($input)
- {
- }
- }
-```
-
-
-
-## DowngradePhp72JsonConstRector
-
-Remove Json constant that available only in php 7.2
-
-- class: [`Rector\DowngradePhp72\Rector\ConstFetch\DowngradePhp72JsonConstRector`](../rules/DowngradePhp72/Rector/ConstFetch/DowngradePhp72JsonConstRector.php)
-
-```diff
--$inDecoder = new Decoder($connection, true, 512, \JSON_INVALID_UTF8_IGNORE);
-+$inDecoder = new Decoder($connection, true, 512, 0);
-
--$inDecoder = new Decoder($connection, true, 512, \JSON_INVALID_UTF8_SUBSTITUTE);
-+$inDecoder = new Decoder($connection, true, 512, 0);
-```
-
-
-
-## DowngradePhp73JsonConstRector
-
-Remove Json constant that available only in php 7.3
-
-- class: [`Rector\DowngradePhp73\Rector\ConstFetch\DowngradePhp73JsonConstRector`](../rules/DowngradePhp73/Rector/ConstFetch/DowngradePhp73JsonConstRector.php)
-
-```diff
--json_encode($content, JSON_THROW_ON_ERROR);
-+json_encode($content, 0);
-+if (json_last_error() !== JSON_ERROR_NONE) {
-+ throw new \Exception(json_last_error_msg());
-+}
-```
-
-
-
-```diff
--$content = json_decode($json, null, 512, JSON_THROW_ON_ERROR);
-+$content = json_decode($json, null, 512, 0);
-+if (json_last_error() !== JSON_ERROR_NONE) {
-+ throw new \Exception(json_last_error_msg());
-+}
-```
-
-
-
-## DowngradePhp80ResourceReturnToObjectRector
-
-change instanceof Object to is_resource
-
-- class: [`Rector\DowngradePhp80\Rector\Instanceof_\DowngradePhp80ResourceReturnToObjectRector`](../rules/DowngradePhp80/Rector/Instanceof_/DowngradePhp80ResourceReturnToObjectRector.php)
-
-```diff
- class SomeClass
- {
- public function run($obj)
- {
-- $obj instanceof \CurlHandle;
-+ is_resource($obj) || $obj instanceof \CurlHandle;
- }
- }
-```
-
-
-
-## DowngradePhp81ResourceReturnToObjectRector
-
-change instanceof Object to is_resource
-
-- class: [`Rector\DowngradePhp81\Rector\Instanceof_\DowngradePhp81ResourceReturnToObjectRector`](../rules/DowngradePhp81/Rector/Instanceof_/DowngradePhp81ResourceReturnToObjectRector.php)
-
-```diff
- class SomeClass
- {
- public function run($obj)
- {
-- $obj instanceof \finfo;
-+ is_resource($obj) || $obj instanceof \finfo;
- }
- }
-```
-
-
-
-## DowngradePhpTokenRector
-
-`"something()"` will be renamed to `"somethingElse()"`
-
-- class: [`Rector\DowngradePhp80\Rector\StaticCall\DowngradePhpTokenRector`](../rules/DowngradePhp80/Rector/StaticCall/DowngradePhpTokenRector.php)
-
-```diff
--$tokens = \PhpToken::tokenize($code);
-+$tokens = token_get_all($code);
-
--foreach ($tokens as $phpToken) {
-- $name = $phpToken->getTokenName();
-- $text = $phpToken->text;
-+foreach ($tokens as $token) {
-+ $name = is_array($token) ? token_name($token[0]) : null;
-+ $text = is_array($token) ? $token[1] : $token;
- }
-```
-
-
-
-## DowngradePregUnmatchedAsNullConstantRector
-
-Remove PREG_UNMATCHED_AS_NULL from preg_match and set null value on empty string matched on each match
-
-- class: [`Rector\DowngradePhp72\Rector\FuncCall\DowngradePregUnmatchedAsNullConstantRector`](../rules/DowngradePhp72/Rector/FuncCall/DowngradePregUnmatchedAsNullConstantRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- preg_match('/(a)(b)*(c)/', 'ac', $matches, PREG_UNMATCHED_AS_NULL);
-+ preg_match('/(a)(b)*(c)/', 'ac', $matches);
-+
-+ array_walk_recursive($matches, function (&$value) {
-+ if ($value === '') {
-+ $value = null;
-+ }
-+ });
- }
- }
-```
-
-
-
-## DowngradePreviouslyImplementedInterfaceRector
-
-Downgrade previously implemented interface
-
-- class: [`Rector\DowngradePhp74\Rector\Interface_\DowngradePreviouslyImplementedInterfaceRector`](../rules/DowngradePhp74/Rector/Interface_/DowngradePreviouslyImplementedInterfaceRector.php)
-
-```diff
- interface ContainerExceptionInterface extends Throwable
- {
- }
-
--interface ExceptionInterface extends ContainerExceptionInterface, Throwable
-+interface ExceptionInterface extends ContainerExceptionInterface
- {
- }
-```
-
-
-
-## DowngradeProcOpenArrayCommandArgRector
-
-Change array command argument on proc_open to implode spaced string
-
-- class: [`Rector\DowngradePhp74\Rector\FuncCall\DowngradeProcOpenArrayCommandArgRector`](../rules/DowngradePhp74/Rector/FuncCall/DowngradeProcOpenArrayCommandArgRector.php)
-
-```diff
--return proc_open($command, $descriptorspec, $pipes, null, null, ['suppress_errors' => true]);
-+return proc_open(is_array($command) ? implode(' ', array_map('escapeshellarg', $command)) : $command, $descriptorspec, $pipes, null, null, ['suppress_errors' => true]);
-```
-
-
-
-## DowngradePropertyPromotionRector
-
-Change constructor property promotion to property assign
-
-- class: [`Rector\DowngradePhp80\Rector\Class_\DowngradePropertyPromotionRector`](../rules/DowngradePhp80/Rector/Class_/DowngradePropertyPromotionRector.php)
-
-```diff
- class SomeClass
- {
-- public function __construct(public float $value = 0.0)
-+ public float $value;
-+
-+ public function __construct(float $value = 0.0)
- {
-+ $this->value = $value;
- }
- }
-```
-
-
-
-## DowngradePureIntersectionTypeRector
-
-Remove the intersection type params and returns, add `@param/@return` tags instead
-
-- class: [`Rector\DowngradePhp81\Rector\FunctionLike\DowngradePureIntersectionTypeRector`](../rules/DowngradePhp81/Rector/FunctionLike/DowngradePureIntersectionTypeRector.php)
-
-```diff
--function someFunction(): Foo&Bar
-+/**
-+ * @return Foo&Bar
-+ */
-+function someFunction()
- {
- }
-```
-
-
-
-## DowngradeReadonlyClassRector
-
-Remove "readonly" class type, decorate all properties to "readonly"
-
-- class: [`Rector\DowngradePhp82\Rector\Class_\DowngradeReadonlyClassRector`](../rules/DowngradePhp82/Rector/Class_/DowngradeReadonlyClassRector.php)
-
-```diff
--final readonly class SomeClass
-+final class SomeClass
- {
-- public string $foo;
-+ public readonly string $foo;
-
- public function __construct()
- {
- $this->foo = 'foo';
- }
- }
-```
-
-
-
-## DowngradeReadonlyPropertyRector
-
-Remove "readonly" property type, add a "@readonly" tag instead
-
-- class: [`Rector\DowngradePhp81\Rector\Property\DowngradeReadonlyPropertyRector`](../rules/DowngradePhp81/Rector/Property/DowngradeReadonlyPropertyRector.php)
-
-```diff
- class SomeClass
- {
-- public readonly string $foo;
-+ /**
-+ * @readonly
-+ */
-+ public string $foo;
-
- public function __construct()
- {
- $this->foo = 'foo';
- }
- }
-```
-
-
-
-## DowngradeRecursiveDirectoryIteratorHasChildrenRector
-
-Remove bool type hint on child of RecursiveDirectoryIterator hasChildren allowLinks parameter
-
-- class: [`Rector\DowngradePhp80\Rector\ClassMethod\DowngradeRecursiveDirectoryIteratorHasChildrenRector`](../rules/DowngradePhp80/Rector/ClassMethod/DowngradeRecursiveDirectoryIteratorHasChildrenRector.php)
-
-```diff
- class RecursiveDirectoryIteratorChild extends \RecursiveDirectoryIterator
- {
-- public function hasChildren(bool $allowLinks = false): bool
-+ public function hasChildren($allowLinks = false): bool
- {
- return true;
- }
- }
-```
-
-
-
-## DowngradeReflectionClassGetConstantsFilterRector
-
-Downgrade ReflectionClass->getConstants(ReflectionClassConstant::IS_*)
-
-- class: [`Rector\DowngradePhp80\Rector\MethodCall\DowngradeReflectionClassGetConstantsFilterRector`](../rules/DowngradePhp80/Rector/MethodCall/DowngradeReflectionClassGetConstantsFilterRector.php)
-
-```diff
- $reflectionClass = new ReflectionClass('SomeClass');
--$constants = $reflectionClass->getConstants(ReflectionClassConstant::IS_PUBLIC));
-+$reflectionClassConstants = $reflectionClass->getReflectionConstants();
-+$result = [];
-+array_walk($reflectionClassConstants, function ($value) use (&$result) {
-+ if ($value->isPublic()) {
-+ $result[$value->getName()] = $value->getValue();
-+ }
-+});
-+$constants = $result;
-```
-
-
-
-## DowngradeReflectionGetAttributesRector
-
-Remove reflection `getAttributes()` class method code
-
-- class: [`Rector\DowngradePhp80\Rector\MethodCall\DowngradeReflectionGetAttributesRector`](../rules/DowngradePhp80/Rector/MethodCall/DowngradeReflectionGetAttributesRector.php)
-
-```diff
- function run(ReflectionClass $reflectionClass)
- {
-- return $reflectionClass->getAttributes();
-+ return method_exists($reflectionClass, 'getAttributes') ? $reflectionClass->getAttributes() ? [];
- }
-```
-
-
-
-## DowngradeReflectionGetTypeRector
-
-Downgrade reflection `$reflection->getType()` method call
-
-- class: [`Rector\DowngradePhp74\Rector\MethodCall\DowngradeReflectionGetTypeRector`](../rules/DowngradePhp74/Rector/MethodCall/DowngradeReflectionGetTypeRector.php)
-
-```diff
- class SomeClass
- {
- public function run(ReflectionProperty $reflectionProperty)
- {
-- if ($reflectionProperty->getType()) {
-+ if (method_exists($reflectionProperty, 'getType') ? $reflectionProperty->getType() ? null) {
- return true;
- }
-
- return false;
- }
- }
-```
-
-
-
-## DowngradeReflectionPropertyGetDefaultValueRector
-
-Downgrade `ReflectionProperty->getDefaultValue()`
-
-- class: [`Rector\DowngradePhp80\Rector\MethodCall\DowngradeReflectionPropertyGetDefaultValueRector`](../rules/DowngradePhp80/Rector/MethodCall/DowngradeReflectionPropertyGetDefaultValueRector.php)
-
-```diff
- class SomeClass
- {
- public function run(ReflectionProperty $reflectionProperty)
- {
-- return $reflectionProperty->getDefaultValue();
-+ return $reflectionProperty->getDeclaringClass()->getDefaultProperties()[$reflectionProperty->getName()] ?? null;
- }
- }
-```
-
-
-
-## DowngradeSetAccessibleReflectionPropertyRector
-
-Add `setAccessible()` on ReflectionProperty to allow reading private properties in PHP 8.0-
-
-- class: [`Rector\DowngradePhp81\Rector\StmtsAwareInterface\DowngradeSetAccessibleReflectionPropertyRector`](../rules/DowngradePhp81/Rector/StmtsAwareInterface/DowngradeSetAccessibleReflectionPropertyRector.php)
-
-```diff
- class SomeClass
- {
- public function run($object)
- {
- $reflectionProperty = new ReflectionProperty($object, 'bar');
-+ $reflectionProperty->setAccessible(true);
-
- return $reflectionProperty->getValue($object);
- }
- }
-```
-
-
-
-## DowngradeStandaloneNullTrueFalseReturnTypeRector
-
-Downgrade standalone return null, true, or false
-
-- class: [`Rector\DowngradePhp82\Rector\FunctionLike\DowngradeStandaloneNullTrueFalseReturnTypeRector`](../rules/DowngradePhp82/Rector/FunctionLike/DowngradeStandaloneNullTrueFalseReturnTypeRector.php)
-
-```diff
- final class SomeClass
- {
-- public function run(): null
-+ public function run(): mixed
- {
- return null;
- }
- }
-```
-
-
-
-## DowngradeStaticTypeDeclarationRector
-
-Remove "static" return and param type, add a `"@param` `$this"` and `"@return` `$this"` tag instead
-
-- class: [`Rector\DowngradePhp80\Rector\ClassMethod\DowngradeStaticTypeDeclarationRector`](../rules/DowngradePhp80/Rector/ClassMethod/DowngradeStaticTypeDeclarationRector.php)
-
-```diff
- class SomeClass
- {
-- public function getStatic(): static
-+ /**
-+ * @return static
-+ */
-+ public function getStatic()
- {
- return new static();
- }
- }
-```
-
-
-
-## DowngradeStrContainsRector
-
-Replace `str_contains()` with `strpos()` !== false
-
-- class: [`Rector\DowngradePhp80\Rector\FuncCall\DowngradeStrContainsRector`](../rules/DowngradePhp80/Rector/FuncCall/DowngradeStrContainsRector.php)
-
-```diff
- class SomeClass
- {
- public function run()
- {
-- return str_contains('abc', 'a');
-+ return strpos('abc', 'a') !== false;
- }
- }
-```
-
-
-
-## DowngradeStrEndsWithRector
-
-Downgrade `str_ends_with()` to `strncmp()` version
-
-- class: [`Rector\DowngradePhp80\Rector\FuncCall\DowngradeStrEndsWithRector`](../rules/DowngradePhp80/Rector/FuncCall/DowngradeStrEndsWithRector.php)
-
-```diff
--str_ends_with($haystack, $needle);
-+"" === $needle || ("" !== $haystack && 0 === substr_compare($haystack, $needle, -\strlen($needle)));
-```
-
-
-
-## DowngradeStrStartsWithRector
-
-Downgrade `str_starts_with()` to `strncmp()` version
-
-- class: [`Rector\DowngradePhp80\Rector\FuncCall\DowngradeStrStartsWithRector`](../rules/DowngradePhp80/Rector/FuncCall/DowngradeStrStartsWithRector.php)
-
-```diff
--str_starts_with($haystack, $needle);
-+strncmp($haystack, $needle, strlen($needle)) === 0;
-```
-
-
-
-## DowngradeStreamIsattyRector
-
-Downgrade `stream_isatty()` function
-
-- class: [`Rector\DowngradePhp72\Rector\FuncCall\DowngradeStreamIsattyRector`](../rules/DowngradePhp72/Rector/FuncCall/DowngradeStreamIsattyRector.php)
-
-```diff
- class SomeClass
- {
- public function run($stream)
- {
-- $isStream = stream_isatty($stream);
-+ $streamIsatty = function ($stream) {
-+ if (\function_exists('stream_isatty')) {
-+ return stream_isatty($stream);
-+ }
-+
-+ if (!\is_resource($stream)) {
-+ trigger_error('stream_isatty() expects parameter 1 to be resource, '.\gettype($stream).' given', \E_USER_WARNING);
-+
-+ return false;
-+ }
-+
-+ if ('\\' === \DIRECTORY_SEPARATOR) {
-+ $stat = @fstat($stream);
-+ // Check if formatted mode is S_IFCHR
-+ return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;
-+ }
-+
-+ return \function_exists('posix_isatty') && @posix_isatty($stream);
-+ };
-+ $isStream = $streamIsatty($stream);
- }
- }
-```
-
-
-
-## DowngradeStringReturnTypeOnToStringRector
-
-Add "string" return on current `__toString()` method when parent method has string return on `__toString()` method
-
-- class: [`Rector\DowngradePhp80\Rector\ClassMethod\DowngradeStringReturnTypeOnToStringRector`](../rules/DowngradePhp80/Rector/ClassMethod/DowngradeStringReturnTypeOnToStringRector.php)
-
-```diff
- abstract class ParentClass
- {
- public function __toString(): string
- {
- return 'value';
- }
- }
-
- class ChildClass extends ParentClass
- {
-- public function __toString()
-+ public function __toString(): string
- {
- return 'value';
- }
- }
-```
-
-
-
-## DowngradeStripTagsCallWithArrayRector
-
-Convert 2nd argument in `strip_tags()` from array to string
-
-- class: [`Rector\DowngradePhp74\Rector\FuncCall\DowngradeStripTagsCallWithArrayRector`](../rules/DowngradePhp74/Rector/FuncCall/DowngradeStripTagsCallWithArrayRector.php)
-
-```diff
- class SomeClass
- {
- public function run($string)
- {
- // Arrays: change to string
-- strip_tags($string, ['a', 'p']);
-+ strip_tags($string, '<' . implode('><', ['a', 'p']) . '>');
-
- // Variables/consts/properties: if array, change to string
- $tags = ['a', 'p'];
-- strip_tags($string, $tags);
-+ strip_tags($string, $tags !== null && is_array($tags) ? '<' . implode('><', $tags) . '>' : $tags);
- }
- }
-```
-
-
-
-## DowngradeThrowExprRector
-
-Downgrade throw expression
-
-- class: [`Rector\DowngradePhp80\Rector\Expression\DowngradeThrowExprRector`](../rules/DowngradePhp80/Rector/Expression/DowngradeThrowExprRector.php)
-
-```diff
--echo $variable ?? throw new RuntimeException();
-+if (! isset($variable)) {
-+ throw new RuntimeException();
-+}
-+
-+echo $variable;
-```
-
-
-
-## DowngradeTrailingCommasInFunctionCallsRector
-
-Remove trailing commas in function calls
-
-- class: [`Rector\DowngradePhp73\Rector\FuncCall\DowngradeTrailingCommasInFunctionCallsRector`](../rules/DowngradePhp73/Rector/FuncCall/DowngradeTrailingCommasInFunctionCallsRector.php)
-
-```diff
- class SomeClass
- {
- public function __construct(string $value)
- {
- $compacted = compact(
- 'posts',
-- 'units',
-+ 'units'
- );
- }
- }
-```
-
-
-
-## DowngradeTrailingCommasInParamUseRector
-
-Remove trailing commas in param or use list
-
-- class: [`Rector\DowngradePhp80\Rector\ClassMethod\DowngradeTrailingCommasInParamUseRector`](../rules/DowngradePhp80/Rector/ClassMethod/DowngradeTrailingCommasInParamUseRector.php)
-
-```diff
- class SomeClass
- {
-- public function __construct(string $value1, string $value2,)
-+ public function __construct(string $value1, string $value2)
- {
-- function (string $value1, string $value2,) {
-+ function (string $value1, string $value2) {
- };
-
-- function () use ($value1, $value2,) {
-+ function () use ($value1, $value2) {
- };
- }
- }
-
--function inFunction(string $value1, string $value2,)
-+function inFunction(string $value1, string $value2)
- {
- }
-```
-
-
-
-## DowngradeTrailingCommasInUnsetRector
-
-Remove trailing commas in unset
-
-- class: [`Rector\DowngradePhp73\Rector\Unset_\DowngradeTrailingCommasInUnsetRector`](../rules/DowngradePhp73/Rector/Unset_/DowngradeTrailingCommasInUnsetRector.php)
-
-```diff
- unset(
- $x,
-- $y,
-+ $y
- );
-```
-
-
-
-## DowngradeTypedClassConstRector
-
-Remove typed class constant
-
-- class: [`Rector\DowngradePhp83\Rector\ClassConst\DowngradeTypedClassConstRector`](../rules/DowngradePhp83/Rector/ClassConst/DowngradeTypedClassConstRector.php)
-
-```diff
- final class SomeClass
- {
-- public string FOO = 'test';
-+ /**
-+ * @var string
-+ */
-+ public FOO = 'test';
- }
-```
-
-
-
-## DowngradeTypedPropertyRector
-
-Changes property type definition from type definitions to `@var` annotations.
-
-- class: [`Rector\DowngradePhp74\Rector\Property\DowngradeTypedPropertyRector`](../rules/DowngradePhp74/Rector/Property/DowngradeTypedPropertyRector.php)
-
-```diff
- class SomeClass
- {
-- private string $property;
-+ /**
-+ * @var string
-+ */
-+ private $property;
- }
-```
-
-
-
-## DowngradeUnionTypeDeclarationRector
-
-Remove the union type params and returns, add `@param/@return` tags instead
-
-- class: [`Rector\DowngradePhp80\Rector\FunctionLike\DowngradeUnionTypeDeclarationRector`](../rules/DowngradePhp80/Rector/FunctionLike/DowngradeUnionTypeDeclarationRector.php)
-
-```diff
- class SomeClass
- {
-- public function echoInput(string|int $input): int|bool
-+ /**
-+ * @param string|int $input
-+ * @return int|bool
-+ */
-+ public function echoInput($input)
- {
- echo $input;
- }
- }
-```
-
-
-
-## DowngradeUnionTypeTypedPropertyRector
-
-Removes union type property type definition, adding `@var` annotations instead.
-
-- class: [`Rector\DowngradePhp80\Rector\Property\DowngradeUnionTypeTypedPropertyRector`](../rules/DowngradePhp80/Rector/Property/DowngradeUnionTypeTypedPropertyRector.php)
-
-```diff
- class SomeClass
- {
-- private string|int $property;
-+ /**
-+ * @var string|int
-+ */
-+ private $property;
- }
-```
-
-
-
-## RemoveReturnTypeDeclarationFromCloneRector
-
-Remove return type from `__clone()` method
-
-- class: [`Rector\DowngradePhp80\Rector\ClassMethod\RemoveReturnTypeDeclarationFromCloneRector`](../rules/DowngradePhp80/Rector/ClassMethod/RemoveReturnTypeDeclarationFromCloneRector.php)
-
-```diff
- final class SomeClass
- {
-- public function __clone(): void
-+ public function __clone()
- {
- }
- }
-```
-
-
-
-## SetCookieOptionsArrayToArgumentsRector
-
-Convert setcookie option array to arguments
-
-- class: [`Rector\DowngradePhp73\Rector\FuncCall\SetCookieOptionsArrayToArgumentsRector`](../rules/DowngradePhp73/Rector/FuncCall/SetCookieOptionsArrayToArgumentsRector.php)
-
-```diff
--setcookie('name', $value, ['expires' => 360]);
-+setcookie('name', $value, 360);
-```
-
-
diff --git a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/DowngradeArraySpreadStringKeyRectorTest.php b/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/DowngradeArraySpreadStringKeyRectorTest.php
deleted file mode 100644
index f8c6e226..00000000
--- a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/DowngradeArraySpreadStringKeyRectorTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-doTestFile($filePath);
- }
-
- public static function provideData(): Iterator
- {
- return self::yieldFilesFromDirectory(__DIR__ . '/Fixture');
- }
-
- public function provideConfigFilePath(): string
- {
- return __DIR__ . '/config/configured_rule.php';
- }
-}
diff --git a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/array_spread_string_key.php.inc b/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/array_spread_string_key.php.inc
deleted file mode 100644
index b7f7707a..00000000
--- a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/array_spread_string_key.php.inc
+++ /dev/null
@@ -1,31 +0,0 @@
- 'b'];
- $parts2 = ['c' => 'd'];
-
- $result = [...$parts, ...$parts2];
- }
-}
-
-?>
------
- 'b'];
- $parts2 = ['c' => 'd'];
-
- $result = array_merge($parts, $parts2);
- }
-}
-
-?>
diff --git a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/array_spread_string_key_by_doc.php.inc b/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/array_spread_string_key_by_doc.php.inc
deleted file mode 100644
index b73d6d64..00000000
--- a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/array_spread_string_key_by_doc.php.inc
+++ /dev/null
@@ -1,51 +0,0 @@
- $parts */
- $parts = $this->data();
- /** @var array $parts2 */
- $parts2 = $this->data();
-
- $result = [...$parts, ...$parts2];
- }
-
- /**
- * @return array
- */
- private function data(): array
- {
- return ['your' => 'name'];
- }
-}
-
-?>
------
- $parts */
- $parts = $this->data();
- /** @var array $parts2 */
- $parts2 = $this->data();
-
- $result = array_merge($parts, $parts2);
- }
-
- /**
- * @return array
- */
- private function data(): array
- {
- return ['your' => 'name'];
- }
-}
-
-?>
diff --git a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/skip_array_spread_int_key.php.inc b/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/skip_array_spread_int_key.php.inc
deleted file mode 100644
index 8b844a18..00000000
--- a/rules-tests/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector/Fixture/skip_array_spread_int_key.php.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-rule(DowngradeArraySpreadStringKeyRector::class);
-};
diff --git a/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php b/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php
deleted file mode 100644
index e27d6e43..00000000
--- a/rules/DowngradePhp81/Rector/Array_/DowngradeArraySpreadStringKeyRector.php
+++ /dev/null
@@ -1,107 +0,0 @@
- 'b'];
-$parts2 = ['c' => 'd'];
-
-$result = [...$parts, ...$parts2];
-CODE_SAMPLE
- ,
- <<<'CODE_SAMPLE'
-$parts = ['a' => 'b'];
-$parts2 = ['c' => 'd'];
-
-$result = array_merge($parts, $parts2);
-CODE_SAMPLE
- ),
- ]
- );
- }
-
- /**
- * @return array>
- */
- public function getNodeTypes(): array
- {
- return [Array_::class];
- }
-
- /**
- * @param Array_ $node
- */
- public function refactor(Node $node): ?Node
- {
- if (! $this->arraySpreadAnalyzer->isArrayWithUnpack($node)) {
- return null;
- }
-
- if ($this->shouldSkipArray($node)) {
- return null;
- }
-
- /** @var MutatingScope $scope */
- $scope = ScopeFetcher::fetch($node);
-
- return $this->arrayMergeFromArraySpreadFactory->createFromArray($node, $scope);
- }
-
- private function shouldSkipArray(Array_ $array): bool
- {
- foreach ($array->items as $item) {
- if (! $item instanceof ArrayItem) {
- continue;
- }
-
- $type = $this->nodeTypeResolver->getType($item->value);
- if (! $type instanceof ArrayType && ! $type instanceof ConstantArrayType) {
- continue;
- }
-
- $keyType = $type->getKeyType();
- if ($keyType instanceof IntegerType) {
- return true;
- }
- }
-
- return false;
- }
-}
diff --git a/tests/Issues/IssueDowngradeArraySpread/Fixture/merge_const.php.inc b/tests/Issues/IssueDowngradeArraySpread/Fixture/merge_const.php.inc
deleted file mode 100644
index b5e317dc..00000000
--- a/tests/Issues/IssueDowngradeArraySpread/Fixture/merge_const.php.inc
+++ /dev/null
@@ -1,86 +0,0 @@
-
------
-
diff --git a/tests/Issues/IssueDowngradeArraySpread/Fixture/skip_property_default.php.inc b/tests/Issues/IssueDowngradeArraySpread/Fixture/skip_property_default.php.inc
deleted file mode 100644
index 38e68368..00000000
--- a/tests/Issues/IssueDowngradeArraySpread/Fixture/skip_property_default.php.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-doTestFile($filePath);
- }
-
- public static function provideData(): Iterator
- {
- return self::yieldFilesFromDirectory(__DIR__ . '/Fixture');
- }
-
- public function provideConfigFilePath(): string
- {
- return __DIR__ . '/config/configured_rule.php';
- }
-}
diff --git a/tests/Issues/IssueDowngradeArraySpread/config/configured_rule.php b/tests/Issues/IssueDowngradeArraySpread/config/configured_rule.php
deleted file mode 100644
index b826c5b5..00000000
--- a/tests/Issues/IssueDowngradeArraySpread/config/configured_rule.php
+++ /dev/null
@@ -1,14 +0,0 @@
-rules([DowngradeArraySpreadStringKeyRector::class, DowngradeArraySpreadRector::class]);
-
- $rectorConfig->phpVersion(PhpVersion::PHP_81);
-};