> */ public function getNodeTypes() : array { return [Concat::class]; } /** * @param Concat $node */ public function refactor(Node $node) : ?Node { if (!$node->left instanceof String_) { return null; } if (!$node->right instanceof String_) { return null; } $leftStartLine = $node->left->getStartLine(); $rightStartLine = $node->right->getStartLine(); if ($leftStartLine > 0 && $rightStartLine > 0 && $rightStartLine > $leftStartLine) { return null; } return $this->joinConcatIfStrings($node->left, $node->right); } private function joinConcatIfStrings(String_ $leftString, String_ $rightString) : ?String_ { $leftValue = $leftString->value; $rightValue = $rightString->value; if (\strpos($leftValue, "\n") !== \false || \strpos($rightValue, "\n") !== \false) { return null; } $joinedStringValue = $leftValue . $rightValue; if (StringUtils::isMatch($joinedStringValue, self::ASCII_REGEX)) { return null; } if (Strings::length($joinedStringValue) >= self::LINE_BREAK_POINT) { return null; } return new String_($joinedStringValue); } }