Example #1
0
        /// <summary>
        /// Finds parameter name by parameter index and determines
        /// if the parameter is a named argument.
        /// </summary>
        /// <param name="index">Parameter index</param>
        /// <param name="namedParameter">If true, parameter is a named argument</param>
        /// <returns></returns>
        public string GetParameterName(int index, out bool namedParameter)
        {
            namedParameter = false;
            if (index < 0 || index > Arguments.Count - 1)
            {
                return(string.Empty);
            }

            CommaSeparatedItem arg = Arguments[index];

            if (arg is NamedArgument)
            {
                namedParameter = true;
                return(((NamedArgument)arg).Name);
            }
            else if (arg is ExpressionArgument)
            {
                IExpression exp = ((ExpressionArgument)arg).ArgumentValue;
                if (exp.Children.Count == 1 && exp.Children[0] is Variable)
                {
                    return(((Variable)exp.Children[0]).Name);
                }
            }

            return(string.Empty);
        }
Example #2
0
        /// <summary>
        /// Determines if position is in the argument name. Typically used to
        ///     a) suppress general intellisense when typing function arguments
        ///         in a function/ definition such as in 'x &lt;- function(a|'
        ///     b) determine if completion list should contain argumet names
        ///        when user types inside function call.
        /// </summary>
        internal static bool IsInFunctionArgumentName <T>(AstRoot ast, int position) where T : class, IFunction
        {
            T funcDef = ast.GetNodeOfTypeFromPosition <T>(position);

            if (funcDef == null || funcDef.OpenBrace == null || funcDef.Arguments == null)
            {
                return(false);
            }

            if (position < funcDef.OpenBrace.End || position >= funcDef.SignatureEnd)
            {
                return(false);
            }

            int start = funcDef.OpenBrace.End;
            int end   = funcDef.SignatureEnd;

            if (funcDef.Arguments.Count == 0 && position >= start && position <= end)
            {
                return(true);
            }

            for (int i = 0; i < funcDef.Arguments.Count; i++)
            {
                CommaSeparatedItem csi = funcDef.Arguments[i];
                NamedArgument      na  = csi as NamedArgument;

                if (position < csi.Start)
                {
                    break;
                }

                end = csi.End;
                if (position >= start && position <= end)
                {
                    if (na == null)
                    {
                        return(true);
                    }

                    if (position <= na.EqualsSign.Start)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }