Skip to content

Commit 786d3b0

Browse files
committed
majorly cleaned up language handling
1 parent 402e84e commit 786d3b0

File tree

7 files changed

+286
-39
lines changed

7 files changed

+286
-39
lines changed

src/CodeQLToolkit.Features.Query/Scaffolding/QueryScaffoldFeature.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using CodeQLToolkit.Features.Query.Scaffolding.Targets;
22
using CodeQLToolkit.Shared.Feature;
33
using CodeQLToolkit.Shared.Options;
4+
using CodeQLToolkit.Shared.Utils;
45
using System.CommandLine;
56

67
namespace CodeQLToolkit.Features.Query.Scaffolding
@@ -10,7 +11,7 @@ public class QueryScaffoldFeature : FeatureBase, IToolkitScaffoldingFeature
1011
public QueryScaffoldFeature() {
1112
FeatureName = "Query";
1213
}
13-
public override string[] SupportedLangauges { get => new string[] { "c", "cpp", "javascript" }; }
14+
public override LanguageType[] SupportedLangauges { get => new LanguageType[] { LanguageType.C, LanguageType.CPP, LanguageType.JAVASCRIPT}; }
1415

1516
public void Register(Command parentCommand)
1617
{
@@ -27,7 +28,8 @@ public void Register(Command parentCommand)
2728

2829
var createTestsOption = new Option<bool>("--create-tests", ()=> true, "Create a new unit test for this query if it doesn't already exist.");
2930
var queryNameOption = new Option<string>("--query-name", "Name of the query. Note: Do not specify the `.ql` extension in naming your query.") { IsRequired = true };
30-
var queryLanguageOption = new Option<string>("--language", $"The language to generate a query for.") { IsRequired = true}.FromAmong(SupportedLangauges);
31+
var queryLanguageOption = new Option<string>("--language", $"The language to generate a query for.") { IsRequired = true}
32+
.FromAmong(SupportedLangauges.Select(x => x.ToOptionString()).ToArray());
3133
var queryPackOption = new Option<string>("--pack", "The name of the query pack to place this query in.") { IsRequired = true };
3234
var queryPackScopeOption = new Option<string>("--scope", "The scope to use") { IsRequired = true };
3335

@@ -53,7 +55,7 @@ public void Register(Command parentCommand)
5355
new NewQueryScaffoldTarget()
5456
{
5557
Name = queryName,
56-
Language = queryLangauge,
58+
Language = LanguageTypeHelper.LanguageTypeFromOptionString(queryLangauge),
5759
Base = basePath,
5860
QueryPack = queryPack,
5961
QueryPackScope = queryPackScope,

src/CodeQLToolkit.Features.Test/Commands/TestCommandFeature.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using CodeQLToolkit.Features.Test.Commands.Targets;
22
using CodeQLToolkit.Features.Test.Lifecycle;
33
using CodeQLToolkit.Shared.Types;
4+
using CodeQLToolkit.Shared.Utils;
45
using Microsoft.VisualBasic;
56
using System;
67
using System.Collections.Generic;
@@ -13,7 +14,16 @@ namespace CodeQLToolkit.Features.Test.Commands
1314
{
1415
public class TestCommandFeature : FeatureBase, IToolkitLifecycleFeature
1516
{
16-
public override string[] SupportedLangauges { get => new string[] { "c", "cpp", "javascript", "go", "python", "ql", "java", "ruby" }; }
17+
public override LanguageType[] SupportedLangauges { get => new LanguageType[] {
18+
LanguageType.C,
19+
LanguageType.CPP,
20+
LanguageType.CSHARP,
21+
LanguageType.JAVA,
22+
LanguageType.JAVASCRIPT,
23+
LanguageType.GO,
24+
LanguageType.RUBY,
25+
LanguageType.PYTHON
26+
}; }
1727

1828
public TestCommandFeature()
1929
{
@@ -39,7 +49,7 @@ public void Register(Command parentCommand)
3949

4050
var numThreadsOption = new Option<int>("--num-threads", () => 4, "The number of threads to use for runner. For best performance, do not exceed the number of physical cores on your system.") { IsRequired = true };
4151
var workDirectoryOption = new Option<string>("--work-dir", () => Path.GetTempPath(), "Where to place intermediate execution output files.") { IsRequired = true };
42-
var languageOption = new Option<string>("--language", $"The language to run tests for.") { IsRequired = true }.FromAmong(SupportedLangauges);
52+
var languageOption = new Option<string>("--language", $"The language to run tests for.") { IsRequired = true }.FromAmong(SupportedLangauges.Select(x => x.ToOptionString()).ToArray());
4353
var runnerOSOption = new Option<string>("--runner-os", $"Label for the operating system running these tests.") { IsRequired = true };
4454
var cliVersionOption = new Option<string>("--cli-version", $"The version of the cli running the tests.") { IsRequired = true };
4555
var stdLibIdentOption = new Option<string>("--stdlib-ident", $"A string identifying the standard library used.") { IsRequired = true };

src/CodeQLToolkit.Features.Test/Lifecycle/TestLifecycleFeature.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using CodeQLToolkit.Features.Test.Lifecycle.Targets;
22
using CodeQLToolkit.Features.Test.Lifecycle.Targets.Actions;
3+
using CodeQLToolkit.Shared.Utils;
34
using System.CommandLine;
45
using System.Reflection;
56

@@ -12,7 +13,19 @@ public TestLifecycleFeature()
1213
FeatureName = "Test";
1314
}
1415

15-
public override string[] SupportedLangauges { get => new string[] { "c", "cpp", "javascript", "go", "python", "ql", "java", "ruby" }; }
16+
public override LanguageType[] SupportedLangauges
17+
{
18+
get => new LanguageType[] {
19+
LanguageType.C,
20+
LanguageType.CPP,
21+
LanguageType.CSHARP,
22+
LanguageType.JAVA,
23+
LanguageType.JAVASCRIPT,
24+
LanguageType.GO,
25+
LanguageType.RUBY,
26+
LanguageType.PYTHON
27+
};
28+
}
1629

1730
public void Register(Command parentCommand)
1831
{
@@ -23,7 +36,7 @@ public void Register(Command parentCommand)
2336
var overwriteExistingOption = new Option<bool>("--overwrite-existing", () => false, "Overwrite exiting files (if they exist).");
2437
var numThreadsOption = new Option<int>("--num-threads", () => 4, "Number of threads to use during test execution.");
2538
var useRunnerOption = new Option<string>("--use-runner", () => "ubuntu-latest", "The runner(s) to use. Should be a comma-seperated list of actions runners.");
26-
var languageOption = new Option<string>("--language", $"The language to generate automation for.") { IsRequired = true }.FromAmong(SupportedLangauges);
39+
var languageOption = new Option<string>("--language", $"The language to generate automation for.") { IsRequired = true }.FromAmong(SupportedLangauges.Select(x => x.ToOptionString()).ToArray());
2740

2841
initCommand.AddOption(overwriteExistingOption);
2942
initCommand.AddOption(numThreadsOption);

src/CodeQLToolkit.Shared/Feature/FeatureBase.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@ abstract public class FeatureBase
1212
{
1313
public string FeatureName { get; set; }
1414

15-
public virtual string[] SupportedLangauges { get; } = { };
15+
public virtual LanguageType[] SupportedLangauges { get; } = { };
1616
public bool IsSupportedLangauge(string language)
17+
{
18+
var strLangauges = SupportedLangauges.Select(x => x.ToOptionString()).ToArray();
19+
return strLangauges.Contains(language);
20+
}
21+
22+
public bool IsSupportedLangauge(LanguageType language)
1723
{
1824
return SupportedLangauges.Contains(language);
1925
}

src/CodeQLToolkit.Shared/Target/ScaffoldTarget.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using CodeQLToolkit.Shared.Logging;
22
using CodeQLToolkit.Shared.Template;
3+
using CodeQLToolkit.Shared.Utils;
34
using Microsoft.Extensions.Logging;
45

56
namespace CodeQLToolkit.Shared.Target
@@ -8,7 +9,7 @@ public abstract class ScaffoldTarget : ITarget
89
{
910

1011
public string Name { get; set; }
11-
public string Language { get; set; }
12+
public LanguageType Language { get; set; }
1213
public bool OverwriteExisting { get; set; }
1314
public string FeatureName { get; set; }
1415

@@ -18,12 +19,7 @@ public string GetTemplatePathForLanguage(string templateName)
1819
{
1920
var languagePath = Language;
2021

21-
if(languagePath == "c")
22-
{
23-
languagePath = "cpp";
24-
25-
}
26-
return Path.Combine("Templates", FeatureName, languagePath, templateName + ".liquid");
22+
return Path.Combine("Templates", FeatureName, Language.ToDirectory(), templateName + ".liquid");
2723
}
2824

2925

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
using CodeQLToolkit.Shared.Types;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace CodeQLToolkit.Shared.Utils
9+
{
10+
public enum LanguageType
11+
{
12+
C,
13+
CPP,
14+
JAVASCRIPT,
15+
GO,
16+
RUBY,
17+
PYTHON,
18+
JAVA,
19+
CSHARP
20+
}
21+
22+
public static class LanguageTypeMethods
23+
{
24+
public static LanguageType FromOptionString(this LanguageType LanguageType, string value)
25+
{
26+
if (value.ToLower().Equals("c"))
27+
{
28+
return LanguageType.C;
29+
}
30+
31+
if (value.ToLower().Equals("cpp"))
32+
{
33+
return LanguageType.CPP;
34+
}
35+
36+
if (value.ToLower().Equals("javascript"))
37+
{
38+
return LanguageType.JAVASCRIPT;
39+
}
40+
41+
if (value.ToLower().Equals("go"))
42+
{
43+
return LanguageType.GO;
44+
}
45+
46+
if (value.ToLower().Equals("ruby"))
47+
{
48+
return LanguageType.RUBY;
49+
}
50+
51+
if (value.ToLower().Equals("java"))
52+
{
53+
return LanguageType.JAVA;
54+
}
55+
56+
if (value.ToLower().Equals("csharp"))
57+
{
58+
return LanguageType.CSHARP;
59+
}
60+
61+
throw new NotImplementedException();
62+
}
63+
64+
65+
public static string ToOptionString(this LanguageType LanguageType)
66+
{
67+
if (LanguageType == LanguageType.C)
68+
{
69+
return "c";
70+
}
71+
72+
if (LanguageType == LanguageType.CPP)
73+
{
74+
return "cpp";
75+
}
76+
77+
if (LanguageType == LanguageType.JAVASCRIPT)
78+
{
79+
return "javascript";
80+
}
81+
if (LanguageType == LanguageType.GO)
82+
{
83+
return "go";
84+
}
85+
if (LanguageType == LanguageType.RUBY)
86+
{
87+
return "ruby";
88+
}
89+
if (LanguageType == LanguageType.PYTHON)
90+
{
91+
return "python";
92+
}
93+
if (LanguageType == LanguageType.JAVA)
94+
{
95+
return "java";
96+
}
97+
if (LanguageType == LanguageType.CSHARP)
98+
{
99+
return "csharp";
100+
}
101+
102+
throw new NotImplementedException();
103+
}
104+
105+
106+
public static string ToDirectory(this LanguageType LanguageType)
107+
{
108+
if (LanguageType == LanguageType.C)
109+
{
110+
return "cpp";
111+
}
112+
113+
if (LanguageType == LanguageType.CPP)
114+
{
115+
return "cpp";
116+
}
117+
118+
if (LanguageType == LanguageType.JAVASCRIPT)
119+
{
120+
return "javascript";
121+
}
122+
if (LanguageType == LanguageType.GO)
123+
{
124+
return "go";
125+
}
126+
if (LanguageType == LanguageType.RUBY)
127+
{
128+
return "ruby";
129+
}
130+
if (LanguageType == LanguageType.PYTHON)
131+
{
132+
return "python";
133+
}
134+
if (LanguageType == LanguageType.JAVA)
135+
{
136+
return "java";
137+
}
138+
if (LanguageType == LanguageType.CSHARP)
139+
{
140+
return "csharp";
141+
}
142+
143+
throw new NotImplementedException();
144+
}
145+
146+
public static string ToImport(this LanguageType LanguageType)
147+
{
148+
if (LanguageType == LanguageType.C)
149+
{
150+
return "cpp";
151+
}
152+
153+
if (LanguageType == LanguageType.CPP)
154+
{
155+
return "cpp";
156+
}
157+
158+
if (LanguageType == LanguageType.JAVASCRIPT)
159+
{
160+
return "javascript";
161+
}
162+
if (LanguageType == LanguageType.GO)
163+
{
164+
return "go";
165+
}
166+
if (LanguageType == LanguageType.RUBY)
167+
{
168+
return "ruby";
169+
}
170+
if (LanguageType == LanguageType.PYTHON)
171+
{
172+
return "python";
173+
}
174+
if (LanguageType == LanguageType.JAVA)
175+
{
176+
return "java";
177+
}
178+
if (LanguageType == LanguageType.CSHARP)
179+
{
180+
return "csharp";
181+
}
182+
183+
throw new NotImplementedException();
184+
}
185+
186+
187+
public static string ToExtension(this LanguageType LanguageType)
188+
{
189+
if (LanguageType == LanguageType.C)
190+
{
191+
return "c";
192+
}
193+
194+
if(LanguageType == LanguageType.CPP)
195+
{
196+
return "cpp";
197+
}
198+
199+
if(LanguageType == LanguageType.JAVASCRIPT)
200+
{
201+
return "js";
202+
}
203+
if(LanguageType == LanguageType.GO)
204+
{
205+
return "go";
206+
}
207+
if(LanguageType == LanguageType.RUBY)
208+
{
209+
return "rb";
210+
}
211+
if(LanguageType == LanguageType.PYTHON)
212+
{
213+
return "py";
214+
}
215+
if(LanguageType == LanguageType.JAVA)
216+
{
217+
return "java";
218+
}
219+
if (LanguageType == LanguageType.CSHARP)
220+
{
221+
return "cs";
222+
}
223+
224+
225+
throw new NotImplementedException();
226+
}
227+
228+
}
229+
230+
231+
public class LanguageTypeHelper
232+
{
233+
public static LanguageType LanguageTypeFromOptionString(string LanguageType)
234+
{
235+
return new LanguageType().FromOptionString(LanguageType);
236+
}
237+
}
238+
239+
}

0 commit comments

Comments
 (0)