diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/ClassShouldNotBeEmptyBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/ClassShouldNotBeEmptyBase.cs index e937d2ece2d..2109bf8820f 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/ClassShouldNotBeEmptyBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/ClassShouldNotBeEmptyBase.cs @@ -31,6 +31,8 @@ public abstract class ClassShouldNotBeEmptyBase KnownType.System_Attribute, KnownType.System_Exception); + private static readonly IEnumerable IgnoredNames = ["AssemblyDoc", "NamespaceDoc"]; // https://github.com/Doraku/DefaultDocumentation + private static readonly IEnumerable IgnoredSuffixes = ["Command", "Event", "Message"]; protected abstract bool IsEmptyAndNotPartial(SyntaxNode node); @@ -62,7 +64,8 @@ protected override void Initialize(SonarAnalysisContext context) => Language.SyntaxKind.ClassAndRecordClassDeclarations); private static bool ShouldIgnoreBecauseOfName(SyntaxToken identifier) => - IgnoredSuffixes.Any(identifier.ValueText.EndsWith); + IgnoredNames.Contains(identifier.ValueText) + || IgnoredSuffixes.Any(identifier.ValueText.EndsWith); private bool ShouldIgnoreBecauseOfBaseClassOrInterface(SyntaxNode node, SemanticModel model) => GetIfHasDeclaredBaseClassOrInterface(node) is { } declaration diff --git a/analyzers/tests/SonarAnalyzer.Test/TestCases/ClassShouldNotBeEmpty.cs b/analyzers/tests/SonarAnalyzer.Test/TestCases/ClassShouldNotBeEmpty.cs index cafb0f8bcff..7f377c4960a 100644 --- a/analyzers/tests/SonarAnalyzer.Test/TestCases/ClassShouldNotBeEmpty.cs +++ b/analyzers/tests/SonarAnalyzer.Test/TestCases/ClassShouldNotBeEmpty.cs @@ -139,6 +139,9 @@ class Command { } // Compliant, ignored because of th class Event { } // Compliant, ignored because of the suffix class Message { } // Compliant, ignored because of the suffix + class AssemblyDoc { } // Compliant, used for DefaultDocumentation tool + class NamespaceDoc { } // compliant, used for DefaultDocumentation tool + class BaseWithProtectedConstructor { protected BaseWithProtectedConstructor() { }