fix: accept semicolonless script using directives

Fixes #3195
This commit is contained in:
Anon 2026-07-31 19:12:51 +02:00
parent 503652a760
commit dbce402842
2 changed files with 21 additions and 1 deletions

View file

@ -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));
}
}

View file

@ -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<ScriptSourceLine> script, IEnumerable<ScriptSourceLine> extensions, IEnumerable<string> libs, bool hasImplicitReturn)
{
StringBuilder codeBuilder = new();