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

Breadcrumb

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

function DisallowSizeFunctionsInLoopsSniff::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/PHP/DisallowSizeFunctionsInLoopsSniff.php, line 67

Class

DisallowSizeFunctionsInLoopsSniff

Namespace

PHP_CodeSniffer\Standards\Squiz\Sniffs\PHP

Code

public function process(File $phpcsFile, $stackPtr) {
    $tokens = $phpcsFile->getTokens();
    $tokenizer = $phpcsFile->tokenizerType;
    $openBracket = $tokens[$stackPtr]['parenthesis_opener'];
    $closeBracket = $tokens[$stackPtr]['parenthesis_closer'];
    if ($tokens[$stackPtr]['code'] === T_FOR) {
        // We only want to check the condition in FOR loops.
        $start = $phpcsFile->findNext(T_SEMICOLON, $openBracket + 1);
        $end = $phpcsFile->findPrevious(T_SEMICOLON, $closeBracket - 1);
    }
    else {
        $start = $openBracket;
        $end = $closeBracket;
    }
    for ($i = $start + 1; $i < $end; $i++) {
        if ($tokens[$i]['code'] === T_STRING && isset($this->forbiddenFunctions[$tokenizer][$tokens[$i]['content']]) === true) {
            $functionName = $tokens[$i]['content'];
            if ($tokenizer === 'JS') {
                // Needs to be in the form object.function to be valid.
                $prev = $phpcsFile->findPrevious(T_WHITESPACE, $i - 1, null, true);
                if ($prev === false || $tokens[$prev]['code'] !== T_OBJECT_OPERATOR) {
                    continue;
                }
                $functionName = 'object.' . $functionName;
            }
            else {
                // Make sure it isn't a member var.
                if ($tokens[$i - 1]['code'] === T_OBJECT_OPERATOR || $tokens[$i - 1]['code'] === T_NULLSAFE_OBJECT_OPERATOR) {
                    continue;
                }
                $functionName .= '()';
            }
            $error = 'The use of %s inside a loop condition is not allowed; assign the return value to a variable and use the variable in the loop condition instead';
            $data = [
                $functionName,
            ];
            $phpcsFile->addError($error, $i, 'Found', $data);
        }
        
        //end if
    }
    
    //end for
}
RSS feed
Powered by Drupal