diff --git a/rules/S7173/metadata.json b/rules/S7173/metadata.json new file mode 100644 index 00000000000..2c63c085104 --- /dev/null +++ b/rules/S7173/metadata.json @@ -0,0 +1,2 @@ +{ +} diff --git a/rules/S7173/vb6/metadata.json b/rules/S7173/vb6/metadata.json new file mode 100644 index 00000000000..b5ce6dbd588 --- /dev/null +++ b/rules/S7173/vb6/metadata.json @@ -0,0 +1,24 @@ +{ + "title": "\"GoSub\" statements should not be used", + "type": "CODE_SMELL", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "10min" + }, + "tags": [ + "brain-overload" + ], + "defaultSeverity": "Major", + "ruleSpecification": "RSPEC-7173", + "sqKey": "S7173", + "scope": "All", + "defaultQualityProfiles": ["Sonar way"], + "quickfix": "infeasible", + "code": { + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, + "attribute": "CLEAR" + } +} diff --git a/rules/S7173/vb6/rule.adoc b/rules/S7173/vb6/rule.adoc new file mode 100644 index 00000000000..bbfd41bc885 --- /dev/null +++ b/rules/S7173/vb6/rule.adoc @@ -0,0 +1,43 @@ +== Why is this an issue? + +The `GoSub` statement in VB6 is an unstructured control flow statement. It can lead to complex and difficult-to-maintain code, as well as potential stack overflow errors due to improper return handling. + +Modern programming practices recommend using proper subroutine or function calls instead, which provide better readability, maintainability, and error handling. + +== How to fix it + +Replace `GoSub` statements with proper subroutine or function calls. + +=== Code examples + +==== Noncompliant code example + +[source,vb6,diff-id=1,diff-type=noncompliant] +---- +Sub ExampleProcedure() + GoSub SubRoutine + Exit Sub + +SubRoutine: + ' ... + Return +End Sub +---- + +==== Compliant solution + +[source,vb6,diff-id=1,diff-type=compliant] +---- +Sub ExampleProcedure() + Call SubRoutine +End Sub + +Sub SubRoutine() + ' ... +End Sub +---- + +== Resources +=== Documentation + +* Microsoft Learn - https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/gosubreturn-statement[GoSub...Return statement]