rspec/rules/S1479/vbnet/rule.adoc
Fred Tingaud 51369b610e
Make sure that includes are always surrounded by empty lines (#2270)
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.
2023-06-22 10:38:01 +02:00

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[]