@@ -2,9 +2,27 @@ use std::borrow::Cow;
2
2
3
3
use swc_atoms:: Atom ;
4
4
use swc_ecma_ast:: {
5
- BindingIdent , Expr , Lit , MemberExpr , MemberProp , ObjectPatProp , Pat , PropName , TsTypeAnn ,
5
+ BindingIdent , Expr , Ident , Lit , MemberProp , ObjectPatProp , Pat , PropName , TsTypeAnn ,
6
6
} ;
7
7
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
+
8
26
pub trait PatExt {
9
27
fn get_type_ann ( & self ) -> & Option < Box < TsTypeAnn > > ;
10
28
fn set_type_ann ( & mut self , type_anno : Option < Box < TsTypeAnn > > ) ;
@@ -119,29 +137,3 @@ impl MemberPropExt for MemberProp {
119
137
}
120
138
}
121
139
}
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