public static IfStatementAst As(
     this Ast source,
     AstType <IfStatementAst> targetType,
     PipelineBaseAst condition,
     params StatementAst[] statements)
 {
     return(new IfStatementAst(
                source.Extent,
                new[] { Tuple.Create(condition, source.As(StatementBlock, statements)) },
                null));
 }
        public static CommandAst As(
            this Ast source,
            AstType <CommandAst> targetType,
            string commandName,
            TokenKind invocationOperator,
            params CommandElementAst[] elements)
        {
            var extent      = GetExtentFromConstant(commandName, source.Extent);
            var newElements = new CommandElementAst[elements.Length + 1];

            for (int i = 0; i < elements.Length; i++)
            {
                newElements[i + 1] = elements[i];
            }

            newElements[0] = source.As(StringConstantExpression, commandName);
            return(new CommandAst(
                       extent,
                       newElements,
                       invocationOperator,
                       Enumerable.Empty <RedirectionAst>()));
        }