From a1c5eb936e8f49121e1269de704e365e1c48d5cc Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sun, 12 Feb 2017 18:48:19 +0100 Subject: [PATCH 1/6] Fix remove console.* statements --- .../__tests__/remove-console-test.js | 26 +++++++++++++++++-- .../src/index.js | 16 ++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js index 02337e4db..5693a975b 100644 --- a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js +++ b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js @@ -37,7 +37,7 @@ describe("remove-console-plugin", () => { const expected = unpad(` function foo() { - true; + true && void 0; blah(); } `); @@ -51,7 +51,7 @@ describe("remove-console-plugin", () => { `); const expected = unpad(` - true; + true && void 0; blah(); `); expect(transform(source)).toBe(expected); @@ -89,4 +89,26 @@ describe("remove-console-plugin", () => { `); expect(transform(source).trim()).toBe(expected); }); + + it("should remove console.* assignments to other variables", () => { + const source = unpad(` + const a = console.log; + a(); + var x = console.log ? console.log('log') : foo(); + function foo() { + if (console.error) { + console.error("Errored"); + } + } + `); + const expected = unpad(` + const a = () => {}; + a(); + var x = () => {} ? void 0 : foo(); + function foo() { + if (() => {}) {} + } + `); + expect(transform(source)).toBe(expected); + }); }); diff --git a/packages/babel-plugin-transform-remove-console/src/index.js b/packages/babel-plugin-transform-remove-console/src/index.js index 3ebb70697..87e816521 100644 --- a/packages/babel-plugin-transform-remove-console/src/index.js +++ b/packages/babel-plugin-transform-remove-console/src/index.js @@ -1,14 +1,26 @@ "use strict"; -module.exports = function() { +module.exports = function({ types: t }) { return { name: "transform-remove-console", visitor: { CallExpression(path) { - if (path.get("callee").matchesPattern("console", true)) { + if (!path.get("callee").matchesPattern("console", true)) return; + + if (path.parentPath.isExpressionStatement()) { path.remove(); + } else { + path.replaceWith(t.unaryExpression("void", t.numericLiteral(0))); } }, + MemberExpression: { + exit(path) { + if (!path.matchesPattern("console", true)) return; + if (!path.parentPath.isMemberExpression()) { + path.replaceWith(t.arrowFunctionExpression([], t.blockStatement([]))); + } + } + } }, }; }; From add99ad4b50d249755084a47e42ed040a444b11e Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 13 Feb 2017 01:53:10 +0100 Subject: [PATCH 2/6] ES5ify arrows --- .../__tests__/remove-console-test.js | 10 +++-- .../src/index.js | 41 +++++++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js index 5693a975b..625ad7575 100644 --- a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js +++ b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js @@ -94,6 +94,8 @@ describe("remove-console-plugin", () => { const source = unpad(` const a = console.log; a(); + const b = console.log.bind(console); + b("asdf"); var x = console.log ? console.log('log') : foo(); function foo() { if (console.error) { @@ -102,11 +104,13 @@ describe("remove-console-plugin", () => { } `); const expected = unpad(` - const a = () => {}; + const a = function () {}; a(); - var x = () => {} ? void 0 : foo(); + const b = function () {}; + b("asdf"); + var x = function () {} ? void 0 : foo(); function foo() { - if (() => {}) {} + if (function () {}) {} } `); expect(transform(source)).toBe(expected); diff --git a/packages/babel-plugin-transform-remove-console/src/index.js b/packages/babel-plugin-transform-remove-console/src/index.js index 87e816521..d8831ebca 100644 --- a/packages/babel-plugin-transform-remove-console/src/index.js +++ b/packages/babel-plugin-transform-remove-console/src/index.js @@ -5,22 +5,49 @@ module.exports = function({ types: t }) { name: "transform-remove-console", visitor: { CallExpression(path) { - if (!path.get("callee").matchesPattern("console", true)) return; + const callee = path.get("callee"); - if (path.parentPath.isExpressionStatement()) { - path.remove(); - } else { - path.replaceWith(t.unaryExpression("void", t.numericLiteral(0))); + if (!callee.isMemberExpression()) return; + + if (isConsole(callee)) { + // console.log() + if (path.parentPath.isExpressionStatement()) { + path.remove(); + } else { + path.replaceWith(createVoid0()); + } + } else if (isConsoleBind(callee)) { + // console.log.bind() + path.replaceWith(createNoop()); } }, MemberExpression: { exit(path) { - if (!path.matchesPattern("console", true)) return; + if (!isConsole(path)) return; if (!path.parentPath.isMemberExpression()) { - path.replaceWith(t.arrowFunctionExpression([], t.blockStatement([]))); + path.replaceWith(createNoop()); } } } }, }; + + function isConsole(memberExpr) { + return memberExpr.get("object").isIdentifier({ name: "console" }); + } + + function isConsoleBind(memberExpr) { + const object = memberExpr.get("object"); + return object.isMemberExpression() + && object.get("object").isIdentifier({ name: "console" }) + && memberExpr.get("property").isIdentifier({ name: "bind" }); + } + + function createNoop() { + return t.functionExpression(null, [], t.blockStatement([])); + } + + function createVoid0() { + return t.unaryExpression("void", t.numericLiteral(0)); + } }; From 127be4cb4e4c64857802f6ed2ba347d4840226e3 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sat, 18 Feb 2017 23:34:44 +0100 Subject: [PATCH 3/6] Add call and apply --- .../__tests__/remove-console-test.js | 2 ++ .../babel-plugin-transform-remove-console/src/index.js | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js index 625ad7575..ddb6b59bb 100644 --- a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js +++ b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js @@ -102,6 +102,8 @@ describe("remove-console-plugin", () => { console.error("Errored"); } } + console.log.call(console, "foo"); + console.log.apply(null, {}); `); const expected = unpad(` const a = function () {}; diff --git a/packages/babel-plugin-transform-remove-console/src/index.js b/packages/babel-plugin-transform-remove-console/src/index.js index d8831ebca..632c76ae4 100644 --- a/packages/babel-plugin-transform-remove-console/src/index.js +++ b/packages/babel-plugin-transform-remove-console/src/index.js @@ -33,7 +33,15 @@ module.exports = function({ types: t }) { }; function isConsole(memberExpr) { - return memberExpr.get("object").isIdentifier({ name: "console" }); + const object = memberExpr.get("object"); + if (object.isIdentifier({ name: "console" })) return true; + + const property = memberExpr.get("property"); + return object.get("object").isIdentifier({ name: "console" }) + && ( + property.isIdentifier({ name: "call" }) + || property.isIdentifier({ name: "apply" }) + ); } function isConsoleBind(memberExpr) { From ad95eefcd48b0445d39bab668f3a0ba14a08ad69 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sun, 19 Feb 2017 02:03:20 +0100 Subject: [PATCH 4/6] Remove early exit that doesn't make much sense --- packages/babel-plugin-transform-remove-console/src/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/babel-plugin-transform-remove-console/src/index.js b/packages/babel-plugin-transform-remove-console/src/index.js index 632c76ae4..11067994e 100644 --- a/packages/babel-plugin-transform-remove-console/src/index.js +++ b/packages/babel-plugin-transform-remove-console/src/index.js @@ -23,8 +23,7 @@ module.exports = function({ types: t }) { }, MemberExpression: { exit(path) { - if (!isConsole(path)) return; - if (!path.parentPath.isMemberExpression()) { + if (isConsole(path) && !path.parentPath.isMemberExpression()) { path.replaceWith(createNoop()); } } From 7bb74624e53d9313848ec7b8dd02052e30aeba5e Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sun, 19 Feb 2017 16:03:57 +0100 Subject: [PATCH 5/6] Handle local declarations of console --- .../__tests__/remove-console-test.js | 17 +++++++++++++++++ .../src/index.js | 13 ++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js index ddb6b59bb..dd09649eb 100644 --- a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js +++ b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js @@ -117,4 +117,21 @@ describe("remove-console-plugin", () => { `); expect(transform(source)).toBe(expected); }); + + it("should NOT remove local bindings of name console", () => { + const source = unpad(` + function foo(console) { + console.foo("hi"); + const bar = console.foo.bind(console); + } + function bar(a) { + const { console } = a; + a.b = console => console.bar("bar"); + if (console.foo.call(console, "bar")) { + return; + } + } + `); + expect(transform(source)).toBe(source); + }); }); diff --git a/packages/babel-plugin-transform-remove-console/src/index.js b/packages/babel-plugin-transform-remove-console/src/index.js index 11067994e..8bf60d041 100644 --- a/packages/babel-plugin-transform-remove-console/src/index.js +++ b/packages/babel-plugin-transform-remove-console/src/index.js @@ -31,12 +31,19 @@ module.exports = function({ types: t }) { }, }; + function isGlobalConsoleId(id) { + const name = "console"; + return id.isIdentifier({ name }) + && !id.scope.getBinding(name) + && id.scope.hasGlobal(name); + } + function isConsole(memberExpr) { const object = memberExpr.get("object"); - if (object.isIdentifier({ name: "console" })) return true; + if (isGlobalConsoleId(object)) return true; const property = memberExpr.get("property"); - return object.get("object").isIdentifier({ name: "console" }) + return isGlobalConsoleId(object.get("object")) && ( property.isIdentifier({ name: "call" }) || property.isIdentifier({ name: "apply" }) @@ -46,7 +53,7 @@ module.exports = function({ types: t }) { function isConsoleBind(memberExpr) { const object = memberExpr.get("object"); return object.isMemberExpression() - && object.get("object").isIdentifier({ name: "console" }) + && isGlobalConsoleId(object.get("object")) && memberExpr.get("property").isIdentifier({ name: "bind" }); } From 3937db7c9fe1c9aa39a475d7ba79a601eabd3cca Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 20 Feb 2017 15:31:53 +0100 Subject: [PATCH 6/6] Handle assignment expressions --- lerna.json | 7 +++++-- package.json | 2 +- .../__tests__/remove-console-test.js | 20 +++++++++++++++++++ .../package.json | 2 +- .../src/index.js | 8 ++++++-- .../package.json | 2 +- 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 48cb80242..3d8da8848 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "lerna": "2.0.0-beta.34", + "lerna": "2.0.0-beta.37", "version": "independent", "publishConfig": { "ignore": [ @@ -19,5 +19,8 @@ "Tag: Internal": ":house: Internal", "Tag: Chore": "Chore" } - } + }, + "packages": [ + "packages/*" + ] } diff --git a/package.json b/package.json index 7e6213006..2638b3300 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "gulp-newer": "^1.1.0", "gulp-util": "^3.0.8", "jest-cli": "^18.0.0", - "lerna": "2.0.0-beta.34", + "lerna": "2.0.0-beta.37", "lerna-changelog": "^0.3.0", "through2": "^2.0.1", "uglify-js": "^2.7.3" diff --git a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js index dd09649eb..44fd28f3d 100644 --- a/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js +++ b/packages/babel-plugin-transform-remove-console/__tests__/remove-console-test.js @@ -134,4 +134,24 @@ describe("remove-console-plugin", () => { `); expect(transform(source)).toBe(source); }); + + it("should convert assigments to no-op", () => { + const source = unpad(` + function foo() { + console.foo = function foo() { + console.log("foo"); + }; + console.error = myConsoleError; + console.foo(); + console.error("asdf"); + } + `); + const expected = unpad(` + function foo() { + console.foo = function () {}; + console.error = function () {}; + } + `); + expect(transform(source)).toBe(expected); + }); }); diff --git a/packages/babel-plugin-transform-remove-console/package.json b/packages/babel-plugin-transform-remove-console/package.json index 97c52b3f4..ec12fa716 100644 --- a/packages/babel-plugin-transform-remove-console/package.json +++ b/packages/babel-plugin-transform-remove-console/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-transform-remove-console", - "version": "0.0.1", + "version": "6.8.0", "description": "Remove all console.* calls.", "homepage": "https://github.com/babel/babili#readme", "repository": "https://github.com/babel/babili/tree/master/packages/babel-plugin-transform-remove-console", diff --git a/packages/babel-plugin-transform-remove-console/src/index.js b/packages/babel-plugin-transform-remove-console/src/index.js index 8bf60d041..4553e6b28 100644 --- a/packages/babel-plugin-transform-remove-console/src/index.js +++ b/packages/babel-plugin-transform-remove-console/src/index.js @@ -24,11 +24,15 @@ module.exports = function({ types: t }) { MemberExpression: { exit(path) { if (isConsole(path) && !path.parentPath.isMemberExpression()) { - path.replaceWith(createNoop()); + if (path.parentPath.isAssignmentExpression() && path.parentKey === "left") { + path.parentPath.get("right").replaceWith(createNoop()); + } else { + path.replaceWith(createNoop()); + } } } } - }, + } }; function isGlobalConsoleId(id) { diff --git a/packages/babel-plugin-transform-remove-debugger/package.json b/packages/babel-plugin-transform-remove-debugger/package.json index e933f3b26..345efd5d2 100644 --- a/packages/babel-plugin-transform-remove-debugger/package.json +++ b/packages/babel-plugin-transform-remove-debugger/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-transform-remove-debugger", - "version": "0.0.1", + "version": "6.8.0", "description": "Remove debugger statements", "homepage": "https://github.com/babel/babili#readme", "repository": "https://github.com/babel/babili/tree/master/packages/babel-plugin-transform-remove-debugger",