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); }