Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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);
        }