diff --git a/rules/S1542/vb6/rule.adoc b/rules/S1542/vb6/rule.adoc index 49a3c46ddbf..113584b3aed 100644 --- a/rules/S1542/vb6/rule.adoc +++ b/rules/S1542/vb6/rule.adoc @@ -4,7 +4,7 @@ include::../description.adoc[] === Noncompliant code example -With default provided regular expression: ^[A-Z][a-zA-Z0-9_]*$ +With default provided regular expression: ^([A-Z][a-zA-Z0-9_]*)|([a-z][a-zA-Z0-9]*_[A-Z][a-zA-Z]*)$ [source,vb6] diff --git a/rules/S6146/vb6/metadata.json b/rules/S6146/vb6/metadata.json new file mode 100644 index 00000000000..7a73a41bfdf --- /dev/null +++ b/rules/S6146/vb6/metadata.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/rules/S6146/vb6/rule.adoc b/rules/S6146/vb6/rule.adoc new file mode 100644 index 00000000000..a3828481b42 --- /dev/null +++ b/rules/S6146/vb6/rule.adoc @@ -0,0 +1,36 @@ +== Why is this an issue? + +There are several compilations options available for Visual Basic source code and `Option Explicit` defines compiler behavior for implicit variable declarations. Not specifying `Option Explicit` will allow creating a variable by it's first usage. This behavior can lead to unexpected runtime errors due to typos in variable names. + +== How to fix it + +`Option Explicit` should be added to every individual source file. + +=== Code examples + +==== Noncompliant code example + +[source,vb6,diff-id=1,diff-type=noncompliant] +---- +Sub DoSomething(First As String, Second As String) + Parameter = Fist ' New local variable "Fist" is created and assigned to new local variable "Parameter" instead of "First" argument. + DoSomething(Parameter) + Parametr = Second ' "Second" argument is assigned to newly created variable "Parametr" instead of intended "Parameter". + DoSomething(Parameter) ' Value of "Parameter" is always Nothing +End Sub +---- + + +==== Compliant solution + +[source,vb6,diff-id=1,diff-type=compliant] +---- +Option Explicit + +Sub DoSomething(First As String, Second As String) + Dim Parameter As String = First + DoSomething(Parameter) + Parameter = Second + DoSomething(Parameter) +End Sub +---- diff --git a/rules/S907/vb6/rule.adoc b/rules/S907/vb6/rule.adoc index 1395593eda8..7bbd1d1d209 100644 --- a/rules/S907/vb6/rule.adoc +++ b/rules/S907/vb6/rule.adoc @@ -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[]