Esempio n. 1
0
            public override object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
            {
                switch (fileRedirectionAst.FromStream)
                {
                case RedirectionStream.All:
                    script_.Write("*");
                    break;

                case RedirectionStream.Output:
                case RedirectionStream.Error:
                case RedirectionStream.Warning:
                case RedirectionStream.Verbose:
                case RedirectionStream.Debug:
                case RedirectionStream.Information:
                    int value = (int)fileRedirectionAst.FromStream;
                    script_.Write(value);
                    break;

                default:
                    throw new Exception("File redirection not supported");
                }
                if (fileRedirectionAst.Append)
                {
                    script_.Write(">");
                }
                script_.Write(">");
                VisitElement(fileRedirectionAst.Location);
                return(fileRedirectionAst);
            }
        public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
        {
            var newFile = VisitElement(fileRedirectionAst.Location);

            return(new FileRedirectionAst(fileRedirectionAst.Extent, fileRedirectionAst.FromStream, newFile,
                                          fileRedirectionAst.Append));
        }
 public virtual FileRedirectionAst VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     return(new FileRedirectionAst(
                fileRedirectionAst.Extent,
                fileRedirectionAst.FromStream,
                fileRedirectionAst.Location?.Rewrite(this),
                fileRedirectionAst.Append));
 }
Esempio n. 4
0
 private FileMode GetFileMode(FileRedirectionAst redirectionAst)
 {
     if (redirectionAst.Append)
     {
         return(FileMode.Append);
     }
     return(FileMode.Create);
 }
Esempio n. 5
0
        public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst)
        {
            ThrowError(
                new ScriptBlockToPowerShellNotSupportedException(
                    "CanConvertOneOutputErrorRedir", null, AutomationExceptions.CanConvertOneOutputErrorRedir),
                redirectionAst);

            return(AstVisitAction.Continue);
        }
Esempio n. 6
0
        private string GetOutputFileName(FileRedirectionAst redirectionAst)
        {
            object outputPath = _visitor.EvaluateAst(redirectionAst.Location, false);

            if (outputPath != null)
            {
                return(outputPath.ToString());
            }
            return(null);
        }
 public static FileRedirectionAst Update(
     this FileRedirectionAst ast,
     RedirectionStream?stream = null,
     ExpressionAst file       = null,
     bool?append = null)
 {
     return(new FileRedirectionAst(
                ast.Extent,
                stream ?? ast.FromStream,
                file?.Clone() ?? ast.Location.Clone(),
                append ?? ast.Append));
 }
Esempio n. 8
0
        private static CommandRedirection GetCommandRedirection(RedirectionAst redirectionAst, System.Management.Automation.ExecutionContext context)
        {
            FileRedirectionAst ast = redirectionAst as FileRedirectionAst;

            if (ast != null)
            {
                object obj2 = Compiler.GetExpressionValue(ast.Location, context, (IList)null);
                return(new FileRedirection(ast.FromStream, ast.Append, obj2.ToString()));
            }
            MergingRedirectionAst ast2 = (MergingRedirectionAst)redirectionAst;

            return(new MergingRedirection(ast2.FromStream, ast2.ToStream));
        }
Esempio n. 9
0
        private ObjectStream GetStream(FileRedirectionAst redirectionAst)
        {
            switch (redirectionAst.FromStream)
            {
            case RedirectionStream.Output:
                return(_runtime.OutputStream);

            case RedirectionStream.Error:
                return(_runtime.ErrorStream);

            default:
                throw new NotImplementedException(redirectionAst.FromStream.ToString());
            }
        }
        public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst)
        {
            var redirectsOrAppends = redirectionAst.Append ? "Appends" : "Redirects";
            var fromStream         = redirectionAst.FromStream == RedirectionStream.Output ? "" :
                                     $"from stream '{redirectionAst.FromStream}' ";

            explanations.Add(
                new Explanation()
            {
                Description     = $"{redirectsOrAppends} output {fromStream}to location '{redirectionAst.Location}'.",
                CommandName     = "File redirection operator",
                HelpResult      = HelpTableQuery("about_redirection"),
                TextToHighlight = ">"
            }.AddDefaults(redirectionAst, explanations));

            return(base.VisitFileRedirection(redirectionAst));
        }
