From 9b7875d904456c34c3698d7fc569078f99ed5187 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Sun, 19 Apr 2020 23:12:56 +0300 Subject: Scripting refactoring. --- .../RoslynTest/ConsoleApp8/ConsoleApp8/Program.cs | 22 +- .../RoslynTest/ConsoleApp8/ConsoleApp8/main.csx | 2 +- .../Console/ConsoleWindow.xaml | 4 +- .../Tango.Scripting.Basic/CompilationError.cs | 19 + .../Tango.Scripting.Basic/CompilationResult.cs | 21 + .../Tango.Scripting.Basic/GlobalObject.cs | 13 + .../Scripting/Tango.Scripting.Basic/IContext.cs | 13 + .../Scripting/Tango.Scripting.Basic/Project.cs | 211 +++++++++ .../Tango.Scripting.Basic/ProjectManager.cs | 18 + .../Tango.Scripting.Basic/ProjectSession.cs | 55 +++ .../Tango.Scripting.Basic/ProjectSessionState.cs | 16 + .../ProjectSessionStateChangedEventArgs.cs | 17 + .../Properties/AssemblyInfo.cs | 55 +++ .../Properties/Resources.Designer.cs | 73 +++ .../Properties/Resources.resx | 124 ++++++ .../Properties/Settings.Designer.cs | 30 ++ .../Properties/Settings.settings | 7 + .../Tango.Scripting.Basic/ReferenceAssembly.cs | 13 + .../Tango.Scripting.Basic/Resources/template.csx | 16 + .../Scripting/Tango.Scripting.Basic/Script.cs | 27 ++ .../Tango.Scripting.Basic.csproj | 186 ++++++++ .../Tango.Scripting.Basic/Themes/Generic.xaml | 6 + .../Scripting/Tango.Scripting.Basic/app.config | 47 ++ .../Tango.Scripting.Basic/packages.config | 52 +++ .../Tango.Scripting.Core/IScriptSource.cs | 13 + .../Properties/AssemblyInfo.cs | 36 ++ .../Tango.Scripting.Core.csproj | 48 ++ .../Tango.Scripting.Editors/CachedAssembly.cs | 21 + .../Tango.Scripting.Editors/Document/UndoStack.cs | 2 +- .../Highlighting/Resources/CSharp-Mode.xshd | 1 + .../Intellisense/KnownType.cs | 12 +- .../Intellisense/KnownTypeMethod.cs | 2 + .../Tango.Scripting.Editors/ScriptEditor.cs | 348 +++++++++++++-- .../Tango.Scripting.Editors.csproj | 10 +- .../Scripting/Tango.Scripting.Editors/app.config | 8 + .../Tango.Scripting.Editors/packages.config | 1 + .../Scripting/Tango.Scripting.Test/App.config | 6 + .../Scripting/Tango.Scripting.Test/App.xaml | 9 + .../Scripting/Tango.Scripting.Test/App.xaml.cs | 17 + .../Scripting/Tango.Scripting.Test/MainWindow.xaml | 38 ++ .../Tango.Scripting.Test/MainWindow.xaml.cs | 46 ++ .../Scripting/Tango.Scripting.Test/MainWindowVM.cs | 62 +++ .../Properties/AssemblyInfo.cs | 55 +++ .../Properties/Resources.Designer.cs | 73 +++ .../Tango.Scripting.Test/Properties/Resources.resx | 124 ++++++ .../Properties/Settings.Designer.cs | 30 ++ .../Properties/Settings.settings | 7 + .../Tango.Scripting.Test/Resources/template.csx | 18 + .../Tango.Scripting.Test.csproj | 132 ++++++ .../Scripting/Tango.Scripting.Test/lib.csx | 13 + .../Tango.Scripting/Parsing/ScriptParser.cs | 16 +- Software/Visual_Studio/Tango.Core/TangoProgress.cs | 12 + .../Controls/ScriptEditorControl.xaml | 113 ----- .../Controls/ScriptEditorControl.xaml.cs | 488 --------------------- .../Tango.SharedUI/Tango.SharedUI.csproj | 13 +- .../Visual_Studio/Tango.Stubs/CSharp-Mode.xshd | 298 +++++++++++++ .../Tango.Stubs/Controls/ScriptEditorControl.xaml | 113 +++++ .../Controls/ScriptEditorControl.xaml.cs | 488 +++++++++++++++++++++ .../Visual_Studio/Tango.Stubs/Tango.Stubs.csproj | 14 +- .../Visual_Studio/Tango.Stubs/Views/StubsView.xaml | 3 +- Software/Visual_Studio/Tango.sln | 81 +++- 61 files changed, 3160 insertions(+), 658 deletions(-) create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationError.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationResult.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/GlobalObject.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ProjectManager.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ProjectSession.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ProjectSessionState.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ProjectSessionStateChangedEventArgs.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Properties/Resources.Designer.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Properties/Resources.resx create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Properties/Settings.Designer.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Properties/Settings.settings create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Resources/template.csx create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Script.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Tango.Scripting.Basic.csproj create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Themes/Generic.xaml create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/app.config create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Basic/packages.config create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Core/IScriptSource.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Core/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Core/Tango.Scripting.Core.csproj create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CachedAssembly.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/App.config create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/App.xaml create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/App.xaml.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/MainWindow.xaml create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/MainWindow.xaml.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/MainWindowVM.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Properties/Resources.Designer.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Properties/Resources.resx create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Properties/Settings.Designer.cs create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Properties/Settings.settings create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Resources/template.csx create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/Tango.Scripting.Test.csproj create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Test/lib.csx delete mode 100644 Software/Visual_Studio/Tango.SharedUI/Controls/ScriptEditorControl.xaml delete mode 100644 Software/Visual_Studio/Tango.SharedUI/Controls/ScriptEditorControl.xaml.cs create mode 100644 Software/Visual_Studio/Tango.Stubs/CSharp-Mode.xshd create mode 100644 Software/Visual_Studio/Tango.Stubs/Controls/ScriptEditorControl.xaml create mode 100644 Software/Visual_Studio/Tango.Stubs/Controls/ScriptEditorControl.xaml.cs diff --git a/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/Program.cs b/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/Program.cs index 5067058c8..2b95ea2c1 100644 --- a/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/Program.cs +++ b/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/Program.cs @@ -27,9 +27,11 @@ namespace ConsoleApp8 static void Main(string[] args) { + String startPath = System.Windows.Forms.Application.StartupPath; + var scriptOptions = ScriptOptions.Default. - WithFilePath(System.Windows.Forms.Application.StartupPath). + WithFilePath(startPath). WithReferences(new Assembly[] { typeof(System.Windows.Forms.Form).Assembly, typeof(Program).Assembly }); @@ -37,6 +39,24 @@ namespace ConsoleApp8 String script = File.ReadAllText("main.csx"); + foreach (var match in Regex.Matches(script, "#load \".+\"").OfType()) + { + String line = match.ToString(); + var pathMatch = Regex.Match(line, "(?<=\")(.*?)(?=\")"); + if (pathMatch.Success) + { + String path = pathMatch.ToString(); + + if (!Path.IsPathRooted(path)) + { + StringBuilder builder = new StringBuilder(script); + builder.Insert(match.Index + pathMatch.Index, Path.GetFullPath(startPath + "\\")); + script = builder.ToString(); + } + } + } + + var s = CSharpScript.Create(script, scriptOptions); var compileResult = s.Compile(); diff --git a/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/main.csx b/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/main.csx index f0b973033..61d086068 100644 --- a/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/main.csx +++ b/Software/Experiments/RoslynTest/ConsoleApp8/ConsoleApp8/main.csx @@ -1,4 +1,4 @@ -#load "C:\Users\Roy\source\repos\ConsoleApp8\ConsoleApp8\bin\Debug\lib.csx" +#load "lib.csx" using System; using System.Collections.Generic; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml index 0408319ea..cc2c1fd46 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml @@ -156,12 +156,12 @@ - + HighlightTypes="{Binding HighlightTypes}"/>--> diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationError.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationError.cs new file mode 100644 index 000000000..27c710b2f --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationError.cs @@ -0,0 +1,19 @@ +using Microsoft.CodeAnalysis; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.Basic +{ + public class CompilationError + { + public String File { get; set; } + public String Message { get; set; } + public DiagnosticSeverity Severity { get; set; } + public int Line { get; set; } + public int Column { get; set; } + public int Length { get; set; } + } +} diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationResult.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationResult.cs new file mode 100644 index 000000000..d3676acc0 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/CompilationResult.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.IO; + +namespace Tango.Scripting.Basic +{ + public class CompilationResult + { + public List Errors { get; set; } + public TemporaryFolder TemporaryProjectPath { get; set; } + public Microsoft.CodeAnalysis.Scripting.Script Script { get; set; } + + public CompilationResult() + { + Errors = new List(); + } + } +} diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/GlobalObject.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/GlobalObject.cs new file mode 100644 index 000000000..fc48bb2a2 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/GlobalObject.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.Basic +{ + public class GlobalObject + { + public IContext GlobalContext { get; set; } + } +} diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs new file mode 100644 index 000000000..906047c2a --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/IContext.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +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 new file mode 100644 index 000000000..ddf61e124 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs @@ -0,0 +1,211 @@ +using Microsoft.CodeAnalysis.CSharp.Scripting; +using Microsoft.CodeAnalysis.Scripting; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Tango.Core; +using Tango.Core.IO; +using Tango.Scripting.Core; +using System.IO; + +namespace Tango.Scripting.Basic +{ + public class Project : ExtendedObject + { + public String Name { get; set; } + + public ApartmentState ApartmentState { get; set; } + + public ObservableCollection ReferenceAssemblies { get; set; } + + [JsonIgnore] + public ObservableCollection ReferenceAssembliesLoaded { get; set; } + + public ObservableCollection