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

Breadcrumb

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

function RequireMultiLineMethodSignatureSniff::process

* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

Parameters

int $methodPointer:

Overrides Sniff::process

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Classes/RequireMultiLineMethodSignatureSniff.php, line 47

Class

RequireMultiLineMethodSignatureSniff

Namespace

SlevomatCodingStandard\Sniffs\Classes

Code

public function process(File $phpcsFile, $methodPointer) : void {
    $this->minLineLength = SniffSettingsHelper::normalizeNullableInteger($this->minLineLength);
    $this->minParametersCount = SniffSettingsHelper::normalizeNullableInteger($this->minParametersCount);
    if ($this->minLineLength !== null && $this->minParametersCount !== null) {
        throw new UnexpectedValueException('Either minLineLength or minParametersCount can be set.');
    }
    // Maintain backward compatibility if no configuration provided
    if ($this->minLineLength === null && $this->minParametersCount === null) {
        $this->minLineLength = self::DEFAULT_MIN_LINE_LENGTH;
    }
    if (!FunctionHelper::isMethod($phpcsFile, $methodPointer)) {
        return;
    }
    $tokens = $phpcsFile->getTokens();
    [
        $signatureStartPointer,
        $signatureEndPointer,
    ] = $this->getSignatureStartAndEndPointers($phpcsFile, $methodPointer);
    if ($tokens[$signatureStartPointer]['line'] < $tokens[$signatureEndPointer]['line']) {
        return;
    }
    $parameters = $phpcsFile->getMethodParameters($methodPointer);
    $parametersCount = count($parameters);
    if ($parametersCount === 0) {
        return;
    }
    $signature = $this->getSignature($phpcsFile, $signatureStartPointer, $signatureEndPointer);
    $signatureWithoutTabIndentation = $this->getSignatureWithoutTabs($phpcsFile, $signature);
    $methodName = FunctionHelper::getName($phpcsFile, $methodPointer);
    if (count($this->includedMethodPatterns) !== 0 && !$this->isMethodNameInPatterns($methodName, $this->getIncludedMethodNormalizedPatterns())) {
        return;
    }
    if (count($this->excludedMethodPatterns) !== 0 && $this->isMethodNameInPatterns($methodName, $this->getExcludedMethodNormalizedPatterns())) {
        return;
    }
    if ($this->minLineLength !== null && $this->minLineLength !== 0 && strlen($signatureWithoutTabIndentation) < $this->minLineLength) {
        return;
    }
    if ($this->minParametersCount !== null && $parametersCount < $this->minParametersCount) {
        return;
    }
    $error = sprintf('Signature of method "%s" should be split to more lines so each parameter is on its own line.', $methodName);
    $fix = $phpcsFile->addFixableError($error, $methodPointer, self::CODE_REQUIRED_MULTI_LINE_SIGNATURE);
    if (!$fix) {
        return;
    }
    $indentation = $tokens[$signatureStartPointer]['content'];
    $phpcsFile->fixer
        ->beginChangeset();
    foreach ($parameters as $parameter) {
        $pointerBeforeParameter = TokenHelper::findPrevious($phpcsFile, T_COMMA, $parameter['token'] - 1, $tokens[$methodPointer]['parenthesis_opener']);
        if ($pointerBeforeParameter === null) {
            $pointerBeforeParameter = $tokens[$methodPointer]['parenthesis_opener'];
        }
        $phpcsFile->fixer
            ->addContent($pointerBeforeParameter, $phpcsFile->eolChar . IndentationHelper::addIndentation($indentation));
        FixerHelper::removeWhitespaceAfter($phpcsFile, $pointerBeforeParameter);
    }
    $phpcsFile->fixer
        ->addContentBefore($tokens[$methodPointer]['parenthesis_closer'], $phpcsFile->eolChar . $indentation);
    $phpcsFile->fixer
        ->endChangeset();
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal