diff --git a/Reinforced.Typings.Tests/SpecificCases/SpecificTestCases.RemarksDocs.cs b/Reinforced.Typings.Tests/SpecificCases/SpecificTestCases.RemarksDocs.cs new file mode 100644 index 00000000..d8b13cdd --- /dev/null +++ b/Reinforced.Typings.Tests/SpecificCases/SpecificTestCases.RemarksDocs.cs @@ -0,0 +1,95 @@ +using System; +using System.Threading.Tasks; +using Reinforced.Typings.Fluent; +using Xunit; + +namespace Reinforced.Typings.Tests.SpecificCases +{ + public partial class SpecificTestCases + { + /// + /// dummy + /// + /// + /// Class remark. + /// + public class SomeClassWithRemarks + { + /// + /// dummy + /// + /// + /// Ctor remark. + /// + public SomeClassWithRemarks() { } + + /// + /// + /// Property remark. + /// + public string ClassProp { get; set; } + + /// + /// + /// Method remark. + /// + public void Method() { } + } + + [Fact] + public void RemarksParsedFromDocs() + { + const string result = @" +module Reinforced.Typings.Tests.SpecificCases { + /** dummy */ + export class SomeClassWithRemarks + { + /** + * @inheritdoc + */ + public ClassProp: string; + /** + * @inheritdoc + */ + public Method() : void { } + } +}"; + AssertConfiguration( + s => + { + s.TryLookupDocumentationForAssembly(typeof(SpecificTestCases).Assembly); + s.ExportAsClass() + .WithPublicProperties() + .WithPublicMethods(); + }, + result, + expAction => + { + // Currently the are just parsed into the DocumentationMember + // but not used in the generated typings. Hence we use the action on + // the ExportContext to perform the actual test. + // To avoid surprises like empty docs are currently only valid + // if there is a or tag. + + var type = typeof(SomeClassWithRemarks); + + var classDoc = expAction.Context.Documentation.GetDocumentationMember(type); + Assert.NotNull(classDoc); + Assert.Equal("Class remark.", classDoc.Remarks.Text); + + var memberDoc = expAction.Context.Documentation.GetDocumentationMember(type.GetProperty(nameof(SomeClassWithRemarks.ClassProp))); + Assert.NotNull(memberDoc); + Assert.Equal("Property remark.", memberDoc.Remarks.Text); + + var methodeDoc = expAction.Context.Documentation.GetDocumentationMember(type.GetMethod(nameof(SomeClassWithRemarks.Method))); + Assert.NotNull(methodeDoc); + Assert.Equal("Method remark.", methodeDoc.Remarks.Text); + + var ctorRemark = expAction.Context.Documentation.GetDocumentationMember(type.GetConstructor(Array.Empty())); + Assert.NotNull(ctorRemark); + Assert.Equal("Ctor remark.", ctorRemark.Remarks.Text); + } + ); + } + } +} \ No newline at end of file diff --git a/Reinforced.Typings/Xmldoc/Model/DocumentationMemberExtensions.cs b/Reinforced.Typings/Xmldoc/Model/DocumentationMemberExtensions.cs index c3993e1d..8ad36998 100644 --- a/Reinforced.Typings/Xmldoc/Model/DocumentationMemberExtensions.cs +++ b/Reinforced.Typings/Xmldoc/Model/DocumentationMemberExtensions.cs @@ -26,6 +26,11 @@ public static bool HasSummary(this DocumentationMember dm) return dm.Summary != null && !string.IsNullOrEmpty(dm.Summary.Text); } + public static bool HasRemarks(this DocumentationMember dm) + { + return dm.Remarks != null && !string.IsNullOrEmpty(dm.Remarks.Text); + } + public static bool HasParameters(this DocumentationMember dm) { return dm.Parameters != null && dm.Parameters.Length > 0; diff --git a/Reinforced.Typings/Xmldoc/Model/Model.cs b/Reinforced.Typings/Xmldoc/Model/Model.cs index e726f1f8..8cc644b3 100644 --- a/Reinforced.Typings/Xmldoc/Model/Model.cs +++ b/Reinforced.Typings/Xmldoc/Model/Model.cs @@ -39,6 +39,9 @@ public string Name [XmlElement(ElementName = "summary")] public DocumentationSummary Summary { get; set; } + [XmlElement(ElementName = "remarks")] + public DocumentationRemarks Remarks { get; set; } + [XmlElement(ElementName = "inheritdoc")] public DocumentationInheritDoc InheritDoc { get; set; } @@ -92,6 +95,21 @@ public override void ReadXml(XmlReader reader) } } + public class DocumentationRemarks : XmlIgnoreInner + { + public string Text { get; set; } + + public override string ToString() + { + return Text; + } + + public override void ReadXml(XmlReader reader) + { + Text = reader.ReadInnerXml().Trim(); + } + } + public class DocumentationInheritDoc : XmlIgnoreInner { ///