mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-01 00:40:52 +00:00
[TriggerExtractor] extract logic to TriggerMessageResolver
This commit is contained in:
parent
242e185a11
commit
af69092363
|
@ -14,6 +14,7 @@ use PhpParser\Node\Scalar\String_;
|
|||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\NodeVisitorAbstract;
|
||||
use Rector\TriggerExtractor\Deprecation\DeprecationCollector;
|
||||
use Rector\TriggerExtractor\TriggerError\TriggerMessageResolver;
|
||||
|
||||
final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class aware node visitor
|
||||
{
|
||||
|
@ -22,9 +23,17 @@ final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class
|
|||
*/
|
||||
private $deprecationCollector;
|
||||
|
||||
public function __construct(DeprecationCollector $deprecationCollector)
|
||||
{
|
||||
/**
|
||||
* @var TriggerMessageResolver
|
||||
*/
|
||||
private $triggerMessageResolver;
|
||||
|
||||
public function __construct(
|
||||
DeprecationCollector $deprecationCollector,
|
||||
TriggerMessageResolver $triggerMessageResolver
|
||||
) {
|
||||
$this->deprecationCollector = $deprecationCollector;
|
||||
$this->triggerMessageResolver = $triggerMessageResolver;
|
||||
}
|
||||
|
||||
public function enterNode(Node $node): void
|
||||
|
@ -33,17 +42,10 @@ final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class
|
|||
return;
|
||||
}
|
||||
|
||||
/** @var FuncCall $funcCallNode */
|
||||
$funcCallNode = $node;
|
||||
/** @var FuncCall $node */
|
||||
$deprecation = $this->triggerMessageResolver->resolve($node->args[0]->value);
|
||||
|
||||
$messageNode = $funcCallNode->args[0]->value;
|
||||
$message = '';
|
||||
if ($messageNode instanceof Concat) {
|
||||
$message .= $this->processConcatNode($messageNode->left);
|
||||
$message .= $this->processConcatNode($messageNode->right);
|
||||
}
|
||||
|
||||
$this->deprecationCollector->addDeprecation($message);
|
||||
$this->deprecationCollector->addDeprecation($deprecation);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -72,36 +74,6 @@ final class DeprecationDetector extends NodeVisitorAbstract // @todo use : class
|
|||
return $constFetchNode->name->toString() === 'E_USER_DEPRECATED';
|
||||
}
|
||||
|
||||
private function processConcatNode(Node $node): string
|
||||
{
|
||||
if ($node instanceof Method) {
|
||||
$classMethodNode = $this->findParentOfType($node, ClassMethod::class);
|
||||
|
||||
return $classMethodNode->name->name;
|
||||
}
|
||||
|
||||
if ($node instanceof String_) {
|
||||
return $node->value;
|
||||
}
|
||||
|
||||
throw new Exception(sprintf(
|
||||
'Not implemented yet %s::%s()',
|
||||
__CLASS__,
|
||||
__METHOD__
|
||||
));
|
||||
}
|
||||
|
||||
private function findParentOfType(Node $node, string $type): Node
|
||||
{
|
||||
$parentNode = $node->getAttribute('parent');
|
||||
|
||||
while (! is_a($parentNode, $type, true)) {
|
||||
$parentNode = $parentNode->getAttribute('parent');
|
||||
}
|
||||
|
||||
return $parentNode;
|
||||
}
|
||||
|
||||
private function isFunctionWithName(Node $node, string $name): bool
|
||||
{
|
||||
if (! $node instanceof FuncCall) {
|
||||
|
|
|
@ -2,7 +2,53 @@
|
|||
|
||||
namespace Rector\TriggerExtractor\TriggerError;
|
||||
|
||||
use Exception;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\BinaryOp\Concat;
|
||||
use PhpParser\Node\Scalar\MagicConst\Method;
|
||||
use PhpParser\Node\Scalar\String_;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
|
||||
final class TriggerMessageResolver
|
||||
{
|
||||
// ...
|
||||
}
|
||||
public function resolve(Node $node): string
|
||||
{
|
||||
$message = '';
|
||||
if ($node instanceof Concat) {
|
||||
$message .= $this->processConcatNode($node->left);
|
||||
$message .= $this->processConcatNode($node->right);
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
private function processConcatNode(Node $node): string
|
||||
{
|
||||
if ($node instanceof Method) {
|
||||
$classMethodNode = $this->findParentOfType($node, ClassMethod::class);
|
||||
|
||||
return $classMethodNode->name->name;
|
||||
}
|
||||
|
||||
if ($node instanceof String_) {
|
||||
return $node->value;
|
||||
}
|
||||
|
||||
throw new Exception(sprintf(
|
||||
'Not implemented yet %s::%s()',
|
||||
__CLASS__,
|
||||
__METHOD__
|
||||
));
|
||||
}
|
||||
|
||||
private function findParentOfType(Node $node, string $type): Node
|
||||
{
|
||||
$parentNode = $node->getAttribute('parent');
|
||||
|
||||
while (! is_a($parentNode, $type, true)) {
|
||||
$parentNode = $parentNode->getAttribute('parent');
|
||||
}
|
||||
|
||||
return $parentNode;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user