swc_ecma_minifier/compress/pure/
drop_console.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use swc_common::DUMMY_SP;
use swc_ecma_ast::*;
use swc_ecma_utils::undefined;

use super::Pure;

impl Pure<'_> {
    pub(super) fn drop_console(&mut self, e: &mut Expr) {
        if !self.options.drop_console {
            return;
        }

        if let Expr::Call(CallExpr { callee, .. }) = e {
            // Find console.log
            let callee = match callee {
                Callee::Expr(callee) => callee,
                _ => return,
            };

            if let Expr::Member(MemberExpr {
                obj: callee_obj,
                prop: MemberProp::Ident(_),
                ..
            }) = &**callee
            {
                let mut loop_co = &**callee_obj;
                loop {
                    match loop_co {
                        Expr::Ident(obj) => {
                            if obj.sym != *"console" {
                                return;
                            }
                            break;
                        }

                        Expr::Member(MemberExpr {
                            obj: loop_co_obj,
                            prop: MemberProp::Ident(_),
                            ..
                        }) => {
                            loop_co = loop_co_obj;
                        }
                        _ => return,
                    }
                }

                report_change!("drop_console: Removing console call");
                self.changed = true;
                *e = *undefined(DUMMY_SP);
            }
        }
    }
}