exprAnalyzer = $exprAnalyzer; } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Combine separated host and port on ldap_connect() args', [new CodeSample(<<<'CODE_SAMPLE' ldap_connect('ldap://ldap.example.com', 389); CODE_SAMPLE , <<<'CODE_SAMPLE' ldap_connect('ldap://ldap.example.com:389'); CODE_SAMPLE )]); } /** * @return array> */ public function getNodeTypes() : array { return [FuncCall::class]; } /** * @param FuncCall $node */ public function refactor(Node $node) : ?Node { if (!$this->isName($node, 'ldap_connect')) { return null; } if ($node->isFirstClassCallable()) { return null; } $args = $node->getArgs(); if (\count($args) !== 2) { return null; } $firstArg = $args[0]->value; $secondArg = $args[1]->value; if ($firstArg instanceof String_ && $secondArg instanceof LNumber) { $args[0]->value = new String_($firstArg->value . ':' . $secondArg->value); } elseif ($this->exprAnalyzer->isDynamicExpr($firstArg) && $this->exprAnalyzer->isDynamicExpr($secondArg)) { $args[0]->value = new Encapsed([$firstArg, new EncapsedStringPart(':'), $secondArg]); } else { return null; } unset($args[1]); $node->args = $args; return $node; } public function provideMinPhpVersion() : int { return PhpVersionFeature::DEPRECATE_HOST_PORT_SEPARATE_ARGS; } }