@@ -2,9 +2,27 @@ use std::borrow::Cow;
22
33use swc_atoms:: Atom ;
44use swc_ecma_ast:: {
5- BindingIdent , Expr , Lit , MemberExpr , MemberProp , ObjectPatProp , Pat , PropName , TsTypeAnn ,
5+ BindingIdent , Expr , Ident , Lit , MemberProp , ObjectPatProp , Pat , PropName , TsTypeAnn ,
66} ;
77
8+ pub trait ExprExit {
9+ fn get_root_ident ( & self ) -> Option < & Ident > ;
10+ }
11+
12+ impl ExprExit for Expr {
13+ fn get_root_ident ( & self ) -> Option < & Ident > {
14+ match self {
15+ Expr :: Member ( member_expr) => member_expr. obj . get_root_ident ( ) ,
16+ Expr :: Ident ( ident) => Some ( ident) ,
17+ Expr :: OptChain ( opt_chain_expr) => opt_chain_expr
18+ . base
19+ . as_member ( )
20+ . and_then ( |member_expr| member_expr. obj . get_root_ident ( ) ) ,
21+ _ => None ,
22+ }
23+ }
24+ }
25+
826pub trait PatExt {
927 fn get_type_ann ( & self ) -> & Option < Box < TsTypeAnn > > ;
1028 fn set_type_ann ( & mut self , type_anno : Option < Box < TsTypeAnn > > ) ;
@@ -119,29 +137,3 @@ impl MemberPropExt for MemberProp {
119137 }
120138 }
121139}
122-
123- pub trait MemberExprExt {
124- fn get_first_object ( & self ) -> & Expr ;
125- }
126-
127- impl MemberExprExt for MemberExpr {
128- fn get_first_object ( & self ) -> & Expr {
129- let mut object = & self . obj ;
130- loop {
131- match object. as_ref ( ) {
132- Expr :: Member ( member_expr) => {
133- object = & member_expr. obj ;
134- continue ;
135- }
136- Expr :: OptChain ( opt_chain) => {
137- if let Some ( member_expr) = opt_chain. base . as_member ( ) {
138- object = & member_expr. obj ;
139- continue ;
140- }
141- }
142- _ => { }
143- }
144- break object;
145- }
146- }
147- }
0 commit comments