mirror of
https://github.com/AlexMacocian/Squealify.git
synced 2026-07-15 14:59:32 +00:00
Add project files.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Sybil;
|
||||
using System;
|
||||
|
||||
namespace Squealify;
|
||||
|
||||
[Generator(LanguageNames.CSharp)]
|
||||
public sealed class UniqueAttributeGenerator : IIncrementalGenerator
|
||||
{
|
||||
public void Initialize(IncrementalGeneratorInitializationContext context)
|
||||
{
|
||||
context.RegisterPostInitializationOutput(GenerateAttribute);
|
||||
}
|
||||
|
||||
private static void GenerateAttribute(IncrementalGeneratorPostInitializationContext context)
|
||||
{
|
||||
var columnUniqueBuilder = SyntaxBuilder.CreateCompilationUnit()
|
||||
.WithNamespace(SyntaxBuilder.CreateNamespace(Constants.Namespace)
|
||||
.WithClass(SyntaxBuilder.CreateClass(Constants.ColumnUniqueAttributeName)
|
||||
.WithBaseClass(nameof(Attribute))
|
||||
.WithModifiers($"{Constants.Public} {Constants.Sealed}")
|
||||
.WithConstructor(SyntaxBuilder.CreateConstructor(Constants.ColumnUniqueAttributeName)
|
||||
.WithModifier(Constants.Public))
|
||||
.WithAttribute(SyntaxBuilder.CreateAttribute("AttributeUsage")
|
||||
.WithArgument(AttributeTargets.Property)
|
||||
.WithArgument("Inherited", false)
|
||||
.WithArgument("AllowMultiple", false))));
|
||||
var columnUniqueSource = columnUniqueBuilder.Build().ToFullString();
|
||||
context.AddSource($"{Constants.ColumnUniqueAttributeName}.g.cs", columnUniqueSource);
|
||||
|
||||
var tableUniqueBuilder = SyntaxBuilder.CreateCompilationUnit()
|
||||
.WithNamespace(SyntaxBuilder.CreateNamespace(Constants.Namespace)
|
||||
.WithClass(SyntaxBuilder.CreateClass(Constants.TableUniqueAttributeName)
|
||||
.WithBaseClass(nameof(Attribute))
|
||||
.WithModifiers($"{Constants.Public} {Constants.Sealed}")
|
||||
.WithConstructor(SyntaxBuilder.CreateConstructor(Constants.TableUniqueAttributeName)
|
||||
.WithModifier(Constants.Public)
|
||||
.WithParameter($"{Constants.Params} {Constants.StringArrayType}", Constants.TableUniqueArgumentName)
|
||||
.WithBody($"this.{Constants.TableUniqueProperty} = {Constants.TableUniqueArgumentName};"))
|
||||
.WithAttribute(SyntaxBuilder.CreateAttribute("AttributeUsage")
|
||||
.WithArgument(AttributeTargets.Class)
|
||||
.WithArgument("Inherited", false)
|
||||
.WithArgument("AllowMultiple", true))
|
||||
.WithProperty(SyntaxBuilder.CreateProperty(Constants.StringArrayType, Constants.TableUniqueProperty)
|
||||
.WithModifiers(Constants.Public)
|
||||
.WithAccessor(SyntaxBuilder.CreateGetter()))));
|
||||
var tableUniqueSource = tableUniqueBuilder.Build().ToFullString();
|
||||
context.AddSource($"{Constants.TableUniqueAttributeName}.g.cs", tableUniqueSource);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user