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

Breadcrumb

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

function LowercasePHPFunctionsSniff::process

Processes this test, when one of its tokens is encountered.

Parameters

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

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

Return value

void

Overrides Sniff::process

File

vendor/squizlabs/php_codesniffer/src/Standards/Squiz/Sniffs/PHP/LowercasePHPFunctionsSniff.php, line 60

Class

LowercasePHPFunctionsSniff

Namespace

PHP_CodeSniffer\Standards\Squiz\Sniffs\PHP

Code

public function process(File $phpcsFile, $stackPtr) {
    $tokens = $phpcsFile->getTokens();
    $content = $tokens[$stackPtr]['content'];
    $contentLc = strtolower($content);
    if ($content === $contentLc) {
        return;
    }
    // Make sure it is an inbuilt PHP function.
    // PHP_CodeSniffer can possibly include user defined functions
    // through the use of vendor/autoload.php.
    if (isset($this->builtInFunctions[$contentLc]) === false) {
        return;
    }
    // Make sure this is a function call or a use statement.
    if (empty($tokens[$stackPtr]['nested_attributes']) === false) {
        // Class instantiation in attribute, not function call.
        return;
    }
    $next = $phpcsFile->findNext(Tokens::$emptyTokens, $stackPtr + 1, null, true);
    if ($next === false) {
        // Not a function call.
        return;
    }
    $ignore = Tokens::$emptyTokens;
    $ignore[] = T_BITWISE_AND;
    $prev = $phpcsFile->findPrevious($ignore, $stackPtr - 1, null, true);
    $prevPrev = $phpcsFile->findPrevious(Tokens::$emptyTokens, $prev - 1, null, true);
    if ($tokens[$next]['code'] !== T_OPEN_PARENTHESIS) {
        // Is this a use statement importing a PHP native function ?
        if ($tokens[$next]['code'] !== T_NS_SEPARATOR && $tokens[$prev]['code'] === T_STRING && $tokens[$prev]['content'] === 'function' && $prevPrev !== false && $tokens[$prevPrev]['code'] === T_USE) {
            $error = 'Use statements for PHP native functions must be lowercase; expected "%s" but found "%s"';
            $data = [
                $contentLc,
                $content,
            ];
            $fix = $phpcsFile->addFixableError($error, $stackPtr, 'UseStatementUppercase', $data);
            if ($fix === true) {
                $phpcsFile->fixer
                    ->replaceToken($stackPtr, $contentLc);
            }
        }
        // No open parenthesis; not a "use function" statement nor a function call.
        return;
    }
    
    //end if
    if ($tokens[$prev]['code'] === T_FUNCTION) {
        // Function declaration, not a function call.
        return;
    }
    if ($tokens[$prev]['code'] === T_NS_SEPARATOR) {
        if ($prevPrev !== false && ($tokens[$prevPrev]['code'] === T_STRING || $tokens[$prevPrev]['code'] === T_NAMESPACE || $tokens[$prevPrev]['code'] === T_NEW)) {
            // Namespaced class/function, not an inbuilt function.
            // Could potentially give false negatives for non-namespaced files
            // when namespace\functionName() is encountered.
            return;
        }
    }
    if ($tokens[$prev]['code'] === T_NEW) {
        // Object creation, not an inbuilt function.
        return;
    }
    if ($tokens[$prev]['code'] === T_OBJECT_OPERATOR || $tokens[$prev]['code'] === T_NULLSAFE_OBJECT_OPERATOR) {
        // Not an inbuilt function.
        return;
    }
    if ($tokens[$prev]['code'] === T_DOUBLE_COLON) {
        // Not an inbuilt function.
        return;
    }
    $error = 'Calls to PHP native functions must be lowercase; expected "%s" but found "%s"';
    $data = [
        $contentLc,
        $content,
    ];
    $fix = $phpcsFile->addFixableError($error, $stackPtr, 'CallUppercase', $data);
    if ($fix === true) {
        $phpcsFile->fixer
            ->replaceToken($stackPtr, $contentLc);
    }
}

API Navigation

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