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

Breadcrumb

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

function RequireNowdocSniff::process

* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *

Parameters

int $heredocStartPointer:

Overrides Sniff::process

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/PHP/RequireNowdocSniff.php, line 33

Class

RequireNowdocSniff

Namespace

SlevomatCodingStandard\Sniffs\PHP

Code

public function process(File $phpcsFile, $heredocStartPointer) : void {
    $tokens = $phpcsFile->getTokens();
    $heredocEndPointer = TokenHelper::findNext($phpcsFile, T_END_HEREDOC, $heredocStartPointer + 1);
    $heredocContentPointers = [];
    for ($i = $heredocStartPointer + 1; $i < $heredocEndPointer; $i++) {
        if ($tokens[$i]['code'] === T_HEREDOC) {
            if (preg_match('~^([^\\\\$]|\\\\[^nrtvef0-7xu])*$~', $tokens[$i]['content']) === 0) {
                return;
            }
            $heredocContentPointers[] = $i;
        }
    }
    $fix = $phpcsFile->addFixableError('Use nowdoc syntax instead of heredoc.', $heredocStartPointer, self::CODE_REQUIRED_NOWDOC);
    if (!$fix) {
        return;
    }
    $nowdocStart = preg_replace('~^<<<"?(\\w+)"?~', '<<<\'$1\'', $tokens[$heredocStartPointer]['content']);
    $phpcsFile->fixer
        ->beginChangeset();
    $phpcsFile->fixer
        ->replaceToken($heredocStartPointer, $nowdocStart);
    foreach ($heredocContentPointers as $heredocContentPointer) {
        $heredocContent = $tokens[$heredocContentPointer]['content'];
        $nowdocContent = preg_replace('~\\\\(\\\\[nrtvef]|\\$|\\\\|\\\\[0-7]{1,3}|\\\\x[0-9A-Fa-f]{1,2}|\\\\u\\{[0-9A-Fa-f]+\\})~', '$1', $heredocContent);
        $phpcsFile->fixer
            ->replaceToken($heredocContentPointer, $nowdocContent);
    }
    $phpcsFile->fixer
        ->endChangeset();
}
RSS feed
Powered by Drupal