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

Breadcrumb

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

function YodaHelper::getDynamismForTokens

*

Parameters

array<int, array<string, array<int, int|string>|int|string>> $tokens: * @param array<int, array<string, array<int, int|string>|int|string>> $sideTokens

2 calls to YodaHelper::getDynamismForTokens()
DisallowYodaComparisonSniff::process in vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/ControlStructures/DisallowYodaComparisonSniff.php
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *
RequireYodaComparisonSniff::process in vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/ControlStructures/RequireYodaComparisonSniff.php
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/YodaHelper.php, line 185

Class

YodaHelper
@internal

Namespace

SlevomatCodingStandard\Helpers

Code

public static function getDynamismForTokens(array $tokens, array $sideTokens) : ?int {
    $sideTokens = array_values(array_filter($sideTokens, static function (array $token) : bool {
        return !in_array($token['code'], [
            T_WHITESPACE,
            T_COMMENT,
            T_DOC_COMMENT,
            T_NS_SEPARATOR,
            T_PLUS,
            T_MINUS,
            T_INT_CAST,
            T_DOUBLE_CAST,
            T_STRING_CAST,
            T_ARRAY_CAST,
            T_OBJECT_CAST,
            T_BOOL_CAST,
            T_UNSET_CAST,
        ], true);
    }));
    $sideTokensCount = count($sideTokens);
    $dynamism = self::getTokenDynamism();
    if ($sideTokensCount > 0) {
        if ($sideTokens[0]['code'] === T_VARIABLE) {
            // Expression starts with a variable - wins over everything else
            return self::DYNAMISM_VARIABLE;
        }
        if ($sideTokens[$sideTokensCount - 1]['code'] === T_CLOSE_PARENTHESIS) {
            if (array_key_exists('parenthesis_owner', $sideTokens[$sideTokensCount - 1])) {
                
                /** @var int $parenthesisOwner */
                $parenthesisOwner = $sideTokens[$sideTokensCount - 1]['parenthesis_owner'];
                if ($tokens[$parenthesisOwner]['code'] === T_ARRAY) {
                    // Array
                    return $dynamism[T_ARRAY];
                }
            }
            // Function or method call
            return self::DYNAMISM_FUNCTION_CALL;
        }
        if ($sideTokensCount === 1 && $sideTokens[0]['code'] === T_STRING) {
            // Constant
            return self::DYNAMISM_CONSTANT;
        }
    }
    if ($sideTokensCount > 2 && $sideTokens[$sideTokensCount - 2]['code'] === T_DOUBLE_COLON) {
        if ($sideTokens[$sideTokensCount - 1]['code'] === T_VARIABLE) {
            // Static property access
            return self::DYNAMISM_VARIABLE;
        }
        if ($sideTokens[$sideTokensCount - 1]['code'] === T_STRING) {
            // Class constant
            return self::DYNAMISM_CONSTANT;
        }
    }
    if (array_key_exists(0, $sideTokens)) {
        
        /** @var int $sideTokenCode */
        $sideTokenCode = $sideTokens[0]['code'];
        if (array_key_exists($sideTokenCode, $dynamism)) {
            return $dynamism[$sideTokenCode];
        }
    }
    return null;
}

API Navigation

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