From e3daa28e60cbe8687048ee37581eaafcceb8e089 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 2 Mar 2015 01:28:34 +1100 Subject: [PATCH] rename minification tests to utility --- .../transformers/deprecated.json | 6 ++- .../transformation/transformers/index.js | 10 +++-- .../minification/rename-local-variables.js | 9 ---- .../dead-code-elimination.js | 42 +++++++++++-------- .../utility/inline-environment-variables.js | 14 +++++++ .../utility/inline-expressions.js | 8 ++++ .../remove-console.js} | 0 .../remove-debugger.js | 0 8 files changed, 58 insertions(+), 31 deletions(-) delete mode 100644 src/babel/transformation/transformers/minification/rename-local-variables.js rename src/babel/transformation/transformers/{minification => utility}/dead-code-elimination.js (71%) create mode 100644 src/babel/transformation/transformers/utility/inline-environment-variables.js create mode 100644 src/babel/transformation/transformers/utility/inline-expressions.js rename src/babel/transformation/transformers/{minification/remove-console-calls.js => utility/remove-console.js} (100%) rename src/babel/transformation/transformers/{minification => utility}/remove-debugger.js (100%) diff --git a/src/babel/transformation/transformers/deprecated.json b/src/babel/transformation/transformers/deprecated.json index 26e38910ef..71dea271a6 100644 --- a/src/babel/transformation/transformers/deprecated.json +++ b/src/babel/transformation/transformers/deprecated.json @@ -1,4 +1,8 @@ { "selfContained": "runtime", - "unicode-regex": "regex.unicode" + "unicode-regex": "regex.unicode", + + "minification.deadCodeElimination": "utility.deadCodeElimination", + "minification.removeConsoleCalls": "utility.removeConsole", + "minification.removeDebugger": "utility.removeDebugger" } diff --git a/src/babel/transformation/transformers/index.js b/src/babel/transformation/transformers/index.js index 0925d95a91..a52a4401c0 100644 --- a/src/babel/transformation/transformers/index.js +++ b/src/babel/transformation/transformers/index.js @@ -103,10 +103,12 @@ export default { "es3.propertyLiterals": require("./es3/property-literals"), "es3.memberExpressionLiterals": require("./es3/member-expression-literals"), - "minification.removeDebugger": require("./minification/remove-debugger"), - "minification.removeConsoleCalls": require("./minification/remove-console-calls"), - "minification.deadCodeElimination": require("./minification/dead-code-elimination"), - "minification.renameLocalVariables": require("./minification/rename-local-variables"), + "utility.removeDebugger": require("./utility/remove-debugger"), + "utility.removeConsole": require("./utility/remove-console"), + + "utility.inlineEnvironmentVariables": require("./utility/inline-environment-variables"), + "utility.inlineExpressions": require("./utility/inline-expressions"), + "utility.deadCodeElimination": require("./utility/dead-code-elimination"), _cleanUp: require("./internal/cleanup") }; diff --git a/src/babel/transformation/transformers/minification/rename-local-variables.js b/src/babel/transformation/transformers/minification/rename-local-variables.js deleted file mode 100644 index 30cf1d2bad..0000000000 --- a/src/babel/transformation/transformers/minification/rename-local-variables.js +++ /dev/null @@ -1,9 +0,0 @@ -//import t from "../../../types"; - -export var optional = true; - -export function Scopable() { - //for (var name in scope.bindings) { - // scope.rename(name, scope.generateUidIdentifier("a").name); - //} -} diff --git a/src/babel/transformation/transformers/minification/dead-code-elimination.js b/src/babel/transformation/transformers/utility/dead-code-elimination.js similarity index 71% rename from src/babel/transformation/transformers/minification/dead-code-elimination.js rename to src/babel/transformation/transformers/utility/dead-code-elimination.js index 2759f87200..438a5fac7f 100644 --- a/src/babel/transformation/transformers/minification/dead-code-elimination.js +++ b/src/babel/transformation/transformers/utility/dead-code-elimination.js @@ -1,27 +1,35 @@ import t from "../../../types"; +function toStatements(node) { + if (t.isBlockStatement(node)) { + var hasBlockScoped = false; + + for (var i = 0; i < node.body.length; i++) { + var bodyNode = node.body[i]; + if (t.isBlockScoped(bodyNode)) hasBlockScoped = true; + } + + if (!hasBlockScoped) { + return node.body; + } + } + + return node; +} + export var optional = true; -export function ExpressionStatement(node) { - // remove consequence-less expressions such as local variables and literals - // note: will remove directives - // - // var foo = true; foo; -> var foo = true; - // "foo"; -> - // - - var expr = node.expression; - if (t.isLiteral(expr) || (t.isIdentifier(node) && t.hasBinding(node.name))) { - this.remove(); +export function ConditionalExpression(node) { + var evaluateTest = t.evaluateTruthy(node.test); + if (evaluateTest === true) { + return node.consequent; + } else if (evaluateTest === false) { + return node.alternate; } } export var IfStatement = { exit(node) { - // todo: in scenarios where we can just return the consequent or - // alternate we should drop the block statement if it contains no - // block scoped variables - var consequent = node.consequent; var alternate = node.alternate; var test = node.test; @@ -36,7 +44,7 @@ export var IfStatement = { // if (evaluateTest === true) { - return consequent; + return toStatements(consequent); } // we can check if a test will be falsy 100% and if so we can inline the @@ -48,7 +56,7 @@ export var IfStatement = { if (evaluateTest === false) { if (alternate) { - return alternate; + return toStatements(alternate); } else { return this.remove(); } diff --git a/src/babel/transformation/transformers/utility/inline-environment-variables.js b/src/babel/transformation/transformers/utility/inline-environment-variables.js new file mode 100644 index 0000000000..cd03fc1718 --- /dev/null +++ b/src/babel/transformation/transformers/utility/inline-environment-variables.js @@ -0,0 +1,14 @@ +import t from "../../../types"; + +export var optional = true; + +var match = t.buildMatchMemberExpression("process.env"); + +export function MemberExpression(node) { + if (match(node.object)) { + var key = t.toComputedKey(node, node.property); + if (t.isLiteral(key)) { + return t.valueToNode(process.env[key.value]); + } + } +} diff --git a/src/babel/transformation/transformers/utility/inline-expressions.js b/src/babel/transformation/transformers/utility/inline-expressions.js new file mode 100644 index 0000000000..6dada3a898 --- /dev/null +++ b/src/babel/transformation/transformers/utility/inline-expressions.js @@ -0,0 +1,8 @@ +import t from "../../../types"; + +export var optional = true; + +export function Expression(node) { + var res = t.evaluate(node); + if (res.confident) return t.valueToNode(res.value); +} diff --git a/src/babel/transformation/transformers/minification/remove-console-calls.js b/src/babel/transformation/transformers/utility/remove-console.js similarity index 100% rename from src/babel/transformation/transformers/minification/remove-console-calls.js rename to src/babel/transformation/transformers/utility/remove-console.js diff --git a/src/babel/transformation/transformers/minification/remove-debugger.js b/src/babel/transformation/transformers/utility/remove-debugger.js similarity index 100% rename from src/babel/transformation/transformers/minification/remove-debugger.js rename to src/babel/transformation/transformers/utility/remove-debugger.js