44 lines
1.1 KiB
PHP
44 lines
1.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Phabel\Target\Php70;
|
||
|
|
||
|
use Phabel\Plugin;
|
||
|
use PhpParser\Node;
|
||
|
use PhpParser\Node\Stmt\GroupUse;
|
||
|
use PhpParser\Node\Stmt\Use_;
|
||
|
use PhpParser\Node\Stmt\UseUse;
|
||
|
|
||
|
class GroupUseReplacer extends Plugin
|
||
|
{
|
||
|
/**
|
||
|
* Replace group use with multiple use statements
|
||
|
*
|
||
|
* @param GroupUse $node Group use statement
|
||
|
*
|
||
|
* @return Use_[]
|
||
|
*/
|
||
|
public function leave(GroupUse $node): array
|
||
|
{
|
||
|
$nodePrefixParts = $node->prefix->parts;
|
||
|
|
||
|
return \array_map(fn (UseUse $useNode) => $this->createUseNode($nodePrefixParts, $useNode), $node->uses);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create separate use node.
|
||
|
*
|
||
|
* @param string[] $nodePrefixParts Use prefix
|
||
|
* @param UseUse $useNode Current use node
|
||
|
*
|
||
|
* @return Use_ New use node
|
||
|
*/
|
||
|
protected function createUseNode(array $nodePrefixParts, UseUse $useNode): Use_
|
||
|
{
|
||
|
$nodePrefixParts []= $useNode->name;
|
||
|
|
||
|
$nameNode = new Node\Name($nodePrefixParts);
|
||
|
|
||
|
return new Use_([new UseUse($nameNode, $useNode->alias)], $useNode->type);
|
||
|
}
|
||
|
}
|