* 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\NamespaceNotation; use PhpCsFixer\AbstractFixer; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\FixerDefinition\CodeSample; use PhpCsFixer\FixerDefinition\FixerDefinition; use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Tokens; /** * Fixer for rules defined in PSR2 ¶3. * * @author Dariusz Rumiński */ final class BlankLineAfterNamespaceFixer extends AbstractFixer implements WhitespacesAwareFixerInterface { /** * {@inheritdoc} */ public function getDefinition() { return new FixerDefinition( 'There MUST be one blank line after the namespace declaration.', [ new CodeSample("isTokenKindFound(T_NAMESPACE); } /** * {@inheritdoc} */ protected function applyFix(\SplFileInfo $file, Tokens $tokens) { $ending = $this->whitespacesConfig->getLineEnding(); $lastIndex = $tokens->count() - 1; for ($index = $lastIndex; $index >= 0; --$index) { $token = $tokens[$index]; if (!$token->isGivenKind(T_NAMESPACE)) { continue; } $semicolonIndex = $tokens->getNextTokenOfKind($index, [';', '{', [T_CLOSE_TAG]]); $semicolonToken = $tokens[$semicolonIndex]; if (!isset($tokens[$semicolonIndex + 1]) || !$semicolonToken->equals(';')) { continue; } $nextIndex = $semicolonIndex + 1; $nextToken = $tokens[$nextIndex]; if (!$nextToken->isWhitespace()) { $tokens->insertAt($semicolonIndex + 1, new Token([T_WHITESPACE, $ending.$ending])); } else { $tokens[$nextIndex] = new Token([ T_WHITESPACE, ($nextIndex === $lastIndex ? $ending : $ending.$ending).ltrim($nextToken->getContent()), ]); } } } }