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

Breadcrumb

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

function JumbledIncrementerSniff::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/Generic/Sniffs/CodeAnalysis/JumbledIncrementerSniff.php, line 60

Class

JumbledIncrementerSniff

Namespace

PHP_CodeSniffer\Standards\Generic\Sniffs\CodeAnalysis

Code

public function process(File $phpcsFile, $stackPtr) {
    $tokens = $phpcsFile->getTokens();
    $token = $tokens[$stackPtr];
    // Skip for-loop without body.
    if (isset($token['scope_opener']) === false) {
        return;
    }
    // Find incrementers for outer loop.
    $outer = $this->findIncrementers($tokens, $token);
    // Skip if empty.
    if (count($outer) === 0) {
        return;
    }
    // Find nested for loops.
    $start = ++$token['scope_opener'];
    $end = --$token['scope_closer'];
    for (; $start <= $end; ++$start) {
        if ($tokens[$start]['code'] !== T_FOR) {
            continue;
        }
        $inner = $this->findIncrementers($tokens, $tokens[$start]);
        $diff = array_intersect($outer, $inner);
        if (count($diff) !== 0) {
            $error = 'Loop incrementer (%s) jumbling with inner loop';
            $data = [
                implode(', ', $diff),
            ];
            $phpcsFile->addWarning($error, $stackPtr, 'Found', $data);
        }
    }
}
RSS feed
Powered by Drupal