SourceGeneratorUtils 1.2.0
dotnet add package SourceGeneratorUtils --version 1.2.0
NuGet\Install-Package SourceGeneratorUtils -Version 1.2.0
<PackageReference Include="SourceGeneratorUtils" Version="1.2.0" />
<PackageVersion Include="SourceGeneratorUtils" Version="1.2.0" />
<PackageReference Include="SourceGeneratorUtils" />
paket add SourceGeneratorUtils --version 1.2.0
#r "nuget: SourceGeneratorUtils, 1.2.0"
#:package SourceGeneratorUtils@1.2.0
#addin nuget:?package=SourceGeneratorUtils&version=1.2.0
#tool nuget:?package=SourceGeneratorUtils&version=1.2.0
SourceGeneratorUtils

<p align="center">An essential library equipped with utility functions and helpers to aid in writing source files for source generators or for general purposes.</p>
Context and goals
In my journey of implementing source generators, I noticed recurrent similarities in each project. Handling source generation on nested types, for example, appeared frequently. Rewriting this logic on every source generator felt redundant and time-consuming, prompting me to abstract and manage most of these routine writing tasks. Hence, SourceGeneratorUtils was created.
The main objective is to enable developers to dive straight into writing the code necessary for their source generators, instead of handling the boilerplate writing logic for namespaces, containing types etc.. With SourceGeneratorUtils, users can supply an instance of ITypeSpec that could be mapped from Roslyn's ISymbol (for source generators) or some parsed files with type definitions (for general purpose). Users can then focus on implementing CSharpSourceBlockWriter<TDescriptor> with logic specific to the target code to generate.
Installation
NuGet Releases 
This package can be found on nuget.org:
> dotnet add package SourceGeneratorUtils
CI Builds 
For those who want to utilize builds from this repository's main branch, install them from the NuGet Github Package Registry using this repo's package feed. You'll need your own Github Personal Access Token (PAT) in order to access the registry. For information on obtaining your PAT, see the Working with the NuGet registry article.
- At the command line, navigate to your user profile directory and run the following command to add the package feed to your NuGet configuration, replacing the
<GITHUB_USER_NAME>and<PERSONAL_ACCESS_TOKEN>placeholders with the relevant values:> dotnet nuget add source -n GitHub -u <GITHUB_USER_NAME> -p <PERSONAL_ACCESS_TOKEN> https://nuget.pkg.github.com/thenameless314159/index.json - You should now be able to add a reference to the package specifying a version from the repository packages feed
What's Included?
This library provides a variety of types that help the conception of source generation logic :
SourceWriter- A minimal wrapper over StringBuilder, it handles indentation in a straightforward manner.SourceBuilder- Another thin wrapper, this time over a dictionary, to store generated source files and export them to disk. The following type can populate it:SourceFileEmitterBase<TSpec>- Encapsulates all the necessary logic to write a C# source file ready for compilation. This is the main abstraction that users should implement to write their own source generation logic.SourceCodeEmitter<TSpec>- An abstraction that allows developers to break down their source generation logic into smaller components. It is used bySourceFileEmitter<TSpec>to write the source file.SourceFileEmitterOptions- A simple class that holds options for source file generation within aSourceFileEmitterBase<TSpec>.
Usage
Usage documentation and samples are in progress and will be available soon. My apologies for any inconvenience.
Acknowledgements
- I would like to thank Damian Edwards for the inspiration I drew from his CI workflows.
- Gratitude is also extended to the individual who wrote
SourceWriterat Microsoft.
| 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 SourceGeneratorUtils:
| Package | Downloads |
|---|---|
|
GDBridge.Generator
Source generator package to simplify C# -> GDScript interoperability |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|