Exemplo n.º 1
0
        public override string ToString()
        {
            var mb = new MarkdownBuilder();

            mb.HeaderWithCode(2, Beautifier.BeautifyType(type, false));
            mb.AppendLine();

            var desc = commentLookup[type.FullName].FirstOrDefault(x => x.MemberType == MemberType.Type)?.Summary ?? "";

            if (desc != "")
            {
                mb.AppendLine(desc);
            }
            {
                var sb = new StringBuilder();

                var stat = (type.IsAbstract && type.IsSealed) ? "static " : "";
                var abst = (type.IsAbstract && !type.IsInterface && !type.IsSealed) ? "abstract " : "";
                var classOrStructOrEnumOrInterface = type.IsInterface ? "interface" : type.IsEnum ? "enum" : type.IsValueType ? "struct" : "class";

                sb.AppendLine($"public {stat}{abst}{classOrStructOrEnumOrInterface} {Beautifier.BeautifyType(type, true)}");
                var impl = string.Join(", ", new[] { type.BaseType }.Concat(type.GetInterfaces()).Where(x => x != null && x != typeof(object) && x != typeof(ValueType)).Select(x => Beautifier.BeautifyType(x)));
                if (impl != "")
                {
                    sb.AppendLine("    : " + impl);
                }

                mb.Code("csharp", sb.ToString());
            }

            mb.AppendLine();

            if (type.IsEnum)
            {
                var underlyingEnumType = Enum.GetUnderlyingType(type);

                var enums = Enum.GetNames(type)
                            .Select(x => new { Name = x, Value = (Convert.ChangeType(Enum.Parse(type, x), underlyingEnumType)) })
                            .OrderBy(x => x.Value)
                            .ToArray();

                BuildTable(mb, "Enum", enums, commentLookup[type.FullName], x => x.Value.ToString(), x => x.Name, x => x.Name);
            }
            else
            {
                BuildTable(mb, "Fields", GetFields(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.FieldType), x => x.Name, x => x.Name);
                BuildTable(mb, "Properties", GetProperties(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.PropertyType), x => x.Name, x => x.Name);
                BuildTable(mb, "Events", GetEvents(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.EventHandlerType), x => x.Name, x => x.Name);
                BuildTable(mb, "Methods", GetMethods(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.ReturnType), x => x.Name, x => Beautifier.ToMarkdownMethodInfo(x));
                BuildTable(mb, "Static Fields", GetStaticFields(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.FieldType), x => x.Name, x => x.Name);
                BuildTable(mb, "Static Properties", GetStaticProperties(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.PropertyType), x => x.Name, x => x.Name);
                BuildTable(mb, "Static Methods", GetStaticMethods(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.ReturnType), x => x.Name, x => Beautifier.ToMarkdownMethodInfo(x));
                BuildTable(mb, "Static Events", GetStaticEvents(), commentLookup[type.FullName], x => Beautifier.BeautifyType(x.EventHandlerType), x => x.Name, x => x.Name);
            }

            return(mb.ToString());
        }
        public override string ToString()
        {
            MarkdownBuilder mb = new MarkdownBuilder();

            mb.HeaderWithCode(1, Beautifier.BeautifyType(type));
            mb.AppendLine();

            string desc = commentLookup[type.FullName].FirstOrDefault(x => x.MemberType == MemberType.Type)?.Summary ??
                          "";

            if (desc != "")
            {
                mb.AppendLine(desc);
            }
            {
                StringBuilder sb = new StringBuilder();

                string stat = type.IsAbstract && type.IsSealed ? "static " : "";
                string abst = type.IsAbstract && !type.IsInterface && !type.IsSealed ? "abstract " : "";
                string classOrStructOrEnumOrInterface = type.IsInterface
                    ? "interface"
                    : type.IsEnum
                        ? "enum"
                        : type.IsValueType
                            ? "struct"
                            : "class";

                sb.AppendLine(
                    $"public {stat}{abst}{classOrStructOrEnumOrInterface} {Beautifier.BeautifyType(type, true)}");
                string impl = string.Join(
                    ", ",
                    new[] { type.BaseType }.Concat(type.GetInterfaces())
                    .Where(x => x != null && x != typeof(object) && x != typeof(ValueType))
                    .Select(x => Beautifier.BeautifyType(x)));
                if (impl != "")
                {
                    sb.AppendLine("    : " + impl);
                }

                mb.Code("csharp", sb.ToString());
            }

            mb.AppendLine();

            if (type.IsEnum)
            {
                Type underlyingEnumType = Enum.GetUnderlyingType(type);

                var enums = Enum.GetNames(type)
                            .Select(
                    x => new
                {
                    Name  = x,
                    Value = Convert.ChangeType(Enum.Parse(type, x), underlyingEnumType)
                })
                            .OrderBy(x => x.Value)
                            .ToArray();

                BuildTable(
                    mb, "Enum", enums, x => x.Value.ToString(), x => x.Name, x => x.Name, (info, comment) => true);
            }
            else
            {
                BuildTable(
                    mb, "Constructors", GetConstructors(type),
                    x => x.Name, x => "#ctor", Beautifier.ToMarkdownConstructorInfo, (info, comment) =>
                {
                    ParameterInfo[] param = info.GetParameters();
                    return(param.Length == comment.Parameters.Count && param.All(
                               p =>
                    {
                        return comment.Parameters.ContainsKey(p.Name);
                    }));
                });
                BuildTable(
                    mb, "Fields", GetFields(type),
                    x => Beautifier.BeautifyType(x.FieldType),
                    x => x.Name, x => x.Name, (info, comment) => true);
                BuildTable(
                    mb, "Properties", GetProperties(type),
                    x => Beautifier.BeautifyType(x.PropertyType), x => x.Name, x => x.Name, (info, comment) => true);
                BuildTable(
                    mb, "Events", GetEvents(type),
                    x => Beautifier.BeautifyType(x.EventHandlerType), x => x.Name, x => x.Name,
                    (info, comment) => true);
                BuildTable(
                    mb, "Methods", GetMethods(type),
                    x => Beautifier.BeautifyType(x.ReturnType), x => x.Name, Beautifier.ToMarkdownMethodInfo,
                    (info, comment) =>
                {
                    ParameterInfo[] param = info.GetParameters();
                    return(param.Length == comment.Parameters.Count && param.All(
                               p =>
                    {
                        return comment.Parameters.ContainsKey(p.Name);
                    }));
                });
                BuildTable(
                    mb, "Static Fields", GetStaticFields(type),
                    x => Beautifier.BeautifyType(x.FieldType), x => x.Name, x => x.Name, (info, comment) => true);
                BuildTable(
                    mb, "Static Properties", GetStaticProperties(type),
                    x => Beautifier.BeautifyType(x.PropertyType), x => x.Name, x => x.Name, (info, comment) => true);
                BuildTable(
                    mb, "Static Methods", GetStaticMethods(type),
                    x => Beautifier.BeautifyType(x.ReturnType), x => x.Name, Beautifier.ToMarkdownMethodInfo,
                    (info, comment) =>
                {
                    ParameterInfo[] param = info.GetParameters();
                    return(param.Length == comment.Parameters.Count && param.All(
                               p =>
                    {
                        return comment.Parameters.ContainsKey(p.Name);
                    }));
                });
                BuildTable(
                    mb, "Static Events", GetStaticEvents(type),
                    x => Beautifier.BeautifyType(x.EventHandlerType), x => x.Name, x => x.Name,
                    (info, comment) => true);
            }

            return(mb.ToString());
        }