Chris@17
|
1 <?php
|
Chris@17
|
2 /**
|
Chris@17
|
3 * Info report for PHP_CodeSniffer.
|
Chris@17
|
4 *
|
Chris@17
|
5 * @author Greg Sherwood <gsherwood@squiz.net>
|
Chris@17
|
6 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
|
Chris@17
|
7 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
|
Chris@17
|
8 */
|
Chris@17
|
9
|
Chris@17
|
10 namespace PHP_CodeSniffer\Reports;
|
Chris@17
|
11
|
Chris@17
|
12 use PHP_CodeSniffer\Files\File;
|
Chris@17
|
13 use PHP_CodeSniffer\Util\Timing;
|
Chris@17
|
14
|
Chris@17
|
15 class Info implements Report
|
Chris@17
|
16 {
|
Chris@17
|
17
|
Chris@17
|
18
|
Chris@17
|
19 /**
|
Chris@17
|
20 * Generate a partial report for a single processed file.
|
Chris@17
|
21 *
|
Chris@17
|
22 * Function should return TRUE if it printed or stored data about the file
|
Chris@17
|
23 * and FALSE if it ignored the file. Returning TRUE indicates that the file and
|
Chris@17
|
24 * its data should be counted in the grand totals.
|
Chris@17
|
25 *
|
Chris@17
|
26 * @param array $report Prepared report data.
|
Chris@17
|
27 * @param \PHP_CodeSniffer\File $phpcsFile The file being reported on.
|
Chris@17
|
28 * @param bool $showSources Show sources?
|
Chris@17
|
29 * @param int $width Maximum allowed line width.
|
Chris@17
|
30 *
|
Chris@17
|
31 * @return bool
|
Chris@17
|
32 */
|
Chris@17
|
33 public function generateFileReport($report, File $phpcsFile, $showSources=false, $width=80)
|
Chris@17
|
34 {
|
Chris@17
|
35 $metrics = $phpcsFile->getMetrics();
|
Chris@17
|
36 foreach ($metrics as $metric => $data) {
|
Chris@17
|
37 foreach ($data['values'] as $value => $count) {
|
Chris@17
|
38 echo "$metric>>$value>>$count".PHP_EOL;
|
Chris@17
|
39 }
|
Chris@17
|
40 }
|
Chris@17
|
41
|
Chris@17
|
42 return true;
|
Chris@17
|
43
|
Chris@17
|
44 }//end generateFileReport()
|
Chris@17
|
45
|
Chris@17
|
46
|
Chris@17
|
47 /**
|
Chris@17
|
48 * Prints the source of all errors and warnings.
|
Chris@17
|
49 *
|
Chris@17
|
50 * @param string $cachedData Any partial report data that was returned from
|
Chris@17
|
51 * generateFileReport during the run.
|
Chris@17
|
52 * @param int $totalFiles Total number of files processed during the run.
|
Chris@17
|
53 * @param int $totalErrors Total number of errors found during the run.
|
Chris@17
|
54 * @param int $totalWarnings Total number of warnings found during the run.
|
Chris@17
|
55 * @param int $totalFixable Total number of problems that can be fixed.
|
Chris@17
|
56 * @param bool $showSources Show sources?
|
Chris@17
|
57 * @param int $width Maximum allowed line width.
|
Chris@17
|
58 * @param bool $interactive Are we running in interactive mode?
|
Chris@17
|
59 * @param bool $toScreen Is the report being printed to screen?
|
Chris@17
|
60 *
|
Chris@17
|
61 * @return void
|
Chris@17
|
62 */
|
Chris@17
|
63 public function generate(
|
Chris@17
|
64 $cachedData,
|
Chris@17
|
65 $totalFiles,
|
Chris@17
|
66 $totalErrors,
|
Chris@17
|
67 $totalWarnings,
|
Chris@17
|
68 $totalFixable,
|
Chris@17
|
69 $showSources=false,
|
Chris@17
|
70 $width=80,
|
Chris@17
|
71 $interactive=false,
|
Chris@17
|
72 $toScreen=true
|
Chris@17
|
73 ) {
|
Chris@17
|
74 $lines = explode(PHP_EOL, $cachedData);
|
Chris@17
|
75 array_pop($lines);
|
Chris@17
|
76
|
Chris@17
|
77 if (empty($lines) === true) {
|
Chris@17
|
78 return;
|
Chris@17
|
79 }
|
Chris@17
|
80
|
Chris@17
|
81 $metrics = [];
|
Chris@17
|
82 foreach ($lines as $line) {
|
Chris@17
|
83 $parts = explode('>>', $line);
|
Chris@17
|
84 $metric = $parts[0];
|
Chris@17
|
85 $value = $parts[1];
|
Chris@17
|
86 $count = $parts[2];
|
Chris@17
|
87 if (isset($metrics[$metric]) === false) {
|
Chris@17
|
88 $metrics[$metric] = [];
|
Chris@17
|
89 }
|
Chris@17
|
90
|
Chris@17
|
91 if (isset($metrics[$metric][$value]) === false) {
|
Chris@17
|
92 $metrics[$metric][$value] = $count;
|
Chris@17
|
93 } else {
|
Chris@17
|
94 $metrics[$metric][$value] += $count;
|
Chris@17
|
95 }
|
Chris@17
|
96 }
|
Chris@17
|
97
|
Chris@17
|
98 ksort($metrics);
|
Chris@17
|
99
|
Chris@17
|
100 echo PHP_EOL."\033[1m".'PHP CODE SNIFFER INFORMATION REPORT'."\033[0m".PHP_EOL;
|
Chris@17
|
101 echo str_repeat('-', 70).PHP_EOL;
|
Chris@17
|
102
|
Chris@17
|
103 foreach ($metrics as $metric => $values) {
|
Chris@17
|
104 if (count($values) === 1) {
|
Chris@17
|
105 $count = reset($values);
|
Chris@17
|
106 $value = key($values);
|
Chris@17
|
107
|
Chris@17
|
108 echo "$metric: \033[4m$value\033[0m [$count/$count, 100%]".PHP_EOL;
|
Chris@17
|
109 } else {
|
Chris@17
|
110 $totalCount = 0;
|
Chris@17
|
111 $valueWidth = 0;
|
Chris@17
|
112 foreach ($values as $value => $count) {
|
Chris@17
|
113 $totalCount += $count;
|
Chris@17
|
114 $valueWidth = max($valueWidth, strlen($value));
|
Chris@17
|
115 }
|
Chris@17
|
116
|
Chris@17
|
117 $countWidth = strlen($totalCount);
|
Chris@17
|
118 $nrOfThousandSeps = floor($countWidth / 3);
|
Chris@17
|
119 $countWidth += $nrOfThousandSeps;
|
Chris@17
|
120
|
Chris@17
|
121 // Account for 'total' line.
|
Chris@17
|
122 $valueWidth = max(5, $valueWidth);
|
Chris@17
|
123
|
Chris@17
|
124 echo "$metric:".PHP_EOL;
|
Chris@17
|
125
|
Chris@17
|
126 ksort($values, SORT_NATURAL);
|
Chris@17
|
127 arsort($values);
|
Chris@17
|
128
|
Chris@17
|
129 $percentPrefixWidth = 0;
|
Chris@17
|
130 $percentWidth = 6;
|
Chris@17
|
131 foreach ($values as $value => $count) {
|
Chris@17
|
132 $percent = round(($count / $totalCount * 100), 2);
|
Chris@17
|
133 $percentPrefix = '';
|
Chris@17
|
134 if ($percent === 0.00) {
|
Chris@17
|
135 $percent = 0.01;
|
Chris@17
|
136 $percentPrefix = '<';
|
Chris@17
|
137 $percentPrefixWidth = 2;
|
Chris@17
|
138 $percentWidth = 4;
|
Chris@17
|
139 }
|
Chris@17
|
140
|
Chris@17
|
141 printf(
|
Chris@17
|
142 "\t%-{$valueWidth}s => %{$countWidth}s (%{$percentPrefixWidth}s%{$percentWidth}.2f%%)".PHP_EOL,
|
Chris@17
|
143 $value,
|
Chris@17
|
144 number_format($count),
|
Chris@17
|
145 $percentPrefix,
|
Chris@17
|
146 $percent
|
Chris@17
|
147 );
|
Chris@17
|
148 }
|
Chris@17
|
149
|
Chris@17
|
150 echo "\t".str_repeat('-', ($valueWidth + $countWidth + 15)).PHP_EOL;
|
Chris@17
|
151 printf(
|
Chris@17
|
152 "\t%-{$valueWidth}s => %{$countWidth}s (100.00%%)".PHP_EOL,
|
Chris@17
|
153 'total',
|
Chris@17
|
154 number_format($totalCount)
|
Chris@17
|
155 );
|
Chris@17
|
156 }//end if
|
Chris@17
|
157
|
Chris@17
|
158 echo PHP_EOL;
|
Chris@17
|
159 }//end foreach
|
Chris@17
|
160
|
Chris@17
|
161 echo str_repeat('-', 70).PHP_EOL;
|
Chris@17
|
162
|
Chris@17
|
163 if ($toScreen === true && $interactive === false) {
|
Chris@17
|
164 Timing::printRunTime();
|
Chris@17
|
165 }
|
Chris@17
|
166
|
Chris@17
|
167 }//end generate()
|
Chris@17
|
168
|
Chris@17
|
169
|
Chris@17
|
170 }//end class
|