Nuget packge: https://www.nuget.org/packages/SmartAnalyzers.CSharpExtensions.Annotations/
Articles that explain implemented concepts:
- Immutable types in C# with Roslyn
 - Improving non-nullable reference types handling
 - Twin types - properties synchronization without inheritance
 - Pure functions and unused return values
 
| Rule | Description | Related attributes | Documentation | 
|---|---|---|---|
| CSE001 | Required properties initialization | [InitRequired], [InitRequiredForNotNull] | 
link | 
| CSE002 | InitOnly member modification | [InitOnly], [InitOnlyOptional] | 
link | 
| CSE003 | Type should have the same fields as twin type | [TwinType] | 
link | 
| CSE004 | Member with InitOnlyOptional requires default value | [InitOnlyOptional] | 
|
| CSE005 | Return value unused | link | |
| CSE006 | Expression too complex | ||
| CSE007 | Return disposable value unused | Same as SE005 but tracks only IDisposable and IAsyncDisposable values | 
|
| CSE008 | Return async result unused | Same as SE005 but tracks only IAsyncResult (Task, ValueTask) values | 
|
| CSE009 | Task variable not awaited | Check if task stored in a variable is awaited | 
Add CSharpExtensions.json file with custom configuration:
{
  "CSE005": {
    "IgnoredReturnTypes": [ 
        "Microsoft.Extensions.DependencyInjection.IServiceCollection",
        "Microsoft.Extensions.Configuration.IConfigurationBuilder",
        "Microsoft.Extensions.Logging.ILoggingBuilder"
        ] 
  } 
}Include config file as AdditionalFile in csproj:
<ItemGroup>
    <AdditionalFiles Include="CSharpExtensions.json" />
</ItemGroup>Step 1: Configure CSharpExtensions to report CSE001 even when constructor invocation is present
{
  "CSE001": {
    "SkipWhenConstructorUsed":  false 
  } 
}Step 2: Execute "Try to move initialization from constructor to init block" CodeFix for CSE001 occurrences.
Init-related attributes vs init keyword (C# 9+ feature)
| Feature | Required in init block | Can be modified outside init block | Application level | 
|---|---|---|---|
init keyword | 
NO | NO | Property | 
[InitRequired] | 
YES | YES | Property. Class | 
[InitOnly] | 
YES | NO | Property. Class | 
[InitOnlyOptional] | 
NO | NO | Property. Class | 
[InitRequiredForNotNull] | 
YES for non-null references and not Nullable<T> | 
YES | assembly | 
