From 594a52b45aa40d69a81f1632f90e6bbe4fde2195 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 20 Dec 2025 22:39:22 +0700 Subject: [PATCH 1/3] Fix variable counter keep changing on downgrade on DowngradeNullsafeToTernaryOperatorRector --- .../Fixture/get_nullable.php.inc | 2 +- .../Fixture/get_nullable_in_trait.php.inc | 2 +- .../Fixture/multiple_call.php.inc | 4 ++-- .../Fixture/short_circuit.php.inc | 2 +- .../Fixture/short_circuit3.php.inc | 2 +- .../Fixture/short_circuit4.php.inc | 2 +- .../Fixture/short_circuit5.php.inc | 2 +- .../DowngradeNullsafeToTernaryOperatorRector.php | 7 +++++++ 8 files changed, 15 insertions(+), 8 deletions(-) diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable.php.inc index 3ea90707..bc3cb379 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable.php.inc @@ -27,7 +27,7 @@ final class GetNullable { public function run($value) { - return ($nullsafeVariable6 = $this->extractArrayItemByKey($value)) ? $nullsafeVariable6->value : null; + return ($nullsafeVariable1 = $this->extractArrayItemByKey($value)) ? $nullsafeVariable1->value : null; } protected function extractArrayItemByKey($value): ?ArrayItem diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable_in_trait.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable_in_trait.php.inc index dbc18abe..1f58f938 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable_in_trait.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/get_nullable_in_trait.php.inc @@ -29,7 +29,7 @@ trait GetNullableInTrait { public function run($value) { - return ($nullsafeVariable7 = $this->extractArrayItemByKey($value)) ? $nullsafeVariable7->value : null; + return ($nullsafeVariable1 = $this->extractArrayItemByKey($value)) ? $nullsafeVariable1->value : null; } protected function extractArrayItemByKey($value): ?ArrayItem diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc index 4c564932..949babb7 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc @@ -21,8 +21,8 @@ class MultipleCall { public function run($object) { - $result = ($nullsafeVariable8 = ($nullsafeVariable10 = $object->multiple($args1)) ? $nullsafeVariable10->call($args2) : null) ? $nullsafeVariable8->otherCall($args3) : null; - $result = ($nullsafeVariable9 = ($nullsafeVariable11 = ($nullsafeVariable12 = $object->multiple($args1)) ? $nullsafeVariable12->call($args2) : null) ? $nullsafeVariable11->otherCall($args3) : null) ? $nullsafeVariable9->anotherCall($args4) : null; + $result = ($nullsafeVariable1 = ($nullsafeVariable2 = $object->multiple($args1)) ? $nullsafeVariable2->call($args2) : null) ? $nullsafeVariable1->otherCall($args3) : null; + $result = ($nullsafeVariable3 = ($nullsafeVariable4 = ($nullsafeVariable5 = $object->multiple($args1)) ? $nullsafeVariable5->call($args2) : null) ? $nullsafeVariable4->otherCall($args3) : null) ? $nullsafeVariable3->anotherCall($args4) : null; } } diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit.php.inc index e4040587..ba99b780 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit.php.inc @@ -20,7 +20,7 @@ final class ShortCircuit { public function run(bool $param) { - return ($nullsafeVariable13 = $this->clock) ? $nullsafeVariable13->now()->format('U.u') : null; + return ($nullsafeVariable1 = $this->clock) ? $nullsafeVariable1->now()->format('U.u') : null; } } diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit3.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit3.php.inc index 77b60e08..6e092e8f 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit3.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit3.php.inc @@ -20,7 +20,7 @@ final class ShortCircuit3 { public function run(bool $param) { - return ($nullsafeVariable14 = $this->clock) ? $nullsafeVariable14->now->format : null; + return ($nullsafeVariable1 = $this->clock) ? $nullsafeVariable1->now->format : null; } } diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit4.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit4.php.inc index 4724090d..3b6bcf05 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit4.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit4.php.inc @@ -20,7 +20,7 @@ final class ShortCircuit4 { public function run(bool $param) { - return ($nullsafeVariable15 = $this->clock) ? $nullsafeVariable15->now->format('U.u') : null; + return ($nullsafeVariable1 = $this->clock) ? $nullsafeVariable1->now->format('U.u') : null; } } diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit5.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit5.php.inc index b0f45bfe..ac3b63b6 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit5.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/short_circuit5.php.inc @@ -20,7 +20,7 @@ final class ShortCircuit5 { public function run(bool $param) { - return ($nullsafeVariable16 = $this->clock) ? $nullsafeVariable16->now()->format : null; + return ($nullsafeVariable1 = $this->clock) ? $nullsafeVariable1->now()->format : null; } } diff --git a/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php b/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php index ddc38f58..8fb176e6 100644 --- a/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php +++ b/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php @@ -51,6 +51,13 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Ternary { + static $currentFile = $this->file; + + if ($currentFile !== $this->file) { + $this->counter = 0; + $currentFile = $this->file; + } + if ($node instanceof MethodCall || $node instanceof PropertyFetch) { if ($node->var instanceof NullsafeMethodCall || $node->var instanceof NullsafePropertyFetch) { $nullsafeVariable = $this->createNullsafeVariable(); From dfbdd701a02db8f4c912aa6d1d61f3bad3f328ce Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 20 Dec 2025 22:45:04 +0700 Subject: [PATCH 2/3] php 8.2 compat --- .../DowngradeNullsafeToTernaryOperatorRector.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php b/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php index 8fb176e6..b3cb7e90 100644 --- a/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php +++ b/rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php @@ -51,11 +51,11 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Ternary { - static $currentFile = $this->file; + static $currentFile = null; - if ($currentFile !== $this->file) { + if ($currentFile !== $this->file->getFilePath()) { $this->counter = 0; - $currentFile = $this->file; + $currentFile = $this->file->getFilePath(); } if ($node instanceof MethodCall || $node instanceof PropertyFetch) { From 0caa79be714d5f2465b9fbce66a23cfacc957dcf Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 20 Dec 2025 22:48:33 +0700 Subject: [PATCH 3/3] fix --- composer.json | 2 +- .../Fixture/multiple_call.php.inc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index f5fbf6c1..198461ff 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ "phpstan/phpstan": "^2.1.32", "phpstan/phpstan-webmozart-assert": "^2.0", "phpunit/phpunit": "^11.5", - "rector/rector-src": "dev-tv-traverse-optimize", + "rector/rector-src": "dev-main", "rector/type-perfect": "^2.1", "symplify/easy-coding-standard": "^12.3", "symplify/phpstan-extensions": "^12.0", diff --git a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc index 949babb7..52d9dac6 100644 --- a/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc +++ b/rules-tests/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector/Fixture/multiple_call.php.inc @@ -21,8 +21,8 @@ class MultipleCall { public function run($object) { - $result = ($nullsafeVariable1 = ($nullsafeVariable2 = $object->multiple($args1)) ? $nullsafeVariable2->call($args2) : null) ? $nullsafeVariable1->otherCall($args3) : null; - $result = ($nullsafeVariable3 = ($nullsafeVariable4 = ($nullsafeVariable5 = $object->multiple($args1)) ? $nullsafeVariable5->call($args2) : null) ? $nullsafeVariable4->otherCall($args3) : null) ? $nullsafeVariable3->anotherCall($args4) : null; + $result = ($nullsafeVariable1 = ($nullsafeVariable3 = $object->multiple($args1)) ? $nullsafeVariable3->call($args2) : null) ? $nullsafeVariable1->otherCall($args3) : null; + $result = ($nullsafeVariable2 = ($nullsafeVariable4 = ($nullsafeVariable5 = $object->multiple($args1)) ? $nullsafeVariable5->call($args2) : null) ? $nullsafeVariable4->otherCall($args3) : null) ? $nullsafeVariable2->anotherCall($args4) : null; } }