Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ClosingDeclarationCommentSniff.php

function ClosingDeclarationCommentSniff::process

Processes this test, when one of its tokens is encountered.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.:

int $stackPtr The position of the current token in the: stack passed in $tokens..

Return value

void

Overrides Sniff::process

File

vendor/squizlabs/php_codesniffer/src/Standards/Squiz/Sniffs/Commenting/ClosingDeclarationCommentSniff.php, line 46

Class

ClosingDeclarationCommentSniff

Namespace

PHP_CodeSniffer\Standards\Squiz\Sniffs\Commenting

Code

public function process(File $phpcsFile, $stackPtr) {
    $tokens = $phpcsFile->getTokens();
    if ($tokens[$stackPtr]['code'] === T_FUNCTION) {
        $methodProps = $phpcsFile->getMethodProperties($stackPtr);
        // Abstract methods do not require a closing comment.
        if ($methodProps['is_abstract'] === true) {
            return;
        }
        // If this function is in an interface then we don't require
        // a closing comment.
        if ($phpcsFile->hasCondition($stackPtr, T_INTERFACE) === true) {
            return;
        }
        if (isset($tokens[$stackPtr]['scope_closer']) === false) {
            $error = 'Possible parse error: non-abstract method defined as abstract';
            $phpcsFile->addWarning($error, $stackPtr, 'Abstract');
            return;
        }
        $decName = $phpcsFile->getDeclarationName($stackPtr);
        $comment = '//end ' . $decName . '()';
    }
    else {
        if ($tokens[$stackPtr]['code'] === T_CLASS) {
            $comment = '//end class';
        }
        else {
            if ($tokens[$stackPtr]['code'] === T_INTERFACE) {
                $comment = '//end interface';
            }
            else {
                if ($tokens[$stackPtr]['code'] === T_TRAIT) {
                    $comment = '//end trait';
                }
                else {
                    $comment = '//end enum';
                }
            }
        }
    }
    
    //end if
    if (isset($tokens[$stackPtr]['scope_closer']) === false) {
        $error = 'Possible parse error: %s missing opening or closing brace';
        $data = [
            $tokens[$stackPtr]['content'],
        ];
        $phpcsFile->addWarning($error, $stackPtr, 'MissingBrace', $data);
        return;
    }
    $closingBracket = $tokens[$stackPtr]['scope_closer'];
    $data = [
        $comment,
    ];
    if (isset($tokens[$closingBracket + 1]) === false || $tokens[$closingBracket + 1]['code'] !== T_COMMENT) {
        $next = $phpcsFile->findNext(T_WHITESPACE, $closingBracket + 1, null, true);
        if ($next !== false && rtrim($tokens[$next]['content']) === $comment) {
            // The comment isn't really missing; it is just in the wrong place.
            $fix = $phpcsFile->addFixableError('Expected %s directly after closing brace', $closingBracket, 'Misplaced', $data);
            if ($fix === true) {
                $phpcsFile->fixer
                    ->beginChangeset();
                for ($i = $closingBracket + 1; $i < $next; $i++) {
                    $phpcsFile->fixer
                        ->replaceToken($i, '');
                }
                // Just in case, because indentation fixes can add indents onto
                // these comments and cause us to be unable to fix them.
                $phpcsFile->fixer
                    ->replaceToken($next, $comment . $phpcsFile->eolChar);
                $phpcsFile->fixer
                    ->endChangeset();
            }
        }
        else {
            $fix = $phpcsFile->addFixableError('Expected %s', $closingBracket, 'Missing', $data);
            if ($fix === true) {
                $phpcsFile->fixer
                    ->replaceToken($closingBracket, '}' . $comment);
            }
        }
        return;
    }
    
    //end if
    if (rtrim($tokens[$closingBracket + 1]['content']) !== $comment) {
        $fix = $phpcsFile->addFixableError('Expected %s', $closingBracket, 'Incorrect', $data);
        if ($fix === true) {
            $phpcsFile->fixer
                ->replaceToken($closingBracket + 1, $comment . $phpcsFile->eolChar);
        }
        return;
    }
}
RSS feed
Powered by Drupal