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..46e12a13933 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,9 @@ final class SomeClass public function setup() { $someSetterClass = new SomeSetterClass(); - $someSetterClass->setSurname('Doe'); $someSetterClass->setName('John'); + $someSetterClass->setSurname('Doe'); + return $someSetterClass; } } 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/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-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; } @@ -119,6 +124,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 @@ -126,6 +134,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;