/// <summary>
/// Implementation of tab completion that leverages tab completion sources that are registered with the target definition.
/// </summary>
/// <param name="cliContext">cintext used internally</param>
/// <returns>true if a tab completion was successfully made, false otherwise</returns>
public bool TryTabComplete(RichCommandLineContext cliContext)
{
var powerArgsContext = ConvertContext(this.Definition, cliContext);
bool oldHookWon = false;
string completion = null;
foreach (var completionSource in oldHooks)
{
if (completionSource is ITabCompletionSourceWithContext)
{
if (((ITabCompletionSourceWithContext)completionSource).TryComplete(powerArgsContext.Shift, powerArgsContext.PreviousToken, powerArgsContext.CompletionCandidate, out completion))
{
oldHookWon = true;
break;
}
}
else
{
if (completionSource.TryComplete(powerArgsContext.Shift, powerArgsContext.CompletionCandidate, out completion))
{
oldHookWon = true;
break;
}
}
}
if (oldHookWon == false)
{
foreach (var completionSource in newHooks)
{
if (completionSource.TryComplete(powerArgsContext, out completion))
{
break;
}
}
}
if (completion != null)
{
cliContext.CompleteCurrentToken(cliContext.CurrentToken, new ConsoleString(completion));
return(true);
}
else
{
return(false);
}
}