aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs')
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs41
1 files changed, 37 insertions, 4 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs b/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
index e9cb8fc4c..63d2cca5d 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting/Parsing/ScriptParser.cs
@@ -138,9 +138,32 @@ namespace Tango.Scripting.Parsing
varSymbol.Type = type;
varSymbol.Class = ReplaceFakeScript(symbol.ContainingType?.Name);
varSymbol.Kind = symbol.Kind;
+ varSymbol.RealSymbol = symbol;
varSymbol.Accessibility = symbol.DeclaredAccessibility;
varSymbol.ContainingNamespace = ReplaceFakeScript(symbol.ContainingNamespace?.Name);
varSymbol.Summary = GetSymbolDocumentation(symbol);
+
+ try
+ {
+ if (symbol.Kind == SymbolKind.Local && symbol.DeclaringSyntaxReferences.Count() > 0)
+ {
+ var node = symbol.DeclaringSyntaxReferences.First().GetSyntax() as VariableDeclaratorSyntax;
+
+ if (node != null)
+ {
+ varSymbol.IsUnassigned = node.Initializer == null;
+ }
+ }
+ }
+ catch { }
+
+ try
+ {
+ varSymbol.Offset = symbol.Locations[0].SourceSpan.Start;
+ varSymbol.Length = symbol.Locations[0].SourceSpan.Length;
+ }
+ catch { }
+
vars.Add(varSymbol);
if (type == "?")
@@ -417,7 +440,7 @@ namespace Tango.Scripting.Parsing
var root = (CompilationUnitSyntax)tree.GetRoot();
List<VariableDeclaratorSyntax> variables = new List<VariableDeclaratorSyntax>();
- FillVariables(variables, root.Members[0]);
+ FillVariables(variables, new List<SyntaxNode>(), root.Members[0]);
variables = variables.Distinct().ToList();
foreach (var item in variables)
@@ -440,17 +463,27 @@ namespace Tango.Scripting.Parsing
return vars;
}
- private void FillVariables(List<VariableDeclaratorSyntax> variables, SyntaxNode node)
+ private void FillVariables(List<VariableDeclaratorSyntax> variables, List<SyntaxNode> existingNodes, SyntaxNode node)
{
- foreach (var item in node.DescendantNodes(x => true))
+ var nodes = node.ChildNodes().ToList();
+
+ nodes.RemoveAll(x => existingNodes.Contains(x));
+
+ foreach (var item in nodes)
{
+ existingNodes.Add(item);
+
if (item.GetType() == typeof(VariableDeclaratorSyntax))
{
variables.Add(item as VariableDeclaratorSyntax);
}
+ else if (item == node)
+ {
+ continue;
+ }
else
{
- FillVariables(variables, item);
+ FillVariables(variables, existingNodes, item);
}
}
}