Esempio n. 11
0
        /// <summary>
        /// TODO: Output should be formatted.
        /// </summary>
        public AstVisitAction Visit(FileRedirectionAst redirectionAst)
        {
            string outputPath = GetOutputFileName(redirectionAst);

            if (outputPath == null)
            {
                return(AstVisitAction.SkipChildren);
            }

            FileMode     fileMode = GetFileMode(redirectionAst);
            ObjectStream stream   = GetStream(redirectionAst);
            FileStream   file     = File.Open(outputPath, fileMode, FileAccess.Write);

            using (var streamWriter = new StreamWriter(file, Encoding.Unicode))
            {
                foreach (object obj in stream.Read())
                {
                    WriteObject(streamWriter, obj);
                }
            }
            return(AstVisitAction.SkipChildren);
        }
Esempio n. 12
0
        private List <CompletionResult> GetResultForIdentifier(CompletionContext completionContext, ref int replacementIndex, ref int replacementLength, bool isQuotedString)
        {
            Token tokenAtCursor            = completionContext.TokenAtCursor;
            Ast   lastAst                  = completionContext.RelatedAsts.Last <Ast>();
            List <CompletionResult> source = null;

            completionContext.WordToComplete = tokenAtCursor.Text;
            StringConstantExpressionAst ast2 = lastAst as StringConstantExpressionAst;

            if ((ast2 != null) && ast2.Value.Equals("$", StringComparison.Ordinal))
            {
                completionContext.WordToComplete = "";
                return(CompletionCompleters.CompleteVariable(completionContext));
            }
            if ((tokenAtCursor.TokenFlags & TokenFlags.CommandName) != TokenFlags.None)
            {
                if ((completionContext.RelatedAsts.Count > 0) && (completionContext.RelatedAsts[0] is ScriptBlockAst))
                {
                    Ast lastAstAtCursor             = null;
                    InternalScriptPosition position = (InternalScriptPosition)this._cursorPosition;
                    int offset = position.Offset - tokenAtCursor.Text.Length;
                    if (offset >= 0)
                    {
                        InternalScriptPosition cursorPosition = position.CloneWithNewOffset(offset);
                        ScriptBlockAst         scriptBlockAst = (ScriptBlockAst)completionContext.RelatedAsts[0];
                        lastAstAtCursor = GetLastAstAtCursor(scriptBlockAst, cursorPosition);
                    }
                    if (((lastAstAtCursor != null) && (lastAstAtCursor.Extent.EndLineNumber == tokenAtCursor.Extent.StartLineNumber)) && (lastAstAtCursor.Extent.EndColumnNumber == tokenAtCursor.Extent.StartColumnNumber))
                    {
                        if (tokenAtCursor.Text.IndexOfAny(new char[] { '\\', '/' }) == 0)
                        {
                            string str = CompletionCompleters.ConcatenateStringPathArguments(lastAstAtCursor as CommandElementAst, tokenAtCursor.Text, completionContext);
                            if (str != null)
                            {
                                completionContext.WordToComplete = str;
                                source = new List <CompletionResult>(CompletionCompleters.CompleteFilename(completionContext));
                                if (source.Count > 0)
                                {
                                    replacementIndex   = lastAstAtCursor.Extent.StartScriptPosition.Offset;
                                    replacementLength += lastAstAtCursor.Extent.Text.Length;
                                }
                                return(source);
                            }
                            VariableExpressionAst variableAst = lastAstAtCursor as VariableExpressionAst;
                            string str2 = (variableAst != null) ? CompletionCompleters.CombineVariableWithPartialPath(variableAst, tokenAtCursor.Text, completionContext.ExecutionContext) : null;
                            if (str2 == null)
                            {
                                return(source);
                            }
                            completionContext.WordToComplete = str2;
                            replacementIndex   = lastAstAtCursor.Extent.StartScriptPosition.Offset;
                            replacementLength += lastAstAtCursor.Extent.Text.Length;
                            completionContext.ReplacementIndex  = replacementIndex;
                            completionContext.ReplacementLength = replacementLength;
                        }
                        else if (!(lastAstAtCursor is ErrorExpressionAst) || !(lastAstAtCursor.Parent is IndexExpressionAst))
                        {
                            return(source);
                        }
                    }
                }
                if (!isQuotedString)
                {
                    StringExpandableToken token2 = tokenAtCursor as StringExpandableToken;
                    if (((token2 != null) && (token2.NestedTokens != null)) && (ast2 != null))
                    {
                        try
                        {
                            string expandedString = null;
                            ExpandableStringExpressionAst expandableStringAst = new ExpandableStringExpressionAst(ast2.Extent, ast2.Value, StringConstantType.BareWord);
                            if (CompletionCompleters.IsPathSafelyExpandable(expandableStringAst, string.Empty, completionContext.ExecutionContext, out expandedString))
                            {
                                completionContext.WordToComplete = expandedString;
                            }
                            else
                            {
                                return(source);
                            }
                        }
                        catch (Exception exception)
                        {
                            CommandProcessorBase.CheckForSevereException(exception);
                            return(source);
                        }
                    }
                    source = CompleteFileNameAsCommand(completionContext);
                    List <CompletionResult> collection = CompletionCompleters.CompleteCommand(completionContext);
                    if ((collection != null) && (collection.Count > 0))
                    {
                        source.AddRange(collection);
                    }
                }
                return(source);
            }
            if (((tokenAtCursor.Text.Length == 1) && tokenAtCursor.Text[0].IsDash()) && (lastAst.Parent is CommandAst))
            {
                if (isQuotedString)
                {
                    return(source);
                }
                return(CompletionCompleters.CompleteCommandParameter(completionContext));
            }
            TokenKind unknown = TokenKind.Unknown;
            bool      flag    = lastAst.Parent is MemberExpressionAst;
            bool      @static = flag ? ((MemberExpressionAst)lastAst.Parent).Static : false;
            bool      flag3   = false;

            if (!flag)
            {
                if (tokenAtCursor.Text.Equals(TokenKind.Dot.Text(), StringComparison.Ordinal))
                {
                    unknown = TokenKind.Dot;
                    flag    = true;
                }
                else if (tokenAtCursor.Text.Equals(TokenKind.ColonColon.Text(), StringComparison.Ordinal))
                {
                    unknown = TokenKind.ColonColon;
                    flag    = true;
                }
                else if (tokenAtCursor.Kind.Equals(TokenKind.Multiply) && (lastAst is BinaryExpressionAst))
                {
                    BinaryExpressionAst item          = (BinaryExpressionAst)lastAst;
                    MemberExpressionAst left          = item.Left as MemberExpressionAst;
                    IScriptExtent       errorPosition = item.ErrorPosition;
                    if (((left != null) && (item.Operator == TokenKind.Multiply)) && (errorPosition.StartOffset == left.Member.Extent.EndOffset))
                    {
                        @static = left.Static;
                        unknown = @static ? TokenKind.ColonColon : TokenKind.Dot;
                        flag    = true;
                        flag3   = true;
                        completionContext.RelatedAsts.Remove(item);
                        completionContext.RelatedAsts.Add(left);
                        StringConstantExpressionAst member = left.Member as StringConstantExpressionAst;
                        if (member != null)
                        {
                            replacementIndex   = member.Extent.StartScriptPosition.Offset;
                            replacementLength += member.Extent.Text.Length;
                        }
                    }
                }
            }
            if (flag)
            {
                source = CompletionCompleters.CompleteMember(completionContext, @static || (unknown == TokenKind.ColonColon));
                if (source.Any <CompletionResult>())
                {
                    if (!flag3 && (unknown != TokenKind.Unknown))
                    {
                        replacementIndex += tokenAtCursor.Text.Length;
                        replacementLength = 0;
                    }
                    return(source);
                }
            }
            if (lastAst.Parent is HashtableAst)
            {
                source = CompletionCompleters.CompleteHashtableKey(completionContext, (HashtableAst)lastAst.Parent);
                if ((source != null) && source.Any <CompletionResult>())
                {
                    return(source);
                }
            }
            if (!isQuotedString)
            {
                bool flag4 = false;
                if ((lastAst.Parent is FileRedirectionAst) || CompleteAgainstSwitchFile(lastAst, completionContext.TokenBeforeCursor))
                {
                    string str4 = CompletionCompleters.ConcatenateStringPathArguments(lastAst as CommandElementAst, string.Empty, completionContext);
                    if (str4 != null)
                    {
                        flag4 = true;
                        completionContext.WordToComplete = str4;
                    }
                }
                else if (tokenAtCursor.Text.IndexOfAny(new char[] { '\\', '/' }) == 0)
                {
                    CommandBaseAst parent = lastAst.Parent as CommandBaseAst;
                    if ((parent != null) && parent.Redirections.Any <RedirectionAst>())
                    {
                        FileRedirectionAst ast11 = parent.Redirections[0] as FileRedirectionAst;
                        if (((ast11 != null) && (ast11.Extent.EndLineNumber == lastAst.Extent.StartLineNumber)) && (ast11.Extent.EndColumnNumber == lastAst.Extent.StartColumnNumber))
                        {
                            string str5 = CompletionCompleters.ConcatenateStringPathArguments(ast11.Location, tokenAtCursor.Text, completionContext);
                            if (str5 != null)
                            {
                                flag4 = true;
                                completionContext.WordToComplete = str5;
                                replacementIndex   = ast11.Location.Extent.StartScriptPosition.Offset;
                                replacementLength += ast11.Location.Extent.EndScriptPosition.Offset - replacementIndex;
                                completionContext.ReplacementIndex  = replacementIndex;
                                completionContext.ReplacementLength = replacementLength;
                            }
                        }
                    }
                }
                if (flag4)
                {
                    return(new List <CompletionResult>(CompletionCompleters.CompleteFilename(completionContext)));
                }
                string str6 = CompletionCompleters.ConcatenateStringPathArguments(lastAst as CommandElementAst, string.Empty, completionContext);
                if (str6 != null)
                {
                    completionContext.WordToComplete = str6;
                }
                source            = CompletionCompleters.CompleteCommandArgument(completionContext);
                replacementIndex  = completionContext.ReplacementIndex;
                replacementLength = completionContext.ReplacementLength;
            }
            return(source);
        }
Esempio n. 13
0
 public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst)
 {
     Console.WriteLine("Visited an FileRedirectionAst.");
     Console.WriteLine("    " + redirectionAst.ToString().Replace(Environment.NewLine, Environment.NewLine + "    "));
     return(AstVisitAction.Continue);
 }
Esempio n. 14
0
 public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     Console.WriteLine("Visited an FileRedirectionAst.");
     return(fileRedirectionAst);
 }
 public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => null;
Esempio n. 16
0
 /// <summary/>
 public virtual AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) => DefaultVisit(redirectionAst);
 object ICustomAstVisitor.VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 => ProcessRewriter(VisitFileRedirection, fileRedirectionAst);
Esempio n. 18
0
 public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     return(false);
 }
Esempio n. 19
0
 public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst)
 {
     throw new NotImplementedException(); //VisitFileRedirection(redirectionAst);
 }
Esempio n. 20
0
 public override FileRedirectionAst VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 => VisitOther(base.VisitFileRedirection(fileRedirectionAst));
Esempio n. 21
0
 public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast)
 {
     return(DoNextAction(ast));
 }
 public virtual TResult VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => default(TResult);
Esempio n. 23
0
 public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     VisitElement(fileRedirectionAst.Location);
     return(fileRedirectionAst);
 }
Esempio n. 24
0
 public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast)
 {
     return(AstVisitAction.Continue);
 }
Esempio n. 25
0
 public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     throw new NotImplementedException();
 }
 public override AstVisitAction VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     return(Visit(fileRedirectionAst));
 }
Esempio n. 27
0
 public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) => VisitAst(redirectionAst);
 public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     throw PSTraceSource.NewArgumentException("ast");
 }
 object ICustomAstVisitor.VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => VisitFileRedirection(fileRedirectionAst);
Esempio n. 30
0
 public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst)
 {
     throw new UnexpectedElementException();
 }