[NodeValueResolver] add EncapsedValueResolver

This commit is contained in:
TomasVotruba 2017-10-17 13:35:11 +02:00
parent 35b77478ac
commit 86ecf5bfca

View File

@ -0,0 +1,46 @@
<?php declare(strict_types=1);
namespace Rector\NodeValueResolver\PerNodeValueResolver;
use PhpParser\Node;
use PhpParser\Node\Scalar\Encapsed;
use PhpParser\Node\Scalar\EncapsedStringPart;
use Rector\NodeValueResolver\Contract\NodeValueResolverAwareInterface;
use Rector\NodeValueResolver\Contract\PerNodeValueResolver\PerNodeValueResolverInterface;
use Rector\NodeValueResolver\NodeValueResolver;
final class EncapsedValueResolver implements PerNodeValueResolverInterface, NodeValueResolverAwareInterface
{
/**
* @var NodeValueResolver
*/
private $nodeValueResolver;
public function getNodeClass(): string
{
return Encapsed::class;
}
/**
* @param Encapsed $encapsedNode
*/
public function resolve(Node $encapsedNode): string
{
$result = '';
foreach ($encapsedNode->parts as $part) {
if ($part instanceof EncapsedStringPart) {
$result .= $part->value . ' ';
} else {
$result .= $this->nodeValueResolver->resolve($part) . ' ';
}
}
return $result;
}
public function setNodeValueResolver(NodeValueResolver $nodeValueResolver): void
{
$this->nodeValueResolver = $nodeValueResolver;
}
}