Drop all `console` statements properly
authorRichard van Velzen <rvanvelzen1@gmail.com>
Sat, 31 Jan 2015 12:22:07 +0000 (13:22 +0100)
committerRichard van Velzen <rvanvelzen1@gmail.com>
Sat, 31 Jan 2015 12:24:44 +0000 (13:24 +0100)
Because the base reference can be an member expression as well, we have to dig a bit deeper to find the leftmost base reference.

Fixes #451

lib/compress.js
test/compress/drop-console.js [new file with mode: 0644]

index ae20d48..2728598 100644 (file)
@@ -1873,11 +1873,16 @@ merge(Compressor.prototype, {
             }
         }
         if (compressor.option("drop_console")) {
-            if (self.expression instanceof AST_PropAccess &&
-                self.expression.expression instanceof AST_SymbolRef &&
-                self.expression.expression.name == "console" &&
-                self.expression.expression.undeclared()) {
-                return make_node(AST_Undefined, self).transform(compressor);
+            if (self.expression instanceof AST_PropAccess) {
+                var name = self.expression.expression;
+                while (name.expression) {
+                    name = name.expression;
+                }
+                if (name instanceof AST_SymbolRef
+                    && name.name == "console"
+                    && name.undeclared()) {
+                    return make_node(AST_Undefined, self).transform(compressor);
+                }
             }
         }
         return self.evaluate(compressor)[0];
diff --git a/test/compress/drop-console.js b/test/compress/drop-console.js
new file mode 100644 (file)
index 0000000..162b339
--- /dev/null
@@ -0,0 +1,24 @@
+drop_console_1: {\r
+    options = {};\r
+    input: {\r
+        console.log('foo');\r
+        console.log.apply(console, arguments);\r
+    }\r
+    expect: {\r
+        console.log('foo');\r
+        console.log.apply(console, arguments);\r
+    }\r
+}\r
+\r
+drop_console_1: {\r
+    options = { drop_console: true };\r
+    input: {\r
+        console.log('foo');\r
+        console.log.apply(console, arguments);\r
+    }\r
+    expect: {\r
+        // with regular compression these will be stripped out as well\r
+        void 0;\r
+        void 0;\r
+    }\r
+}\r