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

Breadcrumb

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

class UselessTernaryOperatorSniff

Hierarchy

  • class \SlevomatCodingStandard\Sniffs\ControlStructures\UselessTernaryOperatorSniff implements \PHP_CodeSniffer\Sniffs\Sniff

Expanded class hierarchy of UselessTernaryOperatorSniff

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/ControlStructures/UselessTernaryOperatorSniff.php, line 17

Namespace

SlevomatCodingStandard\Sniffs\ControlStructures
View source
class UselessTernaryOperatorSniff implements Sniff {
    public const CODE_USELESS_TERNARY_OPERATOR = 'UselessTernaryOperator';
    
    /** @var bool */
    public $assumeAllConditionExpressionsAreAlreadyBoolean = false;
    
    /**
     * @return array<int, (int|string)>
     */
    public function register() : array {
        return [
            T_INLINE_THEN,
        ];
    }
    
    /**
     * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
     * @param int $inlineThenPointer
     */
    public function process(File $phpcsFile, $inlineThenPointer) : void {
        $tokens = $phpcsFile->getTokens();
        $pointerAfterInlineThen = TokenHelper::findNextEffective($phpcsFile, $inlineThenPointer + 1);
        if ($tokens[$pointerAfterInlineThen]['code'] === T_INLINE_ELSE) {
            $inlineElsePointer = $pointerAfterInlineThen;
        }
        else {
            if (!in_array($tokens[$pointerAfterInlineThen]['code'], [
                T_TRUE,
                T_FALSE,
            ], true)) {
                return;
            }
            $inlineElsePointer = TokenHelper::findNextEffective($phpcsFile, $pointerAfterInlineThen + 1);
            if ($tokens[$inlineElsePointer]['code'] !== T_INLINE_ELSE) {
                return;
            }
        }
        $pointerAfterInlineElse = TokenHelper::findNextEffective($phpcsFile, $inlineElsePointer + 1);
        if (!in_array($tokens[$pointerAfterInlineElse]['code'], [
            T_TRUE,
            T_FALSE,
        ], true)) {
            return;
        }
        $conditionStartPointer = TernaryOperatorHelper::getStartPointer($phpcsFile, $inlineThenPointer);
        
        /** @var int $conditionEndPointer */
        $conditionEndPointer = TokenHelper::findPreviousEffective($phpcsFile, $inlineThenPointer - 1);
        $errorParameters = [
            'Useless ternary operator.',
            $inlineThenPointer,
            self::CODE_USELESS_TERNARY_OPERATOR,
        ];
        if (!$this->assumeAllConditionExpressionsAreAlreadyBoolean && !ConditionHelper::conditionReturnsBoolean($phpcsFile, $conditionStartPointer, $conditionEndPointer)) {
            if ($tokens[$pointerAfterInlineThen]['code'] !== T_INLINE_ELSE) {
                $phpcsFile->addError(...$errorParameters);
            }
            return;
        }
        $fix = $phpcsFile->addFixableError(...$errorParameters);
        if (!$fix) {
            return;
        }
        $inlineElseEndPointer = TernaryOperatorHelper::getEndPointer($phpcsFile, $inlineThenPointer, $inlineElsePointer);
        $pointerAfterTernaryOperator = TokenHelper::findNextEffective($phpcsFile, $inlineElseEndPointer + 1);
        $phpcsFile->fixer
            ->beginChangeset();
        if ($tokens[$pointerAfterInlineThen]['code'] === T_FALSE) {
            $negativeCondition = ConditionHelper::getNegativeCondition($phpcsFile, $conditionStartPointer, $conditionEndPointer);
            FixerHelper::change($phpcsFile, $conditionStartPointer, $conditionEndPointer, $negativeCondition);
        }
        FixerHelper::removeBetween($phpcsFile, $conditionEndPointer, $pointerAfterTernaryOperator);
        $phpcsFile->fixer
            ->endChangeset();
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
UselessTernaryOperatorSniff::$assumeAllConditionExpressionsAreAlreadyBoolean public property @var bool
UselessTernaryOperatorSniff::CODE_USELESS_TERNARY_OPERATOR public constant
UselessTernaryOperatorSniff::process public function * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
*
Overrides Sniff::process
UselessTernaryOperatorSniff::register public function * Overrides Sniff::register
RSS feed
Powered by Drupal