From e8ce56200376a4ceae2213572088a4a5e0f3e4fb Mon Sep 17 00:00:00 2001 From: Clinton Ingram Date: Mon, 18 Dec 2023 09:28:46 -0800 Subject: [PATCH] v2.0 --- .gitignore | 4 -- build/Common.props | 8 +-- build/SauceControl.png | Bin 11435 -> 0 bytes build/icon.png | Bin 0 -> 2576 bytes src/InheritDoc/InheritDocProcessor.cs | 66 ++++++++++--------- tests/InheritDoc.Test/InheritDoc.Test.csproj | 2 +- 6 files changed, 40 insertions(+), 40 deletions(-) delete mode 100644 build/SauceControl.png create mode 100644 build/icon.png diff --git a/.gitignore b/.gitignore index 021cb1d..54c12dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,2 @@ .vs -bin -obj out -TestResults -BenchmarkDotNet.Artifacts diff --git a/build/Common.props b/build/Common.props index 8ecdfcb..c204186 100644 --- a/build/Common.props +++ b/build/Common.props @@ -4,7 +4,7 @@ SauceControl Clinton Ingram https://github.com/saucecontrol/InheritDoc - Copyright © 2019-$([System.DateTime]::Today.Year) $(Authors) + Copyright © 2019-$([System.DateTime]::Today.Year) $(Authors) and Contributors Automatic Documentation Inheritance Processing Automatically replace <inheritdoc /> tags with inherited documentation at build time. Integrates with MSBuild, so no command line tool or VS add-on is required. @@ -13,7 +13,7 @@ $(MSBuildProjectName) $(MSBuildProjectName) - $(Owners).png + icon.png readme.md MIT $(RepositoryUrl) @@ -57,8 +57,8 @@ - - + + diff --git a/build/SauceControl.png b/build/SauceControl.png deleted file mode 100644 index 8a26d4450a3769565793b65944bfe5838794572a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11435 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 literal 0 HcmV?d00001 diff --git a/src/InheritDoc/InheritDocProcessor.cs b/src/InheritDoc/InheritDocProcessor.cs index ec68763..caed8f2 100644 --- a/src/InheritDoc/InheritDocProcessor.cs +++ b/src/InheritDoc/InheritDocProcessor.cs @@ -226,34 +226,30 @@ private static IDictionary> generateDocMap(IList (string)i.Attribute(DocAttributeNames.Cref)).Where(c => !string.IsNullOrWhiteSpace(c)).ToHashSet(); - var bases = (om is not null ? (new[] { om }) : [ ]).Concat(m.GetBaseCandidates()).ToList(); - - // Fix up docs for C# primary constructors, which do not have docs of their own and therefore should not get warnings for missing base. - if (m.IsConstructor && bases.Count == 0 && crefs.Count == 0 && memDocs.Any()) + // Fix up docs for C# primary constructors, which result in type and constructor sharing docs. + if (m.IsConstructor && memDocs.Any()) { var typeDoc = memDocs.First(); var ctorDoc = methDocs.First(); ctorDoc.SetAttributeValue(DocAttributeNames.Name, typeID); - // Type and constructor having identical docs is the surest sign of a primary constructor. - // We'll find a suitable base for the ctor and inject a cref pointing to it. if (nodeComparer.Equals(typeDoc, ctorDoc)) { - string cref = typeID; - if (m.GetBaseConstructor() is MethodDefinition bc && bc.GetDocID().SelectMany(d => findDocsByID(docMembers, d)).FirstOrDefault() is XElement bcd) - cref = (string)bcd.Attribute(DocAttributeNames.Name); + // Find a suitable base for the ctor and inject a cref in order to avoid warning for missing base. + if (ctorDoc.Elements(DocElementNames.InheritDoc).Any()) + { + string cref = typeID; + if (m.GetBaseConstructor() is MethodDefinition bc && bc.GetDocID().SelectMany(d => findDocsByID(docMembers, d)).FirstOrDefault() is XElement bcd) + cref = (string)bcd.Attribute(DocAttributeNames.Name); - crefs.Add(cref); - foreach (var d in methDocs.Descendants(DocElementNames.InheritDoc)) - d.SetElementValue(DocAttributeNames.Cref, cref); + foreach (var d in ctorDoc.Elements(DocElementNames.InheritDoc).Where(i => !i.HasAttribute(DocAttributeNames.Cref))) + d.SetAttributeValue(DocAttributeNames.Cref, cref); + } - // `param` elements meant for the constructor will also appear in the type's docs. - foreach (var param in typeDoc.Descendants(DocElementNames.Param).ToList()) + // Remove `param` elements meant for the constructor, which also appear in the type's docs. + foreach (var param in typeDoc.Elements(DocElementNames.Param).ToList()) { if ((param.PreviousNode?.IsWhiteSpace()).GetValueOrDefault()) param.PreviousNode!.Remove(); @@ -265,23 +261,31 @@ private static IDictionary> generateDocMap(IList(); - foreach (var (bm, cref) in bases.SelectMany(bm => bm.GetDocID().Select(d => (bm, d)))) + if (methDocs.Descendants(DocElementNames.InheritDoc).Any()) { - if (dml.Count == 0 || crefs.Contains(cref)) - dml.Add(new DocMatch(cref, m, bm)); + logger.Write(ILogger.Severity.Diag, "Processing DocID: " + memID); - if (crefs.Count == 0) - break; - } + var bases = (om is not null ? (new[] { om }) : []).Concat(m.GetBaseCandidates()).ToList(); + var crefs = methDocs.Descendants(DocElementNames.InheritDoc).Select(i => (string)i.Attribute(DocAttributeNames.Cref)).Where(c => !string.IsNullOrWhiteSpace(c)).ToHashSet(); + var dml = new List(); - foreach (var cref in crefs.Where(c => !dml.Any(dm => dm.Cref == c))) - dml.Add(new DocMatch(cref, m)); + foreach (var (bm, cref) in bases.SelectMany(bm => bm.GetDocID().Select(d => (bm, d)))) + { + if (dml.Count == 0 || crefs.Contains(cref)) + dml.Add(new DocMatch(cref, m, bm)); - if (dml.Count > 0) - docMap.Add(memID, dml); - else - logger.Write(ILogger.Severity.Info, "No inherit candidate for: " + memID); + if (crefs.Count == 0) + break; + } + + foreach (var cref in crefs.Where(c => !dml.Any(dm => dm.Cref == c))) + dml.Add(new DocMatch(cref, m)); + + if (dml.Count > 0) + docMap.Add(memID, dml); + else + logger.Write(ILogger.Severity.Info, "No inherit candidate for: " + memID); + } } } diff --git a/tests/InheritDoc.Test/InheritDoc.Test.csproj b/tests/InheritDoc.Test/InheritDoc.Test.csproj index 61f0e01..eb78ef5 100644 --- a/tests/InheritDoc.Test/InheritDoc.Test.csproj +++ b/tests/InheritDoc.Test/InheritDoc.Test.csproj @@ -7,7 +7,7 @@ - +