diff --git a/rules/S2094/csharp/rule.adoc b/rules/S2094/csharp/rule.adoc index c399198c020..35d09ff818d 100644 --- a/rules/S2094/csharp/rule.adoc +++ b/rules/S2094/csharp/rule.adoc @@ -18,6 +18,22 @@ public interface IEmpty } ---- +== Exceptions + +Partial classes are ignored entirely, as they are often used with Source Generators. +Subclasses of System.Exception are ignored, as even an empty Exception class can provide useful information by its type name alone. +Subclasses of System.Attribute are ignored, as well as classes which are annotated with attributes. +Subclasses of generic classes are ignored, as even when empty they can be used for type specialization. +Subclasses of certain framework types - like the PageModel class used in ASP.NET Core Razor Pages - are also ignored. + +---- +using Microsoft.AspNetCore.Mvc.RazorPages; + +public class EmptyPageModel: PageModel // Compliant - an empty PageModel can be fully functional, the C# code can be in the cshtml file +{ +} +---- + ifdef::env-github,rspecator-view[] ''' diff --git a/rules/S2094/vbnet/rule.adoc b/rules/S2094/vbnet/rule.adoc index 84c6a43bf22..53bf271c6a6 100644 --- a/rules/S2094/vbnet/rule.adoc +++ b/rules/S2094/vbnet/rule.adoc @@ -1,4 +1,4 @@ -include::../description.adoc[] +There is no good excuse for an empty class. If it's being used simply as a common extension point, it should be replaced with an ``++Interface++``. If it was stubbed in as a placeholder for future development it should be fleshed-out. In any other case, it should be eliminated. == Noncompliant Code Example @@ -18,6 +18,21 @@ Public Interface IEmpty End Interface ---- +== Exceptions + +Partial classes are ignored entirely, as they are often used with Source Generators. +Subclasses of System.Exception are ignored, as even an empty Exception class can provide useful information by its type name alone. +Subclasses of System.Attribute are ignored, as well as classes which are annotated with attributes. +Subclasses of generic classes are ignored, as even when empty they can be used for type specialization. +Subclasses of certain framework types - like the PageModel class used in ASP.NET Core Razor Pages - are also ignored. +---- +Imports Microsoft.AspNetCore.Mvc.RazorPages + +Public Class EmptyPageModel ' Compliant - an empty PageModel can be fully functional, the VB code can be in the vbhtml file + Inherits PageModel +End Class +---- + ifdef::env-github,rspecator-view[] '''