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

Breadcrumb

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

class AlphabeticallySortedByKeysSniff

Hierarchy

  • class \SlevomatCodingStandard\Sniffs\Arrays\AlphabeticallySortedByKeysSniff implements \PHP_CodeSniffer\Sniffs\Sniff

Expanded class hierarchy of AlphabeticallySortedByKeysSniff

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Arrays/AlphabeticallySortedByKeysSniff.php, line 17

Namespace

SlevomatCodingStandard\Sniffs\Arrays
View source
class AlphabeticallySortedByKeysSniff implements Sniff {
    public const CODE_INCORRECT_KEY_ORDER = 'IncorrectKeyOrder';
    
    /**
     * @return array<int, (int|string)>
     */
    public function register() : array {
        return TokenHelper::$arrayTokenCodes;
    }
    
    /**
     * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
     * @param int $stackPointer
     */
    public function process(File $phpcsFile, $stackPointer) : void {
        if (ArrayHelper::isMultiLine($phpcsFile, $stackPointer) === false) {
            return;
        }
        // "Parse" the array... get info for each key/value pair
        $keyValues = ArrayHelper::parse($phpcsFile, $stackPointer);
        if (ArrayHelper::isKeyedAll($keyValues) === false) {
            return;
        }
        if (ArrayHelper::isSortedByKey($keyValues)) {
            return;
        }
        $fix = $phpcsFile->addFixableError('Keyed multi-line arrays must be sorted alphabetically.', $stackPointer, self::CODE_INCORRECT_KEY_ORDER);
        if ($fix) {
            $this->fix($phpcsFile, $keyValues);
        }
    }
    
    /**
     * @param list<ArrayKeyValue> $keyValues
     */
    private function fix(File $phpcsFile, array $keyValues) : void {
        $pointerStart = $keyValues[0]->getPointerStart();
        $pointerEnd = $keyValues[count($keyValues) - 1]->getPointerEnd();
        // determine indent to use
        $indent = ArrayHelper::getIndentation($keyValues);
        usort($keyValues, static function ($a1, $a2) {
            return strnatcasecmp((string) $a1->getKey(), (string) $a2->getKey());
        });
        $content = implode('', array_map(static function (ArrayKeyValue $keyValue) use ($phpcsFile, $indent) {
            return $keyValue->getContent($phpcsFile, true, $indent) . $phpcsFile->eolChar;
        }, $keyValues));
        $phpcsFile->fixer
            ->beginChangeset();
        FixerHelper::change($phpcsFile, $pointerStart, $pointerEnd, $content);
        $phpcsFile->fixer
            ->endChangeset();
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
AlphabeticallySortedByKeysSniff::CODE_INCORRECT_KEY_ORDER public constant
AlphabeticallySortedByKeysSniff::fix private function *
AlphabeticallySortedByKeysSniff::process public function * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
*
Overrides Sniff::process
AlphabeticallySortedByKeysSniff::register public function * Overrides Sniff::register

API Navigation

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