diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-03-11 15:41:05 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-03-11 15:41:05 +0200 |
| commit | b0bbc0bec1aaed2230b8a4aa1c08e379fed4629a (patch) | |
| tree | ce6350fdd098e42ce9bab88e1ba86b3fe544ec18 /Software/Visual_Studio | |
| parent | 4568cd0ed72a7e4c38d54a3820652e761e3510bc (diff) | |
| download | Tango-b0bbc0bec1aaed2230b8a4aa1c08e379fed4629a.tar.gz Tango-b0bbc0bec1aaed2230b8a4aa1c08e379fed4629a.zip | |
WOrking on script engine.
Diffstat (limited to 'Software/Visual_Studio')
12 files changed, 162 insertions, 24 deletions
diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk Binary files differindex 1fc56ba11..01dc974ad 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk 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 Binary files differindex 91b35a829..3e40469f5 100644 --- 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 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 Binary files differindex 37de414e9..763eadffb 100644 --- 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 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 Binary files differindex 3b07597dd..fb00f0cc7 100644 --- 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 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 Binary files differindex 7f2b6b5ef..6520448ce 100644 --- 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 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 Binary files differindex 4abd1a4a4..d2f90f569 100644 --- 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 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<String> _current_usings; private List<KnownType> _knownTypes; - private List<INamedTypeSymbol> _declaredTypes; + private List<ScriptType> _declaredTypes; #region Mini Classes @@ -136,7 +136,7 @@ namespace Tango.Scripting.Editors /// </summary> public ScriptEditor() { - _declaredTypes = new List<INamedTypeSymbol>(); + _declaredTypes = new List<ScriptType>(); _current_usings = new List<string>(); @@ -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("<Word>{0}</Word>", type.Name)); } - else if (type.TypeKind == TypeKind.Class) + else if (type.Kind == TypeKind.Class) { referenceTypes.Add(String.Format("<Word>{0}</Word>", 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, "<.+>", "<T>")); + + 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 @@ <Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" /> </ItemGroup> <ItemGroup> - <Resource Include="Images\enum.png" /> + <Resource Include="Images\method.png" /> </ItemGroup> <ItemGroup> <Resource Include="Images\class.png" /> </ItemGroup> <ItemGroup> - <Resource Include="Images\interface.png" /> + <Resource Include="Images\enum.png" /> </ItemGroup> <ItemGroup> - <Resource Include="Images\struct.png" /> + <Resource Include="Images\field.png" /> </ItemGroup> <ItemGroup> - <Resource Include="Images\namespace.png" /> + <Resource Include="Images\interface.png" /> </ItemGroup> <ItemGroup> - <Resource Include="Images\method.png" /> + <Resource Include="Images\namespace.png" /> </ItemGroup> <ItemGroup> <Resource Include="Images\property.png" /> </ItemGroup> <ItemGroup> - <Resource Include="Images\field.png" /> + <Resource Include="Images\struct.png" /> </ItemGroup> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UseGlobalSettings="True" /> + <UserProperties BuildVersion_UseGlobalSettings="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file 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 index 43a5a6b54..1ee2b780c 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptParser.cs +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptParser.cs @@ -50,6 +50,8 @@ namespace Tango.Scripting.Parsing Type = prop.GetValue(symbol).ToString(), Class = symbol.ContainingType?.Name, Kind = symbol.Kind, + Accessibility = symbol.DeclaredAccessibility, + ContainingNamespace = symbol.ContainingNamespace?.Name, }); } } @@ -65,6 +67,8 @@ namespace Tango.Scripting.Parsing Type = prop.GetValue(symbol).ToString(), Class = symbol.ContainingType?.Name, Kind = symbol.Kind, + Accessibility = symbol.DeclaredAccessibility, + ContainingNamespace = symbol.ContainingNamespace?.Name, }); } } @@ -80,9 +84,9 @@ namespace Tango.Scripting.Parsing return matches.OfType<Match>().Select(x => x.Value.Replace("using ", "").Replace(";", "").Replace("\n", "").Replace("\t", "").Replace("\r", "")).ToList(); } - public List<INamedTypeSymbol> GetDeclaredTypes(String code) + public List<ScriptType> GetDeclaredTypes(String code) { - List<INamedTypeSymbol> types = new List<INamedTypeSymbol>(); + List<ScriptType> types = new List<ScriptType>(); SyntaxTree tree = CSharpSyntaxTree.ParseText(code); CompilationUnitSyntax root = tree.GetCompilationUnitRoot(); @@ -94,7 +98,63 @@ namespace Tango.Scripting.Parsing var type = model.GetDeclaredSymbol(d); if (!String.IsNullOrWhiteSpace(type.Name)) { - types.Add(type); + ScriptType scriptType = new ScriptType(); + scriptType.Name = type.Name; + scriptType.Kind = type.TypeKind; + scriptType.ContainingNamespace = type.ContainingNamespace?.Name; + + foreach (var symbol in d.DescendantNodes().OfType<PropertyDeclarationSyntax>()) + { + var symbolModel = model.GetDeclaredSymbol(symbol); + + scriptType.Symbols.Add(new ScriptSymbol() + { + Class = scriptType.Name, + Accessibility = symbolModel.DeclaredAccessibility, + Kind = SymbolKind.Property, + Name = symbolModel.Name, + Type = symbolModel.Type.ToString(), + ContainingNamespace = symbolModel.ContainingNamespace?.Name, + }); + } + + foreach (var symbol in d.DescendantNodes().OfType<FieldDeclarationSyntax>()) + { + var symbolModel = model.GetDeclaredSymbol(symbol.Declaration.Variables.FirstOrDefault()) as IFieldSymbol; + + if (symbolModel != null) + { + scriptType.Symbols.Add(new ScriptSymbol() + { + Class = scriptType.Name, + Accessibility = symbolModel.DeclaredAccessibility, + Kind = SymbolKind.Field, + Name = symbolModel.Name, + Type = symbolModel.Type.ToString(), + ContainingNamespace = symbolModel.ContainingNamespace?.Name, + }); + } + } + + foreach (var symbol in d.DescendantNodes().OfType<MethodDeclarationSyntax>()) + { + var symbolModel = model.GetDeclaredSymbol(symbol); + + if (symbolModel != null) + { + scriptType.Symbols.Add(new ScriptSymbol() + { + Class = scriptType.Name, + Accessibility = symbolModel.DeclaredAccessibility, + Kind = SymbolKind.Method, + Name = symbolModel.Name, + Type = symbolModel.ReturnType.ToString(), + ContainingNamespace = symbolModel.ContainingNamespace?.Name, + }); + } + } + + types.Add(scriptType); } } diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptVariable.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptSymbol.cs index 50b3fdd7e..b93b7951a 100644 --- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptVariable.cs +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptSymbol.cs @@ -13,6 +13,8 @@ namespace Tango.Scripting.Parsing public String Type { get; set; } public SymbolKind Kind { get; set; } public String Class { get; set; } + public Accessibility Accessibility { get; set; } + public String ContainingNamespace { get; set; } public override string ToString() { diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptType.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptType.cs new file mode 100644 index 000000000..fc360acb5 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting/Parsing/ScriptType.cs @@ -0,0 +1,22 @@ +using Microsoft.CodeAnalysis; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.Parsing +{ + public class ScriptType + { + public String Name { get; set; } + public TypeKind Kind { get; set; } + public List<ScriptSymbol> Symbols { get; set; } + public string ContainingNamespace { get; set; } + + public ScriptType() + { + Symbols = new List<ScriptSymbol>(); + } + } +} 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 f5d0175e7..081009e7e 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 @@ -124,6 +124,7 @@ <Compile Include="ExtensionMethods.cs" /> <Compile Include="GlobalObject.cs" /> <Compile Include="IScriptingEngine.cs" /> + <Compile Include="Parsing\ScriptType.cs" /> <Compile Include="ReferenceAssembly.cs" /> <Compile Include="Script.cs" /> <Compile Include="ScriptingEngine.cs" /> @@ -133,7 +134,7 @@ <Compile Include="ScriptSession.cs" /> <Compile Include="ScriptSessionStateChangedEventArgs.cs" /> <Compile Include="ScriptSessionState.cs" /> - <Compile Include="Parsing\ScriptVariable.cs" /> + <Compile Include="Parsing\ScriptSymbol.cs" /> </ItemGroup> <ItemGroup> <None Include="app.config" /> |
