Initial Commit
This commit is contained in:
216
database/php/pear/PHP/CodeSniffer/Reports/VersionControl.php
Normal file
216
database/php/pear/PHP/CodeSniffer/Reports/VersionControl.php
Normal file
@@ -0,0 +1,216 @@
|
||||
<?php
|
||||
/**
|
||||
* Version control report base class for PHP_CodeSniffer.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Ben Selby <benmatselby@gmail.com>
|
||||
* @copyright 2009 SQLI <www.sqli.com>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
|
||||
/**
|
||||
* Version control report base class for PHP_CodeSniffer.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Ben Selby <benmatselby@gmail.com>
|
||||
* @copyright 2009 SQLI <www.sqli.com>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @version Release: 1.2.2
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
abstract class PHP_CodeSniffer_Reports_VersionControl implements PHP_CodeSniffer_Report
|
||||
{
|
||||
|
||||
/**
|
||||
* The name of the report we want in the output.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $reportName = 'VERSION CONTROL';
|
||||
|
||||
|
||||
/**
|
||||
* Prints the author of all errors and warnings, as given by "version control blame".
|
||||
*
|
||||
* @param array $report Prepared report.
|
||||
* @param boolean $showSources Show sources?
|
||||
* @param integer $width Maximum allowed lne width.
|
||||
* @param boolean $toScreen Is the report being printed to screen?
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generate(
|
||||
$report,
|
||||
$showSources=false,
|
||||
$width=80,
|
||||
$toScreen=true
|
||||
) {
|
||||
$authors = array();
|
||||
$praise = array();
|
||||
$sources = array();
|
||||
$width = max($width, 70);
|
||||
|
||||
$errorsShown = 0;
|
||||
|
||||
foreach ($report['files'] as $filename => $file) {
|
||||
$blames = $this->getBlameContent($filename);
|
||||
|
||||
foreach ($file['messages'] as $line => $lineErrors) {
|
||||
$author = $this->getAuthor($blames[($line - 1)]);
|
||||
if ($author === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($authors[$author]) === false) {
|
||||
$authors[$author] = 0;
|
||||
$praise[$author] = array(
|
||||
'good' => 0,
|
||||
'bad' => 0,
|
||||
);
|
||||
}
|
||||
|
||||
$praise[$author]['bad']++;
|
||||
|
||||
foreach ($lineErrors as $column => $colErrors) {
|
||||
foreach ($colErrors as $error) {
|
||||
$errorsShown++;
|
||||
$authors[$author]++;
|
||||
|
||||
if ($showSources === true) {
|
||||
$source = $error['source'];
|
||||
if (isset($sources[$author][$source]) === false) {
|
||||
$sources[$author][$source] = 1;
|
||||
} else {
|
||||
$sources[$author][$source]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($blames[($line - 1)]);
|
||||
}//end foreach
|
||||
|
||||
// No go through and give the authors some credit for
|
||||
// all the lines that do not have errors.
|
||||
foreach ($blames as $line) {
|
||||
$author = $this->getAuthor($line);
|
||||
if (false === $author) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($authors[$author]) === false) {
|
||||
// This author doesn't have any errors.
|
||||
if (PHP_CODESNIFFER_VERBOSITY === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$authors[$author] = 0;
|
||||
$praise[$author] = array(
|
||||
'good' => 0,
|
||||
'bad' => 0,
|
||||
);
|
||||
}
|
||||
|
||||
$praise[$author]['good']++;
|
||||
}//end foreach
|
||||
}//end foreach
|
||||
|
||||
if ($errorsShown === 0) {
|
||||
// Nothing to show.
|
||||
return 0;
|
||||
}
|
||||
|
||||
arsort($authors);
|
||||
|
||||
echo PHP_EOL.'PHP CODE SNIFFER '.$this->reportName.' BLAME SUMMARY'.PHP_EOL;
|
||||
echo str_repeat('-', $width).PHP_EOL;
|
||||
if ($showSources === true) {
|
||||
echo 'AUTHOR SOURCE'.str_repeat(' ', ($width - 43)).'(Author %) (Overall %) COUNT'.PHP_EOL;
|
||||
echo str_repeat('-', $width).PHP_EOL;
|
||||
} else {
|
||||
echo 'AUTHOR'.str_repeat(' ', ($width - 34)).'(Author %) (Overall %) COUNT'.PHP_EOL;
|
||||
echo str_repeat('-', $width).PHP_EOL;
|
||||
}
|
||||
|
||||
foreach ($authors as $author => $count) {
|
||||
if ($praise[$author]['good'] === 0) {
|
||||
$percent = 0;
|
||||
} else {
|
||||
$total = ($praise[$author]['bad'] + $praise[$author]['good']);
|
||||
$percent = round(($praise[$author]['bad'] / $total * 100), 2);
|
||||
}
|
||||
|
||||
$overallPercent = '('.round((($count / $errorsShown) * 100), 2).')';
|
||||
$authorPercent = '('.$percent.')';
|
||||
$line = str_repeat(' ', (6 - strlen($count))).$count;
|
||||
$line = str_repeat(' ', (12 - strlen($overallPercent))).$overallPercent.$line;
|
||||
$line = str_repeat(' ', (11 - strlen($authorPercent))).$authorPercent.$line;
|
||||
$line = $author.str_repeat(' ', ($width - strlen($author) - strlen($line))).$line;
|
||||
|
||||
echo $line.PHP_EOL;
|
||||
|
||||
if ($showSources === true && isset($sources[$author]) === true) {
|
||||
$errors = $sources[$author];
|
||||
asort($errors);
|
||||
$errors = array_reverse($errors);
|
||||
|
||||
foreach ($errors as $source => $count) {
|
||||
if ($source === 'count') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$line = str_repeat(' ', (5 - strlen($count))).$count;
|
||||
echo ' '.$source.str_repeat(' ', ($width - 14 - strlen($source))).$line.PHP_EOL;
|
||||
}
|
||||
}
|
||||
}//end foreach
|
||||
|
||||
echo str_repeat('-', $width).PHP_EOL;
|
||||
echo 'A TOTAL OF '.$errorsShown.' SNIFF VIOLATION(S) ';
|
||||
echo 'WERE COMMITTED BY '.count($authors).' AUTHOR(S)'.PHP_EOL;
|
||||
echo str_repeat('-', $width).PHP_EOL.PHP_EOL;
|
||||
|
||||
if ($toScreen === true
|
||||
&& PHP_CODESNIFFER_INTERACTIVE === false
|
||||
&& class_exists('PHP_Timer', false) === true
|
||||
) {
|
||||
echo PHP_Timer::resourceUsage().PHP_EOL.PHP_EOL;
|
||||
}
|
||||
|
||||
return $errorsShown;
|
||||
|
||||
}//end generate()
|
||||
|
||||
|
||||
/**
|
||||
* Extract the author from a blame line.
|
||||
*
|
||||
* @param string $line Line to parse.
|
||||
*
|
||||
* @return mixed string or false if impossible to recover.
|
||||
*/
|
||||
abstract protected function getAuthor($line);
|
||||
|
||||
|
||||
/**
|
||||
* Gets the blame output.
|
||||
*
|
||||
* @param string $filename File to blame.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
abstract protected function getBlameContent($filename);
|
||||
|
||||
|
||||
}//end class
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user