dmetamem now sorts results, no longer outputs to log to avoid interleaving

This commit is contained in:
PJB3005
2025-10-26 23:07:38 +01:00
parent 37eabbabc2
commit 9a0e3b6b02
3 changed files with 26 additions and 7 deletions

View File

@@ -60,7 +60,7 @@ END TEMPLATE-->
### Internal
*None yet*
* The `dmetamem` command now sorts its output, and doesn't output to log anymore to avoid output interleaving.
## 267.3.0

View File

@@ -1,4 +1,5 @@
using System;
using System.Linq;
using Robust.Shared.Console;
using Robust.Shared.ContentPack;
@@ -19,10 +20,28 @@ namespace Robust.Client.Console.Commands
return;
}
foreach (var sig in AssemblyTypeChecker.DumpMetaMembers(type))
var members = AssemblyTypeChecker.DumpMetaMembers(type)
.GroupBy(x => x.IsField)
.ToDictionary(x => x.Key, x => x.Select(t => t.Value).ToList());
if (members.TryGetValue(true, out var fields))
{
System.Console.WriteLine(@$"- ""{sig}""");
shell.WriteLine(sig);
fields.Sort(StringComparer.Ordinal);
foreach (var member in fields)
{
System.Console.WriteLine(@$"- ""{member}""");
}
}
if (members.TryGetValue(false, out var methods))
{
methods.Sort(StringComparer.Ordinal);
foreach (var member in methods)
{
System.Console.WriteLine(@$"- ""{member}""");
}
}
}

View File

@@ -11,7 +11,7 @@ namespace Robust.Shared.ContentPack
{
internal sealed partial class AssemblyTypeChecker
{
public static IEnumerable<string> DumpMetaMembers(Type type)
public static IEnumerable<(string Value, bool IsField)> DumpMetaMembers(Type type)
{
var assemblyLoc = type.Assembly.Location;
@@ -58,7 +58,7 @@ namespace Robust.Shared.ContentPack
var fieldName = metaReader.GetString(fieldDef.Name);
var fieldType = fieldDef.DecodeSignature(provider, 0);
yield return $"{fieldType.WhitelistToString()} {fieldName}";
yield return ($"{fieldType.WhitelistToString()} {fieldName}", IsField: true);
}
foreach (var methodHandle in typeDef.GetMethods())
@@ -79,7 +79,7 @@ namespace Robust.Shared.ContentPack
? ""
: $"<{new string(',', genericCount - 1)}>";
yield return $"{methodSig.ReturnType.WhitelistToString()} {methodName}{typeParamString}({paramString})";
yield return ($"{methodSig.ReturnType.WhitelistToString()} {methodName}{typeParamString}({paramString})", IsField: false);
}
}
}