internal static Ast FindFirst(Ast ast, Func <Ast, bool> predicate, bool searchNestedScriptBlocks) { AstSearcher visitor = new AstSearcher(predicate, true, searchNestedScriptBlocks); ast.InternalVisit(visitor); return(visitor.Results.FirstOrDefault <Ast>()); }
internal static IEnumerable <Ast> FindAll(Ast ast, Func <Ast, bool> predicate, bool searchNestedScriptBlocks) { AstSearcher visitor = new AstSearcher(predicate, false, searchNestedScriptBlocks); ast.InternalVisit(visitor); return(visitor.Results); }
public IEnumerable <Ast> FindAll(Func <Ast, bool> predicate, bool searchNestedScriptBlocks) { if (predicate == null) { throw PSTraceSource.NewArgumentNullException("predicate"); } return(AstSearcher.FindAll(this, predicate, searchNestedScriptBlocks)); }
internal static bool Contains(Ast ast, Func <Ast, bool> predicate, bool searchNestedScriptBlocks) { Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments"); var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks); ast.InternalVisit(searcher); return(searcher.Results.FirstOrDefault() != null); }
internal static IEnumerable <Ast> FindAll(Ast ast, Func <Ast, bool> predicate, bool searchNestedScriptBlocks) { Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments"); var searcher = new AstSearcher(predicate, stopOnFirst: false, searchNestedScriptBlocks: searchNestedScriptBlocks); ast.InternalVisit(searcher); return(searcher.Results); }
internal static bool IsUsingDollarInput(Ast ast) { return(AstSearcher.Contains( ast, ast_ => { var varAst = ast_ as VariableExpressionAst; if (varAst != null) { return varAst.VariablePath.IsVariable && varAst.VariablePath.UnqualifiedPath.Equals(SpecialVariables.Input, StringComparison.OrdinalIgnoreCase); } return false; }, searchNestedScriptBlocks: false)); }
internal string GetWithInputHandlingForInvokeCommandImpl(Tuple <List <VariableExpressionAst>, string> usingVariablesTuple) { string str; string str2; PipelineAst ast = this.GetSimplePipeline(false, out str, out str2); if (ast == null) { if (usingVariablesTuple != null) { return(this.ToStringForSerialization(usingVariablesTuple, base.Extent.StartOffset, base.Extent.EndOffset)); } return(this.ToStringForSerialization()); } if (ast.PipelineElements[0] is CommandExpressionAst) { if (usingVariablesTuple != null) { return(this.ToStringForSerialization(usingVariablesTuple, base.Extent.StartOffset, base.Extent.EndOffset)); } return(this.ToStringForSerialization()); } if (AstSearcher.IsUsingDollarInput(this)) { if (usingVariablesTuple != null) { return(this.ToStringForSerialization(usingVariablesTuple, base.Extent.StartOffset, base.Extent.EndOffset)); } return(this.ToStringForSerialization()); } StringBuilder builder = new StringBuilder(); if (this.ParamBlock != null) { string str3 = (usingVariablesTuple == null) ? this.ParamBlock.ToString() : this.ToStringForSerialization(usingVariablesTuple, this.ParamBlock.Extent.StartOffset, this.ParamBlock.Extent.EndOffset); builder.Append(str3); } builder.Append("$input |"); string str4 = (usingVariablesTuple == null) ? ast.ToString() : this.ToStringForSerialization(usingVariablesTuple, ast.Extent.StartOffset, ast.Extent.EndOffset); builder.Append(str4); return(builder.ToString()); }
internal static Ast FindFirst(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks) { AstSearcher visitor = new AstSearcher(predicate, true, searchNestedScriptBlocks); ast.InternalVisit(visitor); return visitor.Results.FirstOrDefault<Ast>(); }
internal static IEnumerable<Ast> FindAll(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks) { AstSearcher visitor = new AstSearcher(predicate, false, searchNestedScriptBlocks); ast.InternalVisit(visitor); return visitor.Results; }
internal override IEnumerable <PSTypeName> GetInferredType(CompletionContext context) { if (this.VariablePath.IsVariable) { Ast parent = this.Parent; if (this.VariablePath.IsUnqualified && (this.VariablePath.UserPath.Equals("_", StringComparison.Ordinal) || this.VariablePath.UserPath.Equals("PSItem", StringComparison.OrdinalIgnoreCase))) { while (parent != null) { if (parent is ScriptBlockExpressionAst) { break; } parent = parent.Parent; } if (parent != null) { if ((parent.Parent is CommandExpressionAst) && (parent.Parent.Parent is PipelineAst)) { if (parent.Parent.Parent.Parent is HashtableAst) { parent = parent.Parent.Parent.Parent; } else if ((parent.Parent.Parent.Parent is ArrayLiteralAst) && (parent.Parent.Parent.Parent.Parent is HashtableAst)) { parent = parent.Parent.Parent.Parent.Parent; } } if (parent.Parent is CommandParameterAst) { parent = parent.Parent; } CommandAst iteratorVariable1 = parent.Parent as CommandAst; if (iteratorVariable1 != null) { PipelineAst iteratorVariable2 = (PipelineAst)iteratorVariable1.Parent; int iteratorVariable3 = iteratorVariable2.PipelineElements.IndexOf(iteratorVariable1) - 1; if (iteratorVariable3 >= 0) { foreach (PSTypeName iteratorVariable4 in iteratorVariable2.PipelineElements[0].GetInferredType(context)) { if (iteratorVariable4.Type != null) { if (iteratorVariable4.Type.IsArray) { yield return(new PSTypeName(iteratorVariable4.Type.GetElementType())); continue; } if (typeof(IEnumerable).IsAssignableFrom(iteratorVariable4.Type)) { IEnumerable <Type> iteratorVariable5 = from t in iteratorVariable4.Type.GetInterfaces() where t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(IEnumerable <>)) select t; foreach (Type iteratorVariable6 in iteratorVariable5) { yield return(new PSTypeName(iteratorVariable6.GetGenericArguments()[0])); } continue; } } yield return(iteratorVariable4); } } goto Label_0833; } } } if (this.VariablePath.IsUnqualified) { for (int i = 0; i < SpecialVariables.AutomaticVariables.Length; i++) { if (this.VariablePath.UserPath.Equals(SpecialVariables.AutomaticVariables[i], StringComparison.OrdinalIgnoreCase)) { Type type = SpecialVariables.AutomaticVariableTypes[i]; if (!type.Equals(typeof(object))) { yield return(new PSTypeName(type)); break; } break; } } } while (parent.Parent != null) { parent = parent.Parent; } if (parent.Parent is FunctionDefinitionAst) { parent = parent.Parent; } IEnumerable <Ast> source = AstSearcher.FindAll(parent, ast => (((ast is ParameterAst) || (ast is AssignmentStatementAst)) || (ast is ForEachStatementAst)) && this.AstAssignsToSameVariable(ast), true); ParameterAst iteratorVariable10 = source.OfType <ParameterAst>().FirstOrDefault <ParameterAst>(); if (iteratorVariable10 != null) { PSTypeName[] iteratorVariable11 = iteratorVariable10.GetInferredType(context).ToArray <PSTypeName>(); if (iteratorVariable11.Length > 0) { foreach (PSTypeName iteratorVariable12 in iteratorVariable11) { yield return(iteratorVariable12); } goto Label_0833; } } AssignmentStatementAst[] iteratorVariable13 = source.OfType <AssignmentStatementAst>().ToArray <AssignmentStatementAst>(); foreach (AssignmentStatementAst iteratorVariable14 in iteratorVariable13) { ConvertExpressionAst left = iteratorVariable14.Left as ConvertExpressionAst; if ((left != null) && (left.StaticType != null)) { yield return(new PSTypeName(left.StaticType)); goto Label_0833; } } ForEachStatementAst iteratorVariable16 = source.OfType <ForEachStatementAst>().FirstOrDefault <ForEachStatementAst>(); if (iteratorVariable16 != null) { foreach (PSTypeName iteratorVariable17 in iteratorVariable16.Condition.GetInferredType(context)) { yield return(iteratorVariable17); } } else { int startOffset = this.Extent.StartOffset; int iteratorVariable19 = 0x7fffffff; AssignmentStatementAst iteratorVariable20 = null; foreach (AssignmentStatementAst ast in iteratorVariable13) { int endOffset = ast.Extent.EndOffset; if ((endOffset < startOffset) && ((startOffset - endOffset) < iteratorVariable19)) { iteratorVariable19 = startOffset - endOffset; iteratorVariable20 = ast; } } if (iteratorVariable20 != null) { foreach (PSTypeName iteratorVariable21 in iteratorVariable20.Right.GetInferredType(context)) { yield return(iteratorVariable21); } } } } Label_0833: yield break; }
internal static bool Contains(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks) { Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments"); var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks); ast.InternalVisit(searcher); return searcher.Results.FirstOrDefault() != null; }
internal static IEnumerable<Ast> FindAll(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks) { Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments"); var searcher = new AstSearcher(predicate, stopOnFirst: false, searchNestedScriptBlocks: searchNestedScriptBlocks); ast.InternalVisit(searcher); return searcher.Results; }