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

Breadcrumb

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

function DuplicateClassDefinitionSniff::process

Processes the tokens that this sniff is interested in.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file where the token was found.:

int $stackPtr The position in the stack where: the token was found.

Return value

void

Overrides Sniff::process

File

vendor/squizlabs/php_codesniffer/src/Standards/Squiz/Sniffs/CSS/DuplicateClassDefinitionSniff.php, line 50

Class

DuplicateClassDefinitionSniff

Namespace

PHP_CodeSniffer\Standards\Squiz\Sniffs\CSS

Code

public function process(File $phpcsFile, $stackPtr) {
    $tokens = $phpcsFile->getTokens();
    // Find the content of each class definition name.
    $classNames = [];
    $next = $phpcsFile->findNext(T_OPEN_CURLY_BRACKET, $stackPtr + 1);
    if ($next === false) {
        // No class definitions in the file.
        return;
    }
    // Save the class names in a "scope",
    // to prevent false positives with @media blocks.
    $scope = 'main';
    $find = [
        T_CLOSE_CURLY_BRACKET,
        T_OPEN_CURLY_BRACKET,
        T_OPEN_TAG,
    ];
    while ($next !== false) {
        $prev = $phpcsFile->findPrevious($find, $next - 1);
        // Check if an inner block was closed.
        $beforePrev = $phpcsFile->findPrevious(Tokens::$emptyTokens, $prev - 1, null, true);
        if ($beforePrev !== false && $tokens[$beforePrev]['code'] === T_CLOSE_CURLY_BRACKET) {
            $scope = 'main';
        }
        // Create a sorted name for the class so we can compare classes
        // even when the individual names are all over the place.
        $name = '';
        for ($i = $prev + 1; $i < $next; $i++) {
            $name .= $tokens[$i]['content'];
        }
        $name = trim($name);
        $name = str_replace("\n", ' ', $name);
        $name = preg_replace('|[\\s]+|', ' ', $name);
        $name = preg_replace('|\\s*/\\*.*\\*/\\s*|', '', $name);
        $name = str_replace(', ', ',', $name);
        $names = explode(',', $name);
        sort($names);
        $name = implode(',', $names);
        if ($name[0] === '@') {
            // Media block has its own "scope".
            $scope = $name;
        }
        else {
            if (isset($classNames[$scope][$name]) === true) {
                $first = $classNames[$scope][$name];
                $error = 'Duplicate class definition found; first defined on line %s';
                $data = [
                    $tokens[$first]['line'],
                ];
                $phpcsFile->addError($error, $next, 'Found', $data);
            }
            else {
                $classNames[$scope][$name] = $next;
            }
        }
        $next = $phpcsFile->findNext(T_OPEN_CURLY_BRACKET, $next + 1);
    }
    
    //end while
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal