OmniNet.SourceGenerators.Core
0.1.1
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package OmniNet.SourceGenerators.Core --version 0.1.1
NuGet\Install-Package OmniNet.SourceGenerators.Core -Version 0.1.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OmniNet.SourceGenerators.Core" Version="0.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OmniNet.SourceGenerators.Core" Version="0.1.1" />
<PackageReference Include="OmniNet.SourceGenerators.Core" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OmniNet.SourceGenerators.Core --version 0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: OmniNet.SourceGenerators.Core, 0.1.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OmniNet.SourceGenerators.Core@0.1.1
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OmniNet.SourceGenerators.Core&version=0.1.1
#tool nuget:?package=OmniNet.SourceGenerators.Core&version=0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
OmniNet.SourceGenerators.Core
A core library providing helpers and builders for creating C# source generators with ease.
Installation
dotnet add package OmniNet.SourceGenerators.Core
Features
- SourceBuilder - Fluent API for generating C# source code files
- TypeBuilder - Builder for generating type members (properties, etc.)
- PropertyBuilder - Builder for generating properties with modifiers, accessors, and attributes
- OpeningTypeBuilder - Builder for generating type declarations with modifiers
- IncrementalSymbolValuesProvider - Helper for creating incremental source generators
- SourceGeneratorProvider - Provider for accessing generated attributes stored as assembly resources
Quick Start
1. Define your generator attribute
Create an attribute class in an Attributes folder in your generator project:
[AttributeUsage(AttributeTargets.Class)]
public sealed class MyGenerateAttribute : Attribute { }
2. Create your incremental generator
using OmniNet.SourceGenerators.Core;
[Generator]
public class MyGenerator : IIncrementalGenerator
{
private static readonly IGeneratorAttribute _attribute =
SourceGeneratorProvider.GetAttribute<MyGenerateAttribute>();
public void Initialize(IncrementalGeneratorInitializationContext context)
{
// Register the attribute source code
context.RegisterPostInitializationOutput(ctx => ctx.AddSource(_attribute));
// Find all classes with the attribute
var items = context.SyntaxProvider
.ForTypeWithAttribute(_attribute)
.Transform((symbol, attributes, ct) => symbol);
context.RegisterSourceOutput(items, GenerateSource);
}
private static void GenerateSource(SourceProductionContext context, ITypeSymbol typeSymbol)
{
var sb = new SourceBuilder();
using var type = sb
.AppendFileNamespace(typeSymbol.ContainingNamespace)
.BuildClass(typeSymbol.Name)
.WithAccessibility(typeSymbol.DeclaredAccessibility)
.WithPartial()
.Append()
.AppendOpenType();
// Add properties using PropertyBuilder
type.BuildProperty(compilation.GetSpecialType(SpecialType.System_String), "GeneratedProperty")
.WithAccessibility(Accessibility.Public)
.WithImplicitGetter()
.WithImplicitSetter()
.Append();
sb.AddToContext(context, typeSymbol);
}
}
API Reference
SourceBuilder
Entry point for generating source code files.
var sb = new SourceBuilder();
// Add file-scoped namespace
sb.AppendFileNamespace(namespaceSymbol);
// Start building a class or interface
sb.BuildClass("MyClass");
sb.BuildInterface("IMyInterface");
// Add generated source to compilation
sb.AddToContext(context, typeSymbol);
sb.AddToContext(context, namespaceSymbol, "FileName", "suffix");
OpeningTypeBuilder
Configures type declaration with modifiers.
sb.BuildClass("MyClass")
.WithAccessibility(Accessibility.Public)
.WithPartial()
.Append() // Returns TypeInheritanceBuilder
.AppendOpenType(); // Returns TypeBuilder
TypeBuilder
Generates type members.
using var type = /* ... */.AppendOpenType();
type.BuildProperty(propertyType, "PropertyName")
.WithAccessibility(Accessibility.Public)
.WithImplicitGetter()
.WithImplicitSetter()
.Append();
PropertyBuilder
Configures property generation with full control over modifiers and accessors.
type.BuildProperty(typeSymbol, "Name")
.WithAccessibility(Accessibility.Public)
.WithRequired() // required modifier
.WithNew() // new modifier
.WithVirtual() // virtual modifiers (or WithOverride, WithAbstract)
.WithImplicitGetter() // { get; }
.WithImplicitSetter(initOnly: true) // { init; }
.WithInheritDoc(baseType, "PropertyName") // inheritdoc
.WithAttributes(attributeDataArray) // copy attributes
.Append();
SourceGeneratorProvider
Provides access to attributes embedded as assembly resources.
// Get handle to generated attribute
IGeneratorAttribute attribute = SourceGeneratorProvider.GetAttribute<MyAttribute>();
// Use in post-initialization
context.RegisterPostInitializationOutput(ctx => ctx.AddSource(attribute));
// Use for finding attributed symbols
context.SyntaxProvider.ForAttributeWithMetadataName(attribute.TypeFullName, ...);
Extension Methods
// Add attribute source to context
context.AddSource(generatorAttribute);
// Create provider for types with attribute
syntaxProvider.ForTypeWithAttribute(attribute);
// Check if namespace is global
namespaceSymbol.IsGlobal();
namespaceSymbol.IsNotGlobal();
Requirements
- .NET Standard 2.0 compatible
- Microsoft.CodeAnalysis.CSharp
License
MIT License - see LICENSE for details.
| 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.