From b0bbc0bec1aaed2230b8a4aa1c08e379fed4629a Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Mon, 11 Mar 2019 15:41:05 +0200 Subject: WOrking on script engine. --- .../Tango.Scripting.Editors/Images/class.png | Bin 212 -> 417 bytes .../Tango.Scripting.Editors/Images/field.png | Bin 395 -> 216 bytes .../Tango.Scripting.Editors/Images/interface.png | Bin 222 -> 381 bytes .../Tango.Scripting.Editors/Images/namespace.png | Bin 250 -> 241 bytes .../Tango.Scripting.Editors/Images/property.png | Bin 363 -> 428 bytes .../Tango.Scripting.Editors/ScriptEditor.cs | 79 +++++++++++++++++---- .../Tango.Scripting.Editors.csproj | 14 ++-- 7 files changed, 73 insertions(+), 20 deletions(-) (limited to 'Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors') diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/class.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/class.png index 91b35a829..3e40469f5 100644 Binary files a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/class.png and b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/class.png differ diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png index 37de414e9..763eadffb 100644 Binary files a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png and b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png differ diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/interface.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/interface.png index 3b07597dd..fb00f0cc7 100644 Binary files a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/interface.png and b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/interface.png differ diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/namespace.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/namespace.png index 7f2b6b5ef..6520448ce 100644 Binary files a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/namespace.png and b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/namespace.png differ diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png index 4abd1a4a4..d2f90f569 100644 Binary files a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png and b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png differ 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 64fb0f194..bcc05bde5 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 @@ -50,7 +50,7 @@ namespace Tango.Scripting.Editors private ScriptParser _parser; private List _current_usings; private List _knownTypes; - private List _declaredTypes; + private List _declaredTypes; #region Mini Classes @@ -136,7 +136,7 @@ namespace Tango.Scripting.Editors /// public ScriptEditor() { - _declaredTypes = new List(); + _declaredTypes = new List(); _current_usings = new List(); @@ -511,11 +511,11 @@ namespace Tango.Scripting.Editors foreach (var type in _declaredTypes) { - if (type.TypeKind == TypeKind.Interface || type.TypeKind == TypeKind.Enum) + if (type.Kind == TypeKind.Interface || type.Kind == TypeKind.Enum) { interfaceTypes.Add(String.Format("{0}", type.Name)); } - else if (type.TypeKind == TypeKind.Class) + else if (type.Kind == TypeKind.Class) { referenceTypes.Add(String.Format("{0}", type.Name)); } @@ -752,6 +752,15 @@ namespace Tango.Scripting.Editors ShowCompletionWindow(data, GetCurrentWord()); } + else + { + var declaredType = GetCurrentDeclaredType(); + + if (declaredType != null) + { + + } + } } else if (e.Text == "(" || e.Text == ",") { @@ -837,43 +846,43 @@ namespace Tango.Scripting.Editors foreach (var type in _declaredTypes.Where(x => x.Name.StartsWith(word))) { - if (type.TypeKind == TypeKind.Struct) + if (type.Kind == TypeKind.Struct) { data.Add(new StructCompletionItem() { Name = type.Name, Description = "Declared inside the current script...", - Namespace = type.ContainingNamespace?.Name, + Namespace = type.ContainingNamespace, Priority = 1, }); } - else if (type.TypeKind == TypeKind.Enum) + else if (type.Kind == TypeKind.Enum) { data.Add(new EnumCompletionItem() { Name = type.Name, Description = "Declared inside the current script...", - Namespace = type.ContainingNamespace?.Name, + Namespace = type.ContainingNamespace, Priority = 1, }); } - else if (type.TypeKind == TypeKind.Interface) + else if (type.Kind == TypeKind.Interface) { data.Add(new InterfaceCompletionItem() { Name = type.Name, Description = "Declared inside the current script...", - Namespace = type.ContainingNamespace?.Name, + Namespace = type.ContainingNamespace, Priority = 1, }); } - else if (type.TypeKind == TypeKind.Class) + else if (type.Kind == TypeKind.Class) { data.Add(new ClassCompletionItem() { Name = type.Name, Description = "Declared inside the current script...", - Namespace = type.ContainingNamespace?.Name, + Namespace = type.ContainingNamespace, Priority = 1, }); } @@ -944,7 +953,7 @@ namespace Tango.Scripting.Editors Priority = 2, }); } - else if (symbol.Kind == SymbolKind.Field) + else if (symbol.Kind == SymbolKind.Field || symbol.Kind == SymbolKind.Local) { data.Add(new FieldCompletionItem() { @@ -1110,6 +1119,50 @@ namespace Tango.Scripting.Editors return null; } + private ScriptType GetCurrentDeclaredType() + { + var expression = GetPreviousWords().LastOrDefault(); + + if (expression != null) + { + var tree = expression.Split('.').Select(x => x.Remove(@"\n|\t|\r|\(.*\)|\[.*\]|\s")).ToList(); + var variableName = tree.FirstOrDefault(); + + if (variableName != null) + { + tree.RemoveAt(0); + var variables = _parser.GetContextSymbols(Document.Text, CaretOffset); + var variable = variables.FirstOrDefault(x => x.Name == variableName); + + if (variable != null) + { + var declaredType = _declaredTypes.FirstOrDefault(x => x.Name == Regex.Replace(variable.Type, "<.+>", "")); + + if (declaredType != null) + { + while (tree.Count > 1) + { + var memberName = tree.First(); + tree.RemoveAt(0); + var member = declaredType.Symbols.FirstOrDefault(x => x.Name == memberName); + + if (member == null) + { + return null; + } + + declaredType = _declaredTypes.FirstOrDefault(x => x.ContainingNamespace + "." + x.Name == member.ContainingNamespace + "." + member.Type); + } + + return declaredType; + } + } + } + } + + return null; + } + #endregion #region Popup 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 e5960a664..8b213a870 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 @@ -597,32 +597,32 @@ - + - + - + - + - + - + - + \ No newline at end of file -- cgit v1.3.1