Skip to content

Commit e2e55d0

Browse files
committed
#371: Fixed order of metrics
1 parent 045b36d commit e2e55d0

File tree

16 files changed

+130
-34
lines changed

16 files changed

+130
-34
lines changed

azure-pipelines.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ variables:
1212
- name: disable.coverage.autogenerate
1313
value: 'true'
1414
- name: version
15-
value: '4.6.4'
15+
value: '4.6.5'
1616

1717
stages:
1818
- stage: Build

src/AzureDevopsTask/ReportGenerator/task.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"version": {
1414
"Major": 4,
1515
"Minor": 6,
16-
"Patch": 4
16+
"Patch": 5
1717
},
1818
"instanceNameFormat": "ReportGenerator",
1919
"groups": [

src/AzureDevopsTask/vss-extension.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifestVersion": 1,
33
"id": "reportgenerator",
44
"name": "ReportGenerator",
5-
"version": "4.6.4",
5+
"version": "4.6.5",
66
"publisher": "Palmmedia",
77
"public": true,
88
"targets": [

src/Readme.txt

+4
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ For further details take a look at LICENSE.txt.
6363

6464
CHANGELOG
6565

66+
4.6.5.0
67+
68+
* Fix: #371: Fixed order of metrics
69+
6670
4.6.4.0
6771

6872
* New: #366: Added custom settings to Azure DevOps task

src/ReportGenerator.Console.NetCore/ReportGenerator.Console.NetCore.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<AssemblyName>ReportGenerator</AssemblyName>
88
<RootNamespace>Palmmedia.ReportGenerator</RootNamespace>
99
<StartupObject>Palmmedia.ReportGenerator.Console.NetCore.Program</StartupObject>
10-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
11-
<FileVersion>4.6.4.0</FileVersion>
10+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
11+
<FileVersion>4.6.5.0</FileVersion>
1212
</PropertyGroup>
1313

1414
<ItemGroup>

src/ReportGenerator.Console/Properties/AssemblyInfo.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@
3131
// You can specify all the values or you can default the Build and Revision Numbers
3232
// by using the '*' as shown below:
3333
// [assembly: AssemblyVersion("1.0.*")]
34-
[assembly: AssemblyVersion("4.6.4.0")]
35-
[assembly: AssemblyFileVersion("4.6.4.0")]
34+
[assembly: AssemblyVersion("4.6.5.0")]
35+
[assembly: AssemblyFileVersion("4.6.5.0")]

src/ReportGenerator.Core.Test/ReportGenerator.Core.Test.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<TargetFramework>netcoreapp3.1</TargetFramework>
55
<IsPackable>false</IsPackable>
66
<RootNamespace>Palmmedia.ReportGenerator.Core.Test</RootNamespace>
7-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
8-
<FileVersion>4.6.4.0</FileVersion>
7+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
8+
<FileVersion>4.6.5.0</FileVersion>
99
</PropertyGroup>
1010

1111
<ItemGroup>

src/ReportGenerator.Core/Parser/Analysis/Metric.cs

+28
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,33 @@ public Metric(string name, Uri explanationUrl, MetricType metricType, decimal? v
5959
/// Gets the value.
6060
/// </summary>
6161
public decimal? Value { get; internal set; }
62+
63+
/// <summary>
64+
/// Determines whether the specified <see cref="object"/> is equal to this instance.
65+
/// </summary>
66+
/// <param name="obj">The <see cref="object"/> to compare with this instance.</param>
67+
/// <returns>
68+
/// <c>true</c> if the specified <see cref="object"/> is equal to this instance; otherwise, <c>false</c>.
69+
/// </returns>
70+
public override bool Equals(object obj)
71+
{
72+
if (obj == null || !obj.GetType().Equals(typeof(Metric)))
73+
{
74+
return false;
75+
}
76+
else
77+
{
78+
var metric = (Metric)obj;
79+
return metric.Name.Equals(this.Name);
80+
}
81+
}
82+
83+
/// <summary>
84+
/// Returns a hash code for this instance.
85+
/// </summary>
86+
/// <returns>
87+
/// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
88+
/// </returns>
89+
public override int GetHashCode() => this.Name.GetHashCode();
6290
}
6391
}

src/ReportGenerator.Core/ReportGenerator.Core.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
88
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
99
<AssemblyName>ReportGenerator.Core</AssemblyName>
10-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
11-
<FileVersion>4.6.4.0</FileVersion>
10+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
11+
<FileVersion>4.6.5.0</FileVersion>
1212
</PropertyGroup>
1313

1414
<PropertyGroup>

src/ReportGenerator.Core/Reporting/Builders/Rendering/HtmlRenderer.cs

+35-8
Original file line numberDiff line numberDiff line change
@@ -633,14 +633,18 @@ public void MetricsTable(Class @class)
633633
throw new ArgumentNullException(nameof(@class));
634634
}
635635

636-
var firstMethodMetric = @class.Files.SelectMany(f => f.MethodMetrics).First();
636+
var metrics = @class.Files
637+
.SelectMany(f => f.MethodMetrics)
638+
.SelectMany(m => m.Metrics)
639+
.Distinct()
640+
.OrderBy(m => m.Name);
637641

638642
this.reportTextWriter.WriteLine("<table class=\"overview table-fixed\">");
639643
this.reportTextWriter.Write("<thead><tr>");
640644

641645
this.reportTextWriter.Write("<th>{0}</th>", WebUtility.HtmlEncode(ReportResources.Method));
642646

643-
foreach (var met in firstMethodMetric.Metrics)
647+
foreach (var met in metrics)
644648
{
645649
if (met.ExplanationUrl == null)
646650
{
@@ -677,12 +681,21 @@ public void MetricsTable(Class @class)
677681
this.reportTextWriter.Write("<td title=\"{0}\">{1}</td>", WebUtility.HtmlEncode(methodMetric.FullName), WebUtility.HtmlEncode(methodMetric.ShortName));
678682
}
679683

680-
foreach (var metricValue in methodMetric.Metrics)
684+
foreach (var metric in metrics)
681685
{
682-
this.reportTextWriter.Write(
686+
var metricValue = methodMetric.Metrics.FirstOrDefault(m => m.Equals(metric));
687+
688+
if (metricValue != null)
689+
{
690+
this.reportTextWriter.Write(
683691
"<td>{0}{1}</td>",
684692
metricValue.Value.HasValue ? metricValue.Value.Value.ToString("0.##", CultureInfo.InvariantCulture) : "-",
685693
metricValue.Value.HasValue && metricValue.MetricType == MetricType.CoveragePercentual ? "%" : string.Empty);
694+
}
695+
else
696+
{
697+
this.reportTextWriter.Write("<td>-</td>");
698+
}
686699
}
687700

688701
this.reportTextWriter.WriteLine("</tr>");
@@ -706,14 +719,17 @@ public void MetricsTable(IEnumerable<MethodMetric> methodMetrics)
706719
throw new ArgumentNullException(nameof(methodMetrics));
707720
}
708721

709-
var firstMethodMetric = methodMetrics.First();
722+
var metrics = methodMetrics
723+
.SelectMany(m => m.Metrics)
724+
.Distinct()
725+
.OrderBy(m => m.Name);
710726

711727
this.reportTextWriter.WriteLine("<table class=\"overview table-fixed\">");
712728
this.reportTextWriter.Write("<thead><tr>");
713729

714730
this.reportTextWriter.Write("<th>{0}</th>", WebUtility.HtmlEncode(ReportResources.Method));
715731

716-
foreach (var met in firstMethodMetric.Metrics)
732+
foreach (var met in metrics)
717733
{
718734
if (met.ExplanationUrl == null)
719735
{
@@ -734,9 +750,20 @@ public void MetricsTable(IEnumerable<MethodMetric> methodMetrics)
734750

735751
this.reportTextWriter.Write("<td title=\"{0}\">{1}</td>", WebUtility.HtmlEncode(methodMetric.FullName), WebUtility.HtmlEncode(methodMetric.ShortName));
736752

737-
foreach (var metricValue in methodMetric.Metrics.Select(m => m.Value))
753+
foreach (var metric in metrics)
738754
{
739-
this.reportTextWriter.Write("<td>{0}</td>", metricValue.HasValue ? metricValue.Value.ToString("0.##", CultureInfo.InvariantCulture) : "-");
755+
var metricValue = methodMetric.Metrics.FirstOrDefault(m => m.Equals(metric));
756+
757+
if (metricValue != null)
758+
{
759+
this.reportTextWriter.Write(
760+
"<td>{0}</td>",
761+
metricValue.Value.HasValue ? metricValue.Value.Value.ToString("0.##", CultureInfo.InvariantCulture) : "-");
762+
}
763+
else
764+
{
765+
this.reportTextWriter.Write("<td>-</td>");
766+
}
740767
}
741768

742769
this.reportTextWriter.WriteLine("</tr>");

src/ReportGenerator.Core/Reporting/Builders/Rendering/LatexRenderer.cs

+43-6
Original file line numberDiff line numberDiff line change
@@ -351,28 +351,65 @@ public void MetricsTable(IEnumerable<MethodMetric> methodMetrics)
351351
throw new ArgumentNullException(nameof(methodMetrics));
352352
}
353353

354-
var firstMethodMetric = methodMetrics.First();
355-
int numberOfTables = (int)Math.Ceiling((double)firstMethodMetric.Metrics.Count() / 5);
354+
var metrics = methodMetrics
355+
.SelectMany(m => m.Metrics)
356+
.Distinct()
357+
.OrderBy(m => m.Name);
358+
359+
int numberOfTables = (int)Math.Ceiling((double)metrics.Count() / 5);
356360

357361
for (int i = 0; i < numberOfTables; i++)
358362
{
359-
string columns = "|l|" + string.Join("|", firstMethodMetric.Metrics.Skip(i * 5).Take(5).Select(m => "r")) + "|";
363+
string columns = "|l|" + string.Join("|", metrics.Skip(i * 5).Take(5).Select(m => "r")) + "|";
360364

361365
this.reportTextWriter.WriteLine(@"\begin{longtable}[l]{" + columns + "}");
362366
this.reportTextWriter.WriteLine(@"\hline");
363-
this.reportTextWriter.Write(@"\textbf{" + EscapeLatexChars(ReportResources.Method) + "} & " + string.Join(" & ", firstMethodMetric.Metrics.Skip(i * 5).Take(5).Select(m => @"\textbf{" + EscapeLatexChars(m.Name) + "}")));
367+
this.reportTextWriter.Write(@"\textbf{" + EscapeLatexChars(ReportResources.Method) + "} & " + string.Join(" & ", metrics.Skip(i * 5).Take(5).Select(m => @"\textbf{" + EscapeLatexChars(m.Name) + "}")));
364368
this.reportTextWriter.WriteLine(@"\\");
365369
this.reportTextWriter.WriteLine(@"\hline");
366370

367371
foreach (var methodMetric in methodMetrics.OrderBy(c => c.Line))
368372
{
369-
string metrics = string.Join(" & ", methodMetric.Metrics.Skip(i * 5).Take(5).Select(m => string.Format("{0}{1}", m.Value.HasValue ? m.Value.Value.ToString(CultureInfo.InvariantCulture) : "-", m.Value.HasValue && m.MetricType == MetricType.CoveragePercentual ? "\\%" : string.Empty)));
373+
StringBuilder sb = new StringBuilder();
374+
int counter = 0;
375+
foreach (var metric in metrics.Skip(i * 5).Take(5))
376+
{
377+
if (counter > 0)
378+
{
379+
sb.Append(" & ");
380+
}
381+
382+
var metricValue = methodMetric.Metrics.FirstOrDefault(m => m.Equals(metric));
383+
384+
if (metricValue != null)
385+
{
386+
if (metricValue.Value.HasValue)
387+
{
388+
sb.Append(metricValue.Value.Value.ToString(CultureInfo.InvariantCulture));
389+
390+
if (metricValue.MetricType == MetricType.CoveragePercentual)
391+
{
392+
sb.Append("\\%");
393+
}
394+
}
395+
else
396+
{
397+
sb.Append("-");
398+
}
399+
}
400+
else
401+
{
402+
sb.Append("-");
403+
}
404+
405+
counter++;
406+
}
370407

371408
string row = string.Format(
372409
CultureInfo.InvariantCulture,
373410
@"\textbf{{{0}}} & {1}\\",
374411
EscapeLatexChars(ShortenString(methodMetric.ShortName, 20)),
375-
metrics);
412+
sb.ToString());
376413

377414
this.reportTextWriter.WriteLine(row);
378415
this.reportTextWriter.WriteLine(@"\hline");

src/ReportGenerator.DotnetCliTool/ReportGenerator.DotnetCliTool.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<AssemblyName>dotnet-reportgenerator</AssemblyName>
88
<RootNamespace>Palmmedia.ReportGenerator</RootNamespace>
99
<StartupObject>Palmmedia.ReportGenerator.DotnetCliTool.Program</StartupObject>
10-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
11-
<FileVersion>4.6.4.0</FileVersion>
10+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
11+
<FileVersion>4.6.5.0</FileVersion>
1212
</PropertyGroup>
1313

1414
<ItemGroup>

src/ReportGenerator.DotnetCorePluginLoader/ReportGenerator.DotnetCorePluginLoader.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<PropertyGroup>
33
<TargetFramework>netcoreapp2.0</TargetFramework>
44
<RootNamespace>ReportGenerator.DotnetCorePluginLoader</RootNamespace>
5-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
6-
<FileVersion>4.6.4.0</FileVersion>
5+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
6+
<FileVersion>4.6.5.0</FileVersion>
77
</PropertyGroup>
88

99
<ItemGroup>

src/ReportGenerator.DotnetGlobalTool/ReportGenerator.DotnetGlobalTool.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<AssemblyName>ReportGenerator</AssemblyName>
88
<RootNamespace>Palmmedia.ReportGenerator</RootNamespace>
99
<StartupObject>Palmmedia.ReportGenerator.DotnetGlobalTool.Program</StartupObject>
10-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
11-
<FileVersion>4.6.4.0</FileVersion>
10+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
11+
<FileVersion>4.6.5.0</FileVersion>
1212
</PropertyGroup>
1313

1414
<ItemGroup>

src/ReportGenerator.MSBuild/ReportGenerator.MSBuild.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<RootNamespace>Palmmedia.ReportGenerator.MSBuild</RootNamespace>
66
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
77
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
8-
<AssemblyVersion>4.6.4.0</AssemblyVersion>
9-
<FileVersion>4.6.4.0</FileVersion>
8+
<AssemblyVersion>4.6.5.0</AssemblyVersion>
9+
<FileVersion>4.6.5.0</FileVersion>
1010
</PropertyGroup>
1111

1212
<ItemGroup>

src/build.proj

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
<!-- Version, adjust before build -->
2424
<PropertyGroup>
25-
<Version>4.6.4</Version>
25+
<Version>4.6.5</Version>
2626
</PropertyGroup>
2727

2828
<!-- Tools -->

0 commit comments

Comments
 (0)