> */ public function getNodeTypes() : array { return [For_::class]; } /** * @param For_ $node * @return Stmt[]|null */ public function refactor(Node $node) : ?array { $countInCond = null; $counterVariable = new Variable(self::COUNTER_NAME); foreach ($node->cond as $condExpr) { if (!$condExpr instanceof Smaller && !$condExpr instanceof SmallerOrEqual) { continue; } if (!$condExpr->right instanceof FuncCall) { continue; } $funcCall = $condExpr->right; if (!$this->isName($funcCall, 'count')) { continue; } $countInCond = $condExpr->right; $condExpr->right = $counterVariable; } if (!$countInCond instanceof Expr) { return null; } $countAssign = new Assign($counterVariable, $countInCond); return [new Expression($countAssign), $node]; } }