Tenekon.MethodOverloads.SourceGenerator
0.0.5
Prefix Reserved
dotnet add package Tenekon.MethodOverloads.SourceGenerator --version 0.0.5
NuGet\Install-Package Tenekon.MethodOverloads.SourceGenerator -Version 0.0.5
<PackageReference Include="Tenekon.MethodOverloads.SourceGenerator" Version="0.0.5" />
<PackageVersion Include="Tenekon.MethodOverloads.SourceGenerator" Version="0.0.5" />
<PackageReference Include="Tenekon.MethodOverloads.SourceGenerator" />
paket add Tenekon.MethodOverloads.SourceGenerator --version 0.0.5
#r "nuget: Tenekon.MethodOverloads.SourceGenerator, 0.0.5"
#:package Tenekon.MethodOverloads.SourceGenerator@0.0.5
#addin nuget:?package=Tenekon.MethodOverloads.SourceGenerator&version=0.0.5
#tool nuget:?package=Tenekon.MethodOverloads.SourceGenerator&version=0.0.5
Tenekon.MethodOverloads.SourceGenerator
A C# source generator that creates combinatorial extension method overloads by treating a selected parameter window as optional and emitting legal, unique subsequences.
Quickstart
- Mark a method with
[GenerateOverloads]or a type with[GenerateMethodOverloads(Matchers = ...)]. - (Optional) Add
[OverloadGenerationOptions(...)]to control matching and output. - Build the project. Generated overloads appear in
MethodOverloads_<Namespace>.g.cs.
MSBuild options
Emit attributes only (skip overload generation):
<PropertyGroup>
<TenekonMethodOverloadsSourceGeneratorAttributesOnly>true</TenekonMethodOverloadsSourceGeneratorAttributesOnly>
</PropertyGroup>
Examples
A) GenerateOverloadsAttribute
Input:
namespace Demo;
using Tenekon.MethodOverloads.SourceGenerator;
public sealed class Calculator
{
[GenerateOverloads(Begin = nameof(unit))]
public void Add(int value, string? unit, bool useRounding) { }
}
Output:
namespace Demo;
public static class MethodOverloads
{
public static void Add(this Calculator source, int value) =>
source.Add(value, unit: default(string?), useRounding: default(bool));
public static void Add(this Calculator source, int value, string? unit) =>
source.Add(value, unit, useRounding: default(bool));
public static void Add(this Calculator source, int value, bool useRounding) =>
source.Add(value, unit: default(string?), useRounding);
}
B) Method-level matcher
Input:
namespace Demo;
using Tenekon.MethodOverloads.SourceGenerator;
public sealed class Customer
{
[GenerateOverloads(Matchers = [typeof(CustomerMatcher)])]
public void Update(string name, int loyaltyLevel, bool isActive) { }
}
internal interface CustomerMatcher
{
[GenerateOverloads(nameof(paramB))]
void Update(int paramA, bool paramB);
}
Output:
namespace Demo;
public static class MethodOverloads
{
public static void Update(this Customer source, string name, int loyaltyLevel) =>
source.Update(name, loyaltyLevel, isActive: default(bool));
}
C) Type-level matcher (static target)
Input:
namespace Demo;
using Tenekon.MethodOverloads.SourceGenerator;
[GenerateMethodOverloads(Matchers = [typeof(MathMatchers)])]
public static class MathUtils
{
public static void Multiply(int left, int right, bool checkedOverflow) { }
}
internal interface MathMatchers
{
[GenerateOverloads(nameof(paramB))]
void Multiply(int paramA, bool paramB);
}
Output:
namespace Demo;
public static class MethodOverloads
{
extension(MathUtils)
{
public static void Multiply(int left, int right) =>
MathUtils.Multiply(left, right, checkedOverflow: default(bool));
}
}
Key behavior
- Generates overloads from a contiguous optional window of parameters.
- Omits only legal subsets (no ref/out/in removal).
- Dedupes by signature and never duplicates existing overloads.
See docs/generator.md for full behavior and rules.
| 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
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Tenekon.MethodOverloads.SourceGenerator:
| Package | Downloads |
|---|---|
|
Tenekon.CommandLine.Extensions.PolyType
An extension to System.CommandLine using PolyType: attribute-driven CLI definitions with fast, strongly-typed (trimming/aot-friendly) binding. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.0.5 | 110 | 2/6/2026 |
| 0.0.5-rc.18 | 39 | 2/6/2026 |
| 0.0.5-rc.17 | 41 | 2/6/2026 |
| 0.0.5-rc.15 | 39 | 2/5/2026 |
| 0.0.5-rc.14 | 37 | 2/5/2026 |
| 0.0.5-rc.13 | 47 | 2/5/2026 |
Initial public release. Generates combinatorial extension method overloads from a marked optional parameter window, dedupes signatures, and avoids invalid overloads.