Releases: SonarSource/sonar-dotnet
9.1
Release 9.1 brings a set of rules that help users avoid performance pitfalls.
New Rules
- 7132 - [C#] New rule S6618: "string.Create" should be used instead of "FormattableString"
- 7131 - [C#, VB.NET] New rule S6617: "Contains" should be used instead of "Any" for simple equality checks
- 7129 - [C#, VB.NET] New rule S6613: "First" and "Last" properties of "LinkedList" should be used instead of the "First()" and "Last()" extension methods
- 7128 - [C#, VB.NET] New rule S6612: The lambda parameter should be used instead of capturing arguments in "ConcurrentDictionary" methods
- 7127 - [C#, VB.NET] New rule S6610: "StartsWith" and "EndsWith" overloads that take a "char" should be used instead of the ones that take a "string"
- 7126 - [C#, VB.NET] New rule S6609: "Min/Max" properties of "Set" types should be used instead of the "Enumerable" extension methods
- 7125 - [C#, VB.NET] New rule S6608: Indexing should be used instead of "Enumerable" methods on types implementing "IList"
- 7124 - [C#, VB.NET] New rule S6607: The collection should be filtered before sorting by using "Where" before "OrderBy"
- 7123 - [C#, VB.NET] New rule S6605: Collection-specific "Exists" method should be used instead of the "Any" extension
- 7122 - [C#, VB.NET] New rule S6603: The collection-specific "TrueForAll" method should be used instead of the "All" extension
- 7121 - [C#, VB.NET] New rule S6602: "Find" method should be used instead of the "FirstOrDefault" extension
Improvements
- 7197 - [VB.NET] Improve S2302 Message: Use NameOf for VB.NET
- 7133 - [C#] Extend S3260 to include file access modifier on types
Bug Fixes
False Negative
- 2528 - [C#] FPs and FNs in the Symbolic Execution rules when null coalescing is combined with arithmetic expressions because we do not support constraints on integers
9.0
Release 9.0 changes the target framework from net46 to netstandard2.0. Thus the minimal support version is .NET Framework 4.6.2 now.
Thanks to @Corniel for fixing an FP in S2049.
Improvements
- 7095 - Update RSPEC before 9.0 release
- 6028 - Target netstandard2.0 instead of net46
- 4824 - [C#, VB.NET] SE: Update rule activation to be compatible with .editorconfig
False Positive
- 3400 - [C#] Fix S3900 FP: When parameter reassigned from a method
- 2591 - [C#] Fix S3900 FP: Re-assignment of parameters is ignored
- 6972 - [C#] Fix S3900 FP: Ignore parameters with assigned values
- 5729 - [C#] Fix S3900 FP: Recognize ArgumentNullException.ThrowIfNull()
- 6953 - [C#] Fix S2094 FP: Records which set the base record's properties in their initializer
8.56
Release 8.56 is here and it brings a whole lot of improvements. We implemented S3900 and S3655 for VB.NET and at the same time, we also got improvements to the C# versions of S3900, S3655, S2222, and S2259. Special kudos to @Corniel who contributed new rule S5856 and several other enhancements.
New Rules
- 6797 - [VB.NET] New Rule S3900 for VB.NET: Arguments of public methods should be validated against Nothing
- 6795 - [VB.NET] New Rule S3655 for VB.NET: Empty nullable value should not be accessed
- 6691 - [C#, VB.NET] New Rule S5856: Regex literals should be valid by @Corniel
Improvements (S3900, S3655, S2222, and S2259)
- 6794 - [C#] Improve S3655: Support C# 9 and C# 10 syntax
- 6793 - [C#] Improve S3900: Support C# 9 and C# 10 syntax
- 6997 - [C#] Fix S3900: FN and FP
- 7060 - [C#] Fix S3900 FP: Don't raise if parameter is captured
- 2775 - [C#] Fix S3900 FP:
is
is not considered as null-check - 2670 - [C#] Fix S3900 FP: with string.IsNullOrEmpty
- 7004 - [C#] Fix S3900: Change parameter dereference check to top-down
- 6682 - [C#] Fix S3655 FP: HasValue checked with Pattern matching
- 4250 - [C#] Fix S2259 FP: Lifted operator results in null value in value type comparison
- 6994 - [C#, VB.NET] Fix S2222: Branch on
createdNew
parameter on Mutex constructor - 6840 - [C#, VB.NET] Fix S2259 FP/FN: Do not raise on Nullable members
- 6241 - [C#, VB.NET] Fix S2259 FP:
is null
check on generic type - 6930 - [C#, VB.NET] Fix S2259 FN: Auto-Properties don't learn ObjectConstraint
- 6898 - [C#, VB.NET] Fix S2259 FN: Raise on fields and events
- 7048 - [VB.NET] Fix S2259 FP:
ValidatedNotNullAttribute
in extension method - 7047 - [VB.NET] Fix S3900 FP: Recognize VB extensions
- 6991 - [VB.NET] Fix S3655 FN: VB implicit conversions
Other improvements
- 6899 - Update RSPEC
- 6910 - Fix S2094 FP: Allow to have empty classes, used as generic parameter
- 6878 - [C#] Fix S1168 FP: Does not respect nullable annotations by @Corniel
- 6890 - [C#, VB.NET] Fix S1123 FN: The explanation should not be null or whitespace by @Corniel
@Corniel contributions
8.55
This version contains the prerequisite to support sonar.exclusions
, sonar.inclusions
, sonar.global.exclusions
, sonar.test.exclusions
, sonar.test.inclusions
and sonar.global.test.exclusions
parameters when the analysis is run inside SonarLint for Visual Studio. Stay tuned, the second and final part of the feature will be implemented soon by the SonarLint team.
In the meantime, if you are wondering what these parameters are, you can find more information about them in our documentation.
- 6877 - Support exclusion and inclusion parameters when run by SonarLint
New Rules
- 6885 - [C#, VB.NET] ExcludeFromCodeCoverage attributes should include a justification
Special thanks to @Corniel for implementing this new rule!
Improvements
- 6798 - Update RSPEC before 8.55 release
False Positive
8.54
In this release we added six code structure and best practice rules.
Thank you @teo-tsirpanis, for contributing #6580
New Rules
- 6706 - [C#] New Rule S3398: "private" methods called only by inner classes should be moved to those classes
- 6704 - [C#] New Rule S2094: Classes should not be empty
- 6703 - [C#, VB.NET] New Rule S4545: "DebuggerDisplayAttribute" strings should reference existing members
- 6701 - [C#] New Rule S2445: Blocks should be synchronized on read-only fields
- 6662 - [C#] New rule S2970: Assertions should be complete
- 6854 - [C#] New rule S6507: Blocks should not be synchronized on local variables
Improvements
- 6763 - Update RSPEC before 8.54 release
- 6761 - Improve Rule S2223: cleanup and performance
- 6678 - Report deprecation analysis warning for MsBuild 14/15
Performance
- 6785 - Performance: Token Type Utility Analyzer: Avoid allocations
Bug Fixes
- 6766 - [C#] Old SE: Handle unsupported syntax gracefully
False Positive
False Negative
8.53
New Rules
- 6658 - [C#] New rule S2198: Silly mathematical comparisons should not be made
- 6705 - [C#, VB.NET] New rule S2166: Classes named like "Exception" should extend "Exception" or a subclass
- 6663 - [C#, VB.NET] New rule S4663: Comments should not be empty
- 6659 - [C#, VB.NET] New rule S3063: "StringBuilder" data should be used
- 6657 - [C#, VB.NET] New rule S3878: Arrays should not be created for params parameters
- 6656 - [C#, VB.NET] New rule S1133: Deprecated code should be removed
Improvements
- 6676 - Update RSPEC before 8.53 release
- 6634 - Enable Incremental Analysis ITs
- 6521 - [C#] Improve S1244: Add message to use "IsX" instead of "== double.X"
- 6331 - [C#] Improve S3927: Interfaces should be excluded
- 6321 - [C#] Improve S1144: Highlight only the identifier name
False Positive
8.52
@Corniel: Thank you for implementing S3898 for VB.NET!
New Rules
Improvements
- 6638 - Rename S3866 to DoNotUseIIf
- 6636 - [C#] Update S4018: Improve rule message
- 6605 - Bump sonar-plugin-api from 9.13.0.360 to 9.14.0.375
- 6602 - Add clean code as a tag on our nuget packages
- 6573 - Fix ProjectOutFolderPath processing
- 6571 - Update RSPEC before 8.52 release
- 6532 - Refactor SonarAnalysisContext
- 6511 - Remove useless package references
- 6488 - [C#] Merge rule S4214 onto S4200
- 6132 - [C#] Remove S4457 from SonarWay
Bug Fixes
- 6612 - [C#] Fix S3353: Add support for different function types
- 6598 - Incremental PR analysis fails for SQ < 9.4
False Positive
- 6449 - [C#] Fix S4457 FP: When argument check is after async code
- 5879 - [C#] Fix S2930 FP: Recognize IAsyncDisposable
False Negative
8.51
Hello everyone,
We are happy to announce that in this release we implemented Incremental PR analysis for C# and Vb.Net, a feature that can significantly reduce the analysis time when analyzing PRs.
Additionally, we fixed false positives and negatives introduced by the new C# 11 syntax and introduced a new rule #5693
Special thanks to our contributors @Corniel for #5693 and @Smenus for #6497.
New features
Incremental PR analysis (#6514, #6512, #6487, #6486, #6485, #6484, #6483)
New rules
Improvements
False Positive
- 6497 - [C#] Fix S2699 FP: Support derivations of ExpectedExceptionBaseAttribute for MsTest
- 6476 - [C#, VB.NET] Fix FNs/FPs: Add support for LibraryImportAttribute
- 6429 - [C#] Fix S1067 FP: Conditionals in pattern should not be considered as a unit for the whole pattern
False Negative
- 6517 - [C#] Fix S2674 FN: Add support for ConfigureAwait
- 6481 - [C#] Fix S2674 FN: Add support for Stream.ReadAtLeast
- 6441 - Fix S2302 FN: Issue is not raised when the name of one of the method parameters is a raw string literal
- 6423 - [C#] Fix S1244 FN: Half, NFloat, and IFloatingPointIeee754 are not supported
- 6399 - Fix S2201 FN: Support native ints
- 6394 - Fix S2068 FN: Support utf-8 string literals
- 6393 - Fix S1168 FN: Support mathematical operators in generic types
- 6387 - Fix S3267 FN: Support list pattern
- 6386 - Fix S3444 FN: Support static methods in interfaces
- 6164 - Fix S4426 FN: On .Net 7 when using ECDsaOpenSsl
8.50
Hi everyone,
This release brings you the second fragment of C# 11 support in our Sonarway rules. It fixes false negatives that were caused by the new C# 11 syntax. Look out for new releases as soon we will start adding C# 11 support to our non-sonarway rules.
Special thanks to @Corniel for implementing a new VB.NET rule, and also for adding a new codefix provider.
New Rules
- 6459 - [VB.NET] Implement S1123 - Obsolete attributes need explanation - for VB.NET
- 6043 - [C#] Add code fix for S3353: Unchanged local variables should be const
Improvements
False Negative
- 6434 - Fix S3433 FN: Support derived attributes
- 6397 - Fix S1607 FN: Support derived attributes
- 6392 - Fix S3456 FN: Support utf-8 literals
- 6388 - [C#] Fix S3218 FN: Support interfaces
- 6385 - Fix S2190 FN: Support mathematical operators in generic types
- 6383 - Fix S5122 FN: Support raw string literals interpolation
- 6378 - Fix S1117 FN: Support list patterns
- 6377 - Fix S1481 FN: Support list patterns
- 6376 - Fix S1313 FN: Support utf-8 literals
8.49
Hi everyone,
This release brings you the first fragment of C# 11 support in our Sonarway rules. It fixes a nice number of false positives and false negatives that were caused by the new C# 11 syntax. Look out for new releases as we will continue working on our C# 11 syntax support.
Special thanks to @Corniel for his contribution: #6279.
New Rules
Improvements
Bug Fixes
False Positive
- 6313 - Fix S2933 FP: Support unsigned right-shift operator (>>>)
- 6312 - Fix S3875 FP: Do not raise an issue when implementing IEqualityOperators interface
- 6311 - Fix S3927 FP: Support static abstract/virtual interface methods
- 6307 - Fix S2225 FP: Support static virtual/abstract interface methods
- 6302 - Fix S1854 FP: Support newlines in string interpolation
- 6301 - Fix S1854 FP: Support interpolated raw string literals
False Negative
- 6309 - Fix S6419 FN: Support unsigned right-shift operator (>>>)
- 6308 - Fix S1121 FN: Support unsigned right-shift operator (>>>)
- 6304 - Fix S2696 FN: Support unsigned right-shift operator (>>>)
- 6303 - Fix S3010 FN: Support unsigned right-shift operator (>>>)
- 6299 - Fix S4790 FN: Support multi-line string interpolation
- 6298 - Fix S4790 FN: Support raw string literals
- 6297 - Fix S5332 FN: Support utf-8 string literals
- 6296 - Fix S2934 FN: Support unsigned right shift operator (>>>)
- 6295 - Fix S3060 FN: Support list patterns
- 6294 - Fix S2183 FN: Support unsigned right-shift operator (>>>)
- 6293 - Fix S2115 FN: Support multi-line string interpolation inside a raw string literal
- 6292 - Fix S2479 FP: Ignore raw string literals
- 6291 - Fix S2479 FN: Support utf-8 strings
- 6290 - Fix S2479 FN: Support raw string literals with interpolation
- 6289 - S2688 FN: Do not raise for IsExpression since it works as expected
- 6288 - Fix S1118 FN: Support static abstract/virtual interface implementation classes
- 6287 - Fix S3247 FN: Support list patterns
- 5744 - Fix S4456/S4457 FN: Recognize ArgumentNullException.ThrowIfNull()