示例#1
0
        void BuildDescription <T>(MarkdownBuilder mb, string label, T[] array, IEnumerable <XmlComment> docs, Func <T, string> type, Func <T, string> name, Func <T, string> finalName)
        {
            if (array.Any())
            {
                mb.Header(2, label);
                mb.AppendLine();

                string[] head = (this._type.IsEnum)
                    ? new[] { "Value", "Name", "Description" }
                    : new[] { "Type", "Name", "Description" };

                IEnumerable <T> seq = array;
                if (!this._type.IsEnum)
                {
                    seq = array.OrderBy(x => name(x));
                }

                var data = seq.Select(item2 =>
                {
                    var summary = docs.FirstOrDefault(x => x.MemberName == name(item2) || x.MemberName.StartsWith(name(item2) + "`"))?.Summary ?? "";
                    return(new[] { MarkdownHelper.RenderCode(type(item2)), finalName(item2), summary });
                });

                mb.Table(head, data);
                mb.AppendLine();
                mb.AppendLine();
            }
        }
示例#2
0
        public override string ToString()
        {
            var mb = new MarkdownBuilder();

            mb.HeaderWithCode(1, MarkdownHelper.RenderType(_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} {MarkdownHelper.RenderType(_type, true)}");
                var impl = string.Join(", ", new[] { _type.BaseType }.Concat(_type.GetInterfaces()).Where(x => x != null && x != typeof(object) && x != typeof(ValueType)).Select(x => MarkdownHelper.RenderType(x)));
                if (impl != "")
                {
                    sb.AppendLine("    : " + impl);
                }

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

            mb.AppendLine();

            if (_type.IsEnum)
            {
                var enums = Enum.GetNames(_type)
                            .Select(x => new { Name = x, Value = ((Int32)Enum.Parse(_type, x)) })
                            .OrderBy(x => x.Value)
                            .ToArray();

                BuildDescription(mb, "Enum", enums, _commentLookup[_type.FullName], x => x.Value.ToString(), x => x.Name, x => x.Name);
            }
            else
            {
                BuildFullDescription(mb, "Constructors", GetConstructors(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.DeclaringType), x => x.Name, x => MarkdownHelper.RenderMethodInfo(x));
                BuildDescription(mb, "Fields", GetFields(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.FieldType), x => x.Name, x => x.Name);
                BuildDescription(mb, "Properties", GetProperties(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.PropertyType), x => x.Name, x => x.Name);
                BuildDescription(mb, "Events", GetEvents(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.EventHandlerType), x => x.Name, x => x.Name);
                BuildFullDescription(mb, "Methods", GetMethods(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.ReturnType), x => x.Name, x => MarkdownHelper.RenderMethodInfo(x));
                BuildDescription(mb, "Static Fields", GetStaticFields(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.FieldType), x => x.Name, x => x.Name);
                BuildDescription(mb, "Static Properties", GetStaticProperties(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.PropertyType), x => x.Name, x => x.Name);
                BuildFullDescription(mb, "Static Methods", GetStaticMethods(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.ReturnType), x => x.Name, x => MarkdownHelper.RenderMethodInfo(x));
                BuildDescription(mb, "Static Events", GetStaticEvents(), _commentLookup[_type.FullName], x => MarkdownHelper.RenderType(x.EventHandlerType), x => x.Name, x => x.Name);
            }

            return(mb.ToString());
        }
示例#3
0
        void BuildFullDescription <T>(MarkdownBuilder mb, string label, T[] array, IEnumerable <XmlComment> docs, Func <T, string> type, Func <T, string> name, Func <T, string> finalName) where T : MethodBase
        {
            if (array.Any())
            {
                mb.Header(2, label);
                mb.AppendLine();

                foreach (T item in array)
                {
                    var doc         = docs.FindComment(name(item), item.MemberType, item.GetParameters()?.Select(x => x.Name).ToArray());
                    var itemSummary = doc?.Summary;

                    mb.List(MarkdownHelper.RenderCode(finalName(item).Replace("`", "")));
                    mb.AppendLine();

                    if (!item.IsConstructor)
                    {
                        mb.AppendLine("   **Return type:** " + MarkdownHelper.RenderCode(type(item)));
                        mb.AppendLine();
                    }

                    if (!String.IsNullOrWhiteSpace(itemSummary))
                    {
                        mb.AppendLine("   " + itemSummary);
                        mb.AppendLine();
                    }

                    var parameters = item.GetParameters();
                    if (parameters.Any())
                    {
                        string[] head = (this._type.IsEnum)
                            ? new[] { "Value", "Name", "Description" }
                            : new[] { "Type", "Name", "Description" };

                        var data = parameters.Select(param =>
                        {
                            var paramSummary = doc?.Parameters[param.Name] ?? "";
                            return(new[] { MarkdownHelper.RenderCode(MarkdownHelper.RenderType(param.ParameterType)), param.Name, paramSummary });
                        });

                        mb.Table(head, data, true);
                        mb.AppendLine();
                        mb.AppendLine();
                    }
                }

                mb.AppendLine();
            }
        }