/** * Generate summary information to be used during report generation. * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file that has been processed. * * @return array */ public function prepareFileReport(File $phpcsFile) { $report = array('filename' => Common::stripBasepath($phpcsFile->getFilename(), $this->config->basepath), 'errors' => $phpcsFile->getErrorCount(), 'warnings' => $phpcsFile->getWarningCount(), 'fixable' => $phpcsFile->getFixableCount(), 'messages' => array()); if ($report['errors'] === 0 && $report['warnings'] === 0) { // Prefect score! return $report; } if ($this->config->recordErrors === false) { $message = 'Errors are not being recorded but this report requires error messages. '; $message .= 'This report will not show the correct information.'; $report['messages'][1][1] = array(array('message' => $message, 'source' => 'Internal.RecordErrors', 'severity' => 5, 'fixable' => false, 'type' => 'ERROR')); return $report; } $errors = array(); // Merge errors and warnings. foreach ($phpcsFile->getErrors() as $line => $lineErrors) { foreach ($lineErrors as $column => $colErrors) { $newErrors = array(); foreach ($colErrors as $data) { $newErrors[] = array('message' => $data['message'], 'source' => $data['source'], 'severity' => $data['severity'], 'fixable' => $data['fixable'], 'type' => 'ERROR'); } $errors[$line][$column] = $newErrors; } ksort($errors[$line]); } //end foreach foreach ($phpcsFile->getWarnings() as $line => $lineWarnings) { foreach ($lineWarnings as $column => $colWarnings) { $newWarnings = array(); foreach ($colWarnings as $data) { $newWarnings[] = array('message' => $data['message'], 'source' => $data['source'], 'severity' => $data['severity'], 'fixable' => $data['fixable'], 'type' => 'WARNING'); } if (isset($errors[$line]) === false) { $errors[$line] = array(); } if (isset($errors[$line][$column]) === true) { $errors[$line][$column] = array_merge($newWarnings, $errors[$line][$column]); } else { $errors[$line][$column] = $newWarnings; } } //end foreach ksort($errors[$line]); } //end foreach ksort($errors); $report['messages'] = $errors; return $report; }
/** * Generate a partial report for a single processed file. * * Function should return TRUE if it printed or stored data about the file * and FALSE if it ignored the file. Returning TRUE indicates that the file and * its data should be counted in the grand totals. * * @param array $report Prepared report data. * @param \PHP_CodeSniffer\File $phpcsFile The file being reported on. * @param bool $showSources Show sources? * @param int $width Maximum allowed line width. * * @return bool */ public function generateFileReport($report, File $phpcsFile, $showSources = false, $width = 80) { $errors = $phpcsFile->getFixableCount(); if ($errors !== 0) { if (PHP_CODESNIFFER_VERBOSITY > 0) { ob_end_clean(); $startTime = microtime(true); echo "\t=> Fixing file: {$errors}/{$errors} violations remaining"; } $fixed = $phpcsFile->fixer->fixFile(); } if ($phpcsFile->config->stdin === true) { // Replacing STDIN, so output current file to STDOUT // even if nothing was fixed. Exit here because we // can't process any more than 1 file in this setup. echo $phpcsFile->fixer->getContents(); ob_end_flush(); exit(1); } if ($errors === 0) { return false; } if (PHP_CODESNIFFER_VERBOSITY > 0) { if ($fixed === false) { echo 'ERROR'; } else { echo 'DONE'; } $timeTaken = (microtime(true) - $startTime) * 1000; if ($timeTaken < 1000) { $timeTaken = round($timeTaken); echo " in {$timeTaken}ms" . PHP_EOL; } else { $timeTaken = round($timeTaken / 1000, 2); echo " in {$timeTaken} secs" . PHP_EOL; } } if ($fixed === true) { $newFilename = $report['filename'] . $phpcsFile->config->suffix; $newContent = $phpcsFile->fixer->getContents(); file_put_contents($newFilename, $newContent); if (PHP_CODESNIFFER_VERBOSITY > 0) { if ($newFilename === $report['filename']) { echo "\t=> File was overwritten" . PHP_EOL; } else { echo "\t=> Fixed file written to " . basename($newFilename) . PHP_EOL; } } } if (PHP_CODESNIFFER_VERBOSITY > 0) { ob_start(); } $errorCount = $phpcsFile->getErrorCount(); $warningCount = $phpcsFile->getWarningCount(); $fixableCount = $phpcsFile->getFixableCount(); $fixedCount = $errors - $fixableCount; echo $report['filename'] . ">>{$errorCount}>>{$warningCount}>>{$fixableCount}>>{$fixedCount}" . PHP_EOL; return $fixed; }
/** * Print progress information for a single processed file. * * @param File $file The file that was processed. * @param int $numFiles The total number of files to process. * @param int $numProcessed The number of files that have been processed, * including this one. * * @return void */ function printProgress($file, $numFiles, $numProcessed) { if (PHP_CODESNIFFER_VERBOSITY > 0 || $this->config->showProgress === false) { return; } // Show progress information. if ($file->ignored === true) { echo 'S'; } else { $errors = $file->getErrorCount(); $warnings = $file->getWarningCount(); $fixable = $file->getFixableCount(); $fixed = $file->getFixedCount(); if (PHP_CODESNIFFER_CBF === true) { // Files with fixed errors or warnings are F (green). // Files with unfixable errors or warnings are E (red). // Files with no errors or warnings are . (black). if ($fixable > 0) { if ($this->config->colors === true) { echo "[31m"; } echo 'E'; if ($this->config->colors === true) { echo "[0m"; } } else { if ($fixed > 0) { if ($this->config->colors === true) { echo "[32m"; } echo 'F'; if ($this->config->colors === true) { echo "[0m"; } } else { echo '.'; } } //end if } else { // Files with errors are E (red). // Files with fixable errors are E (green). // Files with warnings are W (yellow). // Files with fixable warnings are W (green). // Files with no errors or warnings are . (black). if ($errors > 0) { if ($this->config->colors === true) { if ($fixable > 0) { echo "[32m"; } else { echo "[31m"; } } echo 'E'; if ($this->config->colors === true) { echo "[0m"; } } else { if ($warnings > 0) { if ($this->config->colors === true) { if ($fixable > 0) { echo "[32m"; } else { echo "[33m"; } } echo 'W'; if ($this->config->colors === true) { echo "[0m"; } } else { echo '.'; } } //end if } //end if } //end if if ($numProcessed % 60 === 0) { $padding = strlen($numFiles) - strlen($numProcessed); echo str_repeat(' ', $padding); $percent = round($numProcessed / $numFiles * 100); echo " {$numProcessed} / {$numFiles} ({$percent}%)" . PHP_EOL; } }