swc_ecma_compat_es2022/class_properties/
this_in_static.rs

1use swc_ecma_ast::*;
2use swc_ecma_visit::{noop_visit_mut_type, VisitMut, VisitMutWith};
3use swc_trace_macro::swc_trace;
4
5pub(super) struct ThisInStaticFolder {
6    pub ident: Ident,
7}
8
9#[swc_trace]
10impl VisitMut for ThisInStaticFolder {
11    noop_visit_mut_type!(fail);
12
13    // once again, for computed props
14    fn visit_mut_constructor(&mut self, _: &mut Constructor) {}
15
16    fn visit_mut_expr(&mut self, e: &mut Expr) {
17        e.visit_mut_children_with(self);
18
19        if let Expr::This(..) = e {
20            *e = self.ident.clone().into()
21        }
22    }
23
24    fn visit_mut_function(&mut self, _: &mut Function) {}
25}
26
27pub(super) struct NewTargetInProp;
28
29#[swc_trace]
30impl VisitMut for NewTargetInProp {
31    noop_visit_mut_type!(fail);
32
33    // once again, for computed props
34    fn visit_mut_constructor(&mut self, _: &mut Constructor) {}
35
36    fn visit_mut_expr(&mut self, e: &mut Expr) {
37        e.visit_mut_children_with(self);
38
39        if let Expr::MetaProp(MetaPropExpr {
40            span,
41            kind: MetaPropKind::NewTarget,
42        }) = e
43        {
44            *e = *Expr::undefined(*span);
45        }
46    }
47
48    fn visit_mut_function(&mut self, _: &mut Function) {}
49}