Write trait requirements in documentation.
This commit is contained in:
@@ -323,6 +323,25 @@ namespace OpenRA.Utility
|
||||
foreach (var line in traitDescLines)
|
||||
doc.AppendLine(line);
|
||||
|
||||
var requires = RequiredTraitTypes(t);
|
||||
var reqCount = requires.Length;
|
||||
if (reqCount > 0)
|
||||
{
|
||||
if (t.HasAttribute<DescAttribute>())
|
||||
doc.AppendLine("\n");
|
||||
|
||||
doc.Append("Requires trait{0}: ".F(reqCount > 1 ? "s" : ""));
|
||||
|
||||
var i = 0;
|
||||
foreach (var require in requires)
|
||||
{
|
||||
var n = require.Name;
|
||||
var name = n.EndsWith("Info") ? n.Remove(n.Length - 4, 4) : n;
|
||||
doc.Append("`{0}`{1}".F(name, i + 1 == reqCount ? ".\n" : ", "));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
var infos = FieldLoader.GetTypeLoadInfo(t);
|
||||
if (!infos.Any())
|
||||
continue;
|
||||
@@ -362,6 +381,16 @@ namespace OpenRA.Utility
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
static Type[] RequiredTraitTypes(Type t)
|
||||
{
|
||||
return t.GetInterfaces()
|
||||
.Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(Requires<>))
|
||||
.SelectMany(i => i.GetGenericArguments())
|
||||
.Where(i => !i.IsInterface && !t.IsSubclassOf(i))
|
||||
.OrderBy(i => i.Name)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
[Desc("MOD", "Generate Lua API documentation in MarkDown format.")]
|
||||
public static void ExtractLuaDocs(string[] args)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user