swc_ecma_minifier/compress/pure/
drop_console.rs1use swc_common::DUMMY_SP;
2use swc_ecma_ast::*;
3
4use super::Pure;
5
6impl Pure<'_> {
7 pub(super) fn drop_console(&mut self, e: &mut Expr) -> bool {
8 if !self.options.drop_console {
9 return false;
10 }
11
12 let Some(callee) = (match e {
13 Expr::Call(call) => call.callee.as_expr(),
14 Expr::OptChain(opt_chain) => opt_chain.base.as_call().map(|call| &call.callee),
15 _ => None,
16 }) else {
17 return false;
18 };
19
20 let Some(mut loop_co) = (match callee.as_ref() {
21 Expr::Member(member) => Some(&member.obj),
22 Expr::OptChain(opt_chain) => opt_chain.base.as_member().map(|member| &member.obj),
23 _ => None,
24 }) else {
25 return false;
26 };
27
28 loop {
29 match loop_co.as_ref() {
30 Expr::Ident(obj) => {
31 if obj.sym != *"console" {
32 return false;
33 }
34 break;
35 }
36 Expr::Member(MemberExpr {
37 obj: loop_co_obj,
38 prop: MemberProp::Ident(_),
39 ..
40 }) => {
41 loop_co = loop_co_obj;
42 }
43 Expr::OptChain(opt_chain) => match opt_chain.base.as_member() {
44 Some(member) => loop_co = &member.obj,
45 None => return false,
46 },
47 _ => return false,
48 }
49 }
50
51 report_change!("drop_console: Removing console call");
52 self.changed = true;
53 *e = *Expr::undefined(DUMMY_SP);
54 true
55 }
56}