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

Breadcrumb

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

function ClassStructureSniff::process

* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

Parameters

int $pointer:

Overrides Sniff::process

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/ClassStructureSniff.php, line 201

Class

ClassStructureSniff

Namespace

SlevomatCodingStandard\Sniffs\Classes

Code

public function process(File $phpcsFile, $pointer) : int {
    $tokens = $phpcsFile->getTokens();
    
    /** @var array{scope_closer: int, level: int} $rootScopeToken */
    $rootScopeToken = $tokens[$pointer];
    $groupsOrder = $this->getNormalizedGroups();
    $groupLastMemberPointer = $rootScopeToken['scope_opener'];
    $expectedGroup = null;
    $groupsFirstMembers = [];
    while (true) {
        $nextGroup = $this->findNextGroup($phpcsFile, $groupLastMemberPointer, $rootScopeToken);
        if ($nextGroup === null) {
            break;
        }
        [
            $groupFirstMemberPointer,
            $groupLastMemberPointer,
            $group,
        ] = $nextGroup;
        if ($groupsOrder[$group] >= ($groupsOrder[$expectedGroup] ?? 0)) {
            $groupsFirstMembers[$group] = $groupFirstMemberPointer;
            $expectedGroup = $group;
            continue;
        }
        $expectedGroups = array_filter($groupsOrder, static function (int $order) use ($groupsOrder, $expectedGroup) : bool {
            return $order >= $groupsOrder[$expectedGroup];
        });
        $fix = $phpcsFile->addFixableError(sprintf('The placement of "%s" group is invalid. Last group was "%s" and one of these is expected after it: %s', $group, $expectedGroup, implode(', ', array_keys($expectedGroups))), $groupFirstMemberPointer, self::CODE_INCORRECT_GROUP_ORDER);
        if (!$fix) {
            continue;
        }
        foreach ($groupsFirstMembers as $memberGroup => $firstMemberPointer) {
            if ($groupsOrder[$memberGroup] <= $groupsOrder[$group]) {
                continue;
            }
            $this->fixIncorrectGroupOrder($phpcsFile, $groupFirstMemberPointer, $groupLastMemberPointer, $firstMemberPointer);
            // run the sniff again to fix the rest of the groups
            return $pointer - 1;
        }
    }
    return $pointer + 1;
}
RSS feed
Powered by Drupal