diff --git a/MinecraftClient.Tests/CSharpRunnerTests.cs b/MinecraftClient.Tests/CSharpRunnerTests.cs new file mode 100644 index 00000000..c6846997 --- /dev/null +++ b/MinecraftClient.Tests/CSharpRunnerTests.cs @@ -0,0 +1,14 @@ +using MinecraftClient.Scripting; + +namespace MinecraftClient.Tests; + +public sealed class CSharpRunnerTests +{ + [Theory] + [InlineData("//using MinecraftClient.CommandHandler", "using MinecraftClient.CommandHandler;")] + [InlineData("//using MinecraftClient.CommandHandler;", "using MinecraftClient.CommandHandler;")] + public void NormalizeUsingDirectiveAddsMissingSemicolon(string directive, string expected) + { + Assert.Equal(expected, CSharpRunner.NormalizeUsingDirective(directive)); + } +} diff --git a/MinecraftClient/Scripting/CSharpRunner.cs b/MinecraftClient/Scripting/CSharpRunner.cs index 724ccb7f..880d6a39 100644 --- a/MinecraftClient/Scripting/CSharpRunner.cs +++ b/MinecraftClient/Scripting/CSharpRunner.cs @@ -60,7 +60,7 @@ namespace MinecraftClient.Scripting string line = lines[i]; if (line.StartsWith("//using")) { - libs.Add(line.Replace("//", "").Trim()); + libs.Add(NormalizeUsingDirective(line)); } else if (line.StartsWith("//dll")) { @@ -125,6 +125,12 @@ namespace MinecraftClient.Scripting else return null; } + internal static string NormalizeUsingDirective(string line) + { + string directive = line[2..].Trim(); + return directive.EndsWith(';') ? directive : $"{directive};"; + } + private static string BuildScriptCode(string scriptName, IEnumerable script, IEnumerable extensions, IEnumerable libs, bool hasImplicitReturn) { StringBuilder codeBuilder = new();