From dbce402842129e8767f59c0e5f8b3041ed1dfee6 Mon Sep 17 00:00:00 2001 From: Anon Date: Fri, 31 Jul 2026 19:12:51 +0200 Subject: [PATCH] fix: accept semicolonless script using directives Fixes #3195 --- MinecraftClient.Tests/CSharpRunnerTests.cs | 14 ++++++++++++++ MinecraftClient/Scripting/CSharpRunner.cs | 8 +++++++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 MinecraftClient.Tests/CSharpRunnerTests.cs 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();