Repository navigation
Release notes - .NET Analyzers - 10.36
Two months since 10.35, and the nets have been busy. We went fishing for false positives and landed over twenty, and we caught a crash and a memory leak along the way. We kept the new rules and stopped throwing back the good code fixes.
What's in the catch:
- 🔮 .NET 11 / C# 15 readiness: we support the new language features (union types, closed hierarchies, extension indexers, collection expression
with(...)arguments, labeledbreak/continue). We probed the SonarWay rules against them and fixed false positives that turned up. - 🆕 Three new rules: S9414, S9415 and S9422.
- 🛠️ Better code fixes: S2178 and S1110, plus a faster, leak-free S110.
- 🎯 23 false positives gone, including EF
Includerules,async/CancellationTokenrules and MAUI/WPF handlers.
Feature
NET-1612 Fix S2178 CodeFix: Using short-circuiting operator does not preserve operator precedence
NET-2154 Use Roslyn location mapping capabilities
NET-4654 Create rule S9414: Local variable declarations and assignments should be joined
NET-4655 Create rule S9415: Local functions should be marked "static" when they don't capture variables
NET-4662 Create rule S9422: Lock object fields should use "System.Threading.Lock" type
False Positive
NET-1596 Fix S5332 FP: Don't raise http warning for SOAP actions
NET-2677 Fix S2325 FP: WPF event handlers should be ignored
NET-2937 Fix S2325 FP: Awaitable 'IsCompleted' must be instanced
NET-3295 S6664: Exclude TRACE-level logging calls
NET-4142 Fix S2187, MSTEST0016 FP: Test methods hidden behind #if NET are not seen on other target frameworks
NET-4633 Fix S9023 FP: Select() projector calling an opaque custom mapper is treated as dropping every Included navigation
NET-4640 Fix S2325 FP: MAUI event handlers should be ignored
NET-4671 Fix S1121 FP: Boolean assignments in while conditions
NET-4705 Fix S8949 FP: obsolete CancellationToken overloads are considered as alternatives
NET-4710 Fix S8969 FP: null-forgiving operator flagged as redundant when operand flows through a nullable-returning implicit conversion operator
NET-4733 Fix S6966 FP: EditorBrowsable(Never) overload is suggested as an awaitable alternative
NET-4737 Fix S9022 FP: Include reported redundant via ReportReprojectedIncludes before a materializing (Func<>) terminal operator
NET-4738 Fix S9022 FP: ToDictionary(Async)/ToLookup key selector ignored when checking whether Include is dead
NET-4739 Fix T0015 FP: Local function last in a lambda or nested local function
NET-4742 Fix FP S8949: Suppress suggestion when the producer call is already configured via WithCancellation/ConfigureAwait
NET-4818 Fix S4507 FP: Alerting on !app.Environment.IsProduction()
NET-4836 Fix S4049 FP: Should not raise on Extension Properties
NET-4837 Fix S4049 FP: Should not raise on awaiter GetResult
NET-4842 Fix S3900 FP: C# 15 Extension Indexers should not raise
NET-4913 Fix S3346 FP: .NET 11 BitArray.PopCount in Debug.Assert should not be reported
NET-4916 Fix S3903 FP: C# 15 types nested in a union should not be reported
NET-4938 Fix S3260 FP: C# 15 closed classes should not be suggested for sealing
NET-5034 Fix S3263 FP: C# 15 union static field referencing another static field in the same union is always misreported as out of order
False Negative
NET-4741 Fix S9022 FN: Include not reported redundant before Max/Min when selector dereferences the included nav
Bug
NET-4547 S110 recompiles filteredClasses regexes on every compilation start, leaking IL on .NET Framework
NET-4629 Fix ChangeSyntaxElement to replace on the container
NET-4686 S1110: Restore C# quick-fix support for nested expressions
NET-4794 Consider .NET 11 Razor declaration partials generated code
NET-4895 Fix S5332 Crash: C# 15 collection expressing a clear-text URL throws AD0001