diff --git a/ChangeLog.md b/ChangeLog.md index 03c9c1cd94..905732712e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -16,8 +16,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix analyzer [RCS1046](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1046) to report `async void` methods without `Async` suffix ([PR](https://github.com/dotnet/roslynator/pull/1790)) - Fix analyzer [RCS1265](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1265) to not report catch clauses with a `when` filter ([PR](https://github.com/dotnet/roslynator/pull/1789)) - Fix analyzer [RCS0034](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS0034) for types with a primary constructor and multiple constraint clauses ([PR](https://github.com/dotnet/roslynator/pull/1791)) -- [CLI] Fix GitLab output format to use relative paths, forward slashes, and 1-based line numbers ([PR](https://github.com/dotnet/roslynator/pull/1792)) - Fix analyzer [RCS1231](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1231) to not report `CancellationToken` in sync methods returning `Task` ([PR](https://github.com/dotnet/roslynator/pull/1802)) +- [CLI] Fix GitLab output format to use relative paths, forward slashes, and 1-based line numbers ([PR](https://github.com/dotnet/roslynator/pull/1792)) +- [CLI] Fix `generate-doc` to omit internal interfaces from type declarations and the Implements section ([PR](https://github.com/dotnet/roslynator/pull/1801)) ## [4.16.0] - 2026-08-08 diff --git a/src/Documentation/Documentation.csproj b/src/Documentation/Documentation.csproj index 024e9f2ff0..8c602b3660 100644 --- a/src/Documentation/Documentation.csproj +++ b/src/Documentation/Documentation.csproj @@ -57,4 +57,4 @@ Roslynator.Documentation.DocumentationGenerator - \ No newline at end of file + diff --git a/src/Documentation/DocumentationGenerator.cs b/src/Documentation/DocumentationGenerator.cs index e213d9cf24..7a6476dd48 100644 --- a/src/Documentation/DocumentationGenerator.cs +++ b/src/Documentation/DocumentationGenerator.cs @@ -1052,7 +1052,7 @@ void GenerateMemberContent(DocumentationWriter writer, ISymbol symbol, int headi } case MemberDocumentationParts.Implements: { - writer.WriteImplementedInterfaceMembers(symbol.FindImplementedInterfaceMembers()); + writer.WriteImplementedInterfaceMembers(symbol.FindImplementedInterfaceMembers().Where(f => f.IsPubliclyVisible())); break; } case MemberDocumentationParts.Attributes: diff --git a/src/Documentation/DocumentationWriter.cs b/src/Documentation/DocumentationWriter.cs index c6df7d2ee9..96146327e1 100644 --- a/src/Documentation/DocumentationWriter.cs +++ b/src/Documentation/DocumentationWriter.cs @@ -532,7 +532,8 @@ public virtual void WriteDefinition(ISymbol symbol) | SymbolDisplayTypeDeclarationOptions.IncludeModifiers | SymbolDisplayTypeDeclarationOptions.BaseList, additionalOptions: additionalOptions, - shouldDisplayAttribute: (s, a) => DocumentationModel.Filter.IsMatch(s, a)); + shouldDisplayAttribute: (s, a) => DocumentationModel.Filter.IsMatch(s, a), + shouldDisplayInterface: f => f.IsPubliclyVisible()); StringBuilder sb = StringBuilderCache.GetInstance(attributesParts.Length + definitionParts.Length); @@ -1491,7 +1492,7 @@ void WriteOverrides(ISymbol symbol) void WriteImplements(ISymbol symbol) { - using (IEnumerator en = symbol.FindImplementedInterfaceMembers().GetEnumerator()) + using (IEnumerator en = symbol.FindImplementedInterfaceMembers().Where(f => f.IsPubliclyVisible()).GetEnumerator()) { if (en.MoveNext()) { diff --git a/src/Documentation/SymbolDefinitionDisplay.cs b/src/Documentation/SymbolDefinitionDisplay.cs index 1e7411f759..e5df33b617 100644 --- a/src/Documentation/SymbolDefinitionDisplay.cs +++ b/src/Documentation/SymbolDefinitionDisplay.cs @@ -18,7 +18,8 @@ public static ImmutableArray GetDisplayParts( SymbolDisplayFormat format, SymbolDisplayTypeDeclarationOptions typeDeclarationOptions = SymbolDisplayTypeDeclarationOptions.None, SymbolDisplayAdditionalOptions additionalOptions = SymbolDisplayAdditionalOptions.None, - Func shouldDisplayAttribute = null) + Func shouldDisplayAttribute = null, + Func shouldDisplayInterface = null) { ImmutableArray parts; @@ -62,6 +63,9 @@ public static ImmutableArray GetDisplayParts( { interfaces = interfaces.RemoveAll(f => f.SpecialType == SpecialType.System_Collections_IEnumerable); } + + if (shouldDisplayInterface is not null) + interfaces = interfaces.RemoveAll(f => !shouldDisplayInterface(f)); } } diff --git a/src/Documentation/SymbolDefinitionWriter.cs b/src/Documentation/SymbolDefinitionWriter.cs index 6f03fcc30c..6f3e0c3cdf 100644 --- a/src/Documentation/SymbolDefinitionWriter.cs +++ b/src/Documentation/SymbolDefinitionWriter.cs @@ -969,7 +969,8 @@ public virtual void WriteDefinition(ISymbol symbol, SymbolDisplayFormat format) format ?? DefinitionFormat, typeDeclarationOptions: GetTypeDeclarationOptions(), additionalOptions: GetAdditionalOptions(), - shouldDisplayAttribute: (s, a) => Filter.IsMatch(s, a)); + shouldDisplayAttribute: (s, a) => Filter.IsMatch(s, a), + shouldDisplayInterface: f => Filter.IsMatch(f)); WriteDefinition(symbol, parts); } diff --git a/src/Documentation/TypeDocumentationModel.cs b/src/Documentation/TypeDocumentationModel.cs index 2a53e80021..118379ba89 100644 --- a/src/Documentation/TypeDocumentationModel.cs +++ b/src/Documentation/TypeDocumentationModel.cs @@ -334,14 +334,20 @@ public IEnumerable GetImplementedInterfaces(bool omitIEnumerab { foreach (INamedTypeSymbol interfaceType in allInterfaces) { - if (interfaceType.SpecialType != SpecialType.System_Collections_IEnumerable) + if (interfaceType.IsPubliclyVisible() + && interfaceType.SpecialType != SpecialType.System_Collections_IEnumerable) + { yield return interfaceType; + } } } else { foreach (INamedTypeSymbol interfaceType in allInterfaces) - yield return interfaceType; + { + if (interfaceType.IsPubliclyVisible()) + yield return interfaceType; + } } } }