From 9686fca002119f623ec162fce7f2e1eee4a71dc3 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 12 Feb 2019 09:03:39 +0200 Subject: Some work... --- .../Folding/BraceFoldingStrategy.cs | 3 + .../Tango.Scripting.Editors/ScriptEditor.cs | 47 ++++++++++--- .../Tango.Scripting.Editors.csproj | 4 +- .../Tango.Scripting/Parsing/DetectedType.cs | 14 ++++ .../Tango.Scripting/Parsing/ScriptParser.cs | 80 ++++++++++++++++++++++ .../Tango.Scripting/Parsing/ScriptVariable.cs | 19 +++++ .../Tango.Scripting/ScriptParser.cs | 61 ----------------- .../Tango.Scripting/ScriptVariable.cs | 19 ----- .../Tango.Scripting/Tango.Scripting.csproj | 5 +- 9 files changed, 157 insertions(+), 95 deletions(-) create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/DetectedType.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptParser.cs create mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptVariable.cs delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptParser.cs delete mode 100644 Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptVariable.cs (limited to 'Software/Visual_Studio') diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Folding/BraceFoldingStrategy.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Folding/BraceFoldingStrategy.cs index a20f36046..0b26184ee 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Folding/BraceFoldingStrategy.cs +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Folding/BraceFoldingStrategy.cs @@ -37,6 +37,9 @@ namespace Tango.Scripting.Editors.Folding new FoldingDefinition("private","}"), new FoldingDefinition("internal","}"), new FoldingDefinition("if","}"), + new FoldingDefinition("class","}"), + new FoldingDefinition("while","}"), + new FoldingDefinition("static void","}"), new FoldingDefinition("/// ","/// "), }; diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs index a42e743ad..b4a98804c 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs @@ -20,16 +20,19 @@ using Tango.Scripting.Editors.CodeCompletion; using Tango.Scripting.Editors.Document; using Tango.Scripting.Editors.Editing; using Tango.Scripting.Editors.Folding; +using Tango.Scripting.Parsing; namespace Tango.Scripting.Editors { public class ScriptEditor : TextEditor { - private DispatcherTimer foldingUpdateTimer; + private DispatcherTimer _update_timer; private FoldingManager foldingManager; private BraceFoldingStrategy foldingStrategy; private CompletionWindow completionWindow; private List _types = new List(); + private ScriptParser _parser; + private List _current_usings; #region Completion @@ -144,20 +147,33 @@ namespace Tango.Scripting.Editors public ScriptEditor() { + _parser = new ScriptParser(); + TextArea.IndentationStrategy = new Indentation.CSharp.CSharpIndentationStrategy(Options); foldingStrategy = new BraceFoldingStrategy(); - foldingUpdateTimer = new DispatcherTimer(); - foldingUpdateTimer.Interval = TimeSpan.FromSeconds(2); - foldingUpdateTimer.Tick += FoldingUpdateTimer_Tick; - foldingUpdateTimer.Start(); + _update_timer = new DispatcherTimer(); + _update_timer.Interval = TimeSpan.FromSeconds(2); + _update_timer.Tick += UpdateTimer_Tick; + _update_timer.Start(); IndentCommand = new RelayCommand(IndentCode); TextArea.TextEntered += TextArea_TextEntered; } - private void FoldingUpdateTimer_Tick(object sender, EventArgs e) + private void UpdateTimer_Tick(object sender, EventArgs e) + { + InvalidateFolding(); + InvalidateUsings(); + } + + private void InvalidateUsings() + { + var usings = _parser.GetUsings(Text); + } + + private void InvalidateFolding() { if (EnableFolding) { @@ -253,18 +269,27 @@ namespace Tango.Scripting.Editors String word = String.Empty; var line = GetCurrentLine(); String lineText = Document.GetText(line); - Regex r = new Regex(@"(\w+\.)"); - var match = r.Matches(lineText.Substring(0, line.EndOffset)); - var g = match.OfType().LastOrDefault(); + int position = CaretOffset; - if (g != null) + for (int i = lineText.Length - 1; i >= 0; i--) { - word = g.Value.Replace(".", ""); + if (lineText[i] == ' ' || lineText[i] == '\t') + { + break; + } + word += lineText[i]; + } + word = new string(word.Reverse().ToArray()); + if (word.Length > 0) + { + word = word.Replace(".", ""); } + + } } diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj index 5dc21efae..4031baf3c 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj @@ -95,7 +95,7 @@ 3.5 - D:\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Core.dll + ..\..\..\Build\Core\Debug\Tango.Core.dll 3.0 @@ -492,7 +492,7 @@ - + \ No newline at end of file diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/DetectedType.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/DetectedType.cs new file mode 100644 index 000000000..5184d67ca --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/DetectedType.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.Parsing +{ + public class DetectedType + { + public bool IsInterface { get; set; } + public Type Type { get; set; } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptParser.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptParser.cs new file mode 100644 index 000000000..f06144afb --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptParser.cs @@ -0,0 +1,80 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Tango.Scripting.Parsing +{ + public class ScriptParser + { + public List ParseScript(String code) + { + List vars = new List(); + + SyntaxTree tree = CSharpSyntaxTree.ParseText(code); + var root = (CompilationUnitSyntax)tree.GetRoot(); + + List variables = new List(); + FillVariables(variables, root.Members[0]); + variables = variables.Distinct().ToList(); + + foreach (var item in variables) + { + ScriptVariable v = new ScriptVariable(); + v.Name = item.Identifier.ToString(); + + if (item.Initializer.Value.GetType() == typeof(ObjectCreationExpressionSyntax)) + { + v.Type = (item.Initializer.Value as ObjectCreationExpressionSyntax).Type.ToString(); + } + else if (item.Initializer.Value.GetType() == typeof(InvocationExpressionSyntax)) + { + v.Type = (((item.Initializer.Value as InvocationExpressionSyntax).Expression as MemberAccessExpressionSyntax).Name as GenericNameSyntax).TypeArgumentList.Arguments[0].ToString(); + } + + vars.Add(v); + } + + return vars; + } + + //public List DetectTypes(String code, List referenceAssemblies) + //{ + // SyntaxTree tree = CSharpSyntaxTree.ParseText(code); + // CompilationUnitSyntax root = tree.GetCompilationUnitRoot(); + // var compilation = CSharpCompilation.Create("CSharpScript").AddReferences(referenceAssemblies.Select(x => MetadataReference.CreateFromFile(x.Assembly.Location))).AddSyntaxTrees(tree); + + // SemanticModel model = compilation.GetSemanticModel(tree); + + + //} + + private void FillVariables(List variables, SyntaxNode node) + { + foreach (var item in node.DescendantNodes(x => true)) + { + if (item.GetType() == typeof(VariableDeclaratorSyntax)) + { + variables.Add(item as VariableDeclaratorSyntax); + } + else + { + FillVariables(variables, item); + } + } + } + + public List GetUsings(String code) + { + Regex r = new Regex("(using [^;]+)"); + var matches = r.Matches(code); + return matches.OfType().Select(x => x.Value.Replace("using ", "")).ToList(); + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptVariable.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptVariable.cs new file mode 100644 index 000000000..c843e07c6 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptVariable.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.Parsing +{ + public class ScriptVariable + { + public String Name { get; set; } + public String Type { get; set; } + + public override string ToString() + { + return String.Format("{0} : {1}", Type, Name); + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptParser.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptParser.cs deleted file mode 100644 index f641496fb..000000000 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptParser.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.Scripting -{ - public class ScriptParser - { - public List ParseScript(String code) - { - List vars = new List(); - - SyntaxTree tree = CSharpSyntaxTree.ParseText(code); - var root = (CompilationUnitSyntax)tree.GetRoot(); - - List variables = new List(); - FillVariables(variables, root.Members[0]); - variables = variables.Distinct().ToList(); - - foreach (var item in variables) - { - ScriptVariable v = new ScriptVariable(); - v.Name = item.Identifier.ToString(); - - if (item.Initializer.Value.GetType() == typeof(ObjectCreationExpressionSyntax)) - { - v.Type = (item.Initializer.Value as ObjectCreationExpressionSyntax).Type.ToString(); - } - else if (item.Initializer.Value.GetType() == typeof(InvocationExpressionSyntax)) - { - v.Type = (((item.Initializer.Value as InvocationExpressionSyntax).Expression as MemberAccessExpressionSyntax).Name as GenericNameSyntax).TypeArgumentList.Arguments[0].ToString(); - } - - vars.Add(v); - } - - return vars; - } - - private void FillVariables(List variables, SyntaxNode node) - { - foreach (var item in node.DescendantNodes(x => true)) - { - if (item.GetType() == typeof(VariableDeclaratorSyntax)) - { - variables.Add(item as VariableDeclaratorSyntax); - } - else - { - FillVariables(variables, item); - } - } - } - } -} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptVariable.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptVariable.cs deleted file mode 100644 index 25a2bb105..000000000 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/ScriptVariable.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.Scripting -{ - public class ScriptVariable - { - public String Name { get; set; } - public String Type { get; set; } - - public override string ToString() - { - return String.Format("{0} : {1}", Type, Name); - } - } -} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Tango.Scripting.csproj b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Tango.Scripting.csproj index f44d5fce9..28425884a 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Tango.Scripting.csproj +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Tango.Scripting.csproj @@ -121,16 +121,17 @@ + - + - + -- cgit v1.3.1