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)); }
private FileMode GetFileMode(FileRedirectionAst redirectionAst) { if (redirectionAst.Append) { return(FileMode.Append); } return(FileMode.Create); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) { ThrowError( new ScriptBlockToPowerShellNotSupportedException( "CanConvertOneOutputErrorRedir", null, AutomationExceptions.CanConvertOneOutputErrorRedir), redirectionAst); return(AstVisitAction.Continue); }
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)); }
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)); }
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)); }
/// <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); }
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); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) { Console.WriteLine("Visited an FileRedirectionAst."); Console.WriteLine(" " + redirectionAst.ToString().Replace(Environment.NewLine, Environment.NewLine + " ")); return(AstVisitAction.Continue); }
public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { Console.WriteLine("Visited an FileRedirectionAst."); return(fileRedirectionAst); }
public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => null;
/// <summary/> public virtual AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) => DefaultVisit(redirectionAst);
object ICustomAstVisitor.VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => ProcessRewriter(VisitFileRedirection, fileRedirectionAst);
public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { return(false); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) { throw new NotImplementedException(); //VisitFileRedirection(redirectionAst); }
public override FileRedirectionAst VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => VisitOther(base.VisitFileRedirection(fileRedirectionAst));
public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return(DoNextAction(ast)); }
public virtual TResult VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => default(TResult);
public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { VisitElement(fileRedirectionAst.Location); return(fileRedirectionAst); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return(AstVisitAction.Continue); }
public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { throw new NotImplementedException(); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { return(Visit(fileRedirectionAst)); }
public override AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) => VisitAst(redirectionAst);
public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { throw PSTraceSource.NewArgumentException("ast"); }
object ICustomAstVisitor.VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => VisitFileRedirection(fileRedirectionAst);
public object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { throw new UnexpectedElementException(); }