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

Breadcrumb

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

function DisallowVariableParsingSniff::process

* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

Parameters

int $stringPointer:

Overrides Sniff::process

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Strings/DisallowVariableParsingSniff.php, line 51

Class

DisallowVariableParsingSniff

Namespace

SlevomatCodingStandard\Sniffs\Strings

Code

public function process(File $phpcsFile, $stringPointer) : void {
    if (!$this->disallowDollarCurlySyntax && !$this->disallowCurlyDollarSyntax && !$this->disallowSimpleSyntax) {
        throw new UnexpectedValueException('No option is set.');
    }
    $tokens = $phpcsFile->getTokens();
    $tokenContent = $tokens[$stringPointer]['content'];
    if (strpos($tokenContent, '$') === false) {
        return;
    }
    $stringTokens = $tokens[$stringPointer]['code'] === T_HEREDOC ? token_get_all('<?php "' . $tokenContent . '"') : token_get_all('<?php ' . $tokenContent);
    for ($i = 0; $i < count($stringTokens); $i++) {
        $stringToken = $stringTokens[$i];
        if (!is_array($stringToken)) {
            continue;
        }
        if ($this->disallowDollarCurlySyntax && $this->getTokenContent($stringToken) === '${') {
            $usedVariable = $stringToken[1];
            for ($j = $i + 1; $j < count($stringTokens); $j++) {
                $usedVariable .= $this->getTokenContent($stringTokens[$j]);
                if ($this->getTokenContent($stringTokens[$j]) === '}') {
                    $phpcsFile->addError(sprintf('Using variable syntax "${...}" inside string is disallowed as syntax "${...}" is deprecated as of PHP 8.2, found "%s".', $usedVariable), $stringPointer, self::CODE_DISALLOWED_DOLLAR_CURLY_SYNTAX);
                    break;
                }
            }
        }
        elseif ($stringToken[0] === T_VARIABLE) {
            if ($this->disallowCurlyDollarSyntax && $this->getTokenContent($stringTokens[$i - 1]) === '{') {
                $usedVariable = $stringToken[1];
                for ($j = $i + 1; $j < count($stringTokens); $j++) {
                    $stringTokenContent = $this->getTokenContent($stringTokens[$j]);
                    if ($stringTokenContent === '}') {
                        break;
                    }
                    $usedVariable .= $stringTokenContent;
                }
                $phpcsFile->addError(sprintf('Using variable syntax "{$...}" inside string is disallowed, found "{%s}".', $usedVariable), $stringPointer, self::CODE_DISALLOWED_CURLY_DOLLAR_SYNTAX);
            }
            elseif ($this->disallowSimpleSyntax) {
                $error = true;
                for ($j = $i - 1; $j >= 0; $j--) {
                    $stringTokenContent = $this->getTokenContent($stringTokens[$j]);
                    if (in_array($stringTokenContent, [
                        '{',
                        '${',
                    ], true)) {
                        $error = false;
                        break;
                    }
                    if ($stringTokenContent === '}') {
                        break;
                    }
                }
                if ($error) {
                    $phpcsFile->addError(sprintf('Using variable syntax "$..." inside string is disallowed, found "%s".', $this->getTokenContent($stringToken)), $stringPointer, self::CODE_DISALLOWED_SIMPLE_SYNTAX);
                }
            }
        }
    }
}

API Navigation

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