Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
AstVisitor.cs823 linesDownload Raw Back to parser
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Collections.Generic;5using System.Diagnostics.CodeAnalysis;6using System.Linq;7using System.Reflection.Emit;8 9namespace System.Management.Automation.Language10{11    /// <summary>12    /// </summary>13#nullable enable14    public interface ICustomAstVisitor15    {16        /// <summary/>17        object? DefaultVisit(Ast ast) => null;18 19        /// <summary/>20        object? VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);21 22        /// <summary/>23        object? VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);24 25        #region Script Blocks26 27        /// <summary/>28        object? VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);29 30        /// <summary/>31        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param")]32        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]33        object? VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);34 35        /// <summary/>36        object? VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);37 38        /// <summary/>39        object? VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);40 41        /// <summary/>42        object? VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);43 44        /// <summary/>45        object? VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);46 47        /// <summary/>48        object? VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);49 50        #endregion Script Blocks51 52        #region Statements53 54        /// <summary/>55        object? VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);56 57        /// <summary/>58        object? VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);59 60        /// <summary/>61        object? VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);62 63        /// <summary/>64        object? VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);65 66        /// <summary/>67        object? VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);68 69        /// <summary/>70        object? VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);71 72        /// <summary/>73        object? VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);74 75        /// <summary/>76        object? VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);77 78        /// <summary/>79        object? VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);80 81        /// <summary/>82        object? VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);83 84        /// <summary/>85        object? VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);86 87        /// <summary/>88        object? VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);89 90        /// <summary/>91        object? VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);92 93        /// <summary/>94        object? VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);95 96        /// <summary/>97        object? VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);98 99        /// <summary/>100        object? VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);101 102        /// <summary/>103        object? VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);104 105        /// <summary/>106        object? VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);107 108        /// <summary/>109        object? VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);110 111        #endregion Statements112 113        #region Pipelines114 115        /// <summary/>116        object? VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);117 118        /// <summary/>119        object? VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);120 121        /// <summary/>122        object? VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);123 124        /// <summary/>125        object? VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);126 127        /// <summary/>128        object? VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);129 130        /// <summary/>131        object? VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);132 133        #endregion Pipelines134 135        #region Expressions136 137        /// <summary/>138        object? VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);139 140        /// <summary/>141        object? VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);142 143        /// <summary/>144        object? VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);145 146        /// <summary/>147        object? VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);148 149        /// <summary/>150        object? VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);151 152        /// <summary/>153        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubExpression")]154        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "subExpression")]155        object? VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);156 157        /// <summary/>158        object? VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);159 160        /// <summary/>161        object? VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);162 163        /// <summary/>164        object? VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);165 166        /// <summary/>167        object? VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);168 169        /// <summary/>170        object? VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);171 172        /// <summary/>173        object? VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);174 175        /// <summary/>176        object? VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);177 178        /// <summary/>179        object? VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);180 181        /// <summary/>182        object? VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);183 184        /// <summary/>185        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paren")]186        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "paren")]187        object? VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);188 189        /// <summary/>190        object? VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);191 192        /// <summary/>193        object? VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);194 195        /// <summary/>196        object? VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);197 198        /// <summary/>199        object? VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);200 201        #endregion Expressions202    }203#nullable restore204 205    /// <summary/>206#nullable enable207    public interface ICustomAstVisitor2 : ICustomAstVisitor208    {209        /// <summary/>210        object? VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);211 212        /// <summary/>213        object? VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);214 215        /// <summary/>216        object? VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);217 218        /// <summary/>219        object? VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);220 221        /// <summary/>222        object? VisitUsingStatement(UsingStatementAst usingStatement) => DefaultVisit(usingStatement);223 224        /// <summary/>225        object? VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) => DefaultVisit(configurationDefinitionAst);226 227        /// <summary/>228        object? VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) => DefaultVisit(dynamicKeywordAst);229 230        /// <summary/>231        object? VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);232 233        /// <summary/>234        object? VisitPipelineChain(PipelineChainAst statementChainAst) => DefaultVisit(statementChainAst);235    }236#nullable restore237 238#if DEBUG239    internal class CheckAllParentsSet : AstVisitor2240    {241        internal CheckAllParentsSet(Ast root)242        {243            this.Root = root;244        }245 246        private Ast Root { get; }247 248        internal AstVisitAction CheckParent(Ast ast)249        {250            if (ast != Root)251            {252                Diagnostics.Assert(ast.Parent != null, "Parent not set");253            }254 255            return AstVisitAction.Continue;256        }257 258        public override AstVisitAction VisitErrorStatement(ErrorStatementAst ast) { return CheckParent(ast); }259 260        public override AstVisitAction VisitErrorExpression(ErrorExpressionAst ast) { return CheckParent(ast); }261 262        public override AstVisitAction VisitScriptBlock(ScriptBlockAst ast) { return CheckParent(ast); }263 264        public override AstVisitAction VisitParamBlock(ParamBlockAst ast) { return CheckParent(ast); }265 266        public override AstVisitAction VisitNamedBlock(NamedBlockAst ast) { return CheckParent(ast); }267 268        public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return CheckParent(ast); }269 270        public override AstVisitAction VisitAttribute(AttributeAst ast) { return CheckParent(ast); }271 272        public override AstVisitAction VisitParameter(ParameterAst ast) { return CheckParent(ast); }273 274        public override AstVisitAction VisitTypeExpression(TypeExpressionAst ast) { return CheckParent(ast); }275 276        public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return CheckParent(ast); }277 278        public override AstVisitAction VisitStatementBlock(StatementBlockAst ast) { return CheckParent(ast); }279 280        public override AstVisitAction VisitIfStatement(IfStatementAst ast) { return CheckParent(ast); }281 282        public override AstVisitAction VisitTrap(TrapStatementAst ast) { return CheckParent(ast); }283 284        public override AstVisitAction VisitSwitchStatement(SwitchStatementAst ast) { return CheckParent(ast); }285 286        public override AstVisitAction VisitDataStatement(DataStatementAst ast) { return CheckParent(ast); }287 288        public override AstVisitAction VisitForEachStatement(ForEachStatementAst ast) { return CheckParent(ast); }289 290        public override AstVisitAction VisitDoWhileStatement(DoWhileStatementAst ast) { return CheckParent(ast); }291 292        public override AstVisitAction VisitForStatement(ForStatementAst ast) { return CheckParent(ast); }293 294        public override AstVisitAction VisitWhileStatement(WhileStatementAst ast) { return CheckParent(ast); }295 296        public override AstVisitAction VisitCatchClause(CatchClauseAst ast) { return CheckParent(ast); }297 298        public override AstVisitAction VisitTryStatement(TryStatementAst ast) { return CheckParent(ast); }299 300        public override AstVisitAction VisitBreakStatement(BreakStatementAst ast) { return CheckParent(ast); }301 302        public override AstVisitAction VisitContinueStatement(ContinueStatementAst ast) { return CheckParent(ast); }303 304        public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast) { return CheckParent(ast); }305 306        public override AstVisitAction VisitExitStatement(ExitStatementAst ast) { return CheckParent(ast); }307 308        public override AstVisitAction VisitThrowStatement(ThrowStatementAst ast) { return CheckParent(ast); }309 310        public override AstVisitAction VisitDoUntilStatement(DoUntilStatementAst ast) { return CheckParent(ast); }311 312        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast) { return CheckParent(ast); }313 314        public override AstVisitAction VisitPipeline(PipelineAst ast) { return CheckParent(ast); }315 316        public override AstVisitAction VisitCommand(CommandAst ast) { return CheckParent(ast); }317 318        public override AstVisitAction VisitCommandExpression(CommandExpressionAst ast) { return CheckParent(ast); }319 320        public override AstVisitAction VisitCommandParameter(CommandParameterAst ast) { return CheckParent(ast); }321 322        public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return CheckParent(ast); }323 324        public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return CheckParent(ast); }325 326        public override AstVisitAction VisitBinaryExpression(BinaryExpressionAst ast) { return CheckParent(ast); }327 328        public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast) { return CheckParent(ast); }329 330        public override AstVisitAction VisitConvertExpression(ConvertExpressionAst ast) { return CheckParent(ast); }331 332        public override AstVisitAction VisitConstantExpression(ConstantExpressionAst ast) { return CheckParent(ast); }333 334        public override AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst ast) { return CheckParent(ast); }335 336        public override AstVisitAction VisitSubExpression(SubExpressionAst ast) { return CheckParent(ast); }337 338        public override AstVisitAction VisitUsingExpression(UsingExpressionAst ast) { return CheckParent(ast); }339 340        public override AstVisitAction VisitVariableExpression(VariableExpressionAst ast) { return CheckParent(ast); }341 342        public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return CheckParent(ast); }343 344        public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return CheckParent(ast); }345 346        public override AstVisitAction VisitArrayExpression(ArrayExpressionAst ast) { return CheckParent(ast); }347 348        public override AstVisitAction VisitArrayLiteral(ArrayLiteralAst ast) { return CheckParent(ast); }349 350        public override AstVisitAction VisitHashtable(HashtableAst ast) { return CheckParent(ast); }351 352        public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckParent(ast); }353 354        public override AstVisitAction VisitParenExpression(ParenExpressionAst ast) { return CheckParent(ast); }355 356        public override AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst ast) { return CheckParent(ast); }357 358        public override AstVisitAction VisitIndexExpression(IndexExpressionAst ast) { return CheckParent(ast); }359 360        public override AstVisitAction VisitAttributedExpression(AttributedExpressionAst ast) { return CheckParent(ast); }361 362        public override AstVisitAction VisitBlockStatement(BlockStatementAst ast) { return CheckParent(ast); }363 364        public override AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst ast) { return CheckParent(ast); }365 366        public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst ast) { return CheckParent(ast); }367 368        public override AstVisitAction VisitFunctionMember(FunctionMemberAst ast) { return CheckParent(ast); }369 370        public override AstVisitAction VisitPropertyMember(PropertyMemberAst ast) { return CheckParent(ast); }371 372        public override AstVisitAction VisitUsingStatement(UsingStatementAst ast) { return CheckParent(ast); }373 374        public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return CheckParent(ast); }375 376        public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst ast) { return CheckParent(ast); }377 378        public override AstVisitAction VisitTernaryExpression(TernaryExpressionAst ast) => CheckParent(ast);379 380        public override AstVisitAction VisitPipelineChain(PipelineChainAst ast) => CheckParent(ast);381    }382 383    /// <summary>384    /// Check if <see cref="TypeConstraintAst"/> contains <see cref="TypeBuilder "/> type.385    /// </summary>386    internal class CheckTypeBuilder : AstVisitor2387    {388        public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast)389        {390            Type type = ast.TypeName.GetReflectionType();391            if (type != null)392            {393                Diagnostics.Assert(type is not TypeBuilder, "ReflectionType can never be TypeBuilder");394            }395 396            return AstVisitAction.Continue;397        }398    }399#endif400 401    /// <summary>402    /// Searches an AST, using the evaluation function provided by either of the constructors.403    /// </summary>404    internal class AstSearcher : AstVisitor2405    {406        #region External interface407 408        internal static IEnumerable<Ast> FindAll(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks)409        {410            Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");411 412            var searcher = new AstSearcher(predicate, stopOnFirst: false, searchNestedScriptBlocks: searchNestedScriptBlocks);413            ast.InternalVisit(searcher);414            return searcher.Results;415        }416 417        internal static Ast FindFirst(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks)418        {419            Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");420 421            var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks);422            ast.InternalVisit(searcher);423            return searcher.Results.FirstOrDefault();424        }425 426        internal static bool Contains(Ast ast, Func<Ast, bool> predicate, bool searchNestedScriptBlocks)427        {428            Diagnostics.Assert(ast != null && predicate != null, "caller to verify arguments");429 430            var searcher = new AstSearcher(predicate, stopOnFirst: true, searchNestedScriptBlocks: searchNestedScriptBlocks);431            ast.InternalVisit(searcher);432            return searcher.Results.Count > 0;433        }434 435        internal static bool IsUsingDollarInput(Ast ast)436        {437            return (AstSearcher.Contains(438                ast,439                ast_ =>440                {441                    var varAst = ast_ as VariableExpressionAst;442                    if (varAst != null)443                    {444                        return varAst.VariablePath.IsVariable &&445                               varAst.VariablePath.UnqualifiedPath.Equals(SpecialVariables.Input,446                                                                          StringComparison.OrdinalIgnoreCase);447                    }448 449                    return false;450                },451                searchNestedScriptBlocks: false));452        }453 454        #endregion External interface455 456        protected AstSearcher(Func<Ast, bool> callback, bool stopOnFirst, bool searchNestedScriptBlocks)457        {458            _callback = callback;459            _stopOnFirst = stopOnFirst;460            _searchNestedScriptBlocks = searchNestedScriptBlocks;461            this.Results = new List<Ast>();462        }463 464        private readonly Func<Ast, bool> _callback;465        private readonly bool _stopOnFirst;466        private readonly bool _searchNestedScriptBlocks;467        protected readonly List<Ast> Results;468 469        protected AstVisitAction Check(Ast ast)470        {471            if (_callback(ast))472            {473                Results.Add(ast);474                if (_stopOnFirst)475                {476                    return AstVisitAction.StopVisit;477                }478            }479 480            return AstVisitAction.Continue;481        }482 483        protected AstVisitAction CheckScriptBlock(Ast ast)484        {485            var action = Check(ast);486            if (action == AstVisitAction.Continue && !_searchNestedScriptBlocks)487            {488                action = AstVisitAction.SkipChildren;489            }490 491            return action;492        }493 494        public override AstVisitAction VisitErrorStatement(ErrorStatementAst ast) { return Check(ast); }495 496        public override AstVisitAction VisitErrorExpression(ErrorExpressionAst ast) { return Check(ast); }497 498        public override AstVisitAction VisitScriptBlock(ScriptBlockAst ast) { return Check(ast); }499 500        public override AstVisitAction VisitParamBlock(ParamBlockAst ast) { return Check(ast); }501 502        public override AstVisitAction VisitNamedBlock(NamedBlockAst ast) { return Check(ast); }503 504        public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return Check(ast); }505 506        public override AstVisitAction VisitAttribute(AttributeAst ast) { return Check(ast); }507 508        public override AstVisitAction VisitParameter(ParameterAst ast) { return Check(ast); }509 510        public override AstVisitAction VisitTypeExpression(TypeExpressionAst ast) { return Check(ast); }511 512        public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst ast) { return CheckScriptBlock(ast); }513 514        public override AstVisitAction VisitStatementBlock(StatementBlockAst ast) { return Check(ast); }515 516        public override AstVisitAction VisitIfStatement(IfStatementAst ast) { return Check(ast); }517 518        public override AstVisitAction VisitTrap(TrapStatementAst ast) { return CheckScriptBlock(ast); }519 520        public override AstVisitAction VisitSwitchStatement(SwitchStatementAst ast) { return Check(ast); }521 522        public override AstVisitAction VisitDataStatement(DataStatementAst ast) { return Check(ast); }523 524        public override AstVisitAction VisitForEachStatement(ForEachStatementAst ast) { return Check(ast); }525 526        public override AstVisitAction VisitDoWhileStatement(DoWhileStatementAst ast) { return Check(ast); }527 528        public override AstVisitAction VisitForStatement(ForStatementAst ast) { return Check(ast); }529 530        public override AstVisitAction VisitWhileStatement(WhileStatementAst ast) { return Check(ast); }531 532        public override AstVisitAction VisitCatchClause(CatchClauseAst ast) { return Check(ast); }533 534        public override AstVisitAction VisitTryStatement(TryStatementAst ast) { return Check(ast); }535 536        public override AstVisitAction VisitBreakStatement(BreakStatementAst ast) { return Check(ast); }537 538        public override AstVisitAction VisitContinueStatement(ContinueStatementAst ast) { return Check(ast); }539 540        public override AstVisitAction VisitReturnStatement(ReturnStatementAst ast) { return Check(ast); }541 542        public override AstVisitAction VisitExitStatement(ExitStatementAst ast) { return Check(ast); }543 544        public override AstVisitAction VisitThrowStatement(ThrowStatementAst ast) { return Check(ast); }545 546        public override AstVisitAction VisitDoUntilStatement(DoUntilStatementAst ast) { return Check(ast); }547 548        public override AstVisitAction VisitAssignmentStatement(AssignmentStatementAst ast) { return Check(ast); }549 550        public override AstVisitAction VisitPipeline(PipelineAst ast) { return Check(ast); }551 552        public override AstVisitAction VisitCommand(CommandAst ast) { return Check(ast); }553 554        public override AstVisitAction VisitCommandExpression(CommandExpressionAst ast) { return Check(ast); }555 556        public override AstVisitAction VisitCommandParameter(CommandParameterAst ast) { return Check(ast); }557 558        public override AstVisitAction VisitMergingRedirection(MergingRedirectionAst ast) { return Check(ast); }559 560        public override AstVisitAction VisitFileRedirection(FileRedirectionAst ast) { return Check(ast); }561 562        public override AstVisitAction VisitBinaryExpression(BinaryExpressionAst ast) { return Check(ast); }563 564        public override AstVisitAction VisitUnaryExpression(UnaryExpressionAst ast) { return Check(ast); }565 566        public override AstVisitAction VisitConvertExpression(ConvertExpressionAst ast) { return Check(ast); }567 568        public override AstVisitAction VisitConstantExpression(ConstantExpressionAst ast) { return Check(ast); }569 570        public override AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst ast) { return Check(ast); }571 572        public override AstVisitAction VisitSubExpression(SubExpressionAst ast) { return Check(ast); }573 574        public override AstVisitAction VisitUsingExpression(UsingExpressionAst ast) { return Check(ast); }575 576        public override AstVisitAction VisitVariableExpression(VariableExpressionAst ast) { return Check(ast); }577 578        public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return Check(ast); }579 580        public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return Check(ast); }581 582        public override AstVisitAction VisitArrayExpression(ArrayExpressionAst ast) { return Check(ast); }583 584        public override AstVisitAction VisitArrayLiteral(ArrayLiteralAst ast) { return Check(ast); }585 586        public override AstVisitAction VisitHashtable(HashtableAst ast) { return Check(ast); }587 588        public override AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst ast) { return CheckScriptBlock(ast); }589 590        public override AstVisitAction VisitParenExpression(ParenExpressionAst ast) { return Check(ast); }591 592        public override AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst ast) { return Check(ast); }593 594        public override AstVisitAction VisitIndexExpression(IndexExpressionAst ast) { return Check(ast); }595 596        public override AstVisitAction VisitAttributedExpression(AttributedExpressionAst ast) { return Check(ast); }597 598        public override AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst ast) { return Check(ast); }599 600        public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst ast) { return Check(ast); }601 602        public override AstVisitAction VisitPropertyMember(PropertyMemberAst ast) { return Check(ast); }603 604        public override AstVisitAction VisitFunctionMember(FunctionMemberAst ast) { return Check(ast); }605 606        public override AstVisitAction VisitUsingStatement(UsingStatementAst ast) { return Check(ast); }607 608        public override AstVisitAction VisitBlockStatement(BlockStatementAst ast) { return Check(ast); }609 610        public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst ast) { return Check(ast); }611 612        public override AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst ast) { return Check(ast); }613 614        public override AstVisitAction VisitTernaryExpression(TernaryExpressionAst ast) { return Check(ast); }615 616        public override AstVisitAction VisitPipelineChain(PipelineChainAst ast) { return Check(ast); }617    }618 619    /// <summary>620    /// Default implementation of <see cref="ICustomAstVisitor"/> interface.621    /// </summary>622    public abstract class DefaultCustomAstVisitor : ICustomAstVisitor623    {624        /// <summary/>625        public virtual object DefaultVisit(Ast ast) => null;626 627        /// <summary/>628        public virtual object VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);629 630        /// <summary/>631        public virtual object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);632 633        /// <summary/>634        public virtual object VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);635 636        /// <summary/>637        public virtual object VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);638 639        /// <summary/>640        public virtual object VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);641 642        /// <summary/>643        public virtual object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);644 645        /// <summary/>646        public virtual object VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);647 648        /// <summary/>649        public virtual object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);650 651        /// <summary/>652        public virtual object VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);653 654        /// <summary/>655        public virtual object VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);656 657        /// <summary/>658        public virtual object VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);659 660        /// <summary/>661        public virtual object VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);662 663        /// <summary/>664        public virtual object VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);665 666        /// <summary/>667        public virtual object VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);668 669        /// <summary/>670        public virtual object VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);671 672        /// <summary/>673        public virtual object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);674 675        /// <summary/>676        public virtual object VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);677 678        /// <summary/>679        public virtual object VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);680 681        /// <summary/>682        public virtual object VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);683 684        /// <summary/>685        public virtual object VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);686 687        /// <summary/>688        public virtual object VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);689 690        /// <summary/>691        public virtual object VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);692 693        /// <summary/>694        public virtual object VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);695 696        /// <summary/>697        public virtual object VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);698 699        /// <summary/>700        public virtual object VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);701 702        /// <summary/>703        public virtual object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);704 705        /// <summary/>706        public virtual object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);707 708        /// <summary/>709        public virtual object VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);710 711        /// <summary/>712        public virtual object VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);713 714        /// <summary/>715        public virtual object VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);716 717        /// <summary/>718        public virtual object VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);719 720        /// <summary/>721        public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);722 723        /// <summary/>724        public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);725 726        /// <summary/>727        public virtual object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);728 729        /// <summary/>730        public virtual object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);731 732        /// <summary/>733        public virtual object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);734 735        /// <summary/>736        public virtual object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);737 738        /// <summary/>739        public virtual object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);740 741        /// <summary/>742        public virtual object VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);743 744        /// <summary/>745        public virtual object VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);746 747        /// <summary/>748        public virtual object VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);749 750        /// <summary/>751        public virtual object VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);752 753        /// <summary/>754        public virtual object VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);755 756        /// <summary/>757        public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);758 759        /// <summary/>760        public virtual object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);761 762        /// <summary/>763        public virtual object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);764 765        /// <summary/>766        public virtual object VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);767 768        /// <summary/>769        public virtual object VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);770 771        /// <summary/>772        public virtual object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);773 774        /// <summary/>775        public virtual object VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);776 777        /// <summary/>778        public virtual object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);779 780        /// <summary/>781        public virtual object VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);782 783        /// <summary/>784        public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);785 786        /// <summary/>787        public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);788    }789 790    /// <summary>791    /// Default implementation of <see cref="ICustomAstVisitor2"/> interface.792    /// </summary>793    public abstract class DefaultCustomAstVisitor2 : DefaultCustomAstVisitor, ICustomAstVisitor2794    {795        /// <summary/>796        public virtual object VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);797 798        /// <summary/>799        public virtual object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);800 801        /// <summary/>802        public virtual object VisitUsingStatement(UsingStatementAst usingStatement) => DefaultVisit(usingStatement);803 804        /// <summary/>805        public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst) => DefaultVisit(configurationAst);806 807        /// <summary/>808        public virtual object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) => DefaultVisit(dynamicKeywordAst);809 810        /// <summary/>811        public virtual object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);812 813        /// <summary/>814        public virtual object VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);815 816        /// <summary/>817        public virtual object VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);818 819        /// <summary/>820        public virtual object VisitPipelineChain(PipelineChainAst statementChainAst) => DefaultVisit(statementChainAst);821    }822}823