コード例 #1
0
 #pragma warning disable SA1600
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(scriptBlockExpressionAst.ScriptBlock.Visit(this));
 }
コード例 #2
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     ThrowError(new ScriptBlockToPowerShellNotSupportedException("CantConvertWithScriptBlocks", null, AutomationExceptions.CantConvertWithScriptBlocks, new object[0]), scriptBlockExpressionAst);
     return(AstVisitAction.SkipChildren);
 }
コード例 #3
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     ScriptBlockCount += 1;
     return(AstVisitAction.Continue);
 }
コード例 #4
0
 public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     VisitElement(scriptBlockExpressionAst.ScriptBlock);
     return(scriptBlockExpressionAst);
 }
コード例 #5
0
    public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
    {
        var newScriptBlock = VisitElement(scriptBlockExpressionAst.ScriptBlock);

        return(new ScriptBlockExpressionAst(scriptBlockExpressionAst.Extent, newScriptBlock));
    }
コード例 #6
0
ファイル: VisitorBase.cs プロジェクト: altrive/PSCodeAnalyzer
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast)
 {
     return(AstVisitAction.Continue);
 }
コード例 #7
0
 /// <summary>
 /// Creates a Linq expression for a <see cref="CommandAst" /> representing
 /// a custom command.
 /// </summary>
 /// <param name="commandAst">The AST to convert.</param>
 /// <param name="targetAst">The AST containing the target of the keyword.</param>
 /// <param name="bodyAst">The AST containing the body of the keyword.</param>
 /// <param name="visitor">The <see cref="CompileVisitor" /> requesting the expression.</param>
 /// <returns>An expression representing the command.</returns>
 protected abstract Expression ProcessObjectAndBody(
     CommandAst commandAst,
     CommandElementAst targetAst,
     ScriptBlockExpressionAst bodyAst,
     CompileVisitor visitor);
コード例 #8
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     // Returning a ScriptBlock instance itself is OK, bad stuff only happens
     // when invoking one (which is blocked)
     return(true);
 }
コード例 #9
0
        /// <summary>
        /// Returns '0' if the <paramref name="parameterValue"/> does not need delimitation, '1' if it does, and a quote character if it needs to be delimited with a quote.
        /// </summary>
        /// <param name="parameterValue">Parameter value to check.</param>
        /// <param name="requireScriptblock">True if the parameter value should be a scriptblock.</param>
        /// <returns>'0' if the parameter does not need delimitation, '1' if it needs, '\'' if it needs to be delimited with single quote and '\"' if it needs to be delimited with double quotes.</returns>
        private static char ParameterNeedsDelimitation(string parameterValue, bool requireScriptblock)
        {
            Token[]        tokens;
            ParseError[]   errors;
            ScriptBlockAst values = Parser.ParseInput("commandName -parameterName " + parameterValue, out tokens, out errors);

            if (values == null || values.EndBlock == null || values.EndBlock.Statements.Count == 0)
            {
                return('1');
            }

            PipelineAst pipeline = values.EndBlock.Statements[0] as PipelineAst;

            if (pipeline == null || pipeline.PipelineElements.Count == 0)
            {
                return('1');
            }

            CommandAst commandAst = pipeline.PipelineElements[0] as CommandAst;

            if (commandAst == null || commandAst.CommandElements.Count == 0)
            {
                return('1');
            }

            // 3 is for CommandName, Parameter and its value
            if (commandAst.CommandElements.Count != 3)
            {
                return('1');
            }

            if (requireScriptblock)
            {
                ScriptBlockExpressionAst scriptAst = commandAst.CommandElements[2] as ScriptBlockExpressionAst;
                return(scriptAst == null ? '1' : '0');
            }

            StringConstantExpressionAst stringValue = commandAst.CommandElements[2] as StringConstantExpressionAst;

            if (stringValue != null)
            {
                if (errors.Length == 0)
                {
                    return('0');
                }

                char stringTerminationChar;

                if (stringValue.StringConstantType == StringConstantType.BareWord)
                {
                    stringTerminationChar = parameterValue[0];
                }
                else if (stringValue.StringConstantType == StringConstantType.DoubleQuoted || stringValue.StringConstantType == StringConstantType.DoubleQuotedHereString)
                {
                    stringTerminationChar = '\"';
                }
                else
                {
                    stringTerminationChar = '\'';
                }

                char oppositeTerminationChar = stringTerminationChar == '\"' ? '\'' : '\"';

                // If the string is not terminated, it should be delimited by the opposite string termination character
                return(oppositeTerminationChar);
            }

            if (errors.Length != 0)
            {
                return('1');
            }

            return('0');
        }
コード例 #10
0
 object ICustomAstVisitor.VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 => ProcessRewriter(VisitScriptBlockExpression, scriptBlockExpressionAst);
コード例 #11
0
 public object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     throw new UnexpectedElementException();
 }
コード例 #12
0
 public virtual ExpressionAst VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst)
 {
     return(new ScriptBlockExpressionAst(
                scriptBlockExpressionAst.Extent,
                scriptBlockExpressionAst.ScriptBlock.Rewrite(this, SyntaxKind.ScriptBlock)));
 }
コード例 #13
0
 /// <summary>
 /// Similar to visitnamedblock
 /// </summary>
 /// <param name="sbAst"></param>
 /// <returns></returns>
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst sbAst)
 {
     return(VisitActionHelper(sbAst));
 }
コード例 #14
0
 public virtual TResult VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => default(TResult);
コード例 #15
0
 object ICustomAstVisitor.VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => VisitScriptBlockExpression(scriptBlockExpressionAst);
コード例 #16
0
 public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => VisitAst(scriptBlockExpressionAst);