Result.Analyzers
0.1.2
dotnet add package Result.Analyzers --version 0.1.2
NuGet\Install-Package Result.Analyzers -Version 0.1.2
<PackageReference Include="Result.Analyzers" Version="0.1.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Result.Analyzers" Version="0.1.2" />
<PackageReference Include="Result.Analyzers"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Result.Analyzers --version 0.1.2
#r "nuget: Result.Analyzers, 0.1.2"
#:package Result.Analyzers@0.1.2
#addin nuget:?package=Result.Analyzers&version=0.1.2
#tool nuget:?package=Result.Analyzers&version=0.1.2
Result.Analyzers
Result.Analyzers is a suite of Roslyn analyzers that enforces safe access patterns for result-like types. It prevents runtime exceptions by ensuring that the state of an object is verified before accessing its value or associated errors.
Supported Libraries
The analyzer uses a configuration-driven architecture to support multiple result and option packages.
| Library | Supported Type | Status |
|---|---|---|
| ErrorOr | ErrorOr<T> |
Supported |
| Ardalis.Result | Result<T> |
Planned |
| FluentResults | Result<T> |
Planned |
Support for additional libraries can be added via configuration.
Analyzers
RA001: Unsafe access to Value
Ensures that .Value is accessed only after verifying the result is a success.
var result = GetUser();
return result.Value; // RA001: Unsafe access
if (!result.IsError)
return result.Value; // Safe
RA002: Unsafe access to FirstError
Ensures that .FirstError is accessed only after verifying the result is a failure.
var result = GetUser();
return result.FirstError; // RA002: Unsafe access
if (result.IsError)
return result.FirstError; // Safe
RA003: Unsafe access to Errors
Ensures that .Errors is accessed only after verifying the result is a failure.
var result = GetUser();
return result.Errors; // RA003: Unsafe access
if (result is { IsError: true } failure)
return failure.Errors; // Safe
Features
Result.Analyzers utilizes the Roslyn IOperation tree to provide robust state tracking across various C# constructs:
- Control Flow Analysis: Tracks object state through
if/elseblocks, ternary operators, and early return patterns. - Pattern Matching: Supports property patterns (
is { IsError: false }) and switch expressions. - Logical Expressions: Handles compound conditions such as
if (res.IsSuccess && isValid). - Variable Tracking: Maintains state awareness when check results are stored in local boolean variables.
Installation
Install the package via the .NET CLI:
dotnet add package Result.Analyzers
License
This project is licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 5.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.