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

Breadcrumb

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

function ClassMemberSpacingSniff::process

* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

Parameters

int $classPointer:

Overrides Sniff::process

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/ClassMemberSpacingSniff.php, line 60

Class

ClassMemberSpacingSniff

Namespace

SlevomatCodingStandard\Sniffs\Classes

Code

public function process(File $phpcsFile, $classPointer) : void {
    $this->linesCountBetweenMembers = SniffSettingsHelper::normalizeInteger($this->linesCountBetweenMembers);
    $tokens = $phpcsFile->getTokens();
    $memberPointer = null;
    $previousMemberPointer = null;
    do {
        $previousMemberPointer = $memberPointer;
        $memberPointer = $this->findNextMember($phpcsFile, $classPointer, $previousMemberPointer ?? $tokens[$classPointer]['scope_opener']);
        if ($memberPointer === null) {
            break;
        }
        if ($previousMemberPointer === null) {
            continue;
        }
        if ($tokens[$previousMemberPointer]['code'] === $tokens[$memberPointer]['code']) {
            continue;
        }
        $previousMemberEndPointer = $this->getMemberEndPointer($phpcsFile, $previousMemberPointer);
        $hasCommentWithNewLineAfterPreviousMember = false;
        $commentPointerAfterPreviousMember = TokenHelper::findNextNonWhitespace($phpcsFile, $previousMemberEndPointer + 1);
        if (in_array($tokens[$commentPointerAfterPreviousMember]['code'], TokenHelper::$inlineCommentTokenCodes, true) && ($tokens[$previousMemberEndPointer]['line'] === $tokens[$commentPointerAfterPreviousMember]['line'] || $tokens[$previousMemberEndPointer]['line'] + 1 === $tokens[$commentPointerAfterPreviousMember]['line'])) {
            $previousMemberEndPointer = CommentHelper::getCommentEndPointer($phpcsFile, $commentPointerAfterPreviousMember);
            if (StringHelper::endsWith($tokens[$commentPointerAfterPreviousMember]['content'], $phpcsFile->eolChar)) {
                $hasCommentWithNewLineAfterPreviousMember = true;
            }
        }
        $memberStartPointer = $this->getMemberStartPointer($phpcsFile, $memberPointer);
        $actualLinesCount = $tokens[$memberStartPointer]['line'] - $tokens[$previousMemberEndPointer]['line'] - 1;
        if ($actualLinesCount === $this->linesCountBetweenMembers) {
            continue;
        }
        $errorMessage = $this->linesCountBetweenMembers === 1 ? 'Expected 1 blank line between class members, found %2$d.' : 'Expected %1$d blank lines between class members, found %2$d.';
        $fix = $phpcsFile->addFixableError(sprintf($errorMessage, $this->linesCountBetweenMembers, $actualLinesCount), $memberPointer, self::CODE_INCORRECT_COUNT_OF_BLANK_LINES_BETWEEN_MEMBERS);
        if (!$fix) {
            continue;
        }
        $newLines = str_repeat($phpcsFile->eolChar, $this->linesCountBetweenMembers + ($hasCommentWithNewLineAfterPreviousMember ? 0 : 1));
        $firstPointerOnMemberLine = TokenHelper::findFirstTokenOnLine($phpcsFile, $memberStartPointer);
        $phpcsFile->fixer
            ->beginChangeset();
        $phpcsFile->fixer
            ->addContent($previousMemberEndPointer, $newLines);
        FixerHelper::removeBetween($phpcsFile, $previousMemberEndPointer, $firstPointerOnMemberLine);
        $phpcsFile->fixer
            ->endChangeset();
    } while (true);
}
RSS feed
Powered by Drupal