Skip to content

Commit cae8add

Browse files
authored
Support type-coverage in trend reports (#123)
1 parent 119cb6a commit cae8add

File tree

6 files changed

+56
-17
lines changed

6 files changed

+56
-17
lines changed

lib/TrendApplication.php

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,19 @@ private function createTrendResult(string $baselinePath, array $comparing, Analy
128128
return array($trendResult, $exitCode);
129129
}
130130

131-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_OVERALL_ERRORS, $reference->overallErrors, $comparing[$baselinePath]->overallErrors, $exitCode);
132-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_CLASSES_COMPLEXITY, $reference->classesComplexity, $comparing[$baselinePath]->classesComplexity, $exitCode);
133-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_DEPRECATIONS, $reference->deprecations, $comparing[$baselinePath]->deprecations, $exitCode);
134-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_INVALID_PHPDOCS, $reference->invalidPhpdocs, $comparing[$baselinePath]->invalidPhpdocs, $exitCode);
135-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_UNKNOWN_TYPES, $reference->unknownTypes, $comparing[$baselinePath]->unknownTypes, $exitCode);
136-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_ANONYMOUS_VARIABLES, $reference->anonymousVariables, $comparing[$baselinePath]->anonymousVariables, $exitCode);
137-
$exitCode = $this->compare($trendResult, ResultPrinter::KEY_UNUSED_SYMBOLS, $reference->unusedSymbols, $comparing[$baselinePath]->unusedSymbols, $exitCode);
131+
// decreased trends are better
132+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_OVERALL_ERRORS, $reference->overallErrors, $comparing[$baselinePath]->overallErrors, $exitCode);
133+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_CLASSES_COMPLEXITY, $reference->classesComplexity, $comparing[$baselinePath]->classesComplexity, $exitCode);
134+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_DEPRECATIONS, $reference->deprecations, $comparing[$baselinePath]->deprecations, $exitCode);
135+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_INVALID_PHPDOCS, $reference->invalidPhpdocs, $comparing[$baselinePath]->invalidPhpdocs, $exitCode);
136+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_UNKNOWN_TYPES, $reference->unknownTypes, $comparing[$baselinePath]->unknownTypes, $exitCode);
137+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_ANONYMOUS_VARIABLES, $reference->anonymousVariables, $comparing[$baselinePath]->anonymousVariables, $exitCode);
138+
$exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_UNUSED_SYMBOLS, $reference->unusedSymbols, $comparing[$baselinePath]->unusedSymbols, $exitCode);
139+
140+
// increased trends are better
141+
$exitCode = $this->compareIncreasing($trendResult, ResultPrinter::KEY_RETURN_TYPE_COVERAGE, $reference->returnTypeCoverage, $comparing[$baselinePath]->returnTypeCoverage, $exitCode);
142+
$exitCode = $this->compareIncreasing($trendResult, ResultPrinter::KEY_PROPERTY_TYPE_COVERAGE, $reference->propertyTypeCoverage, $comparing[$baselinePath]->propertyTypeCoverage, $exitCode);
143+
$exitCode = $this->compareIncreasing($trendResult, ResultPrinter::KEY_PARAM_TYPE_COVERAGE, $reference->paramTypeCoverage, $comparing[$baselinePath]->paramTypeCoverage, $exitCode);
138144

139145
return array($trendResult, $exitCode);
140146
}
@@ -147,7 +153,7 @@ private function createTrendResult(string $baselinePath, array $comparing, Analy
147153
*
148154
* @return self::EXIT_*
149155
*/
150-
private function compare(TrendResult $trendResult, string $key, $referenceValue, $comparingValue, int $exitCode): int
156+
private function compareDecreasing(TrendResult $trendResult, string $key, $referenceValue, $comparingValue, int $exitCode): int
151157
{
152158
if ($comparingValue > $referenceValue) {
153159
$trendResult->setKey($key, $referenceValue, $comparingValue, 'worse');
@@ -162,4 +168,28 @@ private function compare(TrendResult $trendResult, string $key, $referenceValue,
162168

163169
return $exitCode;
164170
}
171+
172+
/**
173+
* @param ResultPrinter::KEY_* $key
174+
* @param int $referenceValue
175+
* @param int $comparingValue
176+
* @param self::EXIT_* $exitCode
177+
*
178+
* @return self::EXIT_*
179+
*/
180+
private function compareIncreasing(TrendResult $trendResult, string $key, $referenceValue, $comparingValue, int $exitCode): int
181+
{
182+
if ($comparingValue > $referenceValue) {
183+
$trendResult->setKey($key, $referenceValue, $comparingValue, 'improved');
184+
$exitCode = max($exitCode, self::EXIT_IMPROVED);
185+
} elseif ($comparingValue < $referenceValue) {
186+
$trendResult->setKey($key, $referenceValue, $comparingValue, 'worse');
187+
$exitCode = max($exitCode, self::EXIT_WORSE);
188+
} else {
189+
$trendResult->setKey($key, $referenceValue, $comparingValue, 'good');
190+
$exitCode = max($exitCode, self::EXIT_STEADY);
191+
}
192+
193+
return $exitCode;
194+
}
165195
}

tests/TrendApplicationTest.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ function testSameTrend():void
2525
Unknown-Types: 5 -> 5 => good
2626
Anonymous-Variables: 2 -> 2 => good
2727
Unused-Symbols: 1 -> 1 => good
28+
Native-Return-Type-Coverage: 2 -> 2 => good
29+
Native-Property-Type-Coverage: 3 -> 3 => good
30+
Native-Param-Type-Coverage: 4 -> 4 => good
2831
2932
PHP;
3033

@@ -51,6 +54,9 @@ function testHigherTrend():void
5154
Unknown-Types: 5 -> 15 => worse
5255
Anonymous-Variables: 2 -> 5 => worse
5356
Unused-Symbols: 1 -> 10 => worse
57+
Native-Return-Type-Coverage: 2 -> 20 => improved
58+
Native-Property-Type-Coverage: 3 -> 30 => improved
59+
Native-Param-Type-Coverage: 4 -> 40 => improved
5460
5561
PHP;
5662

@@ -77,11 +83,14 @@ function testLowerTrend():void
7783
Unknown-Types: 5 -> 3 => improved
7884
Anonymous-Variables: 2 -> 1 => improved
7985
Unused-Symbols: 1 -> 0 => improved
86+
Native-Return-Type-Coverage: 2 -> 1 => worse
87+
Native-Property-Type-Coverage: 3 -> 2 => worse
88+
Native-Param-Type-Coverage: 4 -> 3 => worse
8089
8190
PHP;
8291

8392
$this->assertSame($expected, $rendered);
84-
$this->assertSame(TrendApplication::EXIT_IMPROVED, $exitCode);
93+
$this->assertSame(TrendApplication::EXIT_WORSE, $exitCode);
8594
}
8695

8796
function testSameTrendFormatJson():void
@@ -95,7 +104,7 @@ function testSameTrendFormatJson():void
95104
$rendered = str_replace(__DIR__, '', $rendered);
96105

97106
$expected = <<<PHP
98-
[{"headline":"Analyzing Trend for \/fixtures\/all-in.neon","results":{"Overall-Errors":{"reference":18,"comparing":18,"trend":"good"},"Classes-Cognitive-Complexity":{"reference":70,"comparing":70,"trend":"good"},"Deprecations":{"reference":1,"comparing":1,"trend":"good"},"Invalid-Phpdocs":{"reference":3,"comparing":3,"trend":"good"},"Unknown-Types":{"reference":5,"comparing":5,"trend":"good"},"Anonymous-Variables":{"reference":2,"comparing":2,"trend":"good"},"Unused-Symbols":{"reference":1,"comparing":1,"trend":"good"}}}]
107+
[{"headline":"Analyzing Trend for \/fixtures\/all-in.neon","results":{"Overall-Errors":{"reference":18,"comparing":18,"trend":"good"},"Classes-Cognitive-Complexity":{"reference":70,"comparing":70,"trend":"good"},"Deprecations":{"reference":1,"comparing":1,"trend":"good"},"Invalid-Phpdocs":{"reference":3,"comparing":3,"trend":"good"},"Unknown-Types":{"reference":5,"comparing":5,"trend":"good"},"Anonymous-Variables":{"reference":2,"comparing":2,"trend":"good"},"Unused-Symbols":{"reference":1,"comparing":1,"trend":"good"},"Native-Return-Type-Coverage":{"reference":2,"comparing":2,"trend":"good"},"Native-Property-Type-Coverage":{"reference":3,"comparing":3,"trend":"good"},"Native-Param-Type-Coverage":{"reference":4,"comparing":4,"trend":"good"}}}]
99108
PHP;
100109

101110
$this->assertSame($expected, $rendered);
@@ -113,7 +122,7 @@ function testHigherTrendFormatJson():void
113122
$rendered = str_replace(__DIR__, '', $rendered);
114123

115124
$expected = <<<PHP
116-
[{"headline":"Analyzing Trend for \/fixtures\/all-in.neon","results":{"Overall-Errors":{"reference":18,"comparing":24,"trend":"worse"},"Classes-Cognitive-Complexity":{"reference":70,"comparing":90,"trend":"worse"},"Deprecations":{"reference":1,"comparing":10,"trend":"worse"},"Invalid-Phpdocs":{"reference":3,"comparing":30,"trend":"worse"},"Unknown-Types":{"reference":5,"comparing":15,"trend":"worse"},"Anonymous-Variables":{"reference":2,"comparing":5,"trend":"worse"},"Unused-Symbols":{"reference":1,"comparing":10,"trend":"worse"}}}]
125+
[{"headline":"Analyzing Trend for \/fixtures\/all-in.neon","results":{"Overall-Errors":{"reference":18,"comparing":24,"trend":"worse"},"Classes-Cognitive-Complexity":{"reference":70,"comparing":90,"trend":"worse"},"Deprecations":{"reference":1,"comparing":10,"trend":"worse"},"Invalid-Phpdocs":{"reference":3,"comparing":30,"trend":"worse"},"Unknown-Types":{"reference":5,"comparing":15,"trend":"worse"},"Anonymous-Variables":{"reference":2,"comparing":5,"trend":"worse"},"Unused-Symbols":{"reference":1,"comparing":10,"trend":"worse"},"Native-Return-Type-Coverage":{"reference":2,"comparing":20,"trend":"improved"},"Native-Property-Type-Coverage":{"reference":3,"comparing":30,"trend":"improved"},"Native-Param-Type-Coverage":{"reference":4,"comparing":40,"trend":"improved"}}}]
117126
PHP;
118127

119128
$this->assertSame($expected, $rendered);
@@ -131,10 +140,10 @@ function testLowerTrendFormatJson():void
131140
$rendered = str_replace(__DIR__, '', $rendered);
132141

133142
$expected = <<<PHP
134-
[{"headline":"Analyzing Trend for \/fixtures\/all-in.neon","results":{"Overall-Errors":{"reference":18,"comparing":10,"trend":"improved"},"Classes-Cognitive-Complexity":{"reference":70,"comparing":50,"trend":"improved"},"Deprecations":{"reference":1,"comparing":0,"trend":"improved"},"Invalid-Phpdocs":{"reference":3,"comparing":1,"trend":"improved"},"Unknown-Types":{"reference":5,"comparing":3,"trend":"improved"},"Anonymous-Variables":{"reference":2,"comparing":1,"trend":"improved"},"Unused-Symbols":{"reference":1,"comparing":0,"trend":"improved"}}}]
143+
[{"headline":"Analyzing Trend for \/fixtures\/all-in.neon","results":{"Overall-Errors":{"reference":18,"comparing":10,"trend":"improved"},"Classes-Cognitive-Complexity":{"reference":70,"comparing":50,"trend":"improved"},"Deprecations":{"reference":1,"comparing":0,"trend":"improved"},"Invalid-Phpdocs":{"reference":3,"comparing":1,"trend":"improved"},"Unknown-Types":{"reference":5,"comparing":3,"trend":"improved"},"Anonymous-Variables":{"reference":2,"comparing":1,"trend":"improved"},"Unused-Symbols":{"reference":1,"comparing":0,"trend":"improved"},"Native-Return-Type-Coverage":{"reference":2,"comparing":1,"trend":"worse"},"Native-Property-Type-Coverage":{"reference":3,"comparing":2,"trend":"worse"},"Native-Param-Type-Coverage":{"reference":4,"comparing":3,"trend":"worse"}}}]
135144
PHP;
136145

137146
$this->assertSame($expected, $rendered);
138-
$this->assertSame(TrendApplication::EXIT_IMPROVED, $exitCode);
147+
$this->assertSame(TrendApplication::EXIT_WORSE, $exitCode);
139148
}
140149
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"\/fixtures\/all-in.neon":{"Overall-Errors":24,"Classes-Cognitive-Complexity":90,"Deprecations": 10,"Invalid-Phpdocs": 30,"Unknown-Types": 15,"Anonymous-Variables": 5,"Unused-Symbols": 10}}]
1+
[{"\/fixtures\/all-in.neon":{"Overall-Errors":24,"Classes-Cognitive-Complexity":90,"Deprecations": 10,"Invalid-Phpdocs": 30,"Unknown-Types": 15,"Anonymous-Variables": 5,"Unused-Symbols": 10,"Native-Return-Type-Coverage": 20,"Native-Property-Type-Coverage": 30,"Native-Param-Type-Coverage": 40}}]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"\/fixtures\/all-in.neon":{"Overall-Errors":10,"Classes-Cognitive-Complexity":50,"Invalid-Phpdocs": 1,"Unknown-Types": 3,"Anonymous-Variables": 1}}]
1+
[{"\/fixtures\/all-in.neon":{"Overall-Errors":10,"Classes-Cognitive-Complexity":50,"Invalid-Phpdocs": 1,"Unknown-Types": 3,"Anonymous-Variables": 1,"Unused-Symbols": 0,"Native-Return-Type-Coverage": 1,"Native-Property-Type-Coverage": 2,"Native-Param-Type-Coverage": 3}}]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"\/fixtures\/all-in.neon":{"Overall-Errors":18,"Classes-Cognitive-Complexity":70,"Deprecations": 1,"Invalid-Phpdocs": 3,"Unknown-Types": 5,"Anonymous-Variables": 2,"Unused-Symbols": 1}}]
1+
[{"\/fixtures\/all-in.neon":{"Overall-Errors":18,"Classes-Cognitive-Complexity":70,"Deprecations": 1,"Invalid-Phpdocs": 3,"Unknown-Types": 5,"Anonymous-Variables": 2,"Unused-Symbols": 1,"Native-Return-Type-Coverage": 2,"Native-Property-Type-Coverage": 3,"Native-Param-Type-Coverage": 4}}]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"\/fixtures\/all-in.neon":{"Overall-Errors":18,"Classes-Cognitive-Complexity":70,"Deprecations": 1,"Invalid-Phpdocs": 3,"Unknown-Types": 5,"Anonymous-Variables": 2,"Unused-Symbols": 1}}]
1+
[{"\/fixtures\/all-in.neon":{"Overall-Errors":18,"Classes-Cognitive-Complexity":70,"Deprecations": 1,"Invalid-Phpdocs": 3,"Unknown-Types": 5,"Anonymous-Variables": 2,"Unused-Symbols": 1,"Native-Return-Type-Coverage": 2,"Native-Property-Type-Coverage": 3,"Native-Param-Type-Coverage": 4}}]

0 commit comments

Comments
 (0)