aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-04-22 07:01:05 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-04-22 07:01:05 +0300
commit405f1ac07d78468c3e1a0ef1c0dc8956635c8677 (patch)
treee7103eb16188663d28f0926b94eaabd87fb2473b /Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
parent499e0a03bb41e2330a47ccca83e6e6dfe7c5a634 (diff)
downloadTango-405f1ac07d78468c3e1a0ef1c0dc8956635c8677.tar.gz
Tango-405f1ac07d78468c3e1a0ef1c0dc8956635c8677.zip
FSE work + fixed issue with personal access token on MS and PPC.
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs')
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs91
1 files changed, 82 insertions, 9 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs b/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
index 7accdbb83..e9cb8fc4c 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
@@ -131,16 +131,32 @@ namespace Tango.Scripting.Parsing
if (prop != null)
{
- vars.Add(new ScriptSymbol()
+ var type = ReplaceFakeScript(prop.GetValue(symbol).ToString());
+
+ ScriptSymbol varSymbol = new ScriptSymbol();
+ varSymbol.Name = symbol.Name;
+ varSymbol.Type = type;
+ varSymbol.Class = ReplaceFakeScript(symbol.ContainingType?.Name);
+ varSymbol.Kind = symbol.Kind;
+ varSymbol.Accessibility = symbol.DeclaredAccessibility;
+ varSymbol.ContainingNamespace = ReplaceFakeScript(symbol.ContainingNamespace?.Name);
+ varSymbol.Summary = GetSymbolDocumentation(symbol);
+ vars.Add(varSymbol);
+
+ if (type == "?")
{
- Name = symbol.Name,
- Type = ReplaceFakeScript(prop.GetValue(symbol).ToString()),
- Class = ReplaceFakeScript(symbol.ContainingType?.Name),
- Kind = symbol.Kind,
- Accessibility = symbol.DeclaredAccessibility,
- ContainingNamespace = ReplaceFakeScript(symbol.ContainingNamespace?.Name),
- Summary = GetSymbolDocumentation(symbol),
- });
+ try
+ {
+ var variables = GetScriptVariables(code);
+ var variable = variables.FirstOrDefault(x => x.Name == symbol.Name);
+
+ if (variable != null)
+ {
+ varSymbol.Type = variable.Type;
+ }
+ }
+ catch { }
+ }
}
}
}
@@ -392,5 +408,62 @@ namespace Tango.Scripting.Parsing
var ret = root.ToFullString();
return ret;
}
+
+ private List<ScriptVariable> GetScriptVariables(String code)
+ {
+ List<ScriptVariable> vars = new List<ScriptVariable>();
+
+ SyntaxTree tree = CSharpSyntaxTree.ParseText(code);
+ var root = (CompilationUnitSyntax)tree.GetRoot();
+
+ List<VariableDeclaratorSyntax> variables = new List<VariableDeclaratorSyntax>();
+ 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<VariableDeclaratorSyntax> 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);
+ }
+ }
+ }
+
+ private class ScriptVariable
+ {
+ public String Name { get; set; }
+ public String Type { get; set; }
+
+ public override string ToString()
+ {
+ return String.Format("{0} : {1}", Type, Name);
+ }
+ }
}
}