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

Breadcrumb

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

function Helpers::getVariablesInsideCompact

* Return the variable names and positions of each variable targetted by a `compact()` call. * *

Parameters

File $phpcsFile: * @param int $stackPtr * @param array<int, array<int>> $arguments The stack pointers of each argument; see findFunctionCallArguments * * @return array<VariableInfo> each variable's firstRead position and its name; other VariableInfo properties are not set!

1 call to Helpers::getVariablesInsideCompact()
VariableAnalysisSniff::processCompact in vendor/sirbrillig/phpcs-variable-analysis/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php
* Called to process variables named in a call to compact(). * *

File

vendor/sirbrillig/phpcs-variable-analysis/VariableAnalysis/Lib/Helpers.php, line 461

Class

Helpers

Namespace

VariableAnalysis\Lib

Code

public static function getVariablesInsideCompact(File $phpcsFile, $stackPtr, $arguments) {
    $tokens = $phpcsFile->getTokens();
    $variablePositionsAndNames = [];
    foreach ($arguments as $argumentPtrs) {
        $argumentPtrs = array_values(array_filter($argumentPtrs, function ($argumentPtr) use ($tokens) {
            return isset(Tokens::$emptyTokens[$tokens[$argumentPtr]['code']]) === false;
        }));
        if (empty($argumentPtrs)) {
            continue;
        }
        if (!isset($tokens[$argumentPtrs[0]])) {
            continue;
        }
        $argumentFirstToken = $tokens[$argumentPtrs[0]];
        if ($argumentFirstToken['code'] === T_ARRAY) {
            // It's an array argument, recurse.
            $arrayArguments = self::findFunctionCallArguments($phpcsFile, $argumentPtrs[0]);
            $variablePositionsAndNames = array_merge($variablePositionsAndNames, self::getVariablesInsideCompact($phpcsFile, $stackPtr, $arrayArguments));
            continue;
        }
        if (count($argumentPtrs) > 1) {
            // Complex argument, we can't handle it, ignore.
            continue;
        }
        if ($argumentFirstToken['code'] === T_CONSTANT_ENCAPSED_STRING) {
            // Single-quoted string literal, ie compact('whatever').
            // Substr is to strip the enclosing single-quotes.
            $varName = substr($argumentFirstToken['content'], 1, -1);
            $variable = new VariableInfo($varName);
            $variable->firstRead = $argumentPtrs[0];
            $variablePositionsAndNames[] = $variable;
            continue;
        }
        if ($argumentFirstToken['code'] === T_DOUBLE_QUOTED_STRING) {
            // Double-quoted string literal.
            $regexp = Constants::getDoubleQuotedVarRegexp();
            if (!empty($regexp) && preg_match($regexp, $argumentFirstToken['content'])) {
                // Bail if the string needs variable expansion, that's runtime stuff.
                continue;
            }
            // Substr is to strip the enclosing double-quotes.
            $varName = substr($argumentFirstToken['content'], 1, -1);
            $variable = new VariableInfo($varName);
            $variable->firstRead = $argumentPtrs[0];
            $variablePositionsAndNames[] = $variable;
            continue;
        }
    }
    return $variablePositionsAndNames;
}
RSS feed
Powered by Drupal