From c2daa207517f3e53bf072938166cd8aca31447d5 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Mon, 23 Dec 2024 03:44:12 +0000 Subject: [PATCH] feat(ast): add `Expression::into_inner_expression` (#8048) Add `Expression::into_inner_expression`. Does the same as `get_inner_expression` and `get_inner_expression_mut`, but operates on an owned `Expression`. --- crates/oxc_ast/src/ast_impl/js.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/oxc_ast/src/ast_impl/js.rs b/crates/oxc_ast/src/ast_impl/js.rs index 98ac44e7c..e4b6e8587 100644 --- a/crates/oxc_ast/src/ast_impl/js.rs +++ b/crates/oxc_ast/src/ast_impl/js.rs @@ -187,6 +187,24 @@ impl<'a> Expression<'a> { } } + #[allow(missing_docs)] + #[must_use] + pub fn into_inner_expression(self) -> Expression<'a> { + let mut expr = self; + loop { + expr = match expr { + Expression::ParenthesizedExpression(e) => e.unbox().expression, + Expression::TSAsExpression(e) => e.unbox().expression, + Expression::TSSatisfiesExpression(e) => e.unbox().expression, + Expression::TSInstantiationExpression(e) => e.unbox().expression, + Expression::TSNonNullExpression(e) => e.unbox().expression, + Expression::TSTypeAssertion(e) => e.unbox().expression, + _ => break, + }; + } + expr + } + #[allow(missing_docs)] pub fn get_inner_expression(&self) -> &Expression<'a> { let mut expr = self;