Current File : /var/www/prestashop/modules/ps_metrics/vendor/squizlabs/php_codesniffer/src/Reports/Source.php |
<?php
/**
* Source report for PHP_CodeSniffer.
*
* @author Greg Sherwood <gsherwood@squiz.net>
* @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
* @license https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*/
namespace ps_metrics_module_v4_0_6\PHP_CodeSniffer\Reports;
use ps_metrics_module_v4_0_6\PHP_CodeSniffer\Files\File;
use ps_metrics_module_v4_0_6\PHP_CodeSniffer\Util\Timing;
class Source implements 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\Files\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)
{
if ($report['errors'] === 0 && $report['warnings'] === 0) {
// Nothing to print.
return \false;
}
$sources = [];
foreach ($report['messages'] as $line => $lineErrors) {
foreach ($lineErrors as $column => $colErrors) {
foreach ($colErrors as $error) {
$src = $error['source'];
if (isset($sources[$src]) === \false) {
$sources[$src] = ['fixable' => (int) $error['fixable'], 'count' => 1];
} else {
$sources[$src]['count']++;
}
}
}
}
foreach ($sources as $source => $data) {
echo $source . '>>' . $data['fixable'] . '>>' . $data['count'] . \PHP_EOL;
}
return \true;
}
//end generateFileReport()
/**
* Prints the source of all errors and warnings.
*
* @param string $cachedData Any partial report data that was returned from
* generateFileReport during the run.
* @param int $totalFiles Total number of files processed during the run.
* @param int $totalErrors Total number of errors found during the run.
* @param int $totalWarnings Total number of warnings found during the run.
* @param int $totalFixable Total number of problems that can be fixed.
* @param bool $showSources Show sources?
* @param int $width Maximum allowed line width.
* @param bool $interactive Are we running in interactive mode?
* @param bool $toScreen Is the report being printed to screen?
*
* @return void
*/
public function generate($cachedData, $totalFiles, $totalErrors, $totalWarnings, $totalFixable, $showSources = \false, $width = 80, $interactive = \false, $toScreen = \true)
{
$lines = \explode(\PHP_EOL, $cachedData);
\array_pop($lines);
if (empty($lines) === \true) {
return;
}
$sources = [];
$maxLength = 0;
foreach ($lines as $line) {
$parts = \explode('>>', $line);
$source = $parts[0];
$fixable = (bool) $parts[1];
$count = $parts[2];
if (isset($sources[$source]) === \false) {
if ($showSources === \true) {
$parts = null;
$sniff = $source;
} else {
$parts = \explode('.', $source);
if ($parts[0] === 'Internal') {
$parts[2] = $parts[1];
$parts[1] = '';
}
$parts[1] = $this->makeFriendlyName($parts[1]);
$sniff = $this->makeFriendlyName($parts[2]);
if (isset($parts[3]) === \true) {
$name = $this->makeFriendlyName($parts[3]);
$name[0] = \strtolower($name[0]);
$sniff .= ' ' . $name;
unset($parts[3]);
}
$parts[2] = $sniff;
}
//end if
$maxLength = \max($maxLength, \strlen($sniff));
$sources[$source] = ['count' => $count, 'fixable' => $fixable, 'parts' => $parts];
} else {
$sources[$source]['count'] += $count;
}
//end if
}
//end foreach
if ($showSources === \true) {
$width = \min($width, $maxLength + 11);
} else {
$width = \min($width, $maxLength + 41);
}
$width = \max($width, 70);
// Sort the data based on counts and source code.
$sourceCodes = \array_keys($sources);
$counts = [];
foreach ($sources as $source => $data) {
$counts[$source] = $data['count'];
}
\array_multisort($counts, \SORT_DESC, $sourceCodes, \SORT_ASC, \SORT_NATURAL, $sources);
echo \PHP_EOL . "\x1b[1mPHP CODE SNIFFER VIOLATION SOURCE SUMMARY\x1b[0m" . \PHP_EOL;
echo \str_repeat('-', $width) . \PHP_EOL . "\x1b[1m";
if ($showSources === \true) {
if ($totalFixable > 0) {
echo ' SOURCE' . \str_repeat(' ', $width - 15) . 'COUNT' . \PHP_EOL;
} else {
echo 'SOURCE' . \str_repeat(' ', $width - 11) . 'COUNT' . \PHP_EOL;
}
} else {
if ($totalFixable > 0) {
echo ' STANDARD CATEGORY SNIFF' . \str_repeat(' ', $width - 44) . 'COUNT' . \PHP_EOL;
} else {
echo 'STANDARD CATEGORY SNIFF' . \str_repeat(' ', $width - 40) . 'COUNT' . \PHP_EOL;
}
}
echo "\x1b[0m" . \str_repeat('-', $width) . \PHP_EOL;
$fixableSources = 0;
if ($showSources === \true) {
$maxSniffWidth = $width - 7;
} else {
$maxSniffWidth = $width - 37;
}
if ($totalFixable > 0) {
$maxSniffWidth -= 4;
}
foreach ($sources as $source => $sourceData) {
if ($totalFixable > 0) {
echo '[';
if ($sourceData['fixable'] === \true) {
echo 'x';
$fixableSources++;
} else {
echo ' ';
}
echo '] ';
}
if ($showSources === \true) {
if (\strlen($source) > $maxSniffWidth) {
$source = \substr($source, 0, $maxSniffWidth);
}
echo $source;
if ($totalFixable > 0) {
echo \str_repeat(' ', $width - 9 - \strlen($source));
} else {
echo \str_repeat(' ', $width - 5 - \strlen($source));
}
} else {
$parts = $sourceData['parts'];
if (\strlen($parts[0]) > 8) {
$parts[0] = \substr($parts[0], 0, (\strlen($parts[0]) - 8) * -1);
}
echo $parts[0] . \str_repeat(' ', 10 - \strlen($parts[0]));
$category = $parts[1];
if (\strlen($category) > 18) {
$category = \substr($category, 0, (\strlen($category) - 18) * -1);
}
echo $category . \str_repeat(' ', 20 - \strlen($category));
$sniff = $parts[2];
if (\strlen($sniff) > $maxSniffWidth) {
$sniff = \substr($sniff, 0, $maxSniffWidth);
}
if ($totalFixable > 0) {
echo $sniff . \str_repeat(' ', $width - 39 - \strlen($sniff));
} else {
echo $sniff . \str_repeat(' ', $width - 35 - \strlen($sniff));
}
}
//end if
echo $sourceData['count'] . \PHP_EOL;
}
//end foreach
echo \str_repeat('-', $width) . \PHP_EOL;
echo "\x1b[1m" . 'A TOTAL OF ' . ($totalErrors + $totalWarnings) . ' SNIFF VIOLATION';
if ($totalErrors + $totalWarnings > 1) {
echo 'S';
}
echo ' WERE FOUND IN ' . \count($sources) . ' SOURCE';
if (\count($sources) !== 1) {
echo 'S';
}
echo "\x1b[0m";
if ($totalFixable > 0) {
echo \PHP_EOL . \str_repeat('-', $width) . \PHP_EOL;
echo "\x1b[1mPHPCBF CAN FIX THE {$fixableSources} MARKED SOURCES AUTOMATICALLY ({$totalFixable} VIOLATIONS IN TOTAL)\x1b[0m";
}
echo \PHP_EOL . \str_repeat('-', $width) . \PHP_EOL . \PHP_EOL;
if ($toScreen === \true && $interactive === \false) {
Timing::printRunTime();
}
}
//end generate()
/**
* Converts a camel caps name into a readable string.
*
* @param string $name The camel caps name to convert.
*
* @return string
*/
public function makeFriendlyName($name)
{
if (\trim($name) === '') {
return '';
}
$friendlyName = '';
$length = \strlen($name);
$lastWasUpper = \false;
$lastWasNumeric = \false;
for ($i = 0; $i < $length; $i++) {
if (\is_numeric($name[$i]) === \true) {
if ($lastWasNumeric === \false) {
$friendlyName .= ' ';
}
$lastWasUpper = \false;
$lastWasNumeric = \true;
} else {
$lastWasNumeric = \false;
$char = \strtolower($name[$i]);
if ($char === $name[$i]) {
// Lowercase.
$lastWasUpper = \false;
} else {
// Uppercase.
if ($lastWasUpper === \false) {
$friendlyName .= ' ';
if ($i < $length - 1) {
$next = $name[$i + 1];
if (\strtolower($next) === $next) {
// Next char is lowercase so it is a word boundary.
$name[$i] = \strtolower($name[$i]);
}
}
}
$lastWasUpper = \true;
}
}
//end if
$friendlyName .= $name[$i];
}
//end for
$friendlyName = \trim($friendlyName);
$friendlyName[0] = \strtoupper($friendlyName[0]);
return $friendlyName;
}
//end makeFriendlyName()
}
//end class