Skip to content

Commit

Permalink
fix: make sorting in output consistent across different frameworks
Browse files Browse the repository at this point in the history
.NET 5 changed the default sorting behavior for strings causing the output of MdDocs to be different when running on net5.0 vs. running on earlier .NET Core versions or .NET Framework.

Make sorting consistent by explicitly using "Ordinal" comparisons for all sort operations.

See-Also: https://docs.microsoft.com/en-us/dotnet/standard/base-types/string-comparison-net-5-plus
  • Loading branch information
ap0llo committed Aug 29, 2021
1 parent 41b712b commit 0914192
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 14 deletions.
7 changes: 4 additions & 3 deletions src/MdDocs.ApiReference/Templates/Default/NamespacePage.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using Grynwald.MarkdownGenerator;
using Grynwald.MdDocs.ApiReference.Configuration;
Expand Down Expand Up @@ -63,7 +64,7 @@ private void AddNamespacesList(MdContainerBlock block)
block.Add(
new MdBulletList(
Model.Namespaces
.OrderBy(x => x.Name)
.OrderBy(x => x.Name, StringComparer.Ordinal)
.Select(@namespace => new MdListItem(GetMdSpan(@namespace.NamespaceId))
)));

Expand All @@ -77,7 +78,7 @@ private void AddTypeTable(MdContainerBlock block, string heading, IEnumerable<Ty
block.Add(new MdHeading(2, heading));

var table = new MdTable(new MdTableRow("Name", "Description"));
foreach (var type in types.OrderBy(x => x.DisplayName))
foreach (var type in types.OrderBy(x => x.DisplayName, StringComparer.Ordinal))
{
table.Add(
new MdTableRow(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ internal override MdDocument GetDocument()
}
else
{
var orderedOverloads = Model.Overloads.OrderBy(x => x.Signature).ToArray();
var orderedOverloads = Model.Overloads.OrderBy(x => x.Signature, StringComparer.Ordinal).ToArray();

AddOverloadsTableSection(document.Root, orderedOverloads, headingLevel: 2);

Expand Down
4 changes: 3 additions & 1 deletion src/MdDocs.ApiReference/Templates/Default/PropertyPage.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using Grynwald.MarkdownGenerator;
using System;
using System.Linq;
using Grynwald.MarkdownGenerator;
using Grynwald.MdDocs.ApiReference.Configuration;
using Grynwald.MdDocs.ApiReference.Model;
using Microsoft.Extensions.Logging;
Expand Down
6 changes: 3 additions & 3 deletions src/MdDocs.ApiReference/Templates/Default/TypePage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ private void AddOverloadableMembersSection(MdContainerBlock block, string sectio
{
var table = new MdTable(new MdTableRow("Name", "Description"));

foreach (var ctor in overloads.OrderBy(x => x.Signature))
foreach (var ctor in overloads.OrderBy(x => x.Signature, StringComparer.Ordinal))
{
table.Add(
new MdTableRow(
Expand All @@ -179,7 +179,7 @@ private void AddSimpleMembersSection(MdContainerBlock block, string sectionHeadi
block.Add(new MdHeading(sectionHeading, 2));

var table = new MdTable(new MdTableRow("Name", "Description"));
foreach (var member in members.OrderBy(x => x.Name))
foreach (var member in members.OrderBy(x => x.Name, StringComparer.Ordinal))
{
table.Add(
new MdTableRow(
Expand Down Expand Up @@ -241,7 +241,7 @@ private void AddNestedTypesSection(MdContainerBlock block)
block.Add(new MdHeading(2, "Nested Types"));

var table = new MdTable(new MdTableRow("Name", "Description"));
foreach (var type in Model.NestedTypes.OrderBy(x => x.DisplayName))
foreach (var type in Model.NestedTypes.OrderBy(x => x.DisplayName, StringComparer.Ordinal))
{
table.Add(
new MdTableRow(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class MultiCommandApplicationDocumentation : ApplicationDocumentation
/// <summary>
/// Gets the application's commands
/// </summary>
public IEnumerable<CommandDocumentation> Commands => m_Commands.Values.OrderBy(x => x.Name);
public IEnumerable<CommandDocumentation> Commands => m_Commands.Values.OrderBy(x => x.Name, StringComparer.Ordinal);


/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ internal class ParameterCollection : IParameterCollection

/// <inheritdoc />
public IEnumerable<ParameterDocumentation> AllParameters =>
PositionalParameters.Concat(NamedParameters.Concat(SwitchParameters.Cast<INamedParameterDocumentation>()).OrderBy(x => x.Name).Cast<ParameterDocumentation>());
PositionalParameters.Concat(NamedParameters.Concat(SwitchParameters.Cast<INamedParameterDocumentation>()).OrderBy(x => x.Name, StringComparer.Ordinal).Cast<ParameterDocumentation>());

/// <inheritdoc />
public IEnumerable<NamedValuedParameterDocumentation> NamedParameters =>
Enumerable.Concat(
m_NamedParameters.Where(p => p.HasName).OrderBy(x => x.Name),
m_NamedParameters.Where(x => !x.HasName).OrderBy(x => x.ShortName));
m_NamedParameters.Where(p => p.HasName).OrderBy(x => x.Name, StringComparer.Ordinal),
m_NamedParameters.Where(x => !x.HasName).OrderBy(x => x.ShortName, StringComparer.Ordinal));


/// <inheritdoc />
Expand All @@ -33,8 +33,8 @@ internal class ParameterCollection : IParameterCollection
/// <inheritdoc />
public IEnumerable<SwitchParameterDocumentation> SwitchParameters =>
Enumerable.Concat(
m_SwitchParameters.Where(x => x.HasName).OrderBy(x => x.Name),
m_SwitchParameters.Where(x => !x.HasName).OrderBy(x => x.ShortName));
m_SwitchParameters.Where(x => x.HasName).OrderBy(x => x.Name, StringComparer.Ordinal),
m_SwitchParameters.Where(x => !x.HasName).OrderBy(x => x.ShortName, StringComparer.Ordinal));


/// <summary>
Expand Down

0 comments on commit 0914192

Please sign in to comment.