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\HelpersCode
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);
}