-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create rule S3063: Add vbnet language (#1524)
* Add vbnet to rule S3063 * Add adoc for CS/VB * Add exceptions * Add invocations exceptions * Addressed PR comments * Semplifications, better wording on the descriptions * Small description fix * Add indexer and .Length expression exceptions and fix description * sub-list to inline * Fix typos --------- Co-authored-by: cristian-ambrosini-sonarsource <cristian-ambrosini-sonarsource@users.noreply.github.com> Co-authored-by: Cristian Ambrosini <cristian.ambrosini@sonarsource.com>
- Loading branch information
1 parent
eb541d7
commit a8b5a83
Showing
3 changed files
with
95 additions
and
11 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 |
---|---|---|
@@ -1,16 +1,49 @@ | ||
include::../rule.adoc[] | ||
`StringBuilder` instances that never build a `string` clutter the code and worse are a drag on performance. Either they should be removed, or the missing `ToString()` call should be added. | ||
|
||
ifdef::env-github,rspecator-view[] | ||
== Noncompliant Code Example | ||
|
||
''' | ||
== Implementation Specification | ||
(visible only on this page) | ||
[source,csharp] | ||
---- | ||
public void DoSomething(List<string> strings) { | ||
var sb = new StringBuilder(); // Noncompliant | ||
sb.Append("Got: "); | ||
foreach(var str in strings) { | ||
sb.Append(str).Append(", "); | ||
// ... | ||
} | ||
} | ||
---- | ||
|
||
include::../message.adoc[] | ||
== Compliant Solution | ||
|
||
''' | ||
== Comments And Links | ||
(visible only on this page) | ||
[source,csharp] | ||
---- | ||
public void DoSomething(List<string> strings) { | ||
foreach(var str in strings) { | ||
// ... | ||
} | ||
} | ||
---- | ||
or | ||
[source,csharp] | ||
---- | ||
public void DoSomething(List<string> strings) { | ||
var sb = new StringBuilder(); | ||
sb.Append("Got: "); | ||
foreach(var str in strings) { | ||
sb.Append(str).Append(", "); | ||
// ... | ||
} | ||
logger.LogInformation(sb.ToString()); | ||
} | ||
---- | ||
|
||
include::../comments-and-links.adoc[] | ||
endif::env-github,rspecator-view[] | ||
== Exceptions | ||
|
||
No issue is reported when `StringBuilder` is: | ||
|
||
* Accessed through `sb.CopyTo()`, `sb.GetChunks()`, `sb.Length`, or `sb[index]`. | ||
* Passed as a method argument, on the grounds that it will likely be accessed through a `ToString()` invocation there. | ||
* Passed in as a parameter to the current method, on the grounds that the callee will materialize the string. | ||
* Retrieved by a custom function (`var sb = GetStringBuilder();`). | ||
* Returned by the method. |
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,49 @@ | ||
`StringBuilder` instances that never build a `string` clutter the code and worse are a drag on performance. Either they should be removed, or the missing `ToString()` call should be added. | ||
|
||
== Noncompliant Code Example | ||
|
||
[source,vbnet] | ||
---- | ||
Public Sub DoSomething(ByVal strings As List(Of String)) | ||
Dim sb As StringBuilder = New StringBuilder() ' Noncompliant | ||
sb.Append("Got: ") | ||
For Each str As String In strings | ||
sb.Append(str).Append(", ") | ||
Next | ||
End Sub | ||
---- | ||
|
||
== Compliant Solution | ||
|
||
[source,vbnet] | ||
---- | ||
Public Sub DoSomething(ByVal strings As List(Of String)) | ||
For Each str As String In strings | ||
Next | ||
End Sub | ||
---- | ||
or | ||
[source,vbnet] | ||
---- | ||
Public Sub DoSomething(ByVal strings As List(Of String)) | ||
Dim sb As StringBuilder = New StringBuilder() | ||
sb.Append("Got: ") | ||
For Each str As String In strings | ||
sb.Append(str).Append(", ") | ||
Next | ||
My.Application.Log.WriteEntry(sb.ToString()) | ||
End Sub | ||
---- | ||
|
||
== Exceptions | ||
|
||
No issue is reported when `StringBuilder` is: | ||
|
||
* Accessed through `sb.CopyTo()`, `sb.GetChunks()`, `sb.Length`, or `sb(index)`. | ||
* Passed as a method argument, on the grounds that it will likely be accessed through a `ToString()` invocation there. | ||
* Passed in as a parameter to the current method, on the grounds that the callee will materialize the string. | ||
* Retrieved by a custom function (`Dim sb As StringBuilder = GetStringBuilder()`). | ||
* Returned by the method. |