![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/rector/rector/src/NodeAnalyzer/ |
<?php declare (strict_types=1); namespace Rector\Core\NodeAnalyzer; use PhpParser\Node\Arg; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Scalar\String_; use PhpParser\Node\VariadicPlaceholder; use Rector\NodeNameResolver\NodeNameResolver; final class CompactFuncCallAnalyzer { /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; public function __construct(NodeNameResolver $nodeNameResolver) { $this->nodeNameResolver = $nodeNameResolver; } public function isInCompact(FuncCall $funcCall, Variable $variable) : bool { if (!$this->nodeNameResolver->isName($funcCall, 'compact')) { return \false; } if (!\is_string($variable->name)) { return \false; } return $this->isInArgOrArrayItemNodes($funcCall->args, $variable->name); } /** * @param array<int, Arg|VariadicPlaceholder|ArrayItem|null> $nodes */ private function isInArgOrArrayItemNodes(array $nodes, string $variableName) : bool { foreach ($nodes as $node) { if ($this->shouldSkip($node)) { continue; } /** @var Arg|ArrayItem $node */ if ($node->value instanceof Array_) { if ($this->isInArgOrArrayItemNodes($node->value->items, $variableName)) { return \true; } continue; } if (!$node->value instanceof String_) { continue; } if ($node->value->value === $variableName) { return \true; } } return \false; } /** * @param \PhpParser\Node\Arg|\PhpParser\Node\VariadicPlaceholder|\PhpParser\Node\Expr\ArrayItem|null $node */ private function shouldSkip($node) : bool { if ($node === null) { return \true; } return $node instanceof VariadicPlaceholder; } }