diff --git a/src/System.Management.Automation/engine/parser/AstVisitor.cs b/src/System.Management.Automation/engine/parser/AstVisitor.cs
index 03ce04ea4a..dcc7da489d 100644
--- a/src/System.Management.Automation/engine/parser/AstVisitor.cs
+++ b/src/System.Management.Automation/engine/parser/AstVisitor.cs
@@ -13,136 +13,189 @@ namespace System.Management.Automation.Language
public interface ICustomAstVisitor
{
///
- object VisitErrorStatement(ErrorStatementAst errorStatementAst);
+ object DefaultVisit(Ast ast) => null;
+
///
- object VisitErrorExpression(ErrorExpressionAst errorExpressionAst);
+ object VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);
+
+ ///
+ object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);
#region Script Blocks
///
- object VisitScriptBlock(ScriptBlockAst scriptBlockAst);
+ object VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);
+
///
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param")]
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
- object VisitParamBlock(ParamBlockAst paramBlockAst);
+ object VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);
+
///
- object VisitNamedBlock(NamedBlockAst namedBlockAst);
+ object VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);
+
///
- object VisitTypeConstraint(TypeConstraintAst typeConstraintAst);
+ object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);
+
///
- object VisitAttribute(AttributeAst attributeAst);
+ object VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);
+
///
- object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst);
+ object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);
+
///
- object VisitParameter(ParameterAst parameterAst);
+ object VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);
#endregion Script Blocks
#region Statements
///
- object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst);
+ object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);
+
///
- object VisitStatementBlock(StatementBlockAst statementBlockAst);
+ object VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);
+
///
- object VisitIfStatement(IfStatementAst ifStmtAst);
+ object VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);
+
///
- object VisitTrap(TrapStatementAst trapStatementAst);
+ object VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);
+
///
- object VisitSwitchStatement(SwitchStatementAst switchStatementAst);
+ object VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);
+
///
- object VisitDataStatement(DataStatementAst dataStatementAst);
+ object VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);
+
///
- object VisitForEachStatement(ForEachStatementAst forEachStatementAst);
+ object VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);
+
///
- object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst);
+ object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);
+
///
- object VisitForStatement(ForStatementAst forStatementAst);
+ object VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);
+
///
- object VisitWhileStatement(WhileStatementAst whileStatementAst);
+ object VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);
+
///
- object VisitCatchClause(CatchClauseAst catchClauseAst);
+ object VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);
+
///
- object VisitTryStatement(TryStatementAst tryStatementAst);
+ object VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);
+
///
- object VisitBreakStatement(BreakStatementAst breakStatementAst);
+ object VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);
+
///
- object VisitContinueStatement(ContinueStatementAst continueStatementAst);
+ object VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);
+
///
- object VisitReturnStatement(ReturnStatementAst returnStatementAst);
+ object VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);
+
///
- object VisitExitStatement(ExitStatementAst exitStatementAst);
+ object VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);
+
///
- object VisitThrowStatement(ThrowStatementAst throwStatementAst);
+ object VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);
+
///
- object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst);
+ object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);
+
///
- object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst);
+ object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);
#endregion Statements
#region Pipelines
///
- object VisitPipeline(PipelineAst pipelineAst);
+ object VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);
+
///
- object VisitCommand(CommandAst commandAst);
+ object VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);
+
///
- object VisitCommandExpression(CommandExpressionAst commandExpressionAst);
+ object VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);
+
///
- object VisitCommandParameter(CommandParameterAst commandParameterAst);
+ object VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);
+
///
- object VisitFileRedirection(FileRedirectionAst fileRedirectionAst);
+ object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);
+
///
- object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst);
+ object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);
+
#endregion Pipelines
#region Expressions
///
- object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst);
+ object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);
+
///
- object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst);
+ object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);
+
///
- object VisitConvertExpression(ConvertExpressionAst convertExpressionAst);
+ object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);
+
///
- object VisitConstantExpression(ConstantExpressionAst constantExpressionAst);
+ object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);
+
///
- object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst);
+ object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);
+
///
[SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubExpression")]
[SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "subExpression")]
- object VisitSubExpression(SubExpressionAst subExpressionAst);
+ object VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);
+
///
- object VisitUsingExpression(UsingExpressionAst usingExpressionAst);
+ object VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);
+
///
- object VisitVariableExpression(VariableExpressionAst variableExpressionAst);
+ object VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);
+
///
- object VisitTypeExpression(TypeExpressionAst typeExpressionAst);
+ object VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);
+
///
- object VisitMemberExpression(MemberExpressionAst memberExpressionAst);
+ object VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);
+
///
- object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst);
+ object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);
+
///
- object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst);
+ object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);
+
///
- object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst);
+ object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);
+
///
- object VisitHashtable(HashtableAst hashtableAst);
+ object VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);
+
///
- object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst);
+ object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);
+
///
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paren")]
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "paren")]
- object VisitParenExpression(ParenExpressionAst parenExpressionAst);
+ object VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);
+
///
- object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst);
+ object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);
+
///
- object VisitIndexExpression(IndexExpressionAst indexExpressionAst);
+ object VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);
+
///
- object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst);
+ object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);
+
///
- object VisitBlockStatement(BlockStatementAst blockStatementAst);
+ object VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);
#endregion Expressions
}
@@ -150,28 +203,26 @@ namespace System.Management.Automation.Language
///
public interface ICustomAstVisitor2 : ICustomAstVisitor
{
- private object DefaultVisit(Ast ast) => null;
+ ///
+ object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);
///
- object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst);
+ object VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);
///
- object VisitPropertyMember(PropertyMemberAst propertyMemberAst);
+ object VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);
///
- object VisitFunctionMember(FunctionMemberAst functionMemberAst);
+ object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);
///
- object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst);
+ object VisitUsingStatement(UsingStatementAst usingStatement) => DefaultVisit(usingStatement);
///
- object VisitUsingStatement(UsingStatementAst usingStatement);
+ object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) => DefaultVisit(configurationDefinitionAst);
///
- object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst);
-
- ///
- object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst);
+ object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) => DefaultVisit(dynamicKeywordAst);
///
object VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);
@@ -567,113 +618,169 @@ namespace System.Management.Automation.Language
public abstract class DefaultCustomAstVisitor : ICustomAstVisitor
{
///
- public virtual object VisitErrorStatement(ErrorStatementAst errorStatementAst) { return null; }
+ public virtual object DefaultVisit(Ast ast) => null;
+
///
- public virtual object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) { return null; }
+ public virtual object VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);
+
///
- public virtual object VisitScriptBlock(ScriptBlockAst scriptBlockAst) { return null; }
+ public virtual object VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);
+
///
- public virtual object VisitParamBlock(ParamBlockAst paramBlockAst) { return null; }
+ public virtual object VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);
+
///
- public virtual object VisitNamedBlock(NamedBlockAst namedBlockAst) { return null; }
+ public virtual object VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);
+
///
- public virtual object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return null; }
+ public virtual object VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);
+
///
- public virtual object VisitAttribute(AttributeAst attributeAst) { return null; }
+ public virtual object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);
+
///
- public virtual object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) { return null; }
+ public virtual object VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);
+
///
- public virtual object VisitParameter(ParameterAst parameterAst) { return null; }
+ public virtual object VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);
+
///
- public virtual object VisitStatementBlock(StatementBlockAst statementBlockAst) { return null; }
+ public virtual object VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);
+
///
- public virtual object VisitIfStatement(IfStatementAst ifStmtAst) { return null; }
+ public virtual object VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);
+
///
- public virtual object VisitTrap(TrapStatementAst trapStatementAst) { return null; }
+ public virtual object VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);
+
///
- public virtual object VisitSwitchStatement(SwitchStatementAst switchStatementAst) { return null; }
+ public virtual object VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);
+
///
- public virtual object VisitDataStatement(DataStatementAst dataStatementAst) { return null; }
+ public virtual object VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);
+
///
- public virtual object VisitForEachStatement(ForEachStatementAst forEachStatementAst) { return null; }
+ public virtual object VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);
+
///
- public virtual object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) { return null; }
+ public virtual object VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);
+
///
- public virtual object VisitForStatement(ForStatementAst forStatementAst) { return null; }
+ public virtual object VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);
+
///
- public virtual object VisitWhileStatement(WhileStatementAst whileStatementAst) { return null; }
+ public virtual object VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);
+
///
- public virtual object VisitCatchClause(CatchClauseAst catchClauseAst) { return null; }
+ public virtual object VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);
+
///
- public virtual object VisitTryStatement(TryStatementAst tryStatementAst) { return null; }
+ public virtual object VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);
+
///
- public virtual object VisitBreakStatement(BreakStatementAst breakStatementAst) { return null; }
+ public virtual object VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);
+
///
- public virtual object VisitContinueStatement(ContinueStatementAst continueStatementAst) { return null; }
+ public virtual object VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);
+
///
- public virtual object VisitReturnStatement(ReturnStatementAst returnStatementAst) { return null; }
+ public virtual object VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);
+
///
- public virtual object VisitExitStatement(ExitStatementAst exitStatementAst) { return null; }
+ public virtual object VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);
+
///
- public virtual object VisitThrowStatement(ThrowStatementAst throwStatementAst) { return null; }
+ public virtual object VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);
+
///
- public virtual object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) { return null; }
+ public virtual object VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);
+
///
- public virtual object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) { return null; }
+ public virtual object VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);
+
///
- public virtual object VisitPipeline(PipelineAst pipelineAst) { return null; }
+ public virtual object VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);
+
///
- public virtual object VisitCommand(CommandAst commandAst) { return null; }
+ public virtual object VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);
+
///
- public virtual object VisitCommandExpression(CommandExpressionAst commandExpressionAst) { return null; }
+ public virtual object VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);
+
///
- public virtual object VisitCommandParameter(CommandParameterAst commandParameterAst) { return null; }
+ public virtual object VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);
+
///
- public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) { return null; }
+ public virtual object VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);
+
///
- public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) { return null; }
+ public virtual object VisitFileRedirection(FileRedirectionAst fileRedirectionAst) => DefaultVisit(fileRedirectionAst);
+
///
- public virtual object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) { return null; }
+ public virtual object VisitMergingRedirection(MergingRedirectionAst mergingRedirectionAst) => DefaultVisit(mergingRedirectionAst);
+
///
- public virtual object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) { return null; }
+ public virtual object VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);
+
///
- public virtual object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) { return null; }
+ public virtual object VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);
+
///
- public virtual object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) { return null; }
+ public virtual object VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);
+
///
- public virtual object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) { return null; }
+ public virtual object VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);
+
///
- public virtual object VisitSubExpression(SubExpressionAst subExpressionAst) { return null; }
+ public virtual object VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);
+
///
- public virtual object VisitUsingExpression(UsingExpressionAst usingExpressionAst) { return null; }
+ public virtual object VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);
+
///
- public virtual object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { return null; }
+ public virtual object VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);
+
///
- public virtual object VisitTypeExpression(TypeExpressionAst typeExpressionAst) { return null; }
+ public virtual object VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);
+
///
- public virtual object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { return null; }
+ public virtual object VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);
+
///
- public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return null; }
+ public virtual object VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);
+
///
- public virtual object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) { return null; }
+ public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) => DefaultVisit(invokeMemberExpressionAst);
+
///
- public virtual object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) { return null; }
+ public virtual object VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);
+
///
- public virtual object VisitHashtable(HashtableAst hashtableAst) { return null; }
+ public virtual object VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);
+
///
- public virtual object VisitParenExpression(ParenExpressionAst parenExpressionAst) { return null; }
+ public virtual object VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);
+
///
- public virtual object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) { return null; }
+ public virtual object VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);
+
///
- public virtual object VisitIndexExpression(IndexExpressionAst indexExpressionAst) { return null; }
+ public virtual object VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);
+
///
- public virtual object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) { return null; }
+ public virtual object VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);
+
///
- public virtual object VisitBlockStatement(BlockStatementAst blockStatementAst) { return null; }
+ public virtual object VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);
+
///
- public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return null; }
+ public virtual object VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);
+
///
- public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) { return null; }
+ public virtual object VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);
+
+ ///
+ public virtual object VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);
}
///
@@ -682,22 +789,30 @@ namespace System.Management.Automation.Language
public abstract class DefaultCustomAstVisitor2 : DefaultCustomAstVisitor, ICustomAstVisitor2
{
///
- public virtual object VisitPropertyMember(PropertyMemberAst propertyMemberAst) { return null; }
+ public virtual object VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);
+
///
- public virtual object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) { return null; }
+ public virtual object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);
+
///
- public virtual object VisitUsingStatement(UsingStatementAst usingStatement) { return null; }
+ public virtual object VisitUsingStatement(UsingStatementAst usingStatement) => DefaultVisit(usingStatement);
+
///
- public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst) { return null; }
+ public virtual object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationAst) => DefaultVisit(configurationAst);
+
///
- public virtual object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) { return null; }
+ public virtual object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst) => DefaultVisit(dynamicKeywordAst);
+
///
- public virtual object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) { return null; }
+ public virtual object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);
+
///
- public virtual object VisitFunctionMember(FunctionMemberAst functionMemberAst) { return null; }
+ public virtual object VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);
+
///
- public virtual object VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) { return null; }
+ public virtual object VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);
+
///
- public virtual object VisitPipelineChain(PipelineChainAst statementChainAst) { return null; }
+ public virtual object VisitPipelineChain(PipelineChainAst statementChainAst) => DefaultVisit(statementChainAst);
}
}
diff --git a/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs b/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs
index b865a76ee4..0bf5368fdd 100644
--- a/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs
+++ b/src/System.Management.Automation/engine/parser/PreOrderVisitor.cs
@@ -46,119 +46,175 @@ namespace System.Management.Automation.Language
}
///
- public virtual AstVisitAction VisitErrorStatement(ErrorStatementAst errorStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction DefaultVisit(Ast ast) => AstVisitAction.Continue;
+
///
- public virtual AstVisitAction VisitErrorExpression(ErrorExpressionAst errorExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitErrorStatement(ErrorStatementAst errorStatementAst) => DefaultVisit(errorStatementAst);
+
///
- public virtual AstVisitAction VisitScriptBlock(ScriptBlockAst scriptBlockAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitErrorExpression(ErrorExpressionAst errorExpressionAst) => DefaultVisit(errorExpressionAst);
+
+ ///
+ public virtual AstVisitAction VisitScriptBlock(ScriptBlockAst scriptBlockAst) => DefaultVisit(scriptBlockAst);
+
///
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param")]
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param")]
- public virtual AstVisitAction VisitParamBlock(ParamBlockAst paramBlockAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitParamBlock(ParamBlockAst paramBlockAst) => DefaultVisit(paramBlockAst);
+
///
- public virtual AstVisitAction VisitNamedBlock(NamedBlockAst namedBlockAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitNamedBlock(NamedBlockAst namedBlockAst) => DefaultVisit(namedBlockAst);
+
///
- public virtual AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);
+
///
- public virtual AstVisitAction VisitAttribute(AttributeAst attributeAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitAttribute(AttributeAst attributeAst) => DefaultVisit(attributeAst);
+
///
- public virtual AstVisitAction VisitParameter(ParameterAst parameterAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitParameter(ParameterAst parameterAst) => DefaultVisit(parameterAst);
+
///
- public virtual AstVisitAction VisitTypeExpression(TypeExpressionAst typeExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitTypeExpression(TypeExpressionAst typeExpressionAst) => DefaultVisit(typeExpressionAst);
+
///
- public virtual AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) => DefaultVisit(functionDefinitionAst);
+
///
- public virtual AstVisitAction VisitStatementBlock(StatementBlockAst statementBlockAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitStatementBlock(StatementBlockAst statementBlockAst) => DefaultVisit(statementBlockAst);
+
///
- public virtual AstVisitAction VisitIfStatement(IfStatementAst ifStmtAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitIfStatement(IfStatementAst ifStmtAst) => DefaultVisit(ifStmtAst);
+
///
- public virtual AstVisitAction VisitTrap(TrapStatementAst trapStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitTrap(TrapStatementAst trapStatementAst) => DefaultVisit(trapStatementAst);
+
///
- public virtual AstVisitAction VisitSwitchStatement(SwitchStatementAst switchStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitSwitchStatement(SwitchStatementAst switchStatementAst) => DefaultVisit(switchStatementAst);
+
///
- public virtual AstVisitAction VisitDataStatement(DataStatementAst dataStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitDataStatement(DataStatementAst dataStatementAst) => DefaultVisit(dataStatementAst);
+
///
- public virtual AstVisitAction VisitForEachStatement(ForEachStatementAst forEachStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitForEachStatement(ForEachStatementAst forEachStatementAst) => DefaultVisit(forEachStatementAst);
+
///
- public virtual AstVisitAction VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitDoWhileStatement(DoWhileStatementAst doWhileStatementAst) => DefaultVisit(doWhileStatementAst);
+
///
- public virtual AstVisitAction VisitForStatement(ForStatementAst forStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitForStatement(ForStatementAst forStatementAst) => DefaultVisit(forStatementAst);
+
///
- public virtual AstVisitAction VisitWhileStatement(WhileStatementAst whileStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitWhileStatement(WhileStatementAst whileStatementAst) => DefaultVisit(whileStatementAst);
+
///
- public virtual AstVisitAction VisitCatchClause(CatchClauseAst catchClauseAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitCatchClause(CatchClauseAst catchClauseAst) => DefaultVisit(catchClauseAst);
+
///
- public virtual AstVisitAction VisitTryStatement(TryStatementAst tryStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitTryStatement(TryStatementAst tryStatementAst) => DefaultVisit(tryStatementAst);
+
///
- public virtual AstVisitAction VisitBreakStatement(BreakStatementAst breakStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitBreakStatement(BreakStatementAst breakStatementAst) => DefaultVisit(breakStatementAst);
+
///
- public virtual AstVisitAction VisitContinueStatement(ContinueStatementAst continueStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitContinueStatement(ContinueStatementAst continueStatementAst) => DefaultVisit(continueStatementAst);
+
///
- public virtual AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitReturnStatement(ReturnStatementAst returnStatementAst) => DefaultVisit(returnStatementAst);
+
///
- public virtual AstVisitAction VisitExitStatement(ExitStatementAst exitStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitExitStatement(ExitStatementAst exitStatementAst) => DefaultVisit(exitStatementAst);
+
///
- public virtual AstVisitAction VisitThrowStatement(ThrowStatementAst throwStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitThrowStatement(ThrowStatementAst throwStatementAst) => DefaultVisit(throwStatementAst);
+
///
- public virtual AstVisitAction VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitDoUntilStatement(DoUntilStatementAst doUntilStatementAst) => DefaultVisit(doUntilStatementAst);
+
///
- public virtual AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitAssignmentStatement(AssignmentStatementAst assignmentStatementAst) => DefaultVisit(assignmentStatementAst);
+
///
- public virtual AstVisitAction VisitPipeline(PipelineAst pipelineAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitPipeline(PipelineAst pipelineAst) => DefaultVisit(pipelineAst);
+
///
- public virtual AstVisitAction VisitCommand(CommandAst commandAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitCommand(CommandAst commandAst) => DefaultVisit(commandAst);
+
///
- public virtual AstVisitAction VisitCommandExpression(CommandExpressionAst commandExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitCommandExpression(CommandExpressionAst commandExpressionAst) => DefaultVisit(commandExpressionAst);
+
///
- public virtual AstVisitAction VisitCommandParameter(CommandParameterAst commandParameterAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitCommandParameter(CommandParameterAst commandParameterAst) => DefaultVisit(commandParameterAst);
+
///
- public virtual AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitMergingRedirection(MergingRedirectionAst redirectionAst) => DefaultVisit(redirectionAst);
+
///
- public virtual AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitFileRedirection(FileRedirectionAst redirectionAst) => DefaultVisit(redirectionAst);
+
///
- public virtual AstVisitAction VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitBinaryExpression(BinaryExpressionAst binaryExpressionAst) => DefaultVisit(binaryExpressionAst);
+
///
- public virtual AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitUnaryExpression(UnaryExpressionAst unaryExpressionAst) => DefaultVisit(unaryExpressionAst);
+
///
- public virtual AstVisitAction VisitConvertExpression(ConvertExpressionAst convertExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitConvertExpression(ConvertExpressionAst convertExpressionAst) => DefaultVisit(convertExpressionAst);
+
///
- public virtual AstVisitAction VisitConstantExpression(ConstantExpressionAst constantExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitConstantExpression(ConstantExpressionAst constantExpressionAst) => DefaultVisit(constantExpressionAst);
+
///
- public virtual AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitStringConstantExpression(StringConstantExpressionAst stringConstantExpressionAst) => DefaultVisit(stringConstantExpressionAst);
+
///
[SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubExpression")]
[SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "subExpression")]
- public virtual AstVisitAction VisitSubExpression(SubExpressionAst subExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitSubExpression(SubExpressionAst subExpressionAst) => DefaultVisit(subExpressionAst);
+
///
- public virtual AstVisitAction VisitUsingExpression(UsingExpressionAst usingExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitUsingExpression(UsingExpressionAst usingExpressionAst) => DefaultVisit(usingExpressionAst);
+
///
- public virtual AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst) => DefaultVisit(variableExpressionAst);
+
///
- public virtual AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);
+
///
- public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) => DefaultVisit(methodCallAst);
+
///
- public virtual AstVisitAction VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitArrayExpression(ArrayExpressionAst arrayExpressionAst) => DefaultVisit(arrayExpressionAst);
+
///
- public virtual AstVisitAction VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitArrayLiteral(ArrayLiteralAst arrayLiteralAst) => DefaultVisit(arrayLiteralAst);
+
///
- public virtual AstVisitAction VisitHashtable(HashtableAst hashtableAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitHashtable(HashtableAst hashtableAst) => DefaultVisit(hashtableAst);
+
///
- public virtual AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitScriptBlockExpression(ScriptBlockExpressionAst scriptBlockExpressionAst) => DefaultVisit(scriptBlockExpressionAst);
+
///
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paren")]
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "paren")]
- public virtual AstVisitAction VisitParenExpression(ParenExpressionAst parenExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitParenExpression(ParenExpressionAst parenExpressionAst) => DefaultVisit(parenExpressionAst);
+
///
- public virtual AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitExpandableStringExpression(ExpandableStringExpressionAst expandableStringExpressionAst) => DefaultVisit(expandableStringExpressionAst);
+
///
- public virtual AstVisitAction VisitIndexExpression(IndexExpressionAst indexExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitIndexExpression(IndexExpressionAst indexExpressionAst) => DefaultVisit(indexExpressionAst);
+
///
- public virtual AstVisitAction VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitAttributedExpression(AttributedExpressionAst attributedExpressionAst) => DefaultVisit(attributedExpressionAst);
+
///
- public virtual AstVisitAction VisitBlockStatement(BlockStatementAst blockStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitBlockStatement(BlockStatementAst blockStatementAst) => DefaultVisit(blockStatementAst);
+
///
- public virtual AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitNamedAttributeArgument(NamedAttributeArgumentAst namedAttributeArgumentAst) => DefaultVisit(namedAttributeArgumentAst);
}
///
@@ -167,31 +223,31 @@ namespace System.Management.Automation.Language
public abstract class AstVisitor2 : AstVisitor
{
///
- public virtual AstVisitAction VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst) => DefaultVisit(typeDefinitionAst);
///
- public virtual AstVisitAction VisitPropertyMember(PropertyMemberAst propertyMemberAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitPropertyMember(PropertyMemberAst propertyMemberAst) => DefaultVisit(propertyMemberAst);
///
- public virtual AstVisitAction VisitFunctionMember(FunctionMemberAst functionMemberAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitFunctionMember(FunctionMemberAst functionMemberAst) => DefaultVisit(functionMemberAst);
///
- public virtual AstVisitAction VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst) => DefaultVisit(baseCtorInvokeMemberExpressionAst);
///
- public virtual AstVisitAction VisitUsingStatement(UsingStatementAst usingStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitUsingStatement(UsingStatementAst usingStatementAst) => DefaultVisit(usingStatementAst);
///
- public virtual AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst) => DefaultVisit(configurationDefinitionAst);
///
- public virtual AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordStatementAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordStatementAst) => DefaultVisit(dynamicKeywordStatementAst);
///
- public virtual AstVisitAction VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitTernaryExpression(TernaryExpressionAst ternaryExpressionAst) => DefaultVisit(ternaryExpressionAst);
///
- public virtual AstVisitAction VisitPipelineChain(PipelineChainAst statementChain) { return AstVisitAction.Continue; }
+ public virtual AstVisitAction VisitPipelineChain(PipelineChainAst statementChain) => DefaultVisit(statementChain);
}
///
diff --git a/test/xUnit/csharp/test_AstDefaultVisit.cs b/test/xUnit/csharp/test_AstDefaultVisit.cs
new file mode 100644
index 0000000000..925f2c6be5
--- /dev/null
+++ b/test/xUnit/csharp/test_AstDefaultVisit.cs
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Management.Automation.Language;
+using Xunit;
+
+namespace PSTests.Parallel
+{
+ internal class MyICustomAstVisitor2 : ICustomAstVisitor2
+ {
+ public object DefaultVisit(Ast ast) => ast.GetType().Name;
+ }
+
+ internal class MyDefaultCustomAstVisitor2 : DefaultCustomAstVisitor2
+ {
+ public override object DefaultVisit(Ast ast) => ast.GetType().Name;
+ }
+
+ internal class MyAstVisitor2 : AstVisitor2
+ {
+ public List Commands { get; }
+
+ public MyAstVisitor2()
+ {
+ Commands = new List();
+ }
+
+ public override AstVisitAction DefaultVisit(Ast ast)
+ {
+ if (ast is CommandAst commandAst && commandAst.CommandElements[0] is StringConstantExpressionAst str)
+ {
+ Commands.Add(str.Value);
+ }
+
+ return AstVisitAction.Continue;
+ }
+ }
+
+ public static class AstDefaultVisitTests
+ {
+ [Fact]
+ public static void TestCustomAstVisitor()
+ {
+ var ast = Parser.ParseInput("a | b", out _, out _);
+ var expected = typeof(NamedBlockAst).Name;
+
+ var myVisitor1 = new MyICustomAstVisitor2();
+ var result1 = ast.EndBlock.Accept(myVisitor1);
+ Assert.Equal(expected, result1);
+
+ var myVisitor2 = new MyDefaultCustomAstVisitor2();
+ var result2 = ast.EndBlock.Accept(myVisitor2);
+ Assert.Equal(expected, result2);
+ }
+
+ [Fact]
+ public static void TestAstVisitor()
+ {
+ var ast = Parser.ParseInput("a | b", out _, out _);
+ var myVisitor = new MyAstVisitor2();
+
+ ast.Visit(myVisitor);
+ Assert.Equal(2, myVisitor.Commands.Count);
+ Assert.Equal("a", myVisitor.Commands[0]);
+ Assert.Equal("b", myVisitor.Commands[1]);
+ }
+ }
+}