> */ public function getNodeTypes() : array { return [Identical::class]; } /** * @param Identical $node */ public function refactor(Node $node) : ?Node { if ($node->left instanceof FuncCall) { return $this->processIdentical($node->right, $node->left); } if ($node->right instanceof FuncCall) { return $this->processIdentical($node->left, $node->right); } return null; } private function processIdentical(Expr $expr, FuncCall $funcCall) : ?Identical { if (!$this->isName($funcCall, 'strlen')) { return null; } if ($funcCall->isFirstClassCallable()) { return null; } if (!$this->valueResolver->isValue($expr, 0)) { return null; } $variable = $funcCall->getArgs()[0]->value; // Needs string cast if variable type is not string // see https://github.com/rectorphp/rector/issues/6700 $isStringType = $this->nodeTypeResolver->getNativeType($variable)->isString()->yes(); if (!$isStringType) { return new Identical(new Expr\Cast\String_($variable), new String_('')); } return new Identical($variable, new String_('')); } }