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

Breadcrumb

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

function PropertyDeclarationSniff::checkModifiersOrder

1 call to PropertyDeclarationSniff::checkModifiersOrder()
PropertyDeclarationSniff::process in vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/PropertyDeclarationSniff.php
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/PropertyDeclarationSniff.php, line 125

Class

PropertyDeclarationSniff

Namespace

SlevomatCodingStandard\Sniffs\Classes

Code

private function checkModifiersOrder(File $phpcsFile, int $propertyPointer, int $firstModifierPointer, int $lastModifierPointer) : void {
    $modifiersPointers = TokenHelper::findNextAll($phpcsFile, TokenHelper::$propertyModifiersTokenCodes, $firstModifierPointer, $lastModifierPointer + 1);
    if (count($modifiersPointers) < 2) {
        return;
    }
    $tokens = $phpcsFile->getTokens();
    $modifiersGroups = $this->getNormalizedModifiersOrder();
    $expectedModifiersPositions = [];
    foreach ($modifiersPointers as $modifierPointer) {
        for ($i = 0; $i < count($modifiersGroups); $i++) {
            if (in_array($tokens[$modifierPointer]['code'], $modifiersGroups[$i], true)) {
                $expectedModifiersPositions[$modifierPointer] = $i;
                continue 2;
            }
        }
        // Modifier position is not defined so add it to the end
        $expectedModifiersPositions[$modifierPointer] = count($modifiersGroups);
    }
    $error = false;
    for ($i = 1; $i < count($modifiersPointers); $i++) {
        for ($j = 0; $j < $i; $j++) {
            if ($expectedModifiersPositions[$modifiersPointers[$i]] < $expectedModifiersPositions[$modifiersPointers[$j]]) {
                $error = true;
                break;
            }
        }
    }
    if (!$error) {
        return;
    }
    $actualModifiers = array_map(static function (int $modifierPointer) use ($tokens) : string {
        return $tokens[$modifierPointer]['content'];
    }, $modifiersPointers);
    $actualModifiersFormatted = implode(' ', $actualModifiers);
    asort($expectedModifiersPositions);
    $expectedModifiers = array_map(static function (int $modifierPointer) use ($tokens) : string {
        return $tokens[$modifierPointer]['content'];
    }, array_keys($expectedModifiersPositions));
    $expectedModifiersFormatted = implode(' ', $expectedModifiers);
    $fix = $phpcsFile->addFixableError(sprintf('Incorrect order of modifiers "%s" of property %s, expected "%s".', $actualModifiersFormatted, $tokens[$propertyPointer]['content'], $expectedModifiersFormatted), $firstModifierPointer, self::CODE_INCORRECT_ORDER_OF_MODIFIERS);
    if (!$fix) {
        return;
    }
    $phpcsFile->fixer
        ->beginChangeset();
    FixerHelper::change($phpcsFile, $firstModifierPointer, $lastModifierPointer, $expectedModifiersFormatted);
    $phpcsFile->fixer
        ->endChangeset();
}

API Navigation

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