-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathProgram.cs
More file actions
182 lines (161 loc) · 9.67 KB
/
Copy pathProgram.cs
File metadata and controls
182 lines (161 loc) · 9.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
using System.CommandLine;
using System.CommandLine.NamingConventionBinder;
using System.Diagnostics;
using GoPlay.Common.Data;
using GoPlay.Generators.Config;
using GoPlay.Generators.Extension;
namespace GoPlay;
class Program
{
public static async Task Main(string[] args)
{
var rootCommand = new RootCommand();
{
rootCommand.AddCommand(CreateInfoCommand());
rootCommand.AddCommand(CreateConfigCommand());
rootCommand.AddCommand(CreateGenExtension());
rootCommand.AddCommand(CreateProtoEnumCommand());
}
await rootCommand.InvokeAsync(args);
}
private static Command CreateInfoCommand()
{
var cmd = new Command("info", "信息显示");
{
cmd.Handler = CommandHandler.Create(
() =>
{
Console.WriteLine($"CommandLine: {Environment.CommandLine}");
Console.WriteLine($"ProcessPath: {Environment.ProcessPath}");
Console.WriteLine($"CurrentDirectory: {Environment.CurrentDirectory}");
Console.WriteLine($"SystemDirectory: {Environment.SystemDirectory}");
});
}
return cmd;
}
#region Gen
private static Command CreateGenExtension()
{
var cmd = new Command("extension", "extension扩展代码生成");
{
cmd.AddOption(new Option<string>(new []{"-i", "--input-sln-folder"}, "输入Solution目录"));
cmd.AddOption(new Option<string>(new []{"-of", "--output-frontend-file"}, "输出前端扩展cs文件路径"));
cmd.AddOption(new Option<string>(new []{"-ob", "--output-backend-file"}, "输出后端扩展cs文件路径"));
cmd.AddOption(new Option<string>(new []{"-b", "--base-classes"}, () => "ProcessorBase", "输入父类用于过滤:ProcessorBase,MyProcessor"));
cmd.AddOption(new Option<string>(new []{"-tf", "--template-frontend-file"}, () => "", "输出前端扩展的liquid模板文件路径"));
cmd.AddOption(new Option<string>(new []{"-tb", "--template-backend-file"}, () => "", "输出后端扩展的liquid模板文件路径"));
cmd.AddOption(new Option<string>(new []{"-nf", "--namespace-frontend"}, () => "", "输出前端,增加的using namespace,多个namespace用逗号隔开,例如:System,MyNamespace"));
cmd.AddOption(new Option<string>(new []{"-nb", "--namespace-backend"}, () => "", "输出前端,增加的using namespace,多个namespace用逗号隔开,例如:System,MyNamespace"));
cmd.AddOption(new Option<string>(new []{"-igt", "--ignore-types"}, () => "", "类名忽略列表,多个用逗号隔开,例如:EchoProcessor,TestProcessor"));
cmd.AddOption(new Option<string>(new []{"-igm", "--ignore-methods"}, () => "", "函数名忽略列表,多个用逗号隔开,例如:EchoProcessor,TestProcessor"));
//参数名要和Option名字对应,例如:inFolder 对应 --in-folder
cmd.Handler = CommandHandler.Create(
(string inputSlnFolder, string outputFrontendFile, string outputBackendFile, string baseClasses, string templateFrontendFile, string templateBackendFile, string namespaceFrontend, string namespaceBackend, string ignoreTypes, string ignoreMethods) =>
{
var watch = new Stopwatch();
watch.Start();
Processors2Extension.Generate(inputSlnFolder, outputFrontendFile, outputBackendFile, baseClasses, templateFrontendFile, templateBackendFile, namespaceFrontend, namespaceBackend, ignoreTypes, ignoreMethods).Wait();
watch.Stop();
Console.WriteLine($"Time Elapsed: {watch.Elapsed}");
Console.WriteLine("========== Generate Extension Finished ==========");
});
}
return cmd;
}
#endregion
#region Config
private static Command CreateConfigCommand()
{
var cmd = new Command("config", "将Excel导出成代码和YAML数据");
{
cmd.AddOption(new Option<string>(new[] {"-i", "--in-folder"}, () => "../../Excels", "Excel目录"));
cmd.AddOption(new Option<string>(new[] {"-oc", "--out-code-folder"}, () => "", "代码保存项目目录"));
cmd.AddOption(new Option<string>(new[] {"-od", "--out-data-folder"}, () => "", "数据保存项目目录"));
cmd.AddOption(new Option<string>(new[] {"-p", "--platform"}, () => "s", "平台: s | c"));
cmd.AddOption(new Option<bool>(new[] {"-f", "--force"}, () => false, "强制重新导出"));
cmd.AddOption(new Option<bool>(new[] {"-c", "--clear-old"}, () => false, "删除旧脚本和数据"));
cmd.AddOption(new Option<string>(new[] {"-tc", "--template-conf"}, () => "", "Conf代码模板的liquid文件路径"));
cmd.AddOption(new Option<string>(new[] {"-tm", "--template-manager"}, () => "", "Manager代码模板的liquid文件路径"));
cmd.AddOption(new Option<string>(new[] {"-te", "--template-enum"}, () => "", "Enum代码模板的liquid文件路径"));
cmd.AddOption(new Option<string>(new[] {"-t", "--type"}, () => "yaml", "数据类型:yaml | json,默认:yaml"));
cmd.AddOption(new Option<string>(new[] {"-s", "--splitter"}, () => ",|", "数组分隔符,可配置多个,默认:\",|\""));
cmd.AddOption(new Option<string>(new[] {"-s2", "--splitter-outer"}, () => ":", "数组外层分隔符,可配置多个,默认:\":\""));
//参数名要和Option名字对应,例如:inFolder 对应 --in-folder
cmd.Handler = CommandHandler.Create(
(string inFolder, string outCodeFolder, string outDataFolder, string platform, bool force, bool clearOld, string templateConf, string templateManager, string templateEnum, string type, string splitter, string splitterOuter) =>
{
RunArgs.Config.ArraySplitter = splitter;
RunArgs.Config.ArraySplitOuter = splitterOuter;
var watch = new Stopwatch();
watch.Start();
{
if (force) ExportCache.Remove(inFolder, platform);
if (clearOld)
{
if (!string.IsNullOrEmpty(outCodeFolder))
{
Excel2Enum.Clear(outCodeFolder);
Excel2Script.Clear(outCodeFolder);
}
Excel2Yaml.Clear(outDataFolder);
}
if (!string.IsNullOrEmpty(outCodeFolder))
{
Excel2Enum.Generate(inFolder, outCodeFolder, false, templateEnum);
Excel2Script.Generate(inFolder, outCodeFolder, platform, templateConf, templateManager);
}
else
{
Excel2Enum.Generate(inFolder, outCodeFolder, true, templateEnum);
}
if (type == "json")
{
Excel2Json.Generate(inFolder, outDataFolder, platform);
}
else
{
Excel2Yaml.Generate(inFolder, outDataFolder, platform);
}
}
watch.Stop();
Console.WriteLine($"Time Elapsed: {watch.Elapsed}");
Console.WriteLine("========== Generate Config Finished ==========");
});
}
return cmd;
}
#endregion
#region Excel to proto enum
private static Command CreateProtoEnumCommand()
{
var cmd = new Command("excel2proto", "将Excel导出成Proto数据");
{
cmd.AddOption(new Option<string>(new[] {"-i", "--in-folder"}, () => "../../Excels", "Excel目录"));
cmd.AddOption(new Option<string>(new[] {"-oc", "--out-code-folder"}, () => "", "代码保存项目目录"));
cmd.AddOption(new Option<bool>(new[] {"-f", "--force"}, () => false, "强制重新导出"));
cmd.AddOption(new Option<bool>(new[] {"-c", "--clear-old"}, () => false, "删除旧脚本和数据"));
//参数名要和Option名字对应,例如:inFolder 对应 --in-folder
cmd.Handler = CommandHandler.Create(
(string inFolder, string outCodeFolder, string outDataFolder, string platform, bool force, bool clearOld, string templateConf, string templateManager, string templateEnum, string type, string splitter, string splitterOuter) =>
{
RunArgs.Config.ArraySplitter = splitter;
RunArgs.Config.ArraySplitOuter = splitterOuter;
var watch = new Stopwatch();
watch.Start();
{
if (force) ExportCache.Remove(inFolder, platform);
if (clearOld)
{
Excel2ProtoEnum.Clear(outCodeFolder);
}
Excel2ProtoEnum.Generate(inFolder, outCodeFolder, false, templateEnum);
}
watch.Stop();
Console.WriteLine($"Time Elapsed: {watch.Elapsed}");
Console.WriteLine("========== Generate Config Finished ==========");
});
}
return cmd;
}
#endregion
}