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
Namespace
PHP_CodeSniffer\Standards\Generic\Sniffs\DebugCode
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;
}