Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaDocs.cs
2021-10-03 12:13:45 -03:00

157 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using MoonSharp.Interpreter;
using Microsoft.Xna.Framework;
using Barotrauma.Networking;
using System.Threading.Tasks;
using Barotrauma.Items.Components;
using System.IO;
using System.Net;
using System.Linq;
using System.Xml.Linq;
using System.Reflection;
namespace Barotrauma
{
public static class LuaDocs
{
public static string ConvertTypeName(string type)
{
switch (type)
{
case "Boolean":
return "bool";
case "String":
return "string";
case "int":
return "number";
case "Single":
return "number";
case "Double":
return "number";
case "float":
return "number";
case "UInt16":
return "number";
case "UInt32":
return "number";
case "UInt64":
return "number";
case "Int32":
return "number";
case "List`1":
return "table";
case "Dictionary`2":
return "table";
}
if (type.StartsWith("Action"))
return "function";
if (type.StartsWith("Func"))
return "function";
return type;
}
public static void GenerateDocs(Type type)
{
var sb = new StringBuilder();
var members = type.GetMembers();
foreach(var member in members)
{
Console.WriteLine("'{0}' is a {1}", member.Name, member.MemberType);
if (member.MemberType == MemberTypes.Method)
{
var method = (MethodInfo)member;
if (method.Name.StartsWith("get_") || method.Name.StartsWith("set_"))
continue;
sb.Append($"--- {method.Name}\n");
sb.Append($"-- @realm shared\n");
var paramNames = "";
var parameters = method.GetParameters();
for(var i=0; i < parameters.Length; i++)
{
var parameter = parameters[i];
if(i == parameters.Length - 1)
paramNames = paramNames + parameter.Name;
else
paramNames = paramNames + parameter.Name + ", ";
sb.Append($"-- @tparam {ConvertTypeName(parameter.ParameterType.Name)} {parameter.Name}\n");
}
if (method.ReturnType != typeof(void))
{
sb.Append($"-- @treturn {ConvertTypeName(method.ReturnType.Name)}\n");
}
if (method.IsStatic)
sb.Append($"function {type.Name}.{method.Name}({paramNames})");
else
sb.Append($"function {method.Name}({paramNames})");
sb.Append(" end\n");
sb.Append("\n");
}
if (member.MemberType == MemberTypes.Field)
{
var field = (FieldInfo)member;
sb.Append($"---\n");
sb.Append($"-- ");
var name = field.Name;
var returnName = ConvertTypeName(field.FieldType.Name);
if (field.IsStatic)
name = type.Name + "." + field.Name;
sb.Append(name);
sb.Append($", Field of type {returnName}\n");
sb.Append($"-- @realm shared\n");
sb.Append($"-- @{returnName} {name}\n");
sb.Append("\n");
}
if (member.MemberType == MemberTypes.Property)
{
var property = (PropertyInfo)member;
sb.Append($"---\n");
sb.Append($"-- ");
var name = property.Name;
var returnName = ConvertTypeName(property.PropertyType.Name);
if (property.GetGetMethod().IsStatic)
name = type.Name + "." + property.Name;
sb.Append(name);
sb.Append($", Field of type {returnName}\n");
sb.Append($"-- @realm shared\n");
sb.Append($"-- @{returnName} {name}\n");
sb.Append("\n");
}
}
File.WriteAllText("luadocs.lua", sb.ToString());
}
}
}