Suggestion AutoCompleteVariable ( string input, string[] args, ConfigVariable variable )
{
var suggestion = new Suggestion(input);
var type = variable.Property.PropertyType;
var candidates = new string[0];
//
// Gather possible values :
//
if (type==typeof(bool)) {
candidates = new string[]{"True", "False"};
} else if (type.IsEnum) {
candidates = Enum.GetNames(type);
} else {
candidates = new string[]{variable.Get()};
}
//
// Only name of the variables is entered.
// Just show possible values.
//
if (args.Length==1) {
suggestion.Set( args[0] + " ");
suggestion.AddRange( candidates.Select( c1 => args[0] + " " + c1 ) );
return suggestion;
}
//
// Select candidates that starts with entered value.
//
candidates = candidates
.Where( c => c.StartsWith( args[1], StringComparison.OrdinalIgnoreCase) )
.ToArray();
var longest = LongestCommon( candidates );
suggestion.AddRange( candidates.Select( c1 => args[0] + " " + c1 ) );
// add quotes if longest common contains spaces :
if (longest!=null && longest.Any( c => char.IsWhiteSpace(c) )) {
longest = "\"" + longest;// + "\"";
if (candidates.Length==1) {
// only on suggestion - close quotes.
longest += "\"";
}
} else {
}
suggestion.Set( string.Format("{0} {1}", args[0], longest) );
return suggestion;
}