/// <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)); } } }
/// <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); } } } }