From ee53f8dece9d7e8a40a30352764cc88d0e15f981 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Wed, 23 Jul 2025 15:27:19 +0100
Subject: [PATCH 1/8] Sort complexity results before encoding so that graph is
properly populated
---
src/Report/Html/Renderer/Dashboard.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index 8a122a0a2..2206099bb 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -116,6 +116,8 @@ private function complexity(array $classes, string $baseLink): array
];
}
+ usort($result['class'], fn($a, $b) => intval($a[0] - $b[0]));
+
$class = json_encode($result['class']);
assert($class !== false);
From 31c6319701099bdc2ccabbada2d2633ee4a26fc7 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Wed, 23 Jul 2025 20:41:24 +0100
Subject: [PATCH 2/8] Use PHP <=> operator instead of intval subtraction for
comparison
---
src/Report/Html/Renderer/Dashboard.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index 2206099bb..2e4614edc 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -116,7 +116,7 @@ private function complexity(array $classes, string $baseLink): array
];
}
- usort($result['class'], fn($a, $b) => intval($a[0] - $b[0]));
+ usort($result['class'], fn($a, $b) => ($a[0] <=> $b[0]));
$class = json_encode($result['class']);
From c2a6cf542584f1cf5294a467c15a59b03ffcff48 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Wed, 23 Jul 2025 21:04:59 +0100
Subject: [PATCH 3/8] Sort method results before using for graph so tooltips
display correctly.
---
src/Report/Html/Renderer/Dashboard.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index 2e4614edc..e060a3251 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -117,6 +117,7 @@ private function complexity(array $classes, string $baseLink): array
}
usort($result['class'], fn($a, $b) => ($a[0] <=> $b[0]));
+ usort($result['method'], fn($a, $b) => ($a[0] <=> $b[0]));
$class = json_encode($result['class']);
From 218f11eb5b2c142f5b84ed0b0b8df831058a34f4 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Wed, 23 Jul 2025 21:06:21 +0100
Subject: [PATCH 4/8] Add coverage and complexity columns to class and method
complexity tables.
---
src/Report/Html/Renderer/Dashboard.php | 28 ++++++++++++-------
.../Renderer/Template/dashboard.html.dist | 4 +++
2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index e060a3251..267962146 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -279,37 +279,45 @@ private function projectRisks(array $classes, string $baseLink): array
$key = $className . '::' . $methodName;
}
- $methodRisks[$key] = $method['crap'];
+ $methodRisks[$key] = $method;
}
}
if ($class['coverage'] < $this->thresholds->highLowerBound() &&
$class['ccn'] > count($class['methods'])) {
- $classRisks[$className] = $class['crap'];
+ $classRisks[$className] = $class;
}
}
- arsort($classRisks);
- arsort($methodRisks);
+ uasort($classRisks, function($a, $b) {
+ return (intval($a['crap']) <=> intval($b['crap'])) * -1;
+ });
+ uasort($methodRisks, function($a, $b) {
+ return (intval($a['crap']) <=> intval($b['crap'])) * -1;
+ });
- foreach ($classRisks as $className => $crap) {
+ foreach ($classRisks as $className => $class) {
$result['class'] .= sprintf(
- ' %s | %d |
' . "\n",
+ ' %s | %d | %.1f%% | %d |
' . "\n",
str_replace($baseLink, '', $classes[$className]['link']),
$className,
- $crap,
+ $class['ccn'],
+ $class['coverage'],
+ $class['crap']
);
}
- foreach ($methodRisks as $methodName => $crap) {
+ foreach ($methodRisks as $methodName => $methodVals) {
[$class, $method] = explode('::', $methodName);
$result['method'] .= sprintf(
- ' %s | %d |
' . "\n",
+ ' %s | %d | %.1f%% | %d |
' . "\n",
str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']),
$methodName,
$method,
- $crap,
+ $methodVals['ccn'],
+ $methodVals['coverage'],
+ $methodVals['crap']
);
}
diff --git a/src/Report/Html/Renderer/Template/dashboard.html.dist b/src/Report/Html/Renderer/Template/dashboard.html.dist
index d7fb3b97a..2aec0cccb 100644
--- a/src/Report/Html/Renderer/Template/dashboard.html.dist
+++ b/src/Report/Html/Renderer/Template/dashboard.html.dist
@@ -67,6 +67,8 @@
Class |
+ Complexity |
+ Coverage |
CRAP |
@@ -120,6 +122,8 @@
Method |
+ Complexity |
+ Coverage |
CRAP |
From 5c802204d8de14df2c4724ec6e7402e4402dd866 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Wed, 23 Jul 2025 21:06:30 +0100
Subject: [PATCH 5/8] Add CRAP to graph tooltip
---
src/Report/Html/Renderer/Dashboard.php | 2 ++
src/Report/Html/Renderer/Template/dashboard.html.dist | 2 ++
2 files changed, 4 insertions(+)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index 267962146..3003007a0 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -105,6 +105,7 @@ private function complexity(array $classes, string $baseLink): array
$method['ccn'],
str_replace($baseLink, '', $method['link']),
$methodName,
+ $method['crap'],
];
}
@@ -113,6 +114,7 @@ private function complexity(array $classes, string $baseLink): array
$class['ccn'],
str_replace($baseLink, '', $class['link']),
$className,
+ $class['crap'],
];
}
diff --git a/src/Report/Html/Renderer/Template/dashboard.html.dist b/src/Report/Html/Renderer/Template/dashboard.html.dist
index 2aec0cccb..dfd167e18 100644
--- a/src/Report/Html/Renderer/Template/dashboard.html.dist
+++ b/src/Report/Html/Renderer/Template/dashboard.html.dist
@@ -275,10 +275,12 @@
const coverage = Math.round(data[0].x);
const complexity = data[0].value;
const targetName = complexityData[data[0].index][3];
+ const crap = complexityData[data[0].index][4];
return ``;
},
grouped: false,
From f936c6a9c7e539fdc51b5664568fa1493bc54be2 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Wed, 23 Jul 2025 21:09:51 +0100
Subject: [PATCH 6/8] Reorder complexity and coverage columns to match tooltip
---
src/Report/Html/Renderer/Dashboard.php | 8 ++++----
src/Report/Html/Renderer/Template/dashboard.html.dist | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index 3003007a0..d3e14dc32 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -300,11 +300,11 @@ private function projectRisks(array $classes, string $baseLink): array
foreach ($classRisks as $className => $class) {
$result['class'] .= sprintf(
- ' %s | %d | %.1f%% | %d |
' . "\n",
+ ' %s | %.1f%% | %d | %d |
' . "\n",
str_replace($baseLink, '', $classes[$className]['link']),
$className,
- $class['ccn'],
$class['coverage'],
+ $class['ccn'],
$class['crap']
);
}
@@ -313,12 +313,12 @@ private function projectRisks(array $classes, string $baseLink): array
[$class, $method] = explode('::', $methodName);
$result['method'] .= sprintf(
- ' %s | %d | %.1f%% | %d |
' . "\n",
+ ' %s | %.1f%% | %d | %d |
' . "\n",
str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']),
$methodName,
$method,
- $methodVals['ccn'],
$methodVals['coverage'],
+ $methodVals['ccn'],
$methodVals['crap']
);
}
diff --git a/src/Report/Html/Renderer/Template/dashboard.html.dist b/src/Report/Html/Renderer/Template/dashboard.html.dist
index dfd167e18..a5d5a236e 100644
--- a/src/Report/Html/Renderer/Template/dashboard.html.dist
+++ b/src/Report/Html/Renderer/Template/dashboard.html.dist
@@ -67,8 +67,8 @@
Class |
- Complexity |
Coverage |
+ Complexity |
CRAP |
@@ -122,8 +122,8 @@
Method |
- Complexity |
Coverage |
+ Complexity |
CRAP |
From 5f9790ff57028fbe25b18cdbc6c2d1906ec6324f Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Mon, 28 Jul 2025 13:44:17 +0100
Subject: [PATCH 7/8] Fix type coverage and code style
---
src/Report/Html/Renderer/Dashboard.php | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/src/Report/Html/Renderer/Dashboard.php b/src/Report/Html/Renderer/Dashboard.php
index d3e14dc32..305c7fa10 100644
--- a/src/Report/Html/Renderer/Dashboard.php
+++ b/src/Report/Html/Renderer/Dashboard.php
@@ -10,7 +10,6 @@
namespace SebastianBergmann\CodeCoverage\Report\Html;
use function array_values;
-use function arsort;
use function asort;
use function assert;
use function count;
@@ -19,6 +18,8 @@
use function json_encode;
use function sprintf;
use function str_replace;
+use function uasort;
+use function usort;
use SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException;
use SebastianBergmann\CodeCoverage\Node\AbstractNode;
use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
@@ -118,8 +119,8 @@ private function complexity(array $classes, string $baseLink): array
];
}
- usort($result['class'], fn($a, $b) => ($a[0] <=> $b[0]));
- usort($result['method'], fn($a, $b) => ($a[0] <=> $b[0]));
+ usort($result['class'], static fn (mixed $a, mixed $b) => ($a[0] <=> $b[0]));
+ usort($result['method'], static fn (mixed $a, mixed $b) => ($a[0] <=> $b[0]));
$class = json_encode($result['class']);
@@ -291,11 +292,13 @@ private function projectRisks(array $classes, string $baseLink): array
}
}
- uasort($classRisks, function($a, $b) {
- return (intval($a['crap']) <=> intval($b['crap'])) * -1;
+ uasort($classRisks, static function (array $a, array $b)
+ {
+ return ((int) ($a['crap']) <=> (int) ($b['crap'])) * -1;
});
- uasort($methodRisks, function($a, $b) {
- return (intval($a['crap']) <=> intval($b['crap'])) * -1;
+ uasort($methodRisks, static function (array $a, array $b)
+ {
+ return ((int) ($a['crap']) <=> (int) ($b['crap'])) * -1;
});
foreach ($classRisks as $className => $class) {
@@ -305,7 +308,7 @@ private function projectRisks(array $classes, string $baseLink): array
$className,
$class['coverage'],
$class['ccn'],
- $class['crap']
+ $class['crap'],
);
}
@@ -319,7 +322,7 @@ private function projectRisks(array $classes, string $baseLink): array
$method,
$methodVals['coverage'],
$methodVals['ccn'],
- $methodVals['crap']
+ $methodVals['crap'],
);
}
From 3fad2a5cc4de16d518e90df28f9a37534d8885b1 Mon Sep 17 00:00:00 2001
From: Harry Mustoe-Playfair
Date: Mon, 28 Jul 2025 13:46:03 +0100
Subject: [PATCH 8/8] Update failing tests
---
.../HTML/CoverageForBankAccount/dashboard.html | 16 +++++++++++-----
.../dashboard.html | 12 +++++++++---
.../dashboard.html | 12 +++++++++---
.../PathCoverageForBankAccount/dashboard.html | 2 +-
.../dashboard.html | 2 +-
5 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/tests/_files/Report/HTML/CoverageForBankAccount/dashboard.html b/tests/_files/Report/HTML/CoverageForBankAccount/dashboard.html
index a875e86ae..3c35f086e 100644
--- a/tests/_files/Report/HTML/CoverageForBankAccount/dashboard.html
+++ b/tests/_files/Report/HTML/CoverageForBankAccount/dashboard.html
@@ -70,11 +70,13 @@ Project Risks
Class |
+ Coverage |
+ Complexity |
CRAP |
- BankAccount | 6 |
+ BankAccount | 62.5% | 5 | 6 |
@@ -125,11 +127,13 @@ Project Risks
Method |
+ Coverage |
+ Complexity |
CRAP |
- setBalance | 6 |
+ setBalance | 0.0% | 2 | 6 |
@@ -143,9 +147,9 @@ Project Risks
-
-
-
+
+
+
-
-
+
+
+
-
-
+
+
+
-
+
-
+