Ejemplo n.º 1
0
        /// <summary>
        /// Write markdown documentation for the class:
        /// Base class,  summary, remarks, Properties, constructors, methods and fields
        /// </summary>
        /// <param name="typeData"></param>
        public void DocumentClass(TypeCollection.TypeInformation typeData)
        {
            Writer.WriteH1(TypeTitle(typeData.Type));
            Writer.WriteLine("Namespace: " + typeData.Type.Namespace);

            if (typeData.Type.BaseType != null && typeData.Type.BaseType != typeof(Object))
            {
                Writer.WriteLine("Base class: " + typeData.Type.BaseType.ToNameString(typeLinkConverter));
            }

            var typeComments = Reader.GetTypeComments(typeData.Type);

            Writer.WriteLine(typeComments.Summary);

            if (!string.IsNullOrEmpty(typeComments.Example))
            {
                Writer.WriteH2("Examples");
                Writer.WriteLine(ProcessTags(typeComments.Example));
            }

            if (!string.IsNullOrEmpty(typeComments.Remarks))
            {
                Writer.WriteH2("Remarks");
                Writer.WriteLine(ProcessTags(typeComments.Remarks));
            }

            var allProperties = Reader.Comments(typeData.Properties).ToList();
            var allMethods    = Reader.Comments(typeData.Methods).ToList();
            var allFields     = Reader.Comments(typeData.Fields).ToList();

            if (allProperties.Count > 0)
            {
                Writer.WriteH2("Properties");
                Writer.WriteTableTitle("Name", "Type", "Summary");
                foreach (var prop in allProperties)
                {
                    Writer.WriteTableRow(
                        Writer.Bold(prop.Info.Name),
                        prop.Info.ToTypeNameString(typeLinkConverter),
                        ProcessTags(prop.Comments.Summary));
                }
            }

            if (allMethods.Count > 0 && allMethods.Any(m => m.Info is ConstructorInfo))
            {
                Writer.WriteH2("Constructors");
                Writer.WriteTableTitle("Name", "Summary");
                foreach (var prop in allMethods
                         .Where(m => m.Info is ConstructorInfo)
                         .OrderBy(p => p.Info.GetParameters().Length))
                {
                    Writer.WriteTableRow(
                        Writer.Bold(typeData.Type.ToNameString() + prop.Info.ToParametersString(typeLinkConverter)),
                        prop.Comments.Summary);
                }
            }

            if (allMethods.Count > 0 && allMethods.Any(m => m.Info is MethodInfo))
            {
                Writer.WriteH2("Methods");
                Writer.WriteTableTitle("Name", "Returns", "Summary");
                foreach (var method in allMethods
                         .Where(m => m.Info != null && !(m.Info is ConstructorInfo) && (m.Info is MethodInfo))
                         .OrderBy(p => p.Info.Name)
                         .ThenBy(p => p.Info.GetParameters().Length))
                {
                    var methodInfo = method.Info as MethodInfo;
                    Writer.WriteTableRow(
                        Writer.Bold(methodInfo.Name + methodInfo.ToParametersString(typeLinkConverter)),
                        methodInfo.ToTypeNameString(typeLinkConverter),
                        method.Comments.Summary);
                }
            }

            if (allFields.Count > 0)
            {
                Writer.WriteH2("Fields");
                Writer.WriteTableTitle("Name", "Type", "Summary");
                foreach (var field in allFields)
                {
                    Writer.WriteTableRow(
                        Writer.Bold(field.Info.Name),
                        field.Info.ToTypeNameString(typeLinkConverter),
                        ProcessTags(field.Comments.Summary));
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Write markdown documentation for the class:
        /// Base class,  summary, remarks, Properties, constructors, methods and fields
        /// </summary>
        /// <param name="typeData"></param>
        public void WriteClassDocumentation(TypeCollection.TypeInformation typeData)
        {
            Writer.WriteH1(TypeTitle(typeData.Type));
            Writer.WriteLine("Namespace: " + typeData.Type.Namespace);

            if (typeData.Type.BaseType != null &&
                typeData.Type.BaseType != typeof(Object) &&
                typeData.Type.BaseType != typeof(ValueType))
            {
                Writer.WriteLine("Base class: " + typeData.Type.BaseType.ToNameString(typeLinkConverter, true));
            }

            var typeComments = Reader.GetTypeComments(typeData.Type);

            Writer.WriteLine(ProcessTags(typeComments.Summary));

            WriteExample(typeComments.Example);
            WriteRemarks(typeComments.Remarks);

            var allProperties   = Reader.Comments(typeData.Properties).ToList();
            var allConstructors = Reader.Comments(typeData.Methods.Where(it => it is ConstructorInfo)).ToList();
            var allMethods      = Reader.Comments(typeData.Methods
                                                  .Where(it => !(it is ConstructorInfo) && (it is MethodInfo))).ToList();
            var allFields = Reader.Comments(typeData.Fields).ToList();

            if (allProperties.Count > 0)
            {
                Writer.WriteH2("Properties");
                Writer.WriteTableTitle("Name", "Type", "Summary");
                foreach (var prop in allProperties)
                {
                    Writer.WriteTableRow(
                        Writer.Bold(prop.Info.Name),
                        prop.Info.ToTypeNameString(typeLinkConverter, true),
                        ProcessTags(prop.Comments.Summary));
                }
            }

            if (allConstructors.Count > 0)
            {
                Writer.WriteH2("Constructors");
                Writer.WriteTableTitle("Name", "Summary");
                foreach (var ctor in allConstructors.OrderBy(m => m.Info.GetParameters().Length))
                {
                    var heading = typeData.Type.ToNameString() + ctor.Info.ToParametersString();
                    heading = DocumentMethodDetails ? Writer.HeadingLink(heading, Writer.Bold(heading)) : Writer.Bold(heading);
                    Writer.WriteTableRow(
                        heading,
                        ProcessTags(ctor.Comments.Summary));
                }
            }

            if (allMethods.Count > 0)
            {
                Writer.WriteH2("Methods");
                Writer.WriteTableTitle("Name", "Returns", "Summary");
                foreach (var method in allMethods
                         .OrderBy(m => m.Info.Name)
                         .ThenBy(m => m.Info.GetParameters().Length))
                {
                    var methodInfo = method.Info as MethodInfo;
                    var heading    = methodInfo.Name + methodInfo.ToParametersString();
                    heading = DocumentMethodDetails ? Writer.HeadingLink(heading, Writer.Bold(heading)) : Writer.Bold(heading);
                    Writer.WriteTableRow(
                        heading,
                        methodInfo.ToTypeNameString(typeLinkConverter, true),
                        ProcessTags(method.Comments.Summary));
                }
            }

            if (allFields.Count > 0)
            {
                Writer.WriteH2("Fields");
                Writer.WriteTableTitle("Name", "Type", "Summary");
                foreach (var field in allFields)
                {
                    Writer.WriteTableRow(
                        Writer.Bold(field.Info.Name),
                        field.Info.ToTypeNameString(typeLinkConverter, true),
                        ProcessTags(field.Comments.Summary));
                }
            }

            if (DocumentMethodDetails)
            {
                if (allConstructors.Count > 0)
                {
                    Writer.WriteH2("Constructors");
                    foreach (var(info, comments) in allConstructors
                             .OrderBy(m => m.Info.GetParameters().Length))
                    {
                        WriteMethodDetails(typeData.Type.ToNameString(), info, comments);
                    }
                }
                if (allMethods.Count > 0)
                {
                    Writer.WriteH2("Methods");
                    foreach (var(info, comments) in allMethods
                             .OrderBy(m => m.Info.Name)
                             .ThenBy(m => m.Info.GetParameters().Length))
                    {
                        WriteMethodDetails(info.Name, info, comments);
                    }
                }
            }
        }