private List <string> GetNamedParameterAutoComplete(CommandResolver resolver, InputNode currentNode)
        {
            CommandParameterAnalysis analysis = new CommandParameterAnalysis(resolver);

            List <string> values = analysis.AvailableParameters
                                   .Where(p => p.Name.StartsWith(currentNode.Value, StringComparison.OrdinalIgnoreCase))
                                   .Select(p => p.Name).ToList();

            values.AddRange(analysis.AvailableParameters
                            .SelectMany(p => p.Aliases)
                            .Where(a => a.StartsWith(currentNode.Value, StringComparison.OrdinalIgnoreCase)));

            return(values.OrderBy(v => v).ToList());
        }
        private List <string> GetParameterAutoComplete(CommandResolver resolver, InputNode currentNode)
        {
            CommandResolverNode resolverNode = resolver.GetNode(currentNode);
            ParameterDef        def          = resolverNode != null ? resolverNode.Parameter : null;

            string validationFunctionName = null;

            // try to find ordinal parameter definition for an empty element

            if (def == null && currentNode.ElementType == InputNodeType.Empty)
            {
                int ordinalIndex = resolver.Input.InputNodes
                                   .Where(n => n.Index < currentNode.Index && n.ElementType == InputNodeType.OrdinalParameterValue).Count() + 1;

                def = new CommandParameterAnalysis(resolver).AvailableParameters
                      .Where(p => p.OrdinalPosition == ordinalIndex).FirstOrDefault();
            }

            // find validation function for a valid resolver node

            if (def != null)
            {
                validationFunctionName = def.AutoCompleteValuesFunction;
            }

            // execute validation values function

            try
            {
                if (validationFunctionName != null)
                {
                    return(Util.GetParameterAutoCompleteValues(resolver, def, _hostInterface)
                           .Where(v => v.StartsWith(currentNode.Value, StringComparison.OrdinalIgnoreCase)).ToList());
                }
            }
            catch (Exception ex)
            {
                // TODO: Do something with this exception
            }

            return(null);
        }