From 73501b50acdf86d0f5299b71851df5da1ee29d80 Mon Sep 17 00:00:00 2001 From: filzrev <103790468+filzrev@users.noreply.github.com> Date: Sat, 19 Oct 2024 14:07:46 +0900 Subject: [PATCH] fix: change link as plaintext if API is excluded --- src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs | 10 ++++-- .../Visitors/SymbolVisitorAdapter.cs | 8 ++--- .../Visitors/YamlModelGenerator.cs | 34 +++++++++---------- src/Docfx.Dotnet/SymbolFormatter.cs | 6 ++-- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs b/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs index efd700b6daa..28fdd8d7a10 100644 --- a/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs +++ b/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs @@ -707,14 +707,16 @@ Inline Cref(string commentId) Inline ShortLink(ISymbol symbol, Compilation compilation) { var title = SymbolFormatter.GetNameWithType(symbol, SyntaxLanguage.CSharp); - var url = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies); + var url = filter.IncludeApi(symbol) + ? SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies) + : null; return Link(title, url); } Inline FullLink(ISymbol symbol, Compilation compilation) { var parts = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.CSharp); - var linkItems = SymbolFormatter.ToLinkItems(parts, compilation, config.MemberLayout, allAssemblies, overload: false, symbolUrlKind); + var linkItems = SymbolFormatter.ToLinkItems(parts, compilation, config.MemberLayout, allAssemblies, overload: false, filter, symbolUrlKind); return linkItems.Select(i => Link(i.DisplayName, i.Href)).ToArray(); } @@ -722,7 +724,9 @@ Inline FullLink(ISymbol symbol, Compilation compilation) Inline NameOnlyLink(ISymbol symbol, Compilation compilation) { var title = SymbolFormatter.GetName(symbol, SyntaxLanguage.CSharp); - var url = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies); + var url = filter.IncludeApi(symbol) + ? SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies) + : null; return Link(title, url); } diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs index 31f4941dde6..b283661a9a3 100644 --- a/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs +++ b/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs @@ -374,7 +374,7 @@ public string AddReference(ISymbol symbol) Debug.Fail("Unexpected member type."); throw new InvalidOperationException("Unexpected member type."); } - return _generator.AddReference(symbol, _references); + return _generator.AddReference(symbol, _references, _filter); } public string AddReference(string id, string commentId) @@ -390,7 +390,7 @@ public string AddReference(string id, string commentId) reference.QualifiedNameParts = new(); reference.IsDefinition = symbol.IsDefinition; - _generator.GenerateReference(symbol, reference, asOverload: false); + _generator.GenerateReference(symbol, reference, asOverload: false, _filter); } _references[id] = reference; @@ -406,7 +406,7 @@ public string AddOverloadReference(ISymbol symbol) case MemberType.Constructor: case MemberType.Method: case MemberType.Operator: - return _generator.AddOverloadReference(symbol, _references); + return _generator.AddOverloadReference(symbol, _references, _filter); default: Debug.Fail("Unexpected member type."); throw new InvalidOperationException("Unexpected member type."); @@ -418,7 +418,7 @@ public string AddSpecReference( IReadOnlyList typeGenericParameters = null, IReadOnlyList methodGenericParameters = null) { - return _generator.AddSpecReference(symbol, typeGenericParameters, methodGenericParameters, _references, this); + return _generator.AddSpecReference(symbol, typeGenericParameters, methodGenericParameters, _references, _filter); } private static MemberType GetMemberTypeFromSymbol(ISymbol symbol) diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs index 2517ffe2526..79d205e1f36 100644 --- a/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs +++ b/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs @@ -30,7 +30,7 @@ public void DefaultVisit(ISymbol symbol, MetadataItem item) item.DisplayQualifiedNames[SyntaxLanguage.VB] = SymbolFormatter.GetQualifiedName(symbol, SyntaxLanguage.VB); } - public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOverload) + public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOverload, SymbolFilter filter) { if (!reference.NameParts.ContainsKey(SyntaxLanguage.CSharp)) reference.NameParts.Add(SyntaxLanguage.CSharp, new()); @@ -39,9 +39,9 @@ public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOv if (!reference.QualifiedNameParts.ContainsKey(SyntaxLanguage.CSharp)) reference.QualifiedNameParts.Add(SyntaxLanguage.CSharp, new()); - reference.NameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload); - reference.NameWithTypeParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload); - reference.QualifiedNameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload); + reference.NameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter); + reference.NameWithTypeParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter); + reference.QualifiedNameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter); if (!reference.NameParts.ContainsKey(SyntaxLanguage.VB)) reference.NameParts.Add(SyntaxLanguage.VB, new()); @@ -50,9 +50,9 @@ public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOv if (!reference.QualifiedNameParts.ContainsKey(SyntaxLanguage.VB)) reference.QualifiedNameParts.Add(SyntaxLanguage.VB, new()); - reference.NameParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload); - reference.NameWithTypeParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload); - reference.QualifiedNameParts[SyntaxLanguage.VB] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload); + reference.NameParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter); + reference.NameWithTypeParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter); + reference.QualifiedNameParts[SyntaxLanguage.VB] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter); } public void GenerateSyntax(ISymbol symbol, SyntaxDetail syntax, SymbolFilter filter) @@ -61,7 +61,7 @@ public void GenerateSyntax(ISymbol symbol, SyntaxDetail syntax, SymbolFilter fil syntax.Content[SyntaxLanguage.VB] = SymbolFormatter.GetSyntax(symbol, SyntaxLanguage.VB, filter); } - public string AddReference(ISymbol symbol, Dictionary references) + public string AddReference(ISymbol symbol, Dictionary references, SymbolFilter filter) { var id = VisitorHelper.GetId(symbol); var reference = new ReferenceItem @@ -72,7 +72,7 @@ public string AddReference(ISymbol symbol, Dictionary ref IsDefinition = symbol.IsDefinition, CommentId = VisitorHelper.GetCommentId(symbol) }; - GenerateReference(symbol, reference, false); + GenerateReference(symbol, reference, false, filter); if (!references.TryAdd(id, reference)) { @@ -82,7 +82,7 @@ public string AddReference(ISymbol symbol, Dictionary ref return id; } - public string AddOverloadReference(ISymbol symbol, Dictionary references) + public string AddOverloadReference(ISymbol symbol, Dictionary references, SymbolFilter filter) { var uidBody = VisitorHelper.GetOverloadIdBody(symbol); var reference = new ReferenceItem @@ -94,7 +94,7 @@ public string AddOverloadReference(ISymbol symbol, Dictionary typeGenericParameters, IReadOnlyList methodGenericParameters, Dictionary references, - SymbolVisitorAdapter adapter) + SymbolFilter filter) { var rawId = VisitorHelper.GetId(symbol); var id = SpecIdHelper.GetSpecId(symbol, typeGenericParameters, methodGenericParameters); @@ -124,7 +124,7 @@ public string AddSpecReference( NameWithTypeParts = new(), QualifiedNameParts = new(), }; - GenerateReference(symbol, reference, false); + GenerateReference(symbol, reference, false, filter); var originalSymbol = symbol; var reducedFrom = (symbol as IMethodSymbol)?.ReducedFrom; if (reducedFrom != null) @@ -135,10 +135,10 @@ public string AddSpecReference( if (!reference.IsDefinition.Value && rawId != null) { - reference.Definition = AddReference(originalSymbol.OriginalDefinition, references); + reference.Definition = AddReference(originalSymbol.OriginalDefinition, references, filter); } - reference.Parent = GetReferenceParent(originalSymbol, typeGenericParameters, methodGenericParameters, references, adapter); + reference.Parent = GetReferenceParent(originalSymbol, typeGenericParameters, methodGenericParameters, references, filter); reference.CommentId = VisitorHelper.GetCommentId(originalSymbol); if (!references.TryAdd(id, reference)) @@ -153,7 +153,7 @@ private string GetReferenceParent(ISymbol symbol, IReadOnlyList typeGenericParameters, IReadOnlyList methodGenericParameters, Dictionary references, - SymbolVisitorAdapter adapter) + SymbolFilter filter) { switch (symbol.Kind) { @@ -172,7 +172,7 @@ private string GetReferenceParent(ISymbol symbol, { return null; } - return AddSpecReference(parentSymbol, typeGenericParameters, methodGenericParameters, references, adapter); ; + return AddSpecReference(parentSymbol, typeGenericParameters, methodGenericParameters, references, filter); } default: return null; diff --git a/src/Docfx.Dotnet/SymbolFormatter.cs b/src/Docfx.Dotnet/SymbolFormatter.cs index 514031f94fa..c9fbd423f41 100644 --- a/src/Docfx.Dotnet/SymbolFormatter.cs +++ b/src/Docfx.Dotnet/SymbolFormatter.cs @@ -113,7 +113,7 @@ public static ImmutableArray GetSyntaxParts(ISymbol symbol, S } public static List ToLinkItems(this ImmutableArray parts, - Compilation compilation, MemberLayout memberLayout, HashSet allAssemblies, bool overload, SymbolUrlKind urlKind = SymbolUrlKind.Html) + Compilation compilation, MemberLayout memberLayout, HashSet allAssemblies, bool overload, SymbolFilter filter, SymbolUrlKind urlKind = SymbolUrlKind.Html) { var result = new List(); foreach (var part in parts) @@ -138,7 +138,9 @@ LinkItem ToLinkItem(SymbolDisplayPart part) { Name = overload ? VisitorHelper.GetOverloadId(symbol) : VisitorHelper.GetId(symbol), DisplayName = part.ToString(), - Href = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, memberLayout, urlKind, allAssemblies), + Href = filter.IncludeApi(symbol) + ? SymbolUrlResolver.GetSymbolUrl(symbol, compilation, memberLayout, urlKind, allAssemblies) + : null, IsExternalPath = symbol.IsExtern || symbol.DeclaringSyntaxReferences.Length == 0, }; }