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 $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;
}
}