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

Breadcrumb

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

function ConditionHelper::getNegativeLogicalCondition

1 call to ConditionHelper::getNegativeLogicalCondition()
ConditionHelper::getNegativeConditionPart in vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/ConditionHelper.php

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/ConditionHelper.php, line 268

Class

ConditionHelper
@internal

Namespace

SlevomatCodingStandard\Helpers

Code

private static function getNegativeLogicalCondition(File $phpcsFile, int $conditionBoundaryStartPointer, int $conditionBoundaryEndPointer) : string {
    if (TokenHelper::findNext($phpcsFile, T_LOGICAL_XOR, $conditionBoundaryStartPointer, $conditionBoundaryEndPointer) !== null) {
        return sprintf('!(%s)', TokenHelper::getContent($phpcsFile, $conditionBoundaryStartPointer, $conditionBoundaryEndPointer));
    }
    $tokens = $phpcsFile->getTokens();
    $booleanOperatorReplacements = [
        T_BOOLEAN_AND => '||',
        T_BOOLEAN_OR => '&&',
        T_LOGICAL_AND => 'or',
        T_LOGICAL_OR => 'and',
    ];
    $negativeCondition = '';
    $nestedConditionStartPointer = $conditionBoundaryStartPointer;
    $actualPointer = $conditionBoundaryStartPointer;
    $parenthesesLevel = 0;
    $operatorsOnLevel = [];
    do {
        $actualPointer = TokenHelper::findNext($phpcsFile, array_merge([
            T_OPEN_PARENTHESIS,
            T_CLOSE_PARENTHESIS,
        ], Tokens::$booleanOperators), $actualPointer, $conditionBoundaryEndPointer + 1);
        if ($actualPointer === null) {
            break;
        }
        if ($tokens[$actualPointer]['code'] === T_OPEN_PARENTHESIS) {
            $pointerBeforeParenthesisOpener = TokenHelper::findPreviousEffective($phpcsFile, $actualPointer - 1);
            if ($tokens[$pointerBeforeParenthesisOpener]['code'] === T_STRING) {
                $actualPointer = $tokens[$actualPointer]['parenthesis_closer'] + 1;
                continue;
            }
            $parenthesesLevel++;
            $actualPointer++;
            continue;
        }
        if ($tokens[$actualPointer]['code'] === T_CLOSE_PARENTHESIS) {
            $parenthesesLevel--;
            $actualPointer++;
            continue;
        }
        if ($parenthesesLevel !== 0) {
            $actualPointer++;
            continue;
        }
        if (array_key_exists($parenthesesLevel, $operatorsOnLevel) && $operatorsOnLevel[$parenthesesLevel] !== $tokens[$actualPointer]['code']) {
            return sprintf('!(%s)', TokenHelper::getContent($phpcsFile, $conditionBoundaryStartPointer, $conditionBoundaryEndPointer));
        }
        $operatorsOnLevel[$parenthesesLevel] = $tokens[$actualPointer]['code'];
        $negativeCondition .= self::getNegativeCondition($phpcsFile, $nestedConditionStartPointer, $actualPointer - 1, true);
        $negativeCondition .= $booleanOperatorReplacements[$tokens[$actualPointer]['code']];
        $nestedConditionStartPointer = $actualPointer + 1;
        $actualPointer++;
    } while (true);
    return $negativeCondition . self::getNegativeCondition($phpcsFile, $nestedConditionStartPointer, $conditionBoundaryEndPointer, true);
}

API Navigation

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