diff --git a/.gitignore b/.gitignore
index dfcfd56..13d9b05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -348,3 +348,6 @@ MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
+
+# JetBrains IDE metadata
+.idea/
\ No newline at end of file
diff --git a/Directory.Build.props b/Directory.Build.props
index 81bd430..4ea991f 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,6 +1,24 @@
+
+
enable
+ 1.11.0
+ False
+
+
+
+ domn1995
+
+ A simple source generator for discriminated unions in C#.
+ https://github.com/domn1995/dunet
+ Readme.md
+ https://github.com/domn1995/dunet
+ source; generator; discriminated; union; functional; tagged;
+ MIT
+ https://github.com/domn1995/dunet/releases
+ git
+ favicon.png
@@ -10,4 +28,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Dunet.sln b/Dunet.sln
index b6b0d2a..cf44f29 100644
--- a/Dunet.sln
+++ b/Dunet.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32519.379
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dunet", "src\Dunet.csproj", "{13C0B629-4C48-4C73-AECB-06A476871C5B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dunet.Generator", "src\Dunet.Generator\Dunet.Generator.csproj", "{13C0B629-4C48-4C73-AECB-06A476871C5B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dunet.Test", "test\Dunet.Test.csproj", "{573E6767-C044-415B-9AD3-A1734B0DD684}"
EndProject
@@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExpressionCalculatorWithSta
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dunet.Benchmark", "benchmark\Dunet.Benchmark\Dunet.Benchmark.csproj", "{44A04A62-D495-4450-8C15-2BD67DF5159A}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dunet", "src\Dunet\Dunet.csproj", "{9CC5D86B-26B5-47B5-8305-D099B171B1CD}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -71,6 +73,10 @@ Global
{44A04A62-D495-4450-8C15-2BD67DF5159A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44A04A62-D495-4450-8C15-2BD67DF5159A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44A04A62-D495-4450-8C15-2BD67DF5159A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9CC5D86B-26B5-47B5-8305-D099B171B1CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9CC5D86B-26B5-47B5-8305-D099B171B1CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9CC5D86B-26B5-47B5-8305-D099B171B1CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9CC5D86B-26B5-47B5-8305-D099B171B1CD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/benchmark/Dunet.Benchmark/Dunet.Benchmark.csproj b/benchmark/Dunet.Benchmark/Dunet.Benchmark.csproj
index 3d3bb6c..1ce6b7b 100644
--- a/benchmark/Dunet.Benchmark/Dunet.Benchmark.csproj
+++ b/benchmark/Dunet.Benchmark/Dunet.Benchmark.csproj
@@ -12,7 +12,8 @@
-
+
+
diff --git a/benchmark/Dunet.Benchmark/SourceGeneratorBenchmark.cs b/benchmark/Dunet.Benchmark/SourceGeneratorBenchmark.cs
index ebecd13..67cc791 100644
--- a/benchmark/Dunet.Benchmark/SourceGeneratorBenchmark.cs
+++ b/benchmark/Dunet.Benchmark/SourceGeneratorBenchmark.cs
@@ -1,9 +1,8 @@
using BenchmarkDotNet.Attributes;
-using Dunet.UnionAttributeGeneration;
-using Dunet.UnionGeneration;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using System.Reflection;
+using Dunet.Generator.UnionGeneration;
namespace Dunet.Benchmark;
@@ -58,9 +57,8 @@ partial record None();
throw new InvalidOperationException("Compilation returned null");
var unionGenerator = new UnionGenerator();
- var unionAttributeGenerator = new UnionAttributeGenerator();
- var driver = CSharpGeneratorDriver.Create(unionGenerator, unionAttributeGenerator);
+ var driver = CSharpGeneratorDriver.Create(unionGenerator);
return (compilation, driver);
}
@@ -87,7 +85,12 @@ private static Compilation CreateCompilation(params string[] sources) =>
sources.Select(static source => CSharpSyntaxTree.ParseText(source)),
new[]
{
- MetadataReference.CreateFromFile(typeof(Binder).GetTypeInfo().Assembly.Location)
+ // Resolves to System.Private.CoreLib.dll
+ MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
+ // Resolves to System.Runtime.dll, which is needed for the Attribute type
+ // Can't use typeof(Attribute).GetTypeInfo().Assembly.Location because it resolves to System.Private.CoreLib.dll
+ MetadataReference.CreateFromFile(AppDomain.CurrentDomain.GetAssemblies().First(f => f.FullName?.Contains("System.Runtime") == true).Location),
+ MetadataReference.CreateFromFile(typeof(UnionAttribute).GetTypeInfo().Assembly.Location)
},
new CSharpCompilationOptions(OutputKind.ConsoleApplication)
);
diff --git a/integration/Dunet.Integration.csproj b/integration/Dunet.Integration.csproj
index 2627d70..33c3eec 100644
--- a/integration/Dunet.Integration.csproj
+++ b/integration/Dunet.Integration.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/src/Dunet.Generator/Dunet.Generator.csproj b/src/Dunet.Generator/Dunet.Generator.csproj
new file mode 100644
index 0000000..90418a8
--- /dev/null
+++ b/src/Dunet.Generator/Dunet.Generator.csproj
@@ -0,0 +1,30 @@
+
+
+ netstandard2.0
+ enable
+ enable
+ 12.0
+ True
+ $(NoWarn);NU5128
+ true
+ Dunet.Generator
+ true
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/src/IdentifierExtensions.cs b/src/Dunet.Generator/IdentifierExtensions.cs
similarity index 96%
rename from src/IdentifierExtensions.cs
rename to src/Dunet.Generator/IdentifierExtensions.cs
index 71afcfa..14dd1fa 100644
--- a/src/IdentifierExtensions.cs
+++ b/src/Dunet.Generator/IdentifierExtensions.cs
@@ -1,4 +1,4 @@
-namespace Dunet;
+namespace Dunet.Generator;
internal static class IdentifierExtensions
{
diff --git a/src/SyntaxExtensions.cs b/src/Dunet.Generator/SyntaxExtensions.cs
similarity index 98%
rename from src/SyntaxExtensions.cs
rename to src/Dunet.Generator/SyntaxExtensions.cs
index c2e2fdd..0912f18 100644
--- a/src/SyntaxExtensions.cs
+++ b/src/Dunet.Generator/SyntaxExtensions.cs
@@ -2,7 +2,7 @@
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-namespace Dunet;
+namespace Dunet.Generator;
internal static class SyntaxExtensions
{
diff --git a/src/Dunet.Generator/UnionAttributeGeneration/UnionAttributeSource.cs b/src/Dunet.Generator/UnionAttributeGeneration/UnionAttributeSource.cs
new file mode 100644
index 0000000..378c059
--- /dev/null
+++ b/src/Dunet.Generator/UnionAttributeGeneration/UnionAttributeSource.cs
@@ -0,0 +1,8 @@
+namespace Dunet.Generator.UnionAttributeGeneration;
+
+internal static class UnionAttributeSource
+{
+ public const string Namespace = "Dunet";
+ public const string Name = "UnionAttribute";
+ public const string FullyQualifiedName = $"{Namespace}.{Name}";
+}
diff --git a/src/UnionExtensionsGeneration/UnionExtensionsSourceBuilder.cs b/src/Dunet.Generator/UnionExtensionsGeneration/UnionExtensionsSourceBuilder.cs
similarity index 98%
rename from src/UnionExtensionsGeneration/UnionExtensionsSourceBuilder.cs
rename to src/Dunet.Generator/UnionExtensionsGeneration/UnionExtensionsSourceBuilder.cs
index 5a8adf2..874311f 100644
--- a/src/UnionExtensionsGeneration/UnionExtensionsSourceBuilder.cs
+++ b/src/Dunet.Generator/UnionExtensionsGeneration/UnionExtensionsSourceBuilder.cs
@@ -1,7 +1,7 @@
-using Dunet.UnionGeneration;
-using System.Text;
+using System.Text;
+using Dunet.Generator.UnionGeneration;
-namespace Dunet.UnionExtensionsGeneration;
+namespace Dunet.Generator.UnionExtensionsGeneration;
internal static class UnionExtensionsSourceBuilder
{
diff --git a/src/UnionGeneration/ImmutableEquatableArray.cs b/src/Dunet.Generator/UnionGeneration/ImmutableEquatableArray.cs
similarity index 94%
rename from src/UnionGeneration/ImmutableEquatableArray.cs
rename to src/Dunet.Generator/UnionGeneration/ImmutableEquatableArray.cs
index 4331bf7..959a5c3 100644
--- a/src/UnionGeneration/ImmutableEquatableArray.cs
+++ b/src/Dunet.Generator/UnionGeneration/ImmutableEquatableArray.cs
@@ -1,9 +1,6 @@
-namespace Dunet.UnionGeneration;
+using System.Collections;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
+namespace Dunet.Generator.UnionGeneration;
public static class ImmutableEquatableArray
{
diff --git a/src/UnionGeneration/IncrementalValuesProviderExtensions.cs b/src/Dunet.Generator/UnionGeneration/IncrementalValuesProviderExtensions.cs
similarity index 94%
rename from src/UnionGeneration/IncrementalValuesProviderExtensions.cs
rename to src/Dunet.Generator/UnionGeneration/IncrementalValuesProviderExtensions.cs
index 45bfa71..f53808b 100644
--- a/src/UnionGeneration/IncrementalValuesProviderExtensions.cs
+++ b/src/Dunet.Generator/UnionGeneration/IncrementalValuesProviderExtensions.cs
@@ -1,6 +1,6 @@
using Microsoft.CodeAnalysis;
-namespace Dunet.UnionGeneration;
+namespace Dunet.Generator.UnionGeneration;
///
/// Provides extension methods for an .
diff --git a/src/UnionGeneration/RecordDeclarationSyntaxParser.cs b/src/Dunet.Generator/UnionGeneration/RecordDeclarationSyntaxParser.cs
similarity index 98%
rename from src/UnionGeneration/RecordDeclarationSyntaxParser.cs
rename to src/Dunet.Generator/UnionGeneration/RecordDeclarationSyntaxParser.cs
index 7fb2b61..1e20da7 100644
--- a/src/UnionGeneration/RecordDeclarationSyntaxParser.cs
+++ b/src/Dunet.Generator/UnionGeneration/RecordDeclarationSyntaxParser.cs
@@ -1,9 +1,9 @@
-using Dunet.UnionAttributeGeneration;
+using Dunet.Generator.UnionAttributeGeneration;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-namespace Dunet.UnionGeneration;
+namespace Dunet.Generator.UnionGeneration;
///
/// Retrieves semantic information from record declarations.
diff --git a/src/UnionGeneration/StringBuilderExtensions.cs b/src/Dunet.Generator/UnionGeneration/StringBuilderExtensions.cs
similarity index 96%
rename from src/UnionGeneration/StringBuilderExtensions.cs
rename to src/Dunet.Generator/UnionGeneration/StringBuilderExtensions.cs
index 5c9b7ab..a410b8a 100644
--- a/src/UnionGeneration/StringBuilderExtensions.cs
+++ b/src/Dunet.Generator/UnionGeneration/StringBuilderExtensions.cs
@@ -1,6 +1,6 @@
using System.Text;
-namespace Dunet.UnionGeneration;
+namespace Dunet.Generator.UnionGeneration;
internal static class StringBuilderExtensions
{
diff --git a/src/UnionGeneration/UnionDeclaration.cs b/src/Dunet.Generator/UnionGeneration/UnionDeclaration.cs
similarity index 98%
rename from src/UnionGeneration/UnionDeclaration.cs
rename to src/Dunet.Generator/UnionGeneration/UnionDeclaration.cs
index cafdabf..144b899 100644
--- a/src/UnionGeneration/UnionDeclaration.cs
+++ b/src/Dunet.Generator/UnionGeneration/UnionDeclaration.cs
@@ -1,6 +1,6 @@
using Microsoft.CodeAnalysis;
-namespace Dunet.UnionGeneration;
+namespace Dunet.Generator.UnionGeneration;
internal sealed record UnionDeclaration(
ImmutableEquatableArray Imports,
diff --git a/src/UnionGeneration/UnionGenerator.cs b/src/Dunet.Generator/UnionGeneration/UnionGenerator.cs
similarity index 96%
rename from src/UnionGeneration/UnionGenerator.cs
rename to src/Dunet.Generator/UnionGeneration/UnionGenerator.cs
index 3cba0b1..9e463b2 100644
--- a/src/UnionGeneration/UnionGenerator.cs
+++ b/src/Dunet.Generator/UnionGeneration/UnionGenerator.cs
@@ -1,12 +1,12 @@
-using Dunet.UnionExtensionsGeneration;
+using System.Collections.Immutable;
+using System.Text;
+using Dunet.Generator.UnionExtensionsGeneration;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Text;
-using System.Collections.Immutable;
-using System.Text;
-namespace Dunet.UnionGeneration;
+namespace Dunet.Generator.UnionGeneration;
[Generator]
public sealed class UnionGenerator : IIncrementalGenerator
diff --git a/src/UnionGeneration/UnionSourceBuilder.cs b/src/Dunet.Generator/UnionGeneration/UnionSourceBuilder.cs
similarity index 99%
rename from src/UnionGeneration/UnionSourceBuilder.cs
rename to src/Dunet.Generator/UnionGeneration/UnionSourceBuilder.cs
index fe6d5f7..32bb5aa 100644
--- a/src/UnionGeneration/UnionSourceBuilder.cs
+++ b/src/Dunet.Generator/UnionGeneration/UnionSourceBuilder.cs
@@ -1,6 +1,6 @@
using System.Text;
-namespace Dunet.UnionGeneration;
+namespace Dunet.Generator.UnionGeneration;
internal static class UnionSourceBuilder
{
diff --git a/src/Dunet.csproj b/src/Dunet.csproj
deleted file mode 100644
index 76b73b4..0000000
--- a/src/Dunet.csproj
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- netstandard2.0
- enable
- enable
- 12.0
- True
- false
- True
- domn1995
-
- A simple source generator for discriminated unions in C#.
- https://github.com/domn1995/dunet
- Readme.md
- https://github.com/domn1995/dunet
- source; generator; discriminated; union; functional; tagged;
- 1.10.0
- 1.10.0
- MIT
- https://github.com/domn1995/dunet/releases
- git
- favicon.png
- False
- 1.10.0
- en
- true
- $(NoWarn);NU5128
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
diff --git a/src/Dunet/Dunet.csproj b/src/Dunet/Dunet.csproj
new file mode 100644
index 0000000..a2bd15e
--- /dev/null
+++ b/src/Dunet/Dunet.csproj
@@ -0,0 +1,15 @@
+
+
+
+ netstandard2.0;net8.0
+ enable
+ enable
+ 12.0
+ True
+ True
+
+
+
+
+
+
diff --git a/src/Dunet/UnionAttribute.cs b/src/Dunet/UnionAttribute.cs
new file mode 100644
index 0000000..b5ca138
--- /dev/null
+++ b/src/Dunet/UnionAttribute.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace Dunet;
+
+///
+/// Enables dunet union source generation for the decorated partial record.
+///
+[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
+public sealed class UnionAttribute : Attribute {}
\ No newline at end of file
diff --git a/src/UnionAttributeGeneration/UnionAttributeGenerator.cs b/src/UnionAttributeGeneration/UnionAttributeGenerator.cs
deleted file mode 100644
index 24018d9..0000000
--- a/src/UnionAttributeGeneration/UnionAttributeGenerator.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Text;
-using System.Text;
-
-namespace Dunet.UnionAttributeGeneration;
-
-[Generator]
-public sealed class UnionAttributeGenerator : IIncrementalGenerator
-{
- public void Initialize(IncrementalGeneratorInitializationContext context) =>
- context.RegisterPostInitializationOutput(
- ctx =>
- ctx.AddSource(
- $"{UnionAttributeSource.Name}.g.cs",
- SourceText.From(UnionAttributeSource.SourceCode, Encoding.UTF8)
- )
- );
-}
diff --git a/src/UnionAttributeGeneration/UnionAttributeSource.cs b/src/UnionAttributeGeneration/UnionAttributeSource.cs
deleted file mode 100644
index bb03f28..0000000
--- a/src/UnionAttributeGeneration/UnionAttributeSource.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace Dunet.UnionAttributeGeneration;
-
-internal static class UnionAttributeSource
-{
- public const string Namespace = "Dunet";
- public const string Name = "UnionAttribute";
- public const string FullyQualifiedName = $"{Namespace}.{Name}";
-
- public const string SourceCode = """
-using System;
-
-namespace Dunet;
-
-///
-/// Enables dunet union source generation for the decorated partial record.
-///
-[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
-internal sealed class UnionAttribute : Attribute {}
-""";
-}
diff --git a/test/Compilation/Compiler.cs b/test/Compilation/Compiler.cs
index 0232bb3..2441513 100644
--- a/test/Compilation/Compiler.cs
+++ b/test/Compilation/Compiler.cs
@@ -1,19 +1,15 @@
using System.Reflection;
-using Dunet.UnionAttributeGeneration;
-using Dunet.UnionGeneration;
+using Dunet.Generator.UnionGeneration;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
namespace Dunet.Test.Compilation;
///
-/// Enables compilation of C# source code with Dunet source generation.
+/// Enables compilation of C# source code with Dunet.Generator source generation.
///
internal sealed class Compiler
{
- private static readonly IIncrementalGenerator unionAttributeGenerator =
- new UnionAttributeGenerator();
-
private static readonly IIncrementalGenerator unionGenerator = new UnionGenerator();
public static CompilationResult Compile(params string[] sources)
@@ -47,14 +43,21 @@ private static Microsoft.CodeAnalysis.Compilation CreateCompilation(params strin
CSharpCompilation.Create(
"compilation",
sources.Select(static source => CSharpSyntaxTree.ParseText(source)),
- [MetadataReference.CreateFromFile(typeof(Binder).GetTypeInfo().Assembly.Location)],
+ [
+ // Resolves to System.Private.CoreLib.dll
+ MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
+ // Resolves to System.Runtime.dll, which is needed for the Attribute type
+ // Can't use typeof(Attribute).GetTypeInfo().Assembly.Location because it resolves to System.Private.CoreLib.dll
+ MetadataReference.CreateFromFile(AppDomain.CurrentDomain.GetAssemblies().First(f => f.FullName?.Contains("System.Runtime") == true).Location),
+ MetadataReference.CreateFromFile(typeof(UnionAttribute).GetTypeInfo().Assembly.Location)
+ ],
new CSharpCompilationOptions(OutputKind.ConsoleApplication)
);
private static GenerationResult RunGenerator(Microsoft.CodeAnalysis.Compilation compilation)
{
CSharpGeneratorDriver
- .Create(unionGenerator, unionAttributeGenerator)
+ .Create(unionGenerator)
.RunGeneratorsAndUpdateCompilation(
compilation,
out var outputCompilation,
diff --git a/test/Dunet.Test.csproj b/test/Dunet.Test.csproj
index 02c15d4..7c67d50 100644
--- a/test/Dunet.Test.csproj
+++ b/test/Dunet.Test.csproj
@@ -22,7 +22,8 @@
-
+
+
diff --git a/test/Runtime/AssemblyExtensions.cs b/test/Runtime/AssemblyExtensions.cs
index 6032a5e..fcc617b 100644
--- a/test/Runtime/AssemblyExtensions.cs
+++ b/test/Runtime/AssemblyExtensions.cs
@@ -6,7 +6,7 @@ namespace Dunet.Test.Runtime;
/// Provides extension methods for executing methods within an assembly.
///
///
-/// This helps Dunet ensure that match methods are working correctly.
+/// This helps Dunet.Generator ensure that match methods are working correctly.
///
internal static class AssemblyExtensions
{
diff --git a/test/UnionExtensionsGeneration/GenerationTests.cs b/test/UnionExtensionsGeneration/GenerationTests.cs
index 82a0fd1..eca8675 100644
--- a/test/UnionExtensionsGeneration/GenerationTests.cs
+++ b/test/UnionExtensionsGeneration/GenerationTests.cs
@@ -9,6 +9,7 @@ public void CanUseMatchAsyncOnAsyncMethodsThatReturnUnions(string taskType)
{
// Arrange.
const string shapeCs = """
+using System;
using Dunet;
namespace Shapes;