Skip to content

Feature Release (RC1)

Pre-release
Pre-release
Compare
Choose a tag to compare
@michael-damatov michael-damatov released this 17 Jan 22:35
835ce82

New Features

  • Advanced disposable object analysis built around the [MustDisposeResource] and [HandlesResourceDisposal] annotations.
    • Disposable type should now be annotated with the [MustDisposeResource], which is inherited by derived types. Disposable ref structs cannot implement interfaces, their constructors (as well as primary constructors) should now be annotated with the [MustDisposeResource].
    • In rare cases, some disposable objects should not be disposed, such types should be annotated with the [MustDisposeResource(false)], which is not inherited by derived types.
    • Methods returning disposable objects should also be annotated with the [MustDisposeResource], which is inherited by derived types.
    • As with types, methods returning disposable objects that aren't intended to be disposed, should be annotated with the [MustDisposeResource(false)], which is not inherited by derived types.
    • The same also applies to out parameters.
    • The [Pure], [MustUseReturnValue], and [MustDisposeResource] annotations cannot be applied at the same time.
    • New warning when an overridden method changes its return type, which becomes disposable.
    • New context action to apply the [HandlesResourceDisposal] annotation.
  • Collection expressions (require C# 12)
    • Suggests replacing target-typed empty arrays (incl. Array.Empty<T>() expressions) with the empty collection expression [].
    • Suggests more cases to use collection expression, e.g. when the target type is IEnumerable<T>, but an array or List<T> is constructed.
    • Suggests using empty collection expression [] when new empty collection objects are created and the target type is the collection type.
  • New warning that an [AttributeUsage] annotations are missing on attribute classes (with a quick fix to apply the annotation).
  • New context action to apply the [IgnoreSpellingAndGrammarErrors] annotation
  • Equality analyzers
    • New warning when a struct overrides the Equals without implementing the IEquatable<T> interface.
    • New warning when a type implements the IEquatable<T> interface without overriding the Equals method.
    • New suggestion to implement the IEqualityOperators<T, T, bool> interface when the IEquatable<T> interface is implemented (with a quick fix). Records automatically implement the IEquatable<T> interface and provide the equality operators. The analyzer requires .NET 7 or higher.
    • New suggestion to implement the IComparisonOperators<T, T, bool> interface when the IComparable<T> interface is implemented (with a quick fix). The analyzer requires .NET 7 or higher.

Improved

  • Analyzer that suggests replacing array made out of default values (new T[] { default, default }) with the new T[n] expression now supports collection expressions.
  • Analyzer that detects redundant captured context now supports the overloaded ConfigureAwait method introduced in .NET 8.0.
  • Context actions to apply [LinqTunnel], [NonNegativeValue], and [ValueRange(...)] now support local functions

Known Issues

  • Async methods that return disposable objects should be annotated with the [MustUseReturnValue]. Annotating them with [MustDisposeResource] is not supported by ReSharper yet. The issue is reported to the ReSharper team.