/// <summary> /// Decides if the current function definition is a reference of the symbol being searched for. /// A reference of the symbol will be a of type SymbolType.Function and have the same name as the symbol /// </summary> /// <param name="functionDefinitionAst">A functionDefinitionAst in the script's AST</param> /// <returns>A visit action that continues the search for references</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { // Get the start column number of the function name, // instead of the the start column of 'function' and create new extent for the functionName int startColumnNumber = functionDefinitionAst.Extent.Text.IndexOf( functionDefinitionAst.Name) + 1; IScriptExtent nameExtent = new ScriptExtent() { Text = functionDefinitionAst.Name, StartLineNumber = functionDefinitionAst.Extent.StartLineNumber, EndLineNumber = functionDefinitionAst.Extent.StartLineNumber, StartColumnNumber = startColumnNumber, EndColumnNumber = startColumnNumber + functionDefinitionAst.Name.Length }; if (symbolRef.SymbolType.Equals(SymbolType.Function) && nameExtent.Text.Equals(symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase)) { this.FoundReferences.Add(new SymbolReference( SymbolType.Function, nameExtent)); } return(base.VisitFunctionDefinition(functionDefinitionAst)); }
/// <summary> /// Adds keys in the input hashtable to the symbol reference /// </summary> public override AstVisitAction VisitHashtable(HashtableAst hashtableAst) { if (hashtableAst.KeyValuePairs == null) { return(AstVisitAction.Continue); } foreach (var kvp in hashtableAst.KeyValuePairs) { var keyStrConstExprAst = kvp.Item1 as StringConstantExpressionAst; if (keyStrConstExprAst != null) { IScriptExtent nameExtent = new ScriptExtent() { Text = keyStrConstExprAst.Value, StartLineNumber = kvp.Item1.Extent.StartLineNumber, EndLineNumber = kvp.Item2.Extent.EndLineNumber, StartColumnNumber = kvp.Item1.Extent.StartColumnNumber, EndColumnNumber = kvp.Item2.Extent.EndColumnNumber }; SymbolType symbolType = SymbolType.HashtableKey; this.SymbolReferences.Add( new SymbolReference( symbolType, nameExtent)); } } return(AstVisitAction.Continue); }
/// <summary> /// Checks to see if this function definition is the symbol we are looking for. /// </summary> /// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param> /// <returns>A descion to stop searching if the right symbol was found, /// or a decision to continue if it wasn't found</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { int startColumnNumber = functionDefinitionAst.Extent.Text.IndexOf( functionDefinitionAst.Name) + 1; IScriptExtent nameExtent = new ScriptExtent() { Text = functionDefinitionAst.Name, StartLineNumber = functionDefinitionAst.Extent.StartLineNumber, EndLineNumber = functionDefinitionAst.Extent.EndLineNumber, StartColumnNumber = startColumnNumber, EndColumnNumber = startColumnNumber + functionDefinitionAst.Name.Length }; if (this.IsPositionInExtent(nameExtent)) { this.FoundSymbolReference = new SymbolReference( SymbolType.Function, nameExtent); return(AstVisitAction.StopVisit); } return(base.VisitFunctionDefinition(functionDefinitionAst)); }
public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) { IScriptExtent nameExtent = new ScriptExtent() { Text = configurationDefinitionAst.InstanceName.Extent.Text, StartLineNumber = configurationDefinitionAst.Extent.StartLineNumber, EndLineNumber = configurationDefinitionAst.Extent.EndLineNumber, StartColumnNumber = configurationDefinitionAst.Extent.StartColumnNumber, EndColumnNumber = configurationDefinitionAst.Extent.EndColumnNumber }; this.SymbolReferences.Add( new SymbolReference( SymbolType.Configuration, nameExtent)); return(AstVisitAction.Continue); }
/// <summary> /// Adds each function definition as a /// </summary> /// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param> /// <returns>A decision to stop searching if the right symbol was found, /// or a decision to continue if it wasn't found</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { IScriptExtent nameExtent = new ScriptExtent() { Text = functionDefinitionAst.Name, StartLineNumber = functionDefinitionAst.Extent.StartLineNumber, EndLineNumber = functionDefinitionAst.Extent.EndLineNumber, StartColumnNumber = functionDefinitionAst.Extent.StartColumnNumber, EndColumnNumber = functionDefinitionAst.Extent.EndColumnNumber }; SymbolType symbolType = functionDefinitionAst.IsWorkflow ? SymbolType.Workflow : SymbolType.Function; this.SymbolReferences.Add( new SymbolReference( symbolType, nameExtent)); return(AstVisitAction.Continue); }