Skip to content

Templating for generating everything from classes, methods from a Roslyn Code Generator

License

Notifications You must be signed in to change notification settings

ignatandrei/RSCG_Templating

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RSCG_Templating

Templating for generating everything from classes, methods from a Roslyn Code Generator

Templating is in SCRIBAN form

How to use

Add reference to

  <ItemGroup>
    <PackageReference Include="RSCG_Templating" Version="2024.720.1603" OutputItemType="Analyzer"  ReferenceOutputAssembly="false"   />
    <PackageReference Include="RSCG_TemplatingCommon" Version="2024.720.1603" />
  </ItemGroup>
<!-- this is just for debug purposes -->
<PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<!-- those are the templates files, see IGenerateDataFromClass -->
  <ItemGroup>
    <AdditionalFiles Include="ClassTypeName.txt" />
    <AdditionalFiles Include="ClassPropByName.txt" />
  </ItemGroup>

Then add additional files , for example

//autogenerated by RSCG_Templating version {{data.Version}} from file {{fileName}}
namespace {{data.nameSpace}} {
	 
	partial class {{data.className}} {
		public string MyTypeName = "{{data.nameSpace}}.{{data.className}}";		
	}//end class

}//end namespace

Now add

//can have multiple attributes on partial classes
[IGenerateDataFromClass("ClassTypeName")]
public partial class Person

Advanced uses

For the moment , RSCG_Templating generates definition for a class with properties + methods . See example for generating enum from properties and setting properties by name

var x = new Person();
Console.WriteLine("The generated string type is "+x.MyTypeName);
x.FirstName = "Andrei";
//set last name via prop
x.SetPropValue(ePerson_Properties.LastName, "Ignat");
Console.WriteLine("called directly first name : " + x.FirstName);
Console.WriteLine("called via enum of prop first name : " + x.GetPropValue(ePerson_Properties.FirstName));
Console.WriteLine("called get property :" + x.GetPropValue(ePerson_Properties.Name));

See example at https://github.com/ignatandrei/RSCG_Templating/tree/main/src/RSCG_Templating

More templates

  1. Template for having the class type name: ClassTypeName
  2. Template for having the class properties as enum : ClassPropByName
  3. Template for setting properties after name : ClassPropByName
  4. Template from DebuggerDisplay for properties: ClassDebuggerDisplay
  5. Template for generating interface from class : ClassInterface

More Roslyn Source Code Generators

You can find more RSCG with examples at Roslyn Source Code Generators

About

Templating for generating everything from classes, methods from a Roslyn Code Generator

Resources

License

Stars

Watchers

Forks

Packages

No packages published