From 4d2c67ae920f5fc9151d4f2b37128f090041191b Mon Sep 17 00:00:00 2001 From: Atif Aziz Date: Mon, 22 May 2023 06:29:44 +0200 Subject: [PATCH] Fix greedy parsing of load directive part --- .../ProjectSystem/ScriptFilesResolver.cs | 2 +- src/Dotnet.Script.Tests/ScriptFilesResolverTests.cs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptFilesResolver.cs b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptFilesResolver.cs index 16d2119d..740acbad 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptFilesResolver.cs +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptFilesResolver.cs @@ -61,7 +61,7 @@ private void Process(string csxFile, HashSet result) private static string[] GetLoadDirectives(string content) { - var matches = Regex.Matches(content, @"^\s*#load\s*""\s*(.+)\s*""", RegexOptions.Multiline); + var matches = Regex.Matches(content, @"^\s*#load\s*""\s*(.+?)\s*""", RegexOptions.Multiline); List result = new List(); foreach (var match in matches.Cast()) { diff --git a/src/Dotnet.Script.Tests/ScriptFilesResolverTests.cs b/src/Dotnet.Script.Tests/ScriptFilesResolverTests.cs index d7faf92d..4d47e02b 100644 --- a/src/Dotnet.Script.Tests/ScriptFilesResolverTests.cs +++ b/src/Dotnet.Script.Tests/ScriptFilesResolverTests.cs @@ -21,11 +21,15 @@ public void ShouldOnlyResolveRootScript() Assert.Contains(files, f => f.Contains("Foo.csx")); Assert.Contains(files, f => !f.Contains("Bar.csx")); } - [Fact] - public void ShouldResolveLoadedScriptInRootFolder() + + [Theory] + [InlineData("#load \"Bar.csx\"")] + // See: https://github.com/dotnet-script/dotnet-script/issues/720 (1) + [InlineData("#load \"Bar.csx\"\n\n\"Hello world\".Dump();")] + public void ShouldResolveLoadedScriptInRootFolder(string rootScriptContent) { using var rootFolder = new DisposableFolder(); - var rootScript = WriteScript("#load \"Bar.csx\"", rootFolder.Path, "Foo.csx"); + var rootScript = WriteScript(rootScriptContent, rootFolder.Path, "Foo.csx"); WriteScript(string.Empty, rootFolder.Path, "Bar.csx"); var scriptFilesResolver = new ScriptFilesResolver();