string[] RunTabExpansionInternal(TabExpansionParams message)
        {
            string script = @"$__pc_args=@();$input|%{$__pc_args+=$_};if(Test-Path Function:\TabExpansion2){(TabExpansion2 $__pc_args[0] $__pc_args[0].length).CompletionMatches|%{$_.CompletionText}}else{TabExpansion $__pc_args[0] $__pc_args[1]};Remove-Variable __pc_args -Scope 0;";
            var    input  = new object[] { message.Line, message.LastWord };

            Collection <PSObject> results = InvokePowerShellNoOutput(script, input);

            if (results != null)
            {
                return(results.Select(item => item?.ToString())
                       .ToArray());
            }

            return(Array.Empty <string> ());
        }
        public async Task <string[]> GetExpansionsAsync(
            string line,
            string lastWord,
            CancellationToken token)
        {
            var message = new TabExpansionParams {
                Line     = line,
                LastWord = lastWord
            };
            TabExpansionResult result = await rpc.InvokeWithParameterObjectAsync <TabExpansionResult> (
                Methods.TabExpansionName,
                message,
                token);

            return(result.Expansions);
        }