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

Breadcrumb

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

function ReferencedNameHelper::isReferencedName

2 calls to ReferencedNameHelper::isReferencedName()
ReferencedNameHelper::createAllReferencedNames in vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/ReferencedNameHelper.php
*
ReferencedNameHelper::createAllReferencedNamesInAttributes in vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/ReferencedNameHelper.php
*

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/ReferencedNameHelper.php, line 306

Class

ReferencedNameHelper
@internal

Namespace

SlevomatCodingStandard\Helpers

Code

private static function isReferencedName(File $phpcsFile, int $startPointer) : bool {
    $tokens = $phpcsFile->getTokens();
    $nextPointer = TokenHelper::findNextEffective($phpcsFile, $startPointer + 1);
    $previousPointer = TokenHelper::findPreviousEffective($phpcsFile, $startPointer - 1);
    if ($nextPointer !== null && $tokens[$nextPointer]['code'] === T_DOUBLE_COLON) {
        return !in_array($tokens[$previousPointer]['code'], [
            T_OBJECT_OPERATOR,
            T_NULLSAFE_OBJECT_OPERATOR,
        ], true);
    }
    if (count($tokens[$startPointer]['conditions']) > 0 && array_values(array_reverse($tokens[$startPointer]['conditions']))[0] === T_USE) {
        // Method imported from trait
        return false;
    }
    $previousToken = $tokens[$previousPointer];
    $skipTokenCodes = [
        T_FUNCTION,
        T_AS,
        T_DOUBLE_COLON,
        T_OBJECT_OPERATOR,
        T_NULLSAFE_OBJECT_OPERATOR,
        T_NAMESPACE,
        T_CONST,
        T_ENUM_CASE,
    ];
    if ($previousToken['code'] === T_USE) {
        $classPointer = TokenHelper::findPrevious($phpcsFile, [
            T_CLASS,
            T_TRAIT,
            T_ANON_CLASS,
            T_ENUM,
        ], $startPointer - 1);
        if ($classPointer !== null) {
            $classToken = $tokens[$classPointer];
            return $startPointer > $classToken['scope_opener'] && $startPointer < $classToken['scope_closer'];
        }
        return false;
    }
    if ($previousToken['code'] === T_OPEN_PARENTHESIS && isset($previousToken['parenthesis_owner']) && $tokens[$previousToken['parenthesis_owner']]['code'] === T_DECLARE) {
        return false;
    }
    if ($previousToken['code'] === T_COMMA && TokenHelper::findPreviousLocal($phpcsFile, T_DECLARE, $previousPointer - 1) !== null) {
        return false;
    }
    if ($previousToken['code'] === T_COMMA) {
        $constPointer = TokenHelper::findPreviousLocal($phpcsFile, T_CONST, $previousPointer - 1);
        if ($constPointer !== null && TokenHelper::findNext($phpcsFile, [
            T_OPEN_SHORT_ARRAY,
            T_ARRAY,
        ], $constPointer + 1, $startPointer) === null) {
            return false;
        }
    }
    elseif ($previousToken['code'] === T_BITWISE_AND) {
        $pointerBefore = TokenHelper::findPreviousEffective($phpcsFile, $previousPointer - 1);
        $isFunctionPointerBefore = TokenHelper::findPreviousLocal($phpcsFile, T_FUNCTION, $previousPointer - 1) !== null;
        if ($tokens[$pointerBefore]['code'] !== T_VARIABLE && $isFunctionPointerBefore) {
            return false;
        }
    }
    elseif ($previousToken['code'] === T_GOTO) {
        return false;
    }
    $isProbablyReferencedName = !in_array($previousToken['code'], array_merge($skipTokenCodes, TokenHelper::$typeKeywordTokenCodes), true);
    if (!$isProbablyReferencedName) {
        return false;
    }
    $endPointer = self::getReferencedNameEndPointer($phpcsFile, $startPointer);
    $referencedName = self::getReferenceName($phpcsFile, $startPointer, $endPointer);
    if (TypeHintHelper::isSimpleTypeHint($referencedName) || $referencedName === 'object') {
        return $tokens[$nextPointer]['code'] === T_OPEN_PARENTHESIS;
    }
    return true;
}

API Navigation

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