
When an include is not surrounded by empty lines, its content is inlined on the same line as the adjacent content. That can lead to broken tags and other display issues. This PR fixes all such includes and introduces a validation step that forbids introducing the same problem again.
76 lines
2.2 KiB
Plaintext
76 lines
2.2 KiB
Plaintext
== Why is this an issue?
|
|
|
|
When https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/select-case-statement[Select Case] statements have large sets of case clauses, it is usually an attempt to map two sets of data. A https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2[Dictionary] should be used instead to make the code more readable and maintainable.
|
|
|
|
=== Exceptions
|
|
|
|
This rule ignores `Select Case` statements over `Enum` arguments and empty, fall-through cases.
|
|
|
|
== How to fix it
|
|
|
|
Store all the cases apart from the `Case Else` one in a dictionary and try to get the matching value by calling the https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.trygetvalue[TryGetValue] method.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,vbnet,diff-id=1,diff-type=noncompliant]
|
|
----
|
|
Public Class TooManyCase
|
|
|
|
Public Function MapValues(Ch As Char) As Integer
|
|
Select Case Ch ' Noncompliant: 5 cases, "Case Else" excluded, more than maximum = 4
|
|
Case "a"c
|
|
Return 1
|
|
Case "b"c, "c"c
|
|
Return 2
|
|
Case "d"c
|
|
Return 3
|
|
Case "e"c
|
|
Return 4
|
|
Case "f"c, "g"c, "h"c
|
|
Return 5
|
|
Case Else
|
|
Return 6
|
|
End Select
|
|
End Function
|
|
|
|
End Class
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,vbnet,diff-id=1,diff-type=compliant]
|
|
----
|
|
Public Class TooManyCase
|
|
|
|
Private fMatching As New Dictionary(Of Char, Integer) From {
|
|
{ "a"c, 1 },
|
|
{ "b"c, 2 },
|
|
{ "c"c, 2 },
|
|
{ "d"c, 3 },
|
|
{ "e"c, 4 },
|
|
{ "f"c, 5 },
|
|
{ "g"c, 5 },
|
|
{ "h"c, 5 },
|
|
}
|
|
|
|
Public Function MapValues(Ch As Char) As Integer
|
|
Dim Value As Integer
|
|
If fMatching.TryGetValue(Ch, Value) Then
|
|
Return Value
|
|
Else
|
|
Return 6
|
|
End If
|
|
End Function
|
|
|
|
End Class
|
|
----
|
|
|
|
include::../resources-dotnet.adoc[]
|
|
|
|
* https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/select-case-statement[Select...Case Statement]
|
|
|
|
|
|
include::../rspecator-dotnet.adoc[]
|