From e94bf92baf7a4b14411b1ca838d64801d98ca539 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 13 Nov 2025 23:05:33 +0100 Subject: [PATCH 1/3] reverse to keep original order --- .../Fixture/fixture.php.inc | 2 +- .../Fixture/skip_mocks_on_variable.php.inc | 17 +++++++++++++++++ ...luentSettersToStandaloneCallMethodRector.php | 5 ++++- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_mocks_on_variable.php.inc diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc index 4fc297bacff..96644ce52ea 100644 --- a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc @@ -27,8 +27,8 @@ final class SomeClass public function setup() { $someSetterClass = new SomeSetterClass(); - $someSetterClass->setSurname('Doe'); $someSetterClass->setName('John'); + $someSetterClass->setSurname('Doe'); } } diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_mocks_on_variable.php.inc b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_mocks_on_variable.php.inc new file mode 100644 index 00000000000..991c9fc08f2 --- /dev/null +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_mocks_on_variable.php.inc @@ -0,0 +1,17 @@ +createMock(SomeSetterClass::class); + $someVariable->expects($this->once()) + ->method('some') + ->with(1); + } +} diff --git a/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php b/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php index 8c8907e11f9..66f9c48246f 100644 --- a/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php +++ b/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php @@ -4,7 +4,6 @@ namespace Rector\Unambiguous\Rector\Expression; -use PHPStan\Type\ObjectType; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; @@ -15,6 +14,7 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Return_; use PHPStan\Reflection\ClassReflection; +use PHPStan\Type\ObjectType; use Rector\Naming\Naming\PropertyNaming; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; @@ -119,6 +119,9 @@ public function refactor(Node $node): ?array $firstAssign = new Assign($someVariable, $rootExpr); $stmts = [new Expression($firstAssign)]; + // revert to normal order + $methodCalls = array_reverse($methodCalls); + foreach ($methodCalls as $methodCall) { $methodCall->var = $someVariable; // inlines indent and removes () around first expr From 3340413d3c97da1d293a68a7a68e7ff7522ca68b Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 13 Nov 2025 23:12:12 +0100 Subject: [PATCH 2/3] keep return --- .../Fixture/fixture.php.inc | 1 + .../Expression/FluentSettersToStandaloneCallMethodRector.php | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc index 96644ce52ea..46e12a13933 100644 --- a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/fixture.php.inc @@ -29,6 +29,7 @@ final class SomeClass $someSetterClass = new SomeSetterClass(); $someSetterClass->setName('John'); $someSetterClass->setSurname('Doe'); + return $someSetterClass; } } diff --git a/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php b/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php index 66f9c48246f..67a6582cbb8 100644 --- a/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php +++ b/rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php @@ -129,6 +129,11 @@ public function refactor(Node $node): ?array $stmts[] = new Expression($methodCall); } + if ($node instanceof Return_) { + $node->expr = $someVariable; + $stmts[] = $node; + } + $node->expr = $someVariable; return $stmts; From 01aa2549132e2bc5be3969d155aa5ef946e0ac61 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 13 Nov 2025 23:16:06 +0100 Subject: [PATCH 3/3] skip getter --- .../Fixture/skip_getter_setter.php.inc | 18 ++++++++++++++++++ .../Source/GetterSetterClass.php | 11 +++++++++++ ...uentSettersToStandaloneCallMethodRector.php | 5 +++++ 3 files changed, 34 insertions(+) create mode 100644 rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_getter_setter.php.inc create mode 100644 rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/GetterSetterClass.php diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_getter_setter.php.inc b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_getter_setter.php.inc new file mode 100644 index 00000000000..8ee1f312eed --- /dev/null +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Fixture/skip_getter_setter.php.inc @@ -0,0 +1,18 @@ +getter() + ->setName('John') + ->setSurname('Doe'); + } +} diff --git a/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/GetterSetterClass.php b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/GetterSetterClass.php new file mode 100644 index 00000000000..0ca827146dc --- /dev/null +++ b/rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/GetterSetterClass.php @@ -0,0 +1,11 @@ +getArgs()) !== 1) { + return null; + } + $methodCalls[] = $currentMethodCall; $currentMethodCall = $currentMethodCall->var; }