diff --git a/crates/core/src/ast/traversal/policies.rs b/crates/core/src/ast/traversal/policies.rs index cbbcf99..233ef57 100644 --- a/crates/core/src/ast/traversal/policies.rs +++ b/crates/core/src/ast/traversal/policies.rs @@ -3,6 +3,7 @@ use std::ops::BitAnd; pub trait TraversalPolicy: Sized + std::ops::BitAnd { fn default_to(value: bool) -> Self; + fn any(&self) -> bool; } @@ -20,6 +21,12 @@ impl TraversalPolicy for NestedExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_inner || + self.traverse_errors + } } impl BitAnd for NestedExpressionTraversalPolicy { @@ -50,6 +57,13 @@ impl TraversalPolicy for FunctionCallExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_func || + self.traverse_args || + self.traverse_errors + } } impl BitAnd for FunctionCallExpressionTraversalPolicy { @@ -77,6 +91,11 @@ impl TraversalPolicy for FunctionCallArgumentTraversalPolicy { traverse_expr: value, } } + + #[inline] + fn any(&self) -> bool { + self.traverse_expr + } } impl BitAnd for FunctionCallArgumentTraversalPolicy { @@ -106,6 +125,13 @@ impl TraversalPolicy for ArrayExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_accessor || + self.traverse_index || + self.traverse_errors + } } impl BitAnd for ArrayExpressionTraversalPolicy { @@ -135,6 +161,12 @@ impl TraversalPolicy for MemberFieldExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_accessor || + self.traverse_errors + } } impl BitAnd for MemberFieldExpressionTraversalPolicy { @@ -163,6 +195,12 @@ impl TraversalPolicy for NewExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_lifetime_obj || + self.traverse_errors + } } impl BitAnd for NewExpressionTraversalPolicy { @@ -191,6 +229,12 @@ impl TraversalPolicy for TypeCastExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_value || + self.traverse_errors + } } impl BitAnd for TypeCastExpressionTraversalPolicy { @@ -219,6 +263,12 @@ impl TraversalPolicy for UnaryOperationExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_right || + self.traverse_errors + } } impl BitAnd for UnaryOperationExpressionTraversalPolicy { @@ -249,6 +299,13 @@ impl TraversalPolicy for BinaryOperationExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_left || + self.traverse_right || + self.traverse_errors + } } impl BitAnd for BinaryOperationExpressionTraversalPolicy { @@ -280,6 +337,13 @@ impl TraversalPolicy for AssignmentOperationExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_left || + self.traverse_right || + self.traverse_errors + } } impl BitAnd for AssignmentOperationExpressionTraversalPolicy { @@ -313,6 +377,14 @@ impl TraversalPolicy for TernaryConditionalExpressionTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_cond || + self.traverse_conseq || + self.traverse_alt || + self.traverse_errors + } } impl BitAnd for TernaryConditionalExpressionTraversalPolicy { @@ -345,6 +417,12 @@ impl TraversalPolicy for RootTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse || + self.traverse_errors + } } impl BitAnd for RootTraversalPolicy { @@ -373,6 +451,12 @@ impl TraversalPolicy for ClassDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_definition || + self.traverse_errors + } } impl BitAnd for ClassDeclarationTraversalPolicy { @@ -401,6 +485,12 @@ impl TraversalPolicy for StateDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_definition || + self.traverse_errors + } } impl BitAnd for StateDeclarationTraversalPolicy { @@ -429,6 +519,12 @@ impl TraversalPolicy for StructDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_definition || + self.traverse_errors + } } impl BitAnd for StructDeclarationTraversalPolicy { @@ -457,6 +553,12 @@ impl TraversalPolicy for EnumDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_definition || + self.traverse_errors + } } impl BitAnd for EnumDeclarationTraversalPolicy { @@ -483,6 +585,11 @@ impl TraversalPolicy for EnumVariantDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for EnumVariantDeclarationTraversalPolicy { @@ -508,6 +615,11 @@ impl TraversalPolicy for MemberVarDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for MemberVarDeclarationTraversalPolicy { @@ -535,6 +647,12 @@ impl TraversalPolicy for MemberDefaultValueTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_value || + self.traverse_errors + } } impl BitAnd for MemberDefaultValueTraversalPolicy { @@ -563,6 +681,12 @@ impl TraversalPolicy for MemberDefaultsBlockTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse || + self.traverse_errors + } } impl BitAnd for MemberDefaultsBlockTraversalPolicy { @@ -589,6 +713,11 @@ impl TraversalPolicy for MemberHintTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for MemberHintTraversalPolicy { @@ -614,6 +743,11 @@ impl TraversalPolicy for AutobindDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for AutobindDeclarationTraversalPolicy { @@ -639,6 +773,11 @@ impl TraversalPolicy for FunctionParameterGroupTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for FunctionParameterGroupTraversalPolicy { @@ -668,6 +807,13 @@ impl TraversalPolicy for FunctionDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_params || + self.traverse_definition || + self.traverse_errors + } } impl BitAnd for FunctionDeclarationTraversalPolicy { @@ -699,6 +845,13 @@ impl TraversalPolicy for EventDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_params || + self.traverse_definition || + self.traverse_errors + } } impl BitAnd for EventDeclarationTraversalPolicy { @@ -736,6 +889,15 @@ impl TraversalPolicy for ForLoopTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_init || + self.traverse_cond || + self.traverse_iter || + self.traverse_body || + self.traverse_errors + } } impl BitAnd for ForLoopTraversalPolicy { @@ -769,6 +931,13 @@ impl TraversalPolicy for WhileLoopTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_cond || + self.traverse_body || + self.traverse_errors + } } impl BitAnd for WhileLoopTraversalPolicy { @@ -800,6 +969,13 @@ impl TraversalPolicy for DoWhileLoopTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_cond || + self.traverse_body || + self.traverse_errors + } } impl BitAnd for DoWhileLoopTraversalPolicy { @@ -833,6 +1009,14 @@ impl TraversalPolicy for IfConditionalTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_cond || + self.traverse_body || + self.traverse_else_body || + self.traverse_errors + } } impl BitAnd for IfConditionalTraversalPolicy { @@ -865,6 +1049,13 @@ impl TraversalPolicy for SwitchConditionalTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_cond || + self.traverse_body || + self.traverse_errors + } } impl BitAnd for SwitchConditionalTraversalPolicy { @@ -894,6 +1085,12 @@ impl TraversalPolicy for SwitchConditionalCaseLabelTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_value || + self.traverse_errors + } } impl BitAnd for SwitchConditionalCaseLabelTraversalPolicy { @@ -920,6 +1117,11 @@ impl TraversalPolicy for SwitchConditionalDefaultLabelTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for SwitchConditionalDefaultLabelTraversalPolicy { @@ -945,6 +1147,11 @@ impl TraversalPolicy for BreakStatementTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for BreakStatementTraversalPolicy { @@ -970,6 +1177,11 @@ impl TraversalPolicy for ContinueStatementTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_errors + } } impl BitAnd for ContinueStatementTraversalPolicy { @@ -997,6 +1209,12 @@ impl TraversalPolicy for CompoundStatementTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse || + self.traverse_errors + } } impl BitAnd for CompoundStatementTraversalPolicy { @@ -1025,6 +1243,12 @@ impl TraversalPolicy for VarDeclarationTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_init_value || + self.traverse_errors + } } impl BitAnd for VarDeclarationTraversalPolicy { @@ -1053,6 +1277,12 @@ impl TraversalPolicy for ExpressionStatementTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_expr || + self.traverse_errors + } } impl BitAnd for ExpressionStatementTraversalPolicy { @@ -1081,6 +1311,12 @@ impl TraversalPolicy for ReturnStatementTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_value || + self.traverse_errors + } } impl BitAnd for ReturnStatementTraversalPolicy { @@ -1109,6 +1345,12 @@ impl TraversalPolicy for DeleteStatementTraversalPolicy { traverse_errors: value } } + + #[inline] + fn any(&self) -> bool { + self.traverse_value || + self.traverse_errors + } } impl BitAnd for DeleteStatementTraversalPolicy { @@ -1128,6 +1370,7 @@ impl BitAnd for DeleteStatementTraversalPolicy { #[derive(Debug, Clone)] pub struct ErrorTraversalPolicy { pub traverse: bool + // traverse_errors is implicitly true } impl TraversalPolicy for ErrorTraversalPolicy { @@ -1137,6 +1380,11 @@ impl TraversalPolicy for ErrorTraversalPolicy { traverse: value, } } + + #[inline] + fn any(&self) -> bool { + self.traverse + } } impl BitAnd for ErrorTraversalPolicy {