Roslyn-based C# code analyzers used on Faithlife source code.
The simplest way to use the latest Faithlife analyzers is to add a global package reference to your Directory.Packages.props:
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageFloatingVersionsEnabled>true</CentralPackageFloatingVersionsEnabled>
</PropertyGroup>
<ItemGroup>
<GlobalPackageReference Include="Faithlife.Analyzers" Version="1.*" />
</ItemGroup>You don't need to enable floating versions if you specify a specific version.
If you're not using central package management, add a PackageReference to each .csproj:
<ItemGroup>
<PackageReference Include="Faithlife.Analyzers" Version="1.2.0" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers" />
</ItemGroup>To disable a particular analzyer, add a line to your .editorconfig under [*.cs]. For example:
[*.cs]
dotnet_diagnostic.FL0009.severity = none
| ID | Description |
|---|---|
| FL0001 | AsyncWorkItem.Current must only be used in methods that return IEnumerable<AsyncAction> |
| FL0002 | Optional StringComparison arguments must always be specified |
| FL0003 | UntilCanceled() may only be used in methods that return IEnumerable<AsyncAction> |
| FL0004 | Use operator== or a non-ordinal StringComparison |
| FL0005 | Avoid ToReadOnlyCollection in constructors |
| FL0006 | Optional IComparer<string> arguments must always be specified |
| FL0007 | Avoid $ in interpolated strings |
| FL0008 | WorkState.None and WorkState.ToDo must not be used when an IWorkState is available |
| FL0009 | Prefer "" over string.Empty |
| FL0010 | Prefer modern language features over IfNotNull |
| FL0011 | GetOrAddValue should not be used with ConcurrentDictionary |
| FL0012 | DbConnector.Command should not be used with an interpolated string |
| FL0013 | Do not use Uri.ToString() |
| FL0014 | Interpolated strings should not be used without interpolation |
| FL0015 | Prefer null-conditional operators over ternaries |
| FL0016 | Verbatim strings should only be used with certain special characters |
| FL0017 | Do not use a switch expression on a constant value |
| FL0018 | Prefer string interpolation over FormatInvariant |
| FL0019 | Local Functions as Event Handlers |
| FL0020 | Lambda Expressions as Event Handlers |
| FL0021 | Use null propagation |
| FL0022 | Use AsyncMethodContext.WorkState |
| FL0023 | Replace obsolete Logos.Common.Logging.Extensions extension methods |
| FL0024 | Lambda operators should end the previous line |
| FL0025 | Private fields should be defined last |
| FL0026 | Use InvariantConvert |
- Improve the documentation in the docs/ directory, especially by adding rationale for rules or instructions for how to choose between multiple fixes.
- Suggest new analyzers by opening an issue. Please add the
new analyzerlabel. - Vote for analyzers you would find particularly helpful by adding a 👍 reaction.
- Implement a new analyzer from this list of the most popular.