*/ public function register(): array { return [...TokenHelper::INLINE_COMMENT_TOKEN_CODES, T_DOC_COMMENT_OPEN_TAG]; } /** * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint * @param int $commentPointer */ public function process(File $phpcsFile, $commentPointer): void { $tokens = $phpcsFile->getTokens(); if ($tokens[$commentPointer]['column'] === 1) { return; } $firstNonWhitespacePointerOnLine = TokenHelper::findFirstNonWhitespaceOnLine($phpcsFile, $commentPointer); if ($firstNonWhitespacePointerOnLine === $commentPointer) { return; } if ( $tokens[$firstNonWhitespacePointerOnLine]['code'] === T_DOC_COMMENT_OPEN_TAG && $tokens[$firstNonWhitespacePointerOnLine]['comment_closer'] > $commentPointer ) { return; } $commentEndPointer = CommentHelper::getCommentEndPointer($phpcsFile, $commentPointer); $nextNonWhitespacePointer = TokenHelper::findNextNonWhitespace($phpcsFile, $commentEndPointer + 1); if ( $nextNonWhitespacePointer !== null && $commentEndPointer !== null && $tokens[$nextNonWhitespacePointer]['line'] === $tokens[$commentEndPointer]['line'] ) { return; } $fix = $phpcsFile->addFixableError('Comment after code is disallowed.', $commentPointer, self::CODE_DISALLOWED_COMMENT_AFTER_CODE); if (!$fix) { return; } $commentContent = TokenHelper::getContent($phpcsFile, $commentPointer, $commentEndPointer); $commentHasNewLineAtTheEnd = substr($commentContent, -strlen($phpcsFile->eolChar)) === $phpcsFile->eolChar; if (!$commentHasNewLineAtTheEnd) { $commentContent .= $phpcsFile->eolChar; } $firstNonWhiteSpacePointerBeforeComment = TokenHelper::findPreviousNonWhitespace($phpcsFile, $commentPointer - 1); $newLineAfterComment = $commentHasNewLineAtTheEnd ? $commentEndPointer : TokenHelper::findLastTokenOnLine($phpcsFile, $commentEndPointer); $indentation = IndentationHelper::getIndentation($phpcsFile, $firstNonWhitespacePointerOnLine); $firstPointerOnLine = TokenHelper::findFirstTokenOnLine($phpcsFile, $firstNonWhitespacePointerOnLine); $phpcsFile->fixer->beginChangeset(); if ( $tokens[$firstNonWhiteSpacePointerBeforeComment]['code'] === T_OPEN_CURLY_BRACKET && array_key_exists('scope_condition', $tokens[$firstNonWhiteSpacePointerBeforeComment]) && in_array( $tokens[$tokens[$firstNonWhiteSpacePointerBeforeComment]['scope_condition']]['code'], [T_ELSEIF, T_ELSE, T_CLOSURE], true, ) ) { FixerHelper::add( $phpcsFile, $firstNonWhiteSpacePointerBeforeComment, $phpcsFile->eolChar . IndentationHelper::addIndentation($phpcsFile, $indentation) . $commentContent, ); } elseif ($tokens[$firstNonWhitespacePointerOnLine]['code'] === T_CLOSE_CURLY_BRACKET) { FixerHelper::add($phpcsFile, $firstNonWhiteSpacePointerBeforeComment, $phpcsFile->eolChar . $indentation . $commentContent); } elseif (isset(Tokens::$stringTokens[$tokens[$firstPointerOnLine]['code']])) { $prevNonStringToken = TokenHelper::findPreviousExcluding( $phpcsFile, [T_WHITESPACE] + Tokens::$stringTokens, $firstPointerOnLine - 1, ); $firstTokenOnNonStringTokenLine = TokenHelper::findFirstTokenOnLine($phpcsFile, $prevNonStringToken); $firstNonWhitespacePointerOnNonStringTokenLine = TokenHelper::findFirstNonWhitespaceOnLine($phpcsFile, $prevNonStringToken); $prevLineIndentation = IndentationHelper::getIndentation($phpcsFile, $firstNonWhitespacePointerOnNonStringTokenLine); FixerHelper::addBefore($phpcsFile, $firstTokenOnNonStringTokenLine, $prevLineIndentation . $commentContent); $phpcsFile->fixer->addNewline($firstNonWhiteSpacePointerBeforeComment); } else { FixerHelper::addBefore($phpcsFile, $firstPointerOnLine, $indentation . $commentContent); $phpcsFile->fixer->addNewline($firstNonWhiteSpacePointerBeforeComment); } FixerHelper::removeBetweenIncluding($phpcsFile, $firstNonWhiteSpacePointerBeforeComment + 1, $newLineAfterComment); $phpcsFile->fixer->endChangeset(); } }