From f06785ae3312a82b8f2237b55e8c4eeb174c3519 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 20 Apr 2020 23:28:38 +0300 Subject: Scripting. --- .../Scripting/Tango.Scripting.Basic/IContext.cs | 2 +- .../Scripting/Tango.Scripting.Basic/Project.cs | 29 +++++++++------------- .../Scripting/Tango.Scripting.Basic/Script.cs | 5 +++- 3 files changed, 17 insertions(+), 19 deletions(-) (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Basic') diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs index 906047c2a..d817c5d46 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs @@ -8,6 +8,6 @@ namespace Tango.Scripting.Basic { public interface IContext { - void WriteLine(String s); + } } diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs index ff7a3acc2..31be3a714 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs @@ -78,7 +78,7 @@ namespace Tango.Scripting.Basic } } - public static Project New(String name, String code) + public static Project New(String name) { Project p = new Project(); @@ -88,14 +88,6 @@ namespace Tango.Scripting.Basic p.ReferenceAssemblies.Add(new ReferenceAssembly() { FromType = typeof(Enumerable) }); p.ReferenceAssemblies.Add(new ReferenceAssembly() { FromType = typeof(Form) }); p.ReferenceAssemblies.Add(new ReferenceAssembly() { FromType = typeof(Project) }); - - p.Scripts.Add(new Script() - { - Name = name, - IsEntryPoint = true, - Code = code, - }); - return p; } @@ -111,6 +103,7 @@ namespace Tango.Scripting.Basic foreach (var script in Scripts) { + script.LoadCount = 0; String code = script.Code; String codeFile = Path.Combine(tempFolder, script.Name); @@ -119,14 +112,14 @@ namespace Tango.Scripting.Basic foreach (var file in Scripts.Where(x => !x.IsEntryPoint && script != x).Select(x => Path.Combine(tempFolder, x.Name))) { loadingString = $"#load \"{file}\"\n"; + script.LoadCount++; } code = loadingString + code; if (!script.IsEntryPoint) { - - + //In case we use #load //foreach (var match in Regex.Matches(code, "#load \".+\"").OfType()) //{ // String line = match.ToString(); @@ -143,9 +136,6 @@ namespace Tango.Scripting.Basic // } // } //} - - - File.WriteAllText(codeFile, code); } else @@ -162,14 +152,19 @@ namespace Tango.Scripting.Basic var compileResults = s.Compile(); - foreach (var error in compileResults.Where(x => x.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Error || x.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Warning)) + foreach (var error in compileResults.Where(x => x.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Error)) { CompilationError cError = new CompilationError(); cError.File = System.IO.Path.GetFileName(error.Location.SourceTree.FilePath); + if (cError.File == String.Empty) + { + cError.File = Scripts.Single(x => x.IsEntryPoint).Name; + } + Script errorScript = Scripts.Single(x => x.Name == cError.File); cError.Message = error.GetMessage(); cError.Severity = error.Severity; var line = error.Location.GetMappedLineSpan(); - cError.Line = line.StartLinePosition.Line + 1; + cError.Line = line.StartLinePosition.Line + 1 + (errorScript != null ? errorScript.LoadCount : 0); cError.Column = line.StartLinePosition.Character + 1; cError.Length = line.EndLinePosition.Character - line.StartLinePosition.Character; result.Errors.Add(cError); @@ -185,7 +180,7 @@ namespace Tango.Scripting.Basic if (result.Errors.Count > 0) { - throw new InvalidOperationException("There were compilation errors."); + throw new InvalidOperationException($"Cannot run project with the following compilation errors:\n{String.Join(Environment.NewLine, result.Errors.Select(x => x.Message))}"); } Thread scriptThread = null; diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Script.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Script.cs index fce05636d..753026149 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Script.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Script.cs @@ -24,6 +24,8 @@ namespace Tango.Scripting.Basic set { _isSelected = value; RaisePropertyChangedAuto(); } } + [JsonIgnore] + public int LoadCount { get; internal set; } public static Script New(String file) { @@ -34,12 +36,13 @@ namespace Tango.Scripting.Basic }; } - public static Script New(String name, String code) + public static Script New(String name, String code, bool isEntryPoint = false) { return new Script() { Name = name, Code = code, + IsEntryPoint = isEntryPoint, }; } } -- cgit v1.3.1