/// <summary> /// Decides if the current function defintion is the right defition /// for the symbol being searched for. The defintion of the symbol will be a of type /// SymbolType.Function and have the same name as the symbol /// </summary> /// <param name="functionDefinitionAst">A FunctionDefinitionAst in the script's AST</param> /// <returns>A descion to stop searching if the right FunctionDefinitionAst was found, /// or a decision to continue if it wasn't found</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { // Get the start column number of the function name, // instead of the the start column of 'function' and create new extent for the functionName int startColumnNumber = functionDefinitionAst.Extent.Text.IndexOf( functionDefinitionAst.Name) + 1; IScriptExtent nameExtent = new ScriptExtent() { Text = functionDefinitionAst.Name, StartLineNumber = functionDefinitionAst.Extent.StartLineNumber, StartColumnNumber = startColumnNumber, EndLineNumber = functionDefinitionAst.Extent.StartLineNumber, EndColumnNumber = startColumnNumber + functionDefinitionAst.Name.Length }; if (symbolRef.SymbolType.Equals(SymbolType.Function) && nameExtent.Text.Equals(symbolRef.ScriptRegion.Text, StringComparison.InvariantCultureIgnoreCase)) { this.FoundDeclartion = new SymbolReference( SymbolType.Function, nameExtent); return AstVisitAction.StopVisit; } return base.VisitFunctionDefinition(functionDefinitionAst); }
/// <summary> /// Checks to see if this function definition is the symbol we are looking for. /// </summary> /// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param> /// <returns>A descion to stop searching if the right symbol was found, /// or a decision to continue if it wasn't found</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { int startColumnNumber = functionDefinitionAst.Extent.Text.IndexOf( functionDefinitionAst.Name) + 1; IScriptExtent nameExtent = new ScriptExtent() { Text = functionDefinitionAst.Name, StartLineNumber = functionDefinitionAst.Extent.StartLineNumber, EndLineNumber = functionDefinitionAst.Extent.EndLineNumber, StartColumnNumber = startColumnNumber, EndColumnNumber = startColumnNumber + functionDefinitionAst.Name.Length }; if (this.IsPositionInExtent(nameExtent)) { this.FoundSymbolReference = new SymbolReference( SymbolType.Function, nameExtent); return AstVisitAction.StopVisit; } return base.VisitFunctionDefinition(functionDefinitionAst); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { if (ast.IsWorkflow) { return AstVisitAction.SkipChildren; } return base.CheckScriptBlock(ast); }
/// <summary> /// Visit function and skips any function that starts with show /// </summary> /// <param name="funcAst"></param> /// <returns></returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst funcAst) { if (funcAst == null || funcAst.Name == null) { return AstVisitAction.SkipChildren; } if (funcAst.Name.StartsWith("show", StringComparison.OrdinalIgnoreCase)) { return AstVisitAction.SkipChildren; } return AstVisitAction.Continue; }
public System.Object VisitFunctionDefinition(System.Management.Automation.Language.FunctionDefinitionAst functionDefinitionAst) { IScriptExtent mappedExtent = MapExtent(functionDefinitionAst.Extent); LinkedList <ParameterAst> mappedParameters = new LinkedList <ParameterAst>(); if (functionDefinitionAst.Parameters != null) { foreach (ParameterAst p in functionDefinitionAst.Parameters) { mappedParameters.AddLast((ParameterAst)VisitParameter(p)); } } ScriptBlockAst mappedBody = (ScriptBlockAst)VisitScriptBlock(functionDefinitionAst.Body); return(new FunctionDefinitionAst(mappedExtent, functionDefinitionAst.IsFilter, functionDefinitionAst.IsWorkflow, functionDefinitionAst.Name, mappedParameters, mappedBody)); }
internal static void DefineFunction(ExecutionContext context, FunctionDefinitionAst functionDefinitionAst, ScriptBlockExpressionWrapper scriptBlockExpressionWrapper) { try { ScriptBlock scriptBlock = scriptBlockExpressionWrapper.GetScriptBlock(context, functionDefinitionAst.IsFilter); context.EngineSessionState.SetFunctionRaw(functionDefinitionAst.Name, scriptBlock, context.EngineSessionState.CurrentScope.ScopeOrigin); } catch (Exception exception) { CommandProcessorBase.CheckForSevereException(exception); RuntimeException exception2 = exception as RuntimeException; if (exception2 == null) { throw ExceptionHandlingOps.ConvertToRuntimeException(exception, functionDefinitionAst.Extent); } InterpreterError.UpdateExceptionErrorRecordPosition(exception2, functionDefinitionAst.Extent); throw; } }
/// <summary> /// Adds each function defintion as a /// </summary> /// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param> /// <returns>A decision to stop searching if the right symbol was found, /// or a decision to continue if it wasn't found</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { IScriptExtent nameExtent = new ScriptExtent() { Text = functionDefinitionAst.Name, StartLineNumber = functionDefinitionAst.Extent.StartLineNumber, EndLineNumber = functionDefinitionAst.Extent.EndLineNumber, StartColumnNumber = functionDefinitionAst.Extent.StartColumnNumber, EndColumnNumber = functionDefinitionAst.Extent.EndColumnNumber }; SymbolType symbolType = functionDefinitionAst.IsWorkflow ? SymbolType.Workflow : SymbolType.Function; this.SymbolReferences.Add( new SymbolReference( symbolType, nameExtent)); return AstVisitAction.Continue; }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return(AutomationNull.Value); }
/// <summary/> public virtual AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return(AstVisitAction.Continue); }
/// <summary> /// Adds each function defintion as a /// </summary> /// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param> /// <returns>A decision to stop searching if the right symbol was found, /// or a decision to continue if it wasn't found</returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return this.findSymbolsVisitor.VisitFunctionDefinition(functionDefinitionAst); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return(CheckScriptBlock(ast)); }
/// <summary/> public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return(null); }
public virtual AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return AstVisitAction.Continue; }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { var functionInfo = new /*FunctionInfo*/ScriptInfo(functionDefinitionAst.Name, functionDefinitionAst.Body.GetScriptBlock()); // HACK: we shouldn't be casting this. But I'm too confused about runspace management in Pash. ((LocalRunspace)this._context.CurrentRunspace).CommandManager.SetFunction(functionInfo); return AstVisitAction.SkipChildren; }
/// <summary> /// Visit function and checks that it is a cmdlet. If yes, then checks that any object returns must have a type declared /// in the output type (the only exception is if the type is object) /// </summary> /// <param name="funcAst"></param> /// <returns></returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst funcAst) { if (funcAst == null || funcAst.Body == null || funcAst.Body.ParamBlock == null || funcAst.Body.ParamBlock.Attributes == null || funcAst.Body.ParamBlock.Attributes.Count == 0 || !funcAst.Body.ParamBlock.Attributes.Any(attr => attr.TypeName.GetReflectionType() == typeof(CmdletBindingAttribute))) { return AstVisitAction.Continue; } HashSet<string> outputTypes = new HashSet<string>(); foreach (AttributeAst attrAst in funcAst.Body.ParamBlock.Attributes) { if (attrAst.TypeName != null && attrAst.TypeName.GetReflectionType() == typeof(OutputTypeAttribute) && attrAst.PositionalArguments != null) { foreach (ExpressionAst expAst in attrAst.PositionalArguments) { if (expAst is StringConstantExpressionAst) { Type type = Type.GetType((expAst as StringConstantExpressionAst).Value); if (type != null) { outputTypes.Add(type.FullName); } } else { TypeExpressionAst typeAst = expAst as TypeExpressionAst; if (typeAst != null && typeAst.TypeName != null) { if (typeAst.TypeName.GetReflectionType() != null) { outputTypes.Add(typeAst.TypeName.GetReflectionType().FullName); } else { outputTypes.Add(typeAst.TypeName.FullName); } } } } } } List<Tuple<string, StatementAst>> returnTypes = FindPipelineOutput.OutputTypes(funcAst, _classes); HashSet<string> specialTypes = new HashSet<string>(StringComparer.OrdinalIgnoreCase); specialTypes.Add(typeof(Unreached).FullName); specialTypes.Add(typeof(Undetermined).FullName); specialTypes.Add(typeof(object).FullName); specialTypes.Add(typeof(void).FullName); specialTypes.Add(typeof(PSCustomObject).FullName); specialTypes.Add(typeof(PSObject).FullName); foreach (Tuple<string, StatementAst> returnType in returnTypes) { string typeName = returnType.Item1; if (String.IsNullOrEmpty(typeName) || specialTypes.Contains(typeName) || outputTypes.Contains(typeName, StringComparer.OrdinalIgnoreCase)) { continue; } else { DiagnosticRecords.Add(new DiagnosticRecord(string.Format(CultureInfo.CurrentCulture, Strings.UseOutputTypeCorrectlyError, funcAst.Name, typeName), returnType.Item2.Extent, GetName(), DiagnosticSeverity.Information, fileName)); } } return AstVisitAction.Continue; }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { if (!(functionDefinitionAst.Parent is FunctionMemberAst)) { _symbolTable.EnterScope(functionDefinitionAst.Body, ScopeType.Function); } return AstVisitAction.Continue; }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { throw PSTraceSource.NewArgumentException("ast"); }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return AutomationNull.Value; }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return this.CheckScriptBlock(ast); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { this.ReportError(functionDefinitionAst, () => ParserStrings.FunctionDeclarationNotSupportedInDataSection, new object[0]); return(AstVisitAction.Continue); }
/// <summary/> public virtual AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { // Skip the workflow. We are not interested in the UsingExpressions in a workflow if (ast.IsWorkflow) { return AstVisitAction.SkipChildren; } return CheckScriptBlock(ast); }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { if (functionDefinitionAst.IsWorkflow) { if (_generatedCallToDefineWorkflows) return ExpressionCache.Empty; var topAst = functionDefinitionAst.Parent; while (!(topAst is ScriptBlockAst)) { topAst = topAst.Parent; } _generatedCallToDefineWorkflows = true; return Expression.Call(CachedReflectionInfo.FunctionOps_DefineWorkflows, _executionContextParameter, Expression.Constant(topAst, typeof(ScriptBlockAst))); } return Expression.Call(CachedReflectionInfo.FunctionOps_DefineFunction, _executionContextParameter, Expression.Constant(functionDefinitionAst), Expression.Constant(new ScriptBlockExpressionWrapper(functionDefinitionAst))); }
public override object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { if (!(functionDefinitionAst.Parent is FunctionMemberAst)) { _symbolResolver._symbolTable.LeaveScope(); } return null; }
private static ScriptBlock CreateFakeScriptBlockForWorkflow(FunctionDefinitionAst functionDefinitionAst) { Token[] tokenArray; ParseError[] errorArray; StringBuilder builder = new StringBuilder(); ReadOnlyCollection<ParameterAst> parameters = ((IParameterMetadataProvider) functionDefinitionAst).Parameters; if (parameters != null) { bool flag = true; foreach (ParameterAst ast in parameters) { if (!flag) { builder.Append(", "); } flag = false; builder.Append(ast.Extent.Text); } if (!flag) { builder.Append(", "); } } return Parser.ParseInput(string.Format(CultureInfo.InvariantCulture, "\r\n [CmdletBinding()]\r\n param (\r\n {0}\r\n [hashtable[]] $PSParameterCollection,\r\n [string[]] $PSComputerName,\r\n [ValidateNotNullOrEmpty()] $PSCredential,\r\n [int32] $PSConnectionRetryCount,\r\n [int32] $PSConnectionRetryIntervalSec,\r\n [ValidateRange(1, 2147483)][int32] $PSRunningTimeoutSec,\r\n [ValidateRange(1, 2147483)][int32] $PSElapsedTimeoutSec,\r\n [bool] $PSPersist,\r\n [ValidateNotNullOrEmpty()] [System.Management.Automation.Runspaces.AuthenticationMechanism] $PSAuthentication,\r\n [ValidateNotNullOrEmpty()][System.Management.AuthenticationLevel] $PSAuthenticationLevel,\r\n [ValidateNotNullOrEmpty()] [string] $PSApplicationName,\r\n [int32] $PSPort,\r\n [switch] $PSUseSSL,\r\n [ValidateNotNullOrEmpty()] [string] $PSConfigurationName,\r\n [ValidateNotNullOrEmpty()][string[]] $PSConnectionURI,\r\n [switch] $PSAllowRedirection,\r\n [ValidateNotNullOrEmpty()][System.Management.Automation.Remoting.PSSessionOption] $PSSessionOption,\r\n [ValidateNotNullOrEmpty()] [string] $PSCertificateThumbprint,\r\n [hashtable] $PSPrivateMetadata,\r\n [switch] $AsJob,\r\n [string] $JobName,\r\n [Parameter(ValueFromPipeline=$true)]$InputObject\r\n )\r\n", new object[] { builder.ToString() }), out tokenArray, out errorArray).GetScriptBlock(); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { if (functionDefinitionAst.Extent.ContainsLineAndColumn(_breakpoint.Line, _breakpoint.Column)) { _result = true; return AstVisitAction.StopVisit; } // We don't need to visit the body, we're just checking extents of the topmost functions. // We'll visit the bodies eventually, but only when the nested function/script is executed. return AstVisitAction.SkipChildren; }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { this.ReportError(functionDefinitionAst, () => ParserStrings.FunctionDeclarationNotSupportedInDataSection, new object[0]); return AstVisitAction.Continue; }
private static ImageListKind GetImageListKind(FunctionDefinitionAst funcDef) { //TODO: More image kinds here return ImageListKind.Method; }
private static ScriptBlock CreateFakeScriptBlockForWorkflow(FunctionDefinitionAst functionDefinitionAst) { // The common parameters for a workflow is are always the same, the only difference is what parameters // the workflow specifies. When we generate the wrapper, the users parameters are "tweaked" slightly, // but those differences shouldn't matter for Intellisense. They could for the syntax if we showed it, // but the differences are very minor. See ImportWorkflowCommand.AddCommonWfParameters in // admin\monad\src\m3p\product\ServiceCore\WorkflowCore\ImportWorkflowCommand.cs for the actual logic // that creates this string. const string paramBlock = @" [CmdletBinding()] {0} param ( {1} [hashtable[]] $PSParameterCollection, [string[]] $PSComputerName, [ValidateNotNullOrEmpty()] $PSCredential, [uint32] $PSConnectionRetryCount, [uint32] $PSConnectionRetryIntervalSec, [ValidateRange(1, 2147483)][uint32] $PSRunningTimeoutSec, [ValidateRange(1, 2147483)][uint32] $PSElapsedTimeoutSec, [bool] $PSPersist, [ValidateNotNullOrEmpty()] [System.Management.Automation.Runspaces.AuthenticationMechanism] $PSAuthentication, [ValidateNotNullOrEmpty()][System.Management.AuthenticationLevel] $PSAuthenticationLevel, [ValidateNotNullOrEmpty()] [string] $PSApplicationName, [uint32] $PSPort, [switch] $PSUseSSL, [ValidateNotNullOrEmpty()] [string] $PSConfigurationName, [ValidateNotNullOrEmpty()][string[]] $PSConnectionURI, [switch] $PSAllowRedirection, [ValidateNotNullOrEmpty()][System.Management.Automation.Remoting.PSSessionOption] $PSSessionOption, [ValidateNotNullOrEmpty()] [string] $PSCertificateThumbprint, [hashtable] $PSPrivateMetadata, [switch] $AsJob, [string] $JobName, [Parameter(ValueFromPipeline=$true)]$InputObject ) "; var outputTypeText = new StringBuilder(); var sb = new StringBuilder(); var paramBlockAst = functionDefinitionAst.Body.ParamBlock; if (paramBlockAst != null) { var outputTypeAttrs = paramBlockAst.Attributes.Where(attribute => typeof(OutputTypeAttribute).Equals(attribute.TypeName.GetReflectionAttributeType())); foreach (AttributeAst attributeAst in outputTypeAttrs) { outputTypeText.Append(attributeAst.Extent.Text); } } var parameterAsts = ((IParameterMetadataProvider)functionDefinitionAst).Parameters; if (parameterAsts != null) { var first = true; foreach (var parameter in parameterAsts) { if (!first) sb.Append(", "); first = false; sb.Append(parameter.Extent.Text); } if (!first) sb.Append(", "); } Token[] tokens; ParseError[] errors; var ast = Parser.ParseInput(string.Format(CultureInfo.InvariantCulture, paramBlock, outputTypeText.ToString(), sb.ToString()), out tokens, out errors); return ast.GetScriptBlock(); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return(AstVisitAction.SkipChildren); }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { _context.SessionState.Function.Set(functionDefinitionAst.Name, functionDefinitionAst.Body.GetScriptBlock()); return AstVisitAction.SkipChildren; }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return(CheckParent(ast)); }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return null; }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return false; }
/// <summary> /// Visit function /// </summary> /// <param name="functionDefinitionAst"></param> /// <returns></returns> public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { // Don't recurse into the function definition, it's variables are distinct from the script block // we're currently analyzing. return null; }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { throw PSTraceSource.NewArgumentException("ast"); }
/// <summary> /// Visit Function /// </summary> /// <param name="functionDefinitionAst"></param> /// <returns></returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { // We don't want to discover any variables in nested functions - they get their own scope. return AstVisitAction.SkipChildren; }
public object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return(false); }
/// <summary/> public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return _decorated.VisitFunctionDefinition(functionDefinitionAst); }
/// <summary> /// Visit function and checks that it has comment help /// </summary> /// <param name="funcAst"></param> /// <returns></returns> public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst funcAst) { if (funcAst == null) { return AstVisitAction.SkipChildren; } if (exportedFunctions.Contains(funcAst.Name)) { if (funcAst.GetHelpContent() == null) { DiagnosticRecords.Add( new DiagnosticRecord( string.Format(CultureInfo.CurrentCulture, Strings.ProvideCommentHelpError, funcAst.Name), funcAst.Extent, GetName(), DiagnosticSeverity.Information, fileName)); } } return AstVisitAction.Continue; }
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { ExecutionContext.SessionState.Function.Set(functionDefinitionAst.Name, functionDefinitionAst.Body.GetScriptBlock(), functionDefinitionAst.Parameters, ""); return AstVisitAction.SkipChildren; }