A series of analyzers, attributes, and libraries to help C# developers write clearer, more type-safe code.
Core StaticCs package: https://www.nuget.org/packages/StaticCS
The [Closed] attribute is used to simulate discriminated unions or "complete" enums. It can be applied to enums, classes, or records that meet certain requirements. The effect is that when you use a Closed type as the argument to a switch expression, if all cases are checked inside the arms of the switch, the "incompleteness" warning that is normally produced by the C# compiler will be suppressed.
Example:
Enums:
[Closed]
public enum CardSuit {
Spade,
Club,
Heart,
Diamond
}
int SuitsToInt(CardSuit suit) => switch {
CardSuit.Spade => 0,
CardSuit.Club => 1,
CardSuit.Heart => 2,
CardSuit.Diamond => 3
// No warning about switch incompleteness
};Records:
[Closed]
public abstract record CardSuit {
private CardSuit() { }
public record Spade() : CardSuit;
public record Club() : CardSuit;
public record Heart() : CardSuit;
public record Diamond() : CardSuit;
}
int SuitsToInt(CardSuit suit) => switch {
CardSuit.Spade => 0,
CardSuit.Club => 1,
CardSuit.Heart => 2,
CardSuit.Diamond => 3
// No warning about switch incompleteness
};https://www.nuget.org/packages/StaticCS.Async
A library for structured concurrency in C#. See the Async README.md for more info.
An analyzer that pins a project's public API surface using .cssig files — ordinary C# member
declarations with no bodies. The analyzer enforces that the project's public API exactly matches the
declared signatures, in both directions (like the Roslyn Public API analyzer, but using real C#
instead of a flat text format). See the CsSig README.md for more info.