From 113eaf4d8a37e212b8528d41e400b346ce9f51d2 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Tue, 8 May 2018 17:01:22 +0300 Subject: Added improvements to stubs UI. Implemented Bug Reporter engine! --- .../Visual_Studio/Tango.Scripting/CompilerError.cs | 18 +++++++ .../Visual_Studio/Tango.Scripting/ScriptEngine.cs | 57 ++++++++++++++++------ .../Tango.Scripting/Tango.Scripting.csproj | 1 + 3 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 Software/Visual_Studio/Tango.Scripting/CompilerError.cs (limited to 'Software/Visual_Studio/Tango.Scripting') diff --git a/Software/Visual_Studio/Tango.Scripting/CompilerError.cs b/Software/Visual_Studio/Tango.Scripting/CompilerError.cs new file mode 100644 index 000000000..367aba123 --- /dev/null +++ b/Software/Visual_Studio/Tango.Scripting/CompilerError.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting +{ + public class CompilerError + { + public String Error { get; set; } + + public override string ToString() + { + return Error; + } + } +} diff --git a/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs b/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs index d6f12967c..a8815406d 100644 --- a/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs +++ b/Software/Visual_Studio/Tango.Scripting/ScriptEngine.cs @@ -37,16 +37,52 @@ namespace Tango.Scripting /// The code. /// public async Task Run(String code) + { + var options = CreateOptions(); + + String methodParameters = CreateMethodParameters(); + + _cancaller = new CancellationTokenSource(); + + await CSharpScript.RunAsync( + code + + Environment.NewLine + + Environment.NewLine + + "await Task.Factory.StartNew(() => { OnExecute(" + methodParameters + "); });", options: options, globals: _onExecuteParameters, cancellationToken: _cancaller.Token); + } + + public Task> Compile(String code) + { + return Task.Factory.StartNew>(() => + { + var options = CreateOptions(); + + String methodParameters = CreateMethodParameters(); + + _cancaller = new CancellationTokenSource(); + + var script = CSharpScript.Create( + code + + Environment.NewLine + + Environment.NewLine + + "await Task.Factory.StartNew(() => { OnExecute(" + methodParameters + "); });", options: options, globalsType: _onExecuteParameters.GetType()); + + var results = script.Compile(); + + return results.ToList().Select(x => new CompilerError() { Error = x.ToString() }).ToList(); + }); + } + + private String CreateMethodParameters() + { + return String.Join(", ", _onExecuteParameters.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).Select(x => x.Name)); + } + + private ScriptOptions CreateOptions() { //My References. var options = ScriptOptions.Default; - //External References. - //foreach (var r in item.References) - //{ - // options = options.AddReferences(r.FilePath); - //} - //My Assemblies. options = options.AddReferences(typeof(Form).Assembly.Location); options = options.AddReferences(typeof(Enumerable).Assembly.Location); @@ -67,14 +103,7 @@ namespace Tango.Scripting "System.Windows.Forms" ); - String methodParameters = String.Join(", ", _onExecuteParameters.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).Select(x => x.Name)); - - _cancaller = new CancellationTokenSource(); - await CSharpScript.RunAsync( - code + - Environment.NewLine + - Environment.NewLine + - "await Task.Factory.StartNew(() => { OnExecute(" + methodParameters + "); });", options: options, globals: _onExecuteParameters, cancellationToken: _cancaller.Token); + return options; } /// diff --git a/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj b/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj index 1a6e660bd..f9842aeff 100644 --- a/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj +++ b/Software/Visual_Studio/Tango.Scripting/Tango.Scripting.csproj @@ -140,6 +140,7 @@ GlobalVersionInfo.cs + -- cgit v1.3.1