Skip to content

Commit 7c152e1

Browse files
authored
Merge pull request #135 from PositiveTechnologies/dev
CLI refactoring, config.json processing, refactoring, fixed unit-tests, refactoring
2 parents 90038bb + 1eedb87 commit 7c152e1

File tree

75 files changed

+1134
-520
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+1134
-520
lines changed

GitExtensions.settings

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<dictionary>
3+
<item>
4+
<key>
5+
<string>BuildServer.Type</string>
6+
</key>
7+
<value>
8+
<string>AppVeyor</string>
9+
</value>
10+
</item>
11+
<item>
12+
<key>
13+
<string>BuildServer.EnableIntegration</string>
14+
</key>
15+
<value>
16+
<string>true</string>
17+
</value>
18+
</item>
19+
<item>
20+
<key>
21+
<string>BuildServer.AppVeyor.AppVeyorProjectName</string>
22+
</key>
23+
<value>
24+
<string>KvanTTT/pt-pm</string>
25+
</value>
26+
</item>
27+
<item>
28+
<key>
29+
<string>BuildServer.AppVeyor.AppVeyorDisplayGitHubPullRequests</string>
30+
</key>
31+
<value>
32+
<string>true</string>
33+
</value>
34+
</item>
35+
<item>
36+
<key>
37+
<string>BuildServer.AppVeyor.AppVeyorLoadTestsResults</string>
38+
</key>
39+
<value>
40+
<string>false</string>
41+
</value>
42+
</item>
43+
<item>
44+
<key>
45+
<string>BuildServer.ShowBuildSummaryInGrid</string>
46+
</key>
47+
<value>
48+
<string>true</string>
49+
</value>
50+
</item>
51+
<item>
52+
<key>
53+
<string>dictionary</string>
54+
</key>
55+
<value>
56+
<string>en-US</string>
57+
</value>
58+
</item>
59+
</dictionary>
Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,83 @@
11
using CommandLine;
2-
using System;
3-
using System.IO;
2+
using System.Collections.Generic;
43

5-
namespace PT.PM.Cli
4+
namespace PT.PM.Cli.Common
65
{
76
public class CliParameters
87
{
8+
[Option('c', "config", HelpText = "Json file with settings")]
9+
public string ConfigFile { get; set; }
10+
911
[Option('f', "files", HelpText = "Input file or directory to be processed")]
10-
public string InputFileNameOrDirectory { get; set; } = "";
12+
public string InputFileNameOrDirectory { get; set; }
1113

12-
[Option('l', "languages", HelpText = "Languages to be processed")]
13-
public string Languages { get; set; } = "";
14+
[Option('l', "languages", HelpText = "Languages to be processed", Separator = ',')]
15+
public IEnumerable<string> Languages { get; set; }
1416

1517
[Option("patterns", HelpText = "Patterns to be processed")]
16-
public virtual string Patterns { get; set; } = "";
18+
public string Patterns { get; set; }
1719

18-
[Option("pattern-ids", HelpText = "Pattern identifiers to be processed")]
19-
public string PatternIds { get; set; } = "";
20+
[Option("pattern-ids", HelpText = "Pattern identifiers to be processed", Separator = ',')]
21+
public IEnumerable<string> PatternIds { get; set; }
2022

2123
[Option('t', "threads", HelpText = "Number of processing threads")]
22-
public int ThreadCount { get; set; } = 1;
24+
public int? ThreadCount { get; set; }
2325

2426
[Option("not-preprocess-ust", HelpText = "Do not include ust simplification stage")]
25-
public bool NotPreprocessUst { get; set; } = false;
27+
public bool? NotPreprocessUst { get; set; }
2628

2729
[Option('s', "stage", HelpText = "End processing stage. By default: Match")]
28-
public string Stage { get; set; } = PM.Stage.Match.ToString();
30+
public string Stage { get; set; }
2931

3032
[Option("max-stack-size", HelpText = "Thread stack size in bytes")]
31-
public int MaxStackSize { get; set; } = 0;
33+
public uint? MaxStackSize { get; set; }
3234

3335
[Option('m', "memory", HelpText = "Approximate max memory consumption in megabytes")]
34-
public int Memory { get; set; } = 300;
36+
public uint? Memory { get; set; }
3537

3638
[Option("timeout", HelpText = "Max spent time per file in seconds")]
37-
public int FileTimeout { get; set; } = 0;
39+
public uint? FileTimeout { get; set; }
3840

3941
[Option("logs-dir", HelpText = "Logs directory")]
40-
public string LogsDir { get; set; } = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
42+
public string LogsDir { get; set; }
4143

4244
[Option("temp-dir", HelpText = "Temp directory")]
43-
public string TempDir { get; set; } = Path.GetTempPath();
45+
public string TempDir { get; set; }
4446

4547
[Option('e', "log-errors", HelpText = "Log errors to console")]
46-
public bool IsLogErrors { get; set; } = false;
48+
public bool? IsLogErrors { get; set; }
4749

4850
[Option("log-debugs", HelpText = "Log debug messages")]
49-
public bool IsLogDebugs { get; set; } = false;
51+
public bool? IsLogDebugs { get; set; }
5052

5153
[Option("no-indents", HelpText = "Do not indent dump trees")]
52-
public bool NoIndentedDump { get; set; } = false;
54+
public bool? NoIndentedDump { get; set; }
5355

5456
[Option("no-text-spans", HelpText = "Do not include text spans in dump trees")]
55-
public bool NotIncludeTextSpansInDump { get; set; } = false;
57+
public bool? NotIncludeTextSpansInDump { get; set; }
5658

57-
[Option("line-column", HelpText = "Use line-column format for text spans in dump")]
58-
public bool LineColumnTextSpans { get; set; } = false;
59+
[Option("linear", HelpText = "Use linear format for text spans in dump")]
60+
public bool? LinearTextSpans { get; set; }
5961

6062
[Option("dump-code", HelpText = "Dump content of source code file to dump")]
61-
public bool IncludeCodeInDump { get; set; } = false;
63+
public bool? IncludeCodeInDump { get; set; }
64+
65+
[Option("not-strict", HelpText = "Not strict json deserialization if set true")]
66+
public bool? NotStrictJson { get; set; }
6267

6368
[Option("start-stage", HelpText = "Start stage to process (File or Ust)")]
64-
public string StartStage { get; set; } = "";
69+
public string StartStage { get; set; }
6570

66-
[Option('d', "dump", HelpText = "Stages to be dumped (ParseTree, Ust)")]
67-
public string DumpStages { get; set; } = "";
71+
[Option('d', "dump", HelpText = "Stages to be dumped (ParseTree, Ust)", Separator = ',')]
72+
public IEnumerable<string> DumpStages { get; set; }
6873

69-
[Option('r', "render", HelpText = "Stages to be rendered")]
70-
public string RenderStages { get; set; } = "";
74+
[Option('r', "render", HelpText = "Stages to be rendered", Separator = ',')]
75+
public IEnumerable<string> RenderStages { get; set; }
7176

7277
[Option("render-format", HelpText = "Graph render format (Png, Svg, etc.)")]
73-
public string RenderFormat { get; set; } = GraphvizOutputFormat.Png.ToString();
78+
public string RenderFormat { get; set; }
7479

7580
[Option("render-direction", HelpText = "Graph render direction (TopBottom, LeftRight, etc.)")]
76-
public string RenderDirection { get; set; } = GraphvizDirection.TopBottom.ToString();
81+
public string RenderDirection { get; set; }
7782
}
7883
}
Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,33 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using PT.PM.Common;
4-
using PT.PM.Common.CodeRepository;
1+
using PT.PM.Common;
2+
using PT.PM.Common.Nodes;
53
using PT.PM.Matching;
6-
using PT.PM.Matching.PatternsRepository;
74

8-
namespace PT.PM.Cli
5+
namespace PT.PM.Cli.Common
96
{
10-
public class CliProcessor : CliProcessorBase<Stage, WorkflowResult, PatternRoot, MatchResult, CliParameters>
7+
public class CliProcessor : CliProcessorBase<RootUst, Stage, WorkflowResult, PatternRoot, MatchResult, CliParameters>
118
{
12-
protected override WorkflowResult InitWorkflowAndProcess(CliParameters parameters, ILogger logger, SourceCodeRepository sourceCodeRepository, IPatternsRepository patternsRepository)
13-
{
14-
Stage stage = string.IsNullOrEmpty(parameters.InputFileNameOrDirectory)
15-
? Stage.Pattern
16-
: parameters.Stage.ParseEnum(Stage.Match);
17-
18-
var workflow = new Workflow(sourceCodeRepository, patternsRepository, stage)
19-
{
20-
Logger = logger,
21-
ThreadCount = parameters.ThreadCount,
22-
MemoryConsumptionMb = parameters.Memory,
23-
FileTimeout = TimeSpan.FromSeconds(parameters.FileTimeout),
24-
MaxStackSize = parameters.MaxStackSize,
25-
IsIncludePreprocessing = !parameters.NotPreprocessUst,
26-
LogsDir = parameters.LogsDir,
27-
DumpDir = parameters.LogsDir,
28-
StartStage = parameters.StartStage.ParseEnum(Stage.File),
29-
DumpStages = new HashSet<Stage>(parameters.DumpStages.ParseCollection<Stage>()),
30-
IndentedDump = !parameters.NoIndentedDump,
31-
DumpWithTextSpans = !parameters.NotIncludeTextSpansInDump,
32-
LineColumnTextSpans = parameters.LineColumnTextSpans,
33-
RenderStages = new HashSet<Stage>(parameters.RenderStages.ParseCollection<Stage>()),
34-
RenderFormat = parameters.RenderFormat.ParseEnum<GraphvizOutputFormat>(),
35-
RenderDirection = parameters.RenderDirection.ParseEnum<GraphvizDirection>(),
36-
IncludeCodeInDump = parameters.IncludeCodeInDump
37-
};
9+
public override string CoreName => "PT.PM";
3810

39-
WorkflowResult workflowResult = workflow.Process();
40-
41-
return workflowResult;
11+
protected override WorkflowBase<RootUst, Stage, WorkflowResult, PatternRoot, MatchResult> CreateWorkflow(CliParameters parameters)
12+
{
13+
return new Workflow();
4214
}
4315

44-
protected override void LogStatistics(ILogger logger, WorkflowResult workflowResult)
16+
protected override void LogStatistics(WorkflowResult workflowResult)
4517
{
46-
var workflowLoggerHelper = new WorkflowLoggerHelper(logger, workflowResult);
18+
var workflowLoggerHelper = new WorkflowLoggerHelper(Logger, workflowResult);
4719
workflowLoggerHelper.LogStatistics();
4820
}
21+
22+
protected override bool IsLoadJson(string startStageString)
23+
{
24+
Stage startStage = Stage.File;
25+
if (startStageString != null)
26+
{
27+
startStage = startStageString.ParseEnum(ContinueWithInvalidArgs, startStage, Logger);
28+
}
29+
30+
return startStage == Stage.Ust || startStage == Stage.SimplifiedUst;
31+
}
4932
}
5033
}

0 commit comments

Comments
 (0)