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

Breadcrumb

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

function ESLintSniff::process

Processes the tokens that this sniff is interested in.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file where the token was found.:

int $stackPtr The position in the stack where: the token was found.

Return value

int

Throws

\PHP_CodeSniffer\Exceptions\RuntimeException If jshint.js could not be run.

Overrides Sniff::process

File

vendor/squizlabs/php_codesniffer/src/Standards/Generic/Sniffs/Debug/ESLintSniff.php, line 59

Class

ESLintSniff

Namespace

PHP_CodeSniffer\Standards\Generic\Sniffs\Debug

Code

public function process(File $phpcsFile, $stackPtr) {
    $eslintPath = Config::getExecutablePath('eslint');
    if ($eslintPath === null) {
        return $phpcsFile->numTokens;
    }
    $filename = $phpcsFile->getFilename();
    $configFile = $this->configFile;
    if (empty($configFile) === true) {
        // Attempt to autodetect.
        $candidates = glob('.eslintrc{.js,.yaml,.yml,.json}', GLOB_BRACE);
        if (empty($candidates) === false) {
            $configFile = $candidates[0];
        }
    }
    $eslintOptions = [
        '--format json',
    ];
    if (empty($configFile) === false) {
        $eslintOptions[] = '--config ' . escapeshellarg($configFile);
    }
    $cmd = Common::escapeshellcmd(escapeshellarg($eslintPath) . ' ' . implode(' ', $eslintOptions) . ' ' . escapeshellarg($filename));
    // Execute!
    exec($cmd, $stdout, $code);
    if ($code <= 0) {
        // No errors, continue.
        return $phpcsFile->numTokens;
    }
    $data = json_decode(implode("\n", $stdout));
    if (json_last_error() !== JSON_ERROR_NONE) {
        // Ignore any errors.
        return $phpcsFile->numTokens;
    }
    // Data is a list of files, but we only pass a single one.
    $messages = $data[0]->messages;
    foreach ($messages as $error) {
        $message = 'eslint says: ' . $error->message;
        if (empty($error->fatal) === false || $error->severity === 2) {
            $phpcsFile->addErrorOnLine($message, $error->line, 'ExternalTool');
        }
        else {
            $phpcsFile->addWarningOnLine($message, $error->line, 'ExternalTool');
        }
    }
    // Ignore the rest of the file.
    return $phpcsFile->numTokens;
}
RSS feed
Powered by Drupal