* Dariusz RumiƄski * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace PhpCsFixer\Fixer\Operator; use PhpCsFixer\Fixer\AbstractShortOperatorFixer; use PhpCsFixer\FixerDefinition\CodeSample; use PhpCsFixer\FixerDefinition\FixerDefinition; use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Tokens; final class AssignNullCoalescingToCoalesceEqualFixer extends AbstractShortOperatorFixer { public function getDefinition(): FixerDefinitionInterface { return new FixerDefinition( 'Use the null coalescing assignment operator `??=` where possible.', [ new CodeSample( "isTokenKindFound(T_COALESCE); } protected function isOperatorTokenCandidate(Tokens $tokens, int $index): bool { if (!$tokens[$index]->isGivenKind(T_COALESCE)) { return false; } // make sure after '??' does not contain '? :' $nextIndex = $tokens->getNextTokenOfKind($index, ['?', ';', [T_CLOSE_TAG]]); return !$tokens[$nextIndex]->equals('?'); } protected function getReplacementToken(Token $token): Token { return new Token([T_COALESCE_EQUAL, '??=']); } }