Write trait requirements in documentation.

This commit is contained in:
Taryn Hill
2014-08-02 20:31:08 -05:00
parent c482e97060
commit c3c5cd04cc

View File

@@ -323,6 +323,25 @@ namespace OpenRA.Utility
foreach (var line in traitDescLines) foreach (var line in traitDescLines)
doc.AppendLine(line); 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); var infos = FieldLoader.GetTypeLoadInfo(t);
if (!infos.Any()) if (!infos.Any())
continue; continue;
@@ -362,6 +381,16 @@ namespace OpenRA.Utility
.ToArray(); .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.")] [Desc("MOD", "Generate Lua API documentation in MarkDown format.")]
public static void ExtractLuaDocs(string[] args) public static void ExtractLuaDocs(string[] args)
{ {