Data Type
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
/packages/
|
||||||
|
riderModule.iml
|
||||||
|
/_ReSharper.Caches/
|
||||||
52
DataTypes/DataTypeGenerator.cs
Normal file
52
DataTypes/DataTypeGenerator.cs
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.CodeAnalysis;
|
||||||
|
using Microsoft.CodeAnalysis.Text;
|
||||||
|
|
||||||
|
namespace Nocturnis.Generators.DataTypes;
|
||||||
|
[Generator]
|
||||||
|
public class DataTypeGenerator : ISourceGenerator
|
||||||
|
{
|
||||||
|
public void Initialize(GeneratorInitializationContext context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute(GeneratorExecutionContext context)
|
||||||
|
{
|
||||||
|
var classesTxt = context.AdditionalFiles
|
||||||
|
.FirstOrDefault(f => Path.GetFileName(f.Path) == "BaseTypes");
|
||||||
|
if (classesTxt != null)
|
||||||
|
{
|
||||||
|
IEnumerable<string>? types =
|
||||||
|
classesTxt.GetText(context.CancellationToken)?.ToString().Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
if (types == null)
|
||||||
|
return;
|
||||||
|
StringBuilder sb = new();
|
||||||
|
sb.AppendLine("using Godot;");
|
||||||
|
sb.AppendLine("using Nocturnis.DataStructures.DataTypes;");
|
||||||
|
sb.AppendLine("namespace Nocturnis.GlobalManagement.Constants;");
|
||||||
|
sb.AppendLine("public static partial class DataTypeConstant");
|
||||||
|
sb.AppendLine("{");
|
||||||
|
sb.AppendLine(" public static class BaseDataTypeNames");
|
||||||
|
sb.AppendLine(" {");
|
||||||
|
StringBuilder sxa = new();
|
||||||
|
foreach (string? type in types)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" public static StringName {type} = \"{type}\";");
|
||||||
|
sxa.AppendLine($" public static DataType {type} = new DataType(BaseDataTypeNames.{type});");
|
||||||
|
sxa.AppendLine($" public static DataType {type}Array = new DataType({type})");
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.AppendLine(" }");
|
||||||
|
sb.AppendLine(" public static class BaseDataTypes");
|
||||||
|
sb.AppendLine(" {");
|
||||||
|
sb.Append(sxa);
|
||||||
|
sb.AppendLine(" }");
|
||||||
|
sb.AppendLine("}");
|
||||||
|
context.AddSource("DataTypeConstant.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
Nocturnis.Generators.csproj
Normal file
26
Nocturnis.Generators.csproj
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<LangVersion>latest</LangVersion>
|
||||||
|
|
||||||
|
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
|
||||||
|
<IsRoslynComponent>true</IsRoslynComponent>
|
||||||
|
|
||||||
|
<RootNamespace>Nocturnis.Generators</RootNamespace>
|
||||||
|
<PackageId>Nocturnis.Generators</PackageId>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.3.0"/>
|
||||||
|
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.3.0"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
</Project>
|
||||||
16
Nocturnis.Generators.sln
Normal file
16
Nocturnis.Generators.sln
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nocturnis.Generators", "Nocturnis.Generators.csproj", "{8CEDE314-85A0-40D8-80D5-8927E21133B8}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{8CEDE314-85A0-40D8-80D5-8927E21133B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8CEDE314-85A0-40D8-80D5-8927E21133B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8CEDE314-85A0-40D8-80D5-8927E21133B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{8CEDE314-85A0-40D8-80D5-8927E21133B8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
9
Properties/launchSettings.json
Normal file
9
Properties/launchSettings.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||||
|
"profiles": {
|
||||||
|
"DebugRoslynSourceGenerator": {
|
||||||
|
"commandName": "DebugRoslynComponent",
|
||||||
|
"targetProject": "../Nocturnis/Nocturnis.csproj"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user