/library/phpdocx/lib/php_codesniffer/CodeSniffer/Reports/VersionControl.php
https://github.com/r1zib/salesforce · PHP · 214 lines · 117 code · 36 blank · 61 comment · 17 complexity · 3087c8e53b3bce5826cd212f617c6f55 MD5 · raw file
- <?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 Squiz Pty Ltd (ABN 77 084 670 600)
- * @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
- * @version CVS: $Id: IsCamelCapsTest.php 240585 2007-08-02 00:05:40Z squiz $
- * @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 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 $showWarnings Show warnings?
- * @param boolean $showSources Show sources?
- * @param integer $width Maximum allowed lne width.
- *
- * @return string
- */
- public function generate(
- $report,
- $showWarnings=true,
- $showSources=false,
- $width=80
- ) {
- $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 (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
- ?>