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

Breadcrumb

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

function DisallowYodaComparisonSniff::process

* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

Parameters

int $comparisonTokenPointer:

Overrides Sniff::process

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/ControlStructures/DisallowYodaComparisonSniff.php, line 46

Class

DisallowYodaComparisonSniff
Bigger value must be on the left side:

Namespace

SlevomatCodingStandard\Sniffs\ControlStructures

Code

public function process(File $phpcsFile, $comparisonTokenPointer) : void {
    $tokens = $phpcsFile->getTokens();
    $leftSideTokens = YodaHelper::getLeftSideTokens($tokens, $comparisonTokenPointer);
    $rightSideTokens = YodaHelper::getRightSideTokens($tokens, $comparisonTokenPointer);
    $leftDynamism = YodaHelper::getDynamismForTokens($tokens, $leftSideTokens);
    $rightDynamism = YodaHelper::getDynamismForTokens($tokens, $rightSideTokens);
    if ($leftDynamism === null || $rightDynamism === null) {
        return;
    }
    if ($leftDynamism >= $rightDynamism) {
        return;
    }
    if ($leftDynamism >= 900 && $rightDynamism >= 900) {
        return;
    }
    $errorParameters = [
        'Yoda comparisons are disallowed.',
        $comparisonTokenPointer,
        self::CODE_DISALLOWED_YODA_COMPARISON,
    ];
    $lastRightSideTokenPointer = array_keys($rightSideTokens)[count($rightSideTokens) - 1];
    $nextPointer = TokenHelper::findNextEffective($phpcsFile, $lastRightSideTokenPointer + 1);
    if ($tokens[$nextPointer]['code'] === T_EQUAL) {
        $phpcsFile->addError(...$errorParameters);
        return;
    }
    $fix = $phpcsFile->addFixableError(...$errorParameters);
    if (!$fix) {
        return;
    }
    YodaHelper::fix($phpcsFile, $leftSideTokens, $rightSideTokens);
}
RSS feed
Powered by Drupal