This Generator is intendede to generate text that a source generator can use to emit source to its generation.
E.g. Instead of writing a String that contains the definiton of an Attribute (without syntax highlighting and checking).
You can generate the attribute normaly in Code and anotate it wit [SourceGenerator.Helper.CopyCode.Copy].
Attributes defined on that Type will also be copied, if they are defined below the [SourceGenerator.Helper.CopyCode.Copy]-Attribute.
Assume you have the following attribute:
namespace SourceGenerator.Helper.CopyCode.Example; [SourceGenerator.Helper.CopyCode.Copy] [System.AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)] internal sealed class MyGeneratorAttribute : Attribute { }
then the generator will generate:
// <auto-generated/> #nullable enable namespace SourceGenerator.Helper.CopyCode; internal static partial class Copy { public const string SourceGeneratorHelperCopyCodeExampleMyGeneratorAttribute = """ // <auto-generated/> #nullable enable namespace SourceGenerator.Helper.CopyCode.Example; [System.AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)] internal sealed class MyGeneratorAttribute : Attribute { } """; }
And your Generator can emit it:
[Generator(LanguageNames.CSharp)] public class MyGenerator : IIncrementalGenerator { public void Initialize(IncrementalGeneratorInitializationContext context) { context.RegisterPostInitializationOutput(context => context.AddSource("attribute.g.cs", SourceGenerator.Helper.CopyCode.Copy.SourceGeneratorHelperCopyCodeExampleMyGeneratorAttribute )); // The rest of your generator… } }