Server : Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6 System : Windows NT USER-PC 6.1 build 7601 (Windows 7 Professional Edition Service Pack 1) AMD64 User : User ( 0) PHP Version : 7.4.6 Disable Function : NONE Directory : C:/xampp/php/pear/PHP/CodeSniffer/Reports/ |
<?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 ?>