swc_ecma_compat_es2022/class_properties/
class_name_tdz.rs1use swc_common::DUMMY_SP;
2use swc_ecma_ast::*;
3use swc_ecma_transforms_base::helper;
4use swc_ecma_utils::ExprFactory;
5use swc_ecma_visit::{noop_visit_mut_type, VisitMut, VisitMutWith};
6use swc_trace_macro::swc_trace;
7
8pub(super) struct ClassNameTdzFolder<'a> {
9 pub class_name: &'a Ident,
10}
11
12#[swc_trace]
13impl VisitMut for ClassNameTdzFolder<'_> {
14 noop_visit_mut_type!(fail);
15
16 fn visit_mut_expr(&mut self, expr: &mut Expr) {
17 match expr {
18 Expr::Ident(i) => {
19 if i.sym == self.class_name.sym {
22 *expr = SeqExpr {
23 span: DUMMY_SP,
24 exprs: vec![
25 Box::new(Expr::Call(CallExpr {
26 span: DUMMY_SP,
27 callee: helper!(class_name_tdz_error),
28 args: vec![Str {
29 span: i.span,
30 raw: None,
31 value: i.sym.clone().into(),
32 }
33 .as_arg()],
34
35 ..Default::default()
36 })),
37 Box::new(Expr::Ident(i.clone())),
38 ],
39 }
40 .into();
41 }
42 }
43
44 _ => {
45 expr.visit_mut_children_with(self);
46 }
47 }
48 }
49}