From ba516901aff678563a0c39a29a944af46956788b Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Fri, 8 May 2015 15:26:00 +0100 Subject: [PATCH] restructure transformers into multiple categories --- src/babel/transformation/index.js | 2 +- .../es3/member-expression-literals.js | 4 +++ .../transformers/es3/property-literals.js | 4 +++ .../transformers/es6/block-scoping.js | 4 +++ .../transformers/es6/modules.js | 4 +++ .../transformers/es6/spec.block-scoping.js | 3 +- .../transformation/transformers/index.js | 25 +++++++++++------ .../transformers/internal/block-hoist.js | 4 +++ .../transformers/internal/module-formatter.js | 4 +++ .../member-expression-literals.js | 3 +- .../minification/property-literals.js | 3 +- .../transformation/transformers/other/flow.js | 1 - .../transformers/other/regenerator.js | 4 +++ .../transformers/other/runtime/index.js | 28 ++++++++----------- 14 files changed, 62 insertions(+), 31 deletions(-) diff --git a/src/babel/transformation/index.js b/src/babel/transformation/index.js index 3f71068bc2..5a523a4ea2 100644 --- a/src/babel/transformation/index.js +++ b/src/babel/transformation/index.js @@ -9,7 +9,7 @@ import transformers from "./transformers"; for (var key in transformers) { var transformer = transformers[key]; var metadata = transformer.metadata = transformer.metadata || {}; - metadata.category = metadata.category || "builtin"; + metadata.category = metadata.category || "builtin-basic"; } pipeline.addTransformers(transformers); diff --git a/src/babel/transformation/transformers/es3/member-expression-literals.js b/src/babel/transformation/transformers/es3/member-expression-literals.js index 1665d20b25..d4465fde70 100644 --- a/src/babel/transformation/transformers/es3/member-expression-literals.js +++ b/src/babel/transformation/transformers/es3/member-expression-literals.js @@ -1,5 +1,9 @@ import * as t from "../../../types"; +export var metadata = { + category: "builtin-cleanup" +}; + export var MemberExpression = { exit(node) { var prop = node.property; diff --git a/src/babel/transformation/transformers/es3/property-literals.js b/src/babel/transformation/transformers/es3/property-literals.js index f70a81661b..ecfd63c8dd 100644 --- a/src/babel/transformation/transformers/es3/property-literals.js +++ b/src/babel/transformation/transformers/es3/property-literals.js @@ -1,5 +1,9 @@ import * as t from "../../../types"; +export var metadata = { + category: "builtin-cleanup" +}; + export var Property = { exit(node) { var key = node.key; diff --git a/src/babel/transformation/transformers/es6/block-scoping.js b/src/babel/transformation/transformers/es6/block-scoping.js index 850dca35f0..515c0711e9 100644 --- a/src/babel/transformation/transformers/es6/block-scoping.js +++ b/src/babel/transformation/transformers/es6/block-scoping.js @@ -37,6 +37,10 @@ function standardizeLets(declars) { } } +export var metadata = { + category: "builtin-advanced" +}; + export function VariableDeclaration(node, parent, scope, file) { if (!isLet(node, parent)) return; diff --git a/src/babel/transformation/transformers/es6/modules.js b/src/babel/transformation/transformers/es6/modules.js index 6141ab9217..80772e3163 100644 --- a/src/babel/transformation/transformers/es6/modules.js +++ b/src/babel/transformation/transformers/es6/modules.js @@ -8,6 +8,10 @@ function keepBlockHoist(node, nodes) { } } +export var metadata = { + category: "builtin-modules" +}; + export function ImportDeclaration(node, parent, scope, file) { // flow type if (node.isType) return; diff --git a/src/babel/transformation/transformers/es6/spec.block-scoping.js b/src/babel/transformation/transformers/es6/spec.block-scoping.js index 0ca41863a9..6906b1d7c1 100644 --- a/src/babel/transformation/transformers/es6/spec.block-scoping.js +++ b/src/babel/transformation/transformers/es6/spec.block-scoping.js @@ -28,7 +28,8 @@ var visitor = traverse.explode({ }); export var metadata = { - optional: true + optional: true, + category: "builtin-advanced" }; export var BlockStatement = { diff --git a/src/babel/transformation/transformers/index.js b/src/babel/transformation/transformers/index.js index 0c3ea89b1d..a4e0317b84 100644 --- a/src/babel/transformation/transformers/index.js +++ b/src/babel/transformation/transformers/index.js @@ -1,4 +1,5 @@ export default { + // builtin-basic "utility.removeDebugger": require("./utility/remove-debugger"), "utility.removeConsole": require("./utility/remove-console"), "utility.inlineEnvironmentVariables": require("./utility/inline-environment-variables"), @@ -41,26 +42,32 @@ export default { "es6.spread": require("./es6/spread"), "es6.parameters.default": require("./es6/parameters.default"), "es6.destructuring": require("./es6/destructuring"), - "es6.blockScoping": require("./es6/block-scoping"), - "es6.spec.blockScoping": require("./es6/spec.block-scoping"), "es6.tailCall": require("./es6/tail-call"), - regenerator: require("./other/regenerator"), - runtime: require("./other/runtime"), "es7.exportExtensions": require("./es7/export-extensions"), - "es6.modules": require("./es6/modules"), "spec.protoToAssign": require("./spec/proto-to-assign"), _shadowFunctions: require("./internal/shadow-functions"), "es7.doExpressions": require("./es7/do-expressions"), "es6.spec.symbols": require("./es6/spec.symbols"), ludicrous: require("./other/ludicrous"), "spec.undefinedToVoid": require("./spec/undefined-to-void"), + jscript: require("./other/jscript"), + flow: require("./other/flow"), + _hoistDirectives: require("./internal/hoist-directives"), + + // builtin-modules + "es6.modules": require("./es6/modules"), + regenerator: require("./other/regenerator"), + runtime: require("./other/runtime"), _moduleFormatter: require("./internal/module-formatter"), + + // builtin-advanced + "es6.blockScoping": require("./es6/block-scoping"), + "es6.spec.blockScoping": require("./es6/spec.block-scoping"), + + // builtin-cleanup "es3.propertyLiterals": require("./es3/property-literals"), "es3.memberExpressionLiterals": require("./es3/member-expression-literals"), "minification.memberExpressionLiterals": require("./minification/member-expression-literals"), "minification.propertyLiterals": require("./minification/property-literals"), - jscript: require("./other/jscript"), - flow: require("./other/flow"), - _hoistDirectives: require("./internal/hoist-directives"), - _blockHoist: require("./internal/block-hoist") + _blockHoist: require("./internal/block-hoist"), }; diff --git a/src/babel/transformation/transformers/internal/block-hoist.js b/src/babel/transformation/transformers/internal/block-hoist.js index b732e2b2f3..700d91b2a9 100644 --- a/src/babel/transformation/transformers/internal/block-hoist.js +++ b/src/babel/transformation/transformers/internal/block-hoist.js @@ -1,5 +1,9 @@ import sortBy from "lodash/collection/sortBy"; +export var metadata = { + category: "builtin-cleanup" +}; + // Priority: // // - 0 We want this to be at the **very** bottom diff --git a/src/babel/transformation/transformers/internal/module-formatter.js b/src/babel/transformation/transformers/internal/module-formatter.js index 00cd641998..da48d94c6d 100644 --- a/src/babel/transformation/transformers/internal/module-formatter.js +++ b/src/babel/transformation/transformers/internal/module-formatter.js @@ -1,5 +1,9 @@ import * as strict from "../../helpers/strict"; +export var metadata = { + category: "builtin-modules" +}; + export var Program = { exit(program, parent, scope, file) { strict.wrap(program, function () { diff --git a/src/babel/transformation/transformers/minification/member-expression-literals.js b/src/babel/transformation/transformers/minification/member-expression-literals.js index fe8862dc8c..a7d9823535 100644 --- a/src/babel/transformation/transformers/minification/member-expression-literals.js +++ b/src/babel/transformation/transformers/minification/member-expression-literals.js @@ -1,7 +1,8 @@ import * as t from "../../../types"; export var metadata = { - optional: true + optional: true, + category: "builtin-cleanup" }; export var MemberExpression = { diff --git a/src/babel/transformation/transformers/minification/property-literals.js b/src/babel/transformation/transformers/minification/property-literals.js index c85769a4e8..d1d682fbdb 100644 --- a/src/babel/transformation/transformers/minification/property-literals.js +++ b/src/babel/transformation/transformers/minification/property-literals.js @@ -1,7 +1,8 @@ import * as t from "../../../types"; export var metadata = { - optional: true + optional: true, + category: "builtin-cleanup" }; export var Property = { diff --git a/src/babel/transformation/transformers/other/flow.js b/src/babel/transformation/transformers/other/flow.js index bb6bf4c393..14fc5bcbc4 100644 --- a/src/babel/transformation/transformers/other/flow.js +++ b/src/babel/transformation/transformers/other/flow.js @@ -6,7 +6,6 @@ export function Flow(node) { export function ClassProperty(node) { node.typeAnnotation = null; - if (!node.value) this.remove(); } export function Class(node) { diff --git a/src/babel/transformation/transformers/other/regenerator.js b/src/babel/transformation/transformers/other/regenerator.js index 2897527cd1..9d1b17e675 100644 --- a/src/babel/transformation/transformers/other/regenerator.js +++ b/src/babel/transformation/transformers/other/regenerator.js @@ -1,6 +1,10 @@ import regenerator from "regenerator"; import * as t from "../../../types"; +export var metadata = { + category: "builtin-modules" +}; + export var Program = { exit(ast) { regenerator.transform(ast); diff --git a/src/babel/transformation/transformers/other/runtime/index.js b/src/babel/transformation/transformers/other/runtime/index.js index dbb3632d56..3fa283268d 100644 --- a/src/babel/transformation/transformers/other/runtime/index.js +++ b/src/babel/transformation/transformers/other/runtime/index.js @@ -10,10 +10,11 @@ var isSymbolIterator = t.buildMatchMemberExpression("Symbol.iterator"); const RUNTIME_MODULE_NAME = "babel-runtime"; export var metadata = { - optional: true + optional: true, + category: "builtin-modules" }; -export function pre(file) { +export function Program(node, parent, scope, file) { file.set("helperGenerator", function (name) { return file.addImport(`${RUNTIME_MODULE_NAME}/helpers/${name}`, name, "absoluteDefault"); }); @@ -23,8 +24,11 @@ export function pre(file) { }); } -export function Identifier(node, parent, scope, file) { - if (!this.isReferenced()) return; +export function ReferencedIdentifier(node, parent, scope, file) { + if (node.name === "regeneratorRuntime") { + return file.get("regeneratorIdentifier"); + } + if (t.isMemberExpression(parent)) return; if (!has(definitions.builtins, node.name)) return; if (scope.getBindingIdentifier(node.name)) return; @@ -37,14 +41,12 @@ export function Identifier(node, parent, scope, file) { export function CallExpression(node, parent, scope, file) { // arr[Symbol.iterator]() -> _core.$for.getIterator(arr) - var callee = node.callee; if (node.arguments.length) return; + var callee = node.callee; if (!t.isMemberExpression(callee)) return; if (!callee.computed) return; - - var prop = callee.property; - if (!isSymbolIterator(prop)) return; + if (!this.get("callee.property").matchesPattern("Symbol.iterator")) return; return t.callExpression(file.addImport(`${RUNTIME_MODULE_NAME}/core-js/get-iterator`, "getIterator", "absoluteDefault"), [callee.object]); } @@ -53,9 +55,7 @@ export function BinaryExpression(node, parent, scope, file) { // Symbol.iterator in arr -> core.$for.isIterable(arr) if (node.operator !== "in") return; - - var left = node.left; - if (!isSymbolIterator(left)) return; + if (!this.get("left").matchesPattern("Symbol.iterator")) return; return t.callExpression( file.addImport(`${RUNTIME_MODULE_NAME}/core-js/is-iterable`, "isIterable", "absoluteDefault"), @@ -103,9 +103,3 @@ export var MemberExpression = { ); } }; - -export function Identifier(node, parent, scope, file) { - if (this.isReferencedIdentifier({ name: "regeneratorRuntime" })) { - return file.get("regeneratorIdentifier"); - } -}