ErrorProne.NET is a set of Roslyn-based analyzers that will help you to write correct code. The idea is similar to Google's error-prone but instead of Java, the analyzers are focusing on correctness (and, maybe, performance) of C# programs.
Add the following nuget package to you project: https://www.nuget.org/packages/ErrorProne.NET.CoreAnalyzers/
Id | Description |
---|---|
EPC14 | ConfigureAwait(false) call is redundant |
EPC15 | ConfigureAwait(false) must be used |
EPC16 | Awaiting a result of a null-conditional expression will cause NullReferenceException |
EPC17 | Avoid async-void delegates |
EPC18 | A task instance is implicitly converted to a string |
EPC26 | Do not use tasks in using block |
EPC27 | Avoid async void methods |
EPC31 | Do not return null for Task-like types |
EPC32 | TaskCompletionSource should use RunContinuationsAsynchronously |
EPC33 | Do not use Thread.Sleep in async methods |
EPC35 | Do not block unnecessarily in async methods |
EPC36 | Do not use async delegates with Task.Factory.StartNew and TaskCreationOptions.LongRunning |
EPC37 | Do not validate arguments in async methods |
Id | Description |
---|---|
EPC19 | Observe and Dispose a 'CancellationTokenRegistration' to avoid memory leaks |
EPC20 | Avoid using default ToString implementation |
EPC28 | Do not use ExcludeFromCodeCoverage on partial classes |
EPC29 | ExcludeFromCodeCoverageAttribute should provide a message |
EPC30 | Method calls itself recursively |
ERP041 | EventSource class should be sealed |
ERP042 | EventSource implementation is not correct |
Id | Description |
---|---|
ERP031 | The API is not thread-safe |
Id | Description |
---|---|
EPC11 | Suspicious equality implementation |
EPC12 | Suspicious exception handling: only the 'Message' property is observed in the catch block |
EPC13 | Suspiciously unobserved result |
EPC34 | Method return value marked with MustUseResultAttribute must be used |
ERP021 | Incorrect exception propagation |
ERP022 | Unobserved exception in a generic exception handler |
Id | Description |
---|---|
EPC23 | Avoid using Enumerable.Contains on HashSet |
EPC24 | A hash table "unfriendly" type is used as the key in a hash table |
EPC25 | Avoid using default Equals or HashCode implementation from structs |