swc_ecma_compat_es2022/class_properties/
this_in_static.rs1use 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 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 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}