Add project files.

This commit is contained in:
2025-04-15 16:26:12 +02:00
parent adef1fb47e
commit cfcd9b7bb9
22 changed files with 1546 additions and 0 deletions
+50
View File
@@ -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);
}
}