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

Breadcrumb

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

function MultiLineFunctionDeclarationSniff::isMultiLineDeclaration

Same name in this branch
  1. 11.1.x vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Functions/MultiLineFunctionDeclarationSniff.php \Drupal\Sniffs\Functions\MultiLineFunctionDeclarationSniff::isMultiLineDeclaration()

Determine if this is a multi-line function declaration.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.:

int $stackPtr The position of the current token: in the stack passed in $tokens.

int $openBracket The position of the opening bracket: in the stack passed in $tokens.

array $tokens The stack of tokens that make up: the file.

Return value

bool

Overrides FunctionDeclarationSniff::isMultiLineDeclaration

1 method overrides MultiLineFunctionDeclarationSniff::isMultiLineDeclaration()
MultiLineFunctionDeclarationSniff::isMultiLineDeclaration in vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Functions/MultiLineFunctionDeclarationSniff.php
Determine if this is a multi-line function declaration.

File

vendor/squizlabs/php_codesniffer/src/Standards/Squiz/Sniffs/Functions/MultiLineFunctionDeclarationSniff.php, line 42

Class

MultiLineFunctionDeclarationSniff

Namespace

PHP_CodeSniffer\Standards\Squiz\Sniffs\Functions

Code

public function isMultiLineDeclaration($phpcsFile, $stackPtr, $openBracket, $tokens) {
    $bracketsToCheck = [
        $stackPtr => $openBracket,
    ];
    // Closures may use the USE keyword and so be multi-line in this way.
    if ($tokens[$stackPtr]['code'] === T_CLOSURE) {
        $use = $phpcsFile->findNext(T_USE, $tokens[$openBracket]['parenthesis_closer'] + 1, $tokens[$stackPtr]['scope_opener']);
        if ($use !== false) {
            $open = $phpcsFile->findNext(T_OPEN_PARENTHESIS, $use + 1);
            if ($open !== false) {
                $bracketsToCheck[$use] = $open;
            }
        }
    }
    foreach ($bracketsToCheck as $stackPtr => $openBracket) {
        // If the first argument is on a new line, this is a multi-line
        // function declaration, even if there is only one argument.
        $next = $phpcsFile->findNext(Tokens::$emptyTokens, $openBracket + 1, null, true);
        if ($tokens[$next]['line'] !== $tokens[$stackPtr]['line']) {
            return true;
        }
        $closeBracket = $tokens[$openBracket]['parenthesis_closer'];
        $end = $phpcsFile->findEndOfStatement($openBracket + 1);
        while ($tokens[$end]['code'] === T_COMMA) {
            // If the next bit of code is not on the same line, this is a
            // multi-line function declaration.
            $next = $phpcsFile->findNext(Tokens::$emptyTokens, $end + 1, $closeBracket, true);
            if ($next === false) {
                continue 2;
            }
            if ($tokens[$next]['line'] !== $tokens[$end]['line']) {
                return true;
            }
            $end = $phpcsFile->findEndOfStatement($next);
        }
        // We've reached the last argument, so see if the next content
        // (should be the close bracket) is also on the same line.
        $next = $phpcsFile->findNext(Tokens::$emptyTokens, $end + 1, $closeBracket, true);
        if ($next !== false && $tokens[$next]['line'] !== $tokens[$end]['line']) {
            return true;
        }
    }
    
    //end foreach
    return false;
}

API Navigation

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