[Defluent] Do not remove return from parameter and property on ReturnNewFluentChainMethodCallToNonFluentRector (#589)

* [Defluent] Do not remove return on ReturnNewFluentChainMethodCallToNonFluentRector

* [Defluent] Do not remove return on ReturnNewFluentChainMethodCallToNonFluentRector

* eol

* eol

* from parameter

* need to check on property as well

* Fixed 🎉

* final touch: clean up
This commit is contained in:
Abdul Malik Ikhsan 2021-08-04 14:25:40 +07:00 committed by GitHub
parent 529eb40360
commit 897e3da3b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 92 additions and 3 deletions

View File

@ -0,0 +1,32 @@
<?php
namespace Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Fixture;
use Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Source\FluentInterfaceClass;
class DoNotRemoveReturnFromParameter
{
public function someFunction(FluentInterfaceClass $fluentInterfaceClass)
{
return $fluentInterfaceClass->someFunction()->otherFunction();
}
}
?>
-----
<?php
namespace Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Fixture;
use Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Source\FluentInterfaceClass;
class DoNotRemoveReturnFromParameter
{
public function someFunction(FluentInterfaceClass $fluentInterfaceClass)
{
$fluentInterfaceClass->someFunction();
return $fluentInterfaceClass->otherFunction();
}
}
?>

View File

@ -0,0 +1,46 @@
<?php
namespace Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Fixture;
use Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Source\FluentInterfaceClass;
class DoNotRemoveReturnFromProperty
{
private FluentInterfaceClass $property;
public function __construct(FluentInterfaceClass $fluentInterfaceClass)
{
$this->property = $fluentInterfaceClass;
}
public function someFunction()
{
return $this->property->someFunction()->otherFunction();
}
}
?>
-----
<?php
namespace Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Fixture;
use Rector\Tests\Defluent\Rector\Return_\ReturnNewFluentChainMethodCallToNonFluentRector\Source\FluentInterfaceClass;
class DoNotRemoveReturnFromProperty
{
private FluentInterfaceClass $property;
public function __construct(FluentInterfaceClass $fluentInterfaceClass)
{
$this->property = $fluentInterfaceClass;
}
public function someFunction()
{
$this->property->someFunction();
return $this->property->otherFunction();
}
}
?>

View File

@ -85,10 +85,21 @@ CODE_SAMPLE
return null;
}
$this->fluentNodeRemover->removeCurrentNode($node);
$this->addNodesAfterNode($assignAndRootExprAndNodesToAdd->getNodesToAdd(), $node);
$nodesToAdd = $assignAndRootExprAndNodesToAdd->getNodesToAdd();
$lastNodeToAdd = end($nodesToAdd);
return null;
if (! $lastNodeToAdd) {
return null;
}
if (! $lastNodeToAdd instanceof Return_) {
$nodesToAdd[array_key_last($nodesToAdd)] = new Return_($lastNodeToAdd);
}
$this->fluentNodeRemover->removeCurrentNode($node);
$this->addNodesAfterNode($nodesToAdd, $node);
return $node;
}
private function matchReturnMethodCall(Return_ $return): ?Expr