Skip to content

Commit

Permalink
Modify rule S907: vb6 LaYC (#4581)
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastien-marichal authored Dec 18, 2024
1 parent 5e18970 commit 826213e
Showing 1 changed file with 41 additions and 30 deletions.
71 changes: 41 additions & 30 deletions rules/S907/vb6/rule.adoc
Original file line number Diff line number Diff line change
@@ -1,48 +1,59 @@
== Why is this an issue?

``++GoTo++`` is an unstructured control flow statement. It makes code less readable and maintainable. Structured control flow statements such as ``++If++``, ``++For++``, ``++While++``, or ``++Exit++`` should be used instead.
`GoTo` is an unstructured control flow statement. It makes code less readable and maintainable. Structured control flow statements such as `If`, `For`, `While`, or `Exit` should be used instead.

=== Noncompliant code example
=== Exceptions

`On Error GoTo` statements are ignored as correct error handling.

== How to fix it

Replace `GoTo` statements with structured control flow statements.

=== Code examples

==== Noncompliant code example

[source,vb6]
[source,vb6,diff-id=1,diff-type=noncompliant]
----
Sub gotoStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then GoTo Line1 Else GoTo Line2
Sub gotoStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then GoTo Line1 Else GoTo Line2
Line1:
sampleString = "Number equals 1"
GoTo LastLine
sampleString = "Number equals 1"
GoTo LastLine
Line2:
' The following statement never gets executed because number = 1.
sampleString = "Number equals 2"
' The following statement never gets executed because number = 1.
sampleString = "Number equals 2"
LastLine:
' Write "Number equals 1" in the Debug window.
Debug.WriteLine(sampleString)
End Sub
' Write "Number equals 1" in the Debug window.
Debug.WriteLine(sampleString)
End Sub
----

=== Compliant solution
==== Compliant solution

[source,vb6]
[source,vb6,diff-id=1,diff-type=compliant]
----
Sub gotoStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then
sampleString = "Number equals 1"
Else
sampleString = "Number equals 2"
End If
Debug.WriteLine(sampleString)
End Sub
Sub gotoStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then
sampleString = "Number equals 1"
Else
sampleString = "Number equals 2"
End If
Debug.WriteLine(sampleString)
End Sub
----

=== Exceptions
== Resources
=== Documentation

``++On Error GoTo++`` statements are ignored as correct error handling.
* Microsoft Learn - https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/goto-statement[GoTo statement]

ifdef::env-github,rspecator-view[]

Expand Down

0 comments on commit 826213e

Please sign in to comment.