mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-23 03:02:33 +01:00
69 lines
2.8 KiB
PHP
69 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\Renaming\NodeManipulator;
|
|
|
|
use RectorPrefix20210521\Nette\Utils\Strings;
|
|
use PhpParser\Node;
|
|
use PhpParser\Node\Expr\ClassConstFetch;
|
|
use PhpParser\Node\Expr\MethodCall;
|
|
use PhpParser\Node\Expr\PropertyFetch;
|
|
use PhpParser\Node\Expr\StaticCall;
|
|
use PhpParser\Node\Identifier;
|
|
use PhpParser\Node\Stmt\ClassMethod;
|
|
use Rector\NodeNameResolver\NodeNameResolver;
|
|
use RectorPrefix20210521\Webmozart\Assert\Assert;
|
|
/**
|
|
* This class renames node identifier, e.g. ClassMethod rename:
|
|
*
|
|
* -public function someMethod()
|
|
* +public function newMethod()
|
|
*/
|
|
final class IdentifierManipulator
|
|
{
|
|
/**
|
|
* @var \Rector\NodeNameResolver\NodeNameResolver
|
|
*/
|
|
private $nodeNameResolver;
|
|
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
|
|
{
|
|
$this->nodeNameResolver = $nodeNameResolver;
|
|
}
|
|
/**
|
|
* @param ClassConstFetch|MethodCall|PropertyFetch|StaticCall|ClassMethod $node
|
|
* @param string[] $renameMethodMap
|
|
*/
|
|
public function renameNodeWithMap(\PhpParser\Node $node, array $renameMethodMap) : void
|
|
{
|
|
\RectorPrefix20210521\Webmozart\Assert\Assert::isAnyOf($node, [\PhpParser\Node\Expr\ClassConstFetch::class, \PhpParser\Node\Expr\MethodCall::class, \PhpParser\Node\Expr\PropertyFetch::class, \PhpParser\Node\Expr\StaticCall::class, \PhpParser\Node\Stmt\ClassMethod::class]);
|
|
$oldNodeMethodName = $this->resolveOldMethodName($node);
|
|
if ($oldNodeMethodName === null) {
|
|
return;
|
|
}
|
|
$node->name = new \PhpParser\Node\Identifier($renameMethodMap[$oldNodeMethodName]);
|
|
}
|
|
/**
|
|
* @param ClassConstFetch|MethodCall|PropertyFetch|StaticCall|ClassMethod $node
|
|
*/
|
|
public function removeSuffix(\PhpParser\Node $node, string $suffixToRemove) : void
|
|
{
|
|
\RectorPrefix20210521\Webmozart\Assert\Assert::isAnyOf($node, [\PhpParser\Node\Expr\ClassConstFetch::class, \PhpParser\Node\Expr\MethodCall::class, \PhpParser\Node\Expr\PropertyFetch::class, \PhpParser\Node\Expr\StaticCall::class, \PhpParser\Node\Stmt\ClassMethod::class]);
|
|
$name = $this->nodeNameResolver->getName($node);
|
|
if ($name === null) {
|
|
return;
|
|
}
|
|
$newName = \RectorPrefix20210521\Nette\Utils\Strings::replace($name, \sprintf('#%s$#', $suffixToRemove), '');
|
|
$node->name = new \PhpParser\Node\Identifier($newName);
|
|
}
|
|
/**
|
|
* @param ClassConstFetch|MethodCall|PropertyFetch|StaticCall|ClassMethod $node
|
|
*/
|
|
private function resolveOldMethodName(\PhpParser\Node $node) : ?string
|
|
{
|
|
if ($node instanceof \PhpParser\Node\Expr\StaticCall || $node instanceof \PhpParser\Node\Expr\MethodCall) {
|
|
return $this->nodeNameResolver->getName($node->name);
|
|
}
|
|
return $this->nodeNameResolver->getName($node);
|
|
}
|
|
}
|