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

Breadcrumb

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

function FunctionCommentSniff::process

Same name in this branch
  1. 11.1.x vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php \Drupal\Sniffs\Commenting\FunctionCommentSniff::process()
  2. 11.1.x vendor/squizlabs/php_codesniffer/src/Standards/PEAR/Sniffs/Commenting/FunctionCommentSniff.php \PHP_CodeSniffer\Standards\PEAR\Sniffs\Commenting\FunctionCommentSniff::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 FunctionCommentSniff::process

File

vendor/squizlabs/php_codesniffer/src/Standards/MySource/Sniffs/Commenting/FunctionCommentSniff.php, line 33

Class

FunctionCommentSniff

Namespace

PHP_CodeSniffer\Standards\MySource\Sniffs\Commenting

Code

public function process(File $phpcsFile, $stackPtr) {
    parent::process($phpcsFile, $stackPtr);
    $tokens = $phpcsFile->getTokens();
    $find = Tokens::$methodPrefixes;
    $find[] = T_WHITESPACE;
    $commentEnd = $phpcsFile->findPrevious($find, $stackPtr - 1, null, true);
    if ($tokens[$commentEnd]['code'] !== T_DOC_COMMENT_CLOSE_TAG) {
        return;
    }
    $commentStart = $tokens[$commentEnd]['comment_opener'];
    $hasApiTag = false;
    foreach ($tokens[$commentStart]['comment_tags'] as $tag) {
        if ($tokens[$tag]['content'] === '@api') {
            if ($hasApiTag === true) {
                // We've come across an API tag already, which means
                // we were not the first tag in the API list.
                $error = 'The @api tag must come first in the @api tag list in a function comment';
                $phpcsFile->addError($error, $tag, 'ApiNotFirst');
            }
            $hasApiTag = true;
            // There needs to be a blank line before the @api tag.
            $prev = $phpcsFile->findPrevious([
                T_DOC_COMMENT_STRING,
                T_DOC_COMMENT_TAG,
            ], $tag - 1);
            if ($tokens[$prev]['line'] !== $tokens[$tag]['line'] - 2) {
                $error = 'There must be one blank line before the @api tag in a function comment';
                $phpcsFile->addError($error, $tag, 'ApiSpacing');
            }
        }
        else {
            if (substr($tokens[$tag]['content'], 0, 5) === '@api-') {
                $hasApiTag = true;
                $prev = $phpcsFile->findPrevious([
                    T_DOC_COMMENT_STRING,
                    T_DOC_COMMENT_TAG,
                ], $tag - 1);
                if ($tokens[$prev]['line'] !== $tokens[$tag]['line'] - 1) {
                    $error = 'There must be no blank line before the @%s tag in a function comment';
                    $data = [
                        $tokens[$tag]['content'],
                    ];
                    $phpcsFile->addError($error, $tag, 'ApiTagSpacing', $data);
                }
            }
        }
        
        //end if
    }
    
    //end foreach
    if ($hasApiTag === true && substr($tokens[$tag]['content'], 0, 4) !== '@api') {
        // API tags must be the last tags in a function comment.
        $error = 'The @api tags must be the last tags in a function comment';
        $phpcsFile->addError($error, $commentEnd, 'ApiNotLast');
    }
}
RSS feed
Powered by Drupal