-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create rule S7173: "GoSub" statements should not be used (#4580)
- Loading branch information
1 parent
5adea70
commit 98e58e1
Showing
3 changed files
with
69 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
{ | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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] |