Skip to content

Commit 8ec5517

Browse files
committed
Support 'strict mode' lexer/parser errors.
1 parent e1d6d3e commit 8ec5517

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

ServerCodeExciser/ServerCodeExciser.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,13 @@ public sealed class Settings : CommandSettings
5454
public bool IsDryRun { get; init; }
5555

5656
[CommandOption("-v|--verify")]
57-
[Description("Verify that all analized code does not require modifications to excise server scopes.")]
57+
[Description("Verify that all analyzed code does not require modifications to excise server scopes.")]
5858
public bool Verify { get; init; }
5959

60+
[CommandOption("--strict")]
61+
[Description("Ensure that all files can be analyzed without syntactic or lexicographical errors.")]
62+
public bool StrictMode { get; init; }
63+
6064
[CommandArgument(0, "[INPUT]")]
6165
[Description("The input folder to excise.")]
6266
public string InputPath { get; init; } = string.Empty;
@@ -87,6 +91,7 @@ public override int Execute([NotNull] CommandContext context, [NotNull] Settings
8791
parameters.ShouldOutputUntouchedFiles = settings.ShouldOutputUntouchedFiles;
8892
parameters.IsDryRun = settings.IsDryRun || settings.ShouldOutputUntouchedFiles || settings.Verify;
8993
parameters.Verify = settings.Verify;
94+
parameters.StrictMode = settings.StrictMode;
9095
parameters.UseFunctionStats = settings.UseFunctionStats;
9196
parameters.DontSkip = settings.DontSkip;
9297
if (settings.RequiredExcisionRatio.HasValue)

ServerCodeExciser/ServerCodeExcisionProcessor.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class ServerCodeExcisionParameters
1717
public bool ShouldOutputUntouchedFiles { get; set; } = false;
1818
public bool IsDryRun { get; set; } = false;
1919
public bool Verify { get; set; } = false;
20+
public bool StrictMode { get; set; } = false;
2021
public bool UseFunctionStats { get; set; } = false;
2122
public bool DontSkip { get; set; } = false;
2223
public float RequiredExcisionRatio { get; set; } = -1.0f;
@@ -109,8 +110,7 @@ public EExciserReturnValues ExciseServerCode(string filePattern, IServerCodeExci
109110
{
110111
System.Diagnostics.Debug.Assert(stats.TotalNrCharacters > 0, "Something is terribly wrong. We have excised characters, but no total characters..?");
111112
var excisionRatio = (float)stats.CharactersExcised / (float)stats.TotalNrCharacters * 100.0f;
112-
Console.WriteLine("Excised {0:0.00}% of server only code in file ({1}/{2}): {3}",
113-
excisionRatio, fileIdx + 1, allFiles.Length, fileName);
113+
Console.WriteLine("Excised {0:0.00}% of server only code in file ({1}/{2}): {3}", excisionRatio, fileIdx + 1, allFiles.Length, fileName);
114114
}
115115
else
116116
{
@@ -120,9 +120,10 @@ public EExciserReturnValues ExciseServerCode(string filePattern, IServerCodeExci
120120
globalStats.CharactersExcised += stats.CharactersExcised;
121121
globalStats.TotalNrCharacters += stats.TotalNrCharacters;
122122
}
123-
catch (Exception e)
123+
catch (Exception)
124124
{
125125
Console.WriteLine("Failed to parse ({0}/{1}): {2}", fileIdx + 1, allFiles.Length, fileName);
126+
throw;
126127
}
127128
}
128129
}
@@ -189,6 +190,11 @@ private ExcisionStats ProcessCodeFile(string fileName, string inputPath, EExcisi
189190
var parser = excisionLanguage.CreateParser<UnrealAngelscriptParser>(commonTokenStream);
190191
parser.AddErrorListener(new ExcisionParserErrorListener());
191192

193+
if (_parameters.StrictMode)
194+
{
195+
parser.ErrorHandler = new BailErrorStrategy();
196+
}
197+
192198
var answerText = new StringBuilder();
193199
answerText.Append(script);
194200

@@ -224,6 +230,7 @@ private ExcisionStats ProcessCodeFile(string fileName, string inputPath, EExcisi
224230
if (visitor != null)
225231
{
226232
visitor.VisitContext(parser.script());
233+
227234
if (_parameters.UseFunctionStats)
228235
{
229236
stats.TotalNrCharacters = visitor.TotalNumberOfFunctionCharactersVisited;

ServerCodeExciserTest/ExcisionIntegrationTests.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ public static int Main(string[] args)
2525
ref numTestFailures,
2626
ref numTestCases);
2727

28+
Console.WriteLine("----------------------------");
29+
Console.WriteLine($"{numTestCases} *.as test(s) executed.");
30+
Console.WriteLine($"{numTestFailures} *.as test(s) failed.");
31+
2832
// Run for "common"
2933
var commonResult = RunExciserIntegrationTests(
3034
".common",
@@ -34,8 +38,8 @@ public static int Main(string[] args)
3438
ref numTestCases);
3539

3640
Console.WriteLine("----------------------------");
37-
Console.WriteLine($"{numTestCases - numTestFailures} test(s) passed.");
38-
Console.WriteLine($"{numTestFailures} test(s) failed.");
41+
Console.WriteLine($"{numTestCases} *.common test(s) executed.");
42+
Console.WriteLine($"{numTestFailures} *.common test(s) failed.");
3943
}
4044
catch (Exception e)
4145
{
@@ -55,6 +59,7 @@ private static EExciserReturnValues RunExciserIntegrationTests(string fileExtens
5559
}
5660

5761
string searchPattern = "*" + fileExtension.TrimStart('.');
62+
Console.WriteLine($"Running integration tests for {searchPattern} files...");
5863

5964
EExciserReturnValues returnCode;
6065
try
@@ -65,17 +70,17 @@ private static EExciserReturnValues RunExciserIntegrationTests(string fileExtens
6570
ShouldOutputUntouchedFiles = true,
6671
FullExcisionRegexString = @"FullExcise1/.*",
6772
ExciseAllFunctionsRegexString = @"AllFunctionExcise1/.*|||AllFunctionExcise2/.*",
73+
StrictMode = true,
6874
};
6975
excisionParams.InputPaths.Add(inputPath);
7076

7177
var angelscriptServerCodeExciser = new ServerCodeExcisionProcessor(excisionParams);
7278
returnCode = angelscriptServerCodeExciser.ExciseServerCode(searchPattern, new UnrealAngelscriptServerCodeExcisionLanguage());
73-
Console.WriteLine($"ExciseServerCode for {fileExtension} files returned: {returnCode}");
79+
Console.WriteLine($"ExciseServerCode for {searchPattern} files returned: {returnCode}");
7480
}
75-
catch (Exception e)
81+
catch (Exception)
7682
{
77-
AnsiConsole.WriteException(e);
78-
return EExciserReturnValues.InternalExcisionError;
83+
throw;
7984
}
8085

8186
foreach (var answerFilePath in Directory.EnumerateFiles(outputPath, searchPattern, SearchOption.AllDirectories))

UnrealAngelscriptServerCodeExcision/UnrealAngelscriptSymbolVisitor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using ServerCodeExcisionCommon;
22
using System.Collections.Generic;
3-
using System.Text;
43
using System.Text.RegularExpressions;
54

65
namespace UnrealAngelscriptServerCodeExcision

0 commit comments

Comments
 (0)