restructure transformers into multiple categories

This commit is contained in:
Sebastian McKenzie 2015-05-08 15:26:00 +01:00
parent 8f52229a86
commit ba516901af
14 changed files with 62 additions and 31 deletions

View File

@ -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);

View File

@ -1,5 +1,9 @@
import * as t from "../../../types";
export var metadata = {
category: "builtin-cleanup"
};
export var MemberExpression = {
exit(node) {
var prop = node.property;

View File

@ -1,5 +1,9 @@
import * as t from "../../../types";
export var metadata = {
category: "builtin-cleanup"
};
export var Property = {
exit(node) {
var key = node.key;

View File

@ -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;

View File

@ -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;

View File

@ -28,7 +28,8 @@ var visitor = traverse.explode({
});
export var metadata = {
optional: true
optional: true,
category: "builtin-advanced"
};
export var BlockStatement = {

View File

@ -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"),
};

View File

@ -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

View File

@ -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 () {

View File

@ -1,7 +1,8 @@
import * as t from "../../../types";
export var metadata = {
optional: true
optional: true,
category: "builtin-cleanup"
};
export var MemberExpression = {

View File

@ -1,7 +1,8 @@
import * as t from "../../../types";
export var metadata = {
optional: true
optional: true,
category: "builtin-cleanup"
};
export var Property = {

View File

@ -6,7 +6,6 @@ export function Flow(node) {
export function ClassProperty(node) {
node.typeAnnotation = null;
if (!node.value) this.remove();
}
export function Class(node) {

View File

@ -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);

View File

@ -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");
}
}