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

Breadcrumb

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

function TraitUseSpacingSniff::checkLinesBetweenUses

*

Parameters

list<int> $usePointers:

1 call to TraitUseSpacingSniff::checkLinesBetweenUses()
TraitUseSpacingSniff::process in vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/TraitUseSpacingSniff.php
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/TraitUseSpacingSniff.php, line 217

Class

TraitUseSpacingSniff

Namespace

SlevomatCodingStandard\Sniffs\Classes

Code

private function checkLinesBetweenUses(File $phpcsFile, array $usePointers) : void {
    if (count($usePointers) === 1) {
        return;
    }
    $tokens = $phpcsFile->getTokens();
    $previousUsePointer = null;
    foreach ($usePointers as $usePointer) {
        if ($previousUsePointer === null) {
            $previousUsePointer = $usePointer;
            continue;
        }
        
        /** @var int $previousUseEndPointer */
        $previousUseEndPointer = TokenHelper::findNextLocal($phpcsFile, [
            T_SEMICOLON,
            T_OPEN_CURLY_BRACKET,
        ], $previousUsePointer + 1);
        if ($tokens[$previousUseEndPointer]['code'] === T_OPEN_CURLY_BRACKET) {
            
            /** @var int $previousUseEndPointer */
            $previousUseEndPointer = $tokens[$previousUseEndPointer]['bracket_closer'];
        }
        $useStartPointer = $usePointer;
        $pointerBeforeUse = TokenHelper::findPreviousNonWhitespace($phpcsFile, $usePointer - 1);
        if (in_array($tokens[$pointerBeforeUse]['code'], Tokens::$commentTokens, true)) {
            $useStartPointer = TokenHelper::findNext($phpcsFile, Tokens::$commentTokens, TokenHelper::findPreviousEffective($phpcsFile, $pointerBeforeUse - 1) + 1);
        }
        $actualLinesCountAfterPreviousUse = $tokens[$useStartPointer]['line'] - $tokens[$previousUseEndPointer]['line'] - 1;
        if ($actualLinesCountAfterPreviousUse === $this->linesCountBetweenUses) {
            $previousUsePointer = $usePointer;
            continue;
        }
        $errorParameters = [
            sprintf('Expected %d line%s between same types of use statement, found %d.', $this->linesCountBetweenUses, $this->linesCountBetweenUses === 1 ? '' : 's', $actualLinesCountAfterPreviousUse),
            $usePointer,
            self::CODE_INCORRECT_LINES_COUNT_BETWEEN_USES,
        ];
        $pointerBeforeUse = TokenHelper::findPreviousEffective($phpcsFile, $usePointer - 1);
        if ($previousUseEndPointer !== $pointerBeforeUse) {
            $phpcsFile->addError(...$errorParameters);
            $previousUsePointer = $usePointer;
            continue;
        }
        $fix = $phpcsFile->addFixableError(...$errorParameters);
        if (!$fix) {
            $previousUsePointer = $usePointer;
            continue;
        }
        $pointerBeforeIndentation = TokenHelper::findPreviousContent($phpcsFile, T_WHITESPACE, $phpcsFile->eolChar, $usePointer, $previousUseEndPointer);
        $phpcsFile->fixer
            ->beginChangeset();
        if ($pointerBeforeIndentation !== null) {
            FixerHelper::removeBetweenIncluding($phpcsFile, $previousUseEndPointer + 1, $pointerBeforeIndentation);
        }
        for ($i = 0; $i <= $this->linesCountBetweenUses; $i++) {
            $phpcsFile->fixer
                ->addNewline($previousUseEndPointer);
        }
        $phpcsFile->fixer
            ->endChangeset();
        $previousUsePointer = $usePointer;
    }
}
RSS feed
Powered by Drupal