private static IEnumerable<ISmartTabCompletionSource> FindNewTabCompletionHooks(CommandLineArgumentsDefinition definition)
{
List<ISmartTabCompletionSource> completionSources = new List<ISmartTabCompletionSource>();
if (definition.Metadata.HasMeta<TabCompletion>() && definition.Metadata.Meta<TabCompletion>().CompletionSourceType != null && definition.Metadata.Meta<TabCompletion>().CompletionSourceType.GetInterfaces().Contains(typeof(ISmartTabCompletionSource)))
{
completionSources.Add((ISmartTabCompletionSource)Activator.CreateInstance(definition.Metadata.Meta<TabCompletion>().CompletionSourceType));
}
foreach (var argument in definition.AllGlobalAndActionArguments)
{
foreach (var argSource in argument.Metadata.Metas<ArgumentAwareTabCompletionAttribute>())
{
var source = argSource.CreateTabCompletionSource(definition, argument);
if (source is ISmartTabCompletionSource)
{
completionSources.Insert(0, (ISmartTabCompletionSource)source);
}
}
if (argument.ArgumentType.IsEnum)
{
completionSources.Insert(0, new EnumTabCompletionSource(argument));
}
}
completionSources.Add(new ActionAndArgumentSmartTabCompletionSource());
completionSources.Add(new FileSystemTabCompletionSource());
return completionSources;
}