From 4f00de50d679c908e8045bf85ea244d6e772bb3a Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 17 Mar 2015 02:45:16 +1100 Subject: [PATCH] remove playground code gen, remove react metadata, start update of modules to estree --- src/babel/generation/generators/playground.js | 7 -- src/babel/generation/index.js | 1 - src/babel/patch.js | 32 ------- src/babel/transformation/file/options.json | 6 -- src/babel/transformation/modules/common.js | 2 +- src/babel/transformation/transformer-pass.js | 6 +- .../transformers/es6/block-scoping.js | 2 +- .../transformers/es6/modules.js | 6 +- .../transformers/es6/parameters.default.js | 2 +- .../es7/exponentiation-operator.js | 4 - .../transformers/internal/module-formatter.js | 2 +- .../transformers/internal/modules.js | 96 ++++++++++--------- .../transformers/internal/strict.js | 2 +- .../transformation/transformers/other/flow.js | 4 - .../transformers/other/react-compat.js | 3 +- .../transformers/other/react.js | 4 - 16 files changed, 65 insertions(+), 114 deletions(-) delete mode 100644 src/babel/generation/generators/playground.js diff --git a/src/babel/generation/generators/playground.js b/src/babel/generation/generators/playground.js deleted file mode 100644 index f3a7e5bf8c..0000000000 --- a/src/babel/generation/generators/playground.js +++ /dev/null @@ -1,7 +0,0 @@ -import each from "lodash/collection/each"; - -each(["BindMemberExpression", "BindFunctionExpression"], function (type) { - exports[type] = function () { - throw new ReferenceError(`Trying to render non-standard playground node ${JSON.stringify(type)}`); - }; -}); diff --git a/src/babel/generation/index.js b/src/babel/generation/index.js index 9a8baf610a..35f088f250 100644 --- a/src/babel/generation/index.js +++ b/src/babel/generation/index.js @@ -59,7 +59,6 @@ class CodeGenerator { comprehensions: require("./generators/comprehensions"), expressions: require("./generators/expressions"), statements: require("./generators/statements"), - playground: require("./generators/playground"), classes: require("./generators/classes"), methods: require("./generators/methods"), modules: require("./generators/modules"), diff --git a/src/babel/patch.js b/src/babel/patch.js index 46078aa9d6..85a439f5dd 100644 --- a/src/babel/patch.js +++ b/src/babel/patch.js @@ -23,41 +23,9 @@ def("AssignmentPattern") .field("left", def("Pattern")) .field("right", def("Expression")); -// Acorn - Same as ImportNamespaceSpecifier but `id` is `name` -def("ImportBatchSpecifier") - .bases("Specifier") - .build("name") - .field("name", def("Identifier")); - def("RestElement") .bases("Pattern") .build("argument") .field("argument", def("expression")); -// Abstract references -def("VirtualPropertyExpression") - .bases("Expression") - .build("object", "property") - .field("object", def("Expression")) - .field("property", or(def("Identifier"), def("Expression"))); - -def("PrivateDeclaration") - .bases("Declaration") - .build("declarations") - .field("declarations", [def("Identifier")]); - -// Playground -def("BindMemberExpression") - .bases("Expression") - .build("object", "property", "arguments") - .field("object", def("Expression")) - .field("property", or(def("Identifier"), def("Expression"))) - .field("arguments", [def("Expression")]); - -def("BindFunctionExpression") - .bases("Expression") - .build("callee", "arguments") - .field("callee", def("Expression")) - .field("arguments", [def("Expression")]); - types.finalize(); diff --git a/src/babel/transformation/file/options.json b/src/babel/transformation/file/options.json index 77b1ec639e..013b2be31f 100644 --- a/src/babel/transformation/file/options.json +++ b/src/babel/transformation/file/options.json @@ -19,12 +19,6 @@ }, - "react": { - "description": "", - "type": "boolean", - "default": false - }, - "highlightErrors": { "description": "ANSI syntax highlight error messages", "type": "boolean", diff --git a/src/babel/transformation/modules/common.js b/src/babel/transformation/modules/common.js index edfd68088c..ba6fb2331c 100644 --- a/src/babel/transformation/modules/common.js +++ b/src/babel/transformation/modules/common.js @@ -18,7 +18,7 @@ export default class CommonJSFormatter extends DefaultFormatter { }; importSpecifier(specifier, node, nodes) { - var variableName = t.getSpecifierName(specifier); + var variableName = node.local; var ref = this.getExternalReference(node, nodes); diff --git a/src/babel/transformation/transformer-pass.js b/src/babel/transformation/transformer-pass.js index 934f87cc98..5a709d2130 100644 --- a/src/babel/transformation/transformer-pass.js +++ b/src/babel/transformation/transformer-pass.js @@ -13,11 +13,11 @@ export default class TransformerPass { this.handlers = transformer.handlers; this.file = file; - this.canRun = this._canRun(); - this.ran = false; + this.canTransform = this._canTransform(); + this.ran = false; } - _canRun(): boolean { + _canTransform(): boolean { var transformer = this.transformer; var opts = this.file.opts; diff --git a/src/babel/transformation/transformers/es6/block-scoping.js b/src/babel/transformation/transformers/es6/block-scoping.js index 9859a93629..d6d358eff7 100644 --- a/src/babel/transformation/transformers/es6/block-scoping.js +++ b/src/babel/transformation/transformers/es6/block-scoping.js @@ -44,7 +44,7 @@ export function check(node) { export function VariableDeclaration(node, parent, scope, file) { if (!isLet(node, parent)) return; - if (isLetInitable(node) && file.transformers["es6.blockScopingTDZ"].canRun) { + if (isLetInitable(node) && file.transformers["es6.blockScopingTDZ"].canTransform) { var nodes = [node]; for (var i = 0; i < node.declarations.length; i++) { diff --git a/src/babel/transformation/transformers/es6/modules.js b/src/babel/transformation/transformers/es6/modules.js index cb583622d6..55c9c60096 100644 --- a/src/babel/transformation/transformers/es6/modules.js +++ b/src/babel/transformation/transformers/es6/modules.js @@ -24,7 +24,11 @@ export function ImportDeclaration(node, parent, scope, file) { return nodes; } -export function ExportDeclaration(node, parent, scope, file) { +export function ExportAllDeclaration(node, parent, scope, file) { + return file.moduleFormatter.exportAllDeclaration(node, parent); +} + +export function ExportNamedDeclaration(node, parent, scope, file) { // flow type if (this.get("declaration").isTypeAlias()) return; diff --git a/src/babel/transformation/transformers/es6/parameters.default.js b/src/babel/transformation/transformers/es6/parameters.default.js index 7fe23b6f85..530da69918 100644 --- a/src/babel/transformation/transformers/es6/parameters.default.js +++ b/src/babel/transformation/transformers/es6/parameters.default.js @@ -62,7 +62,7 @@ exports.Function = function (node, parent, scope, file) { param.traverse(iifeVisitor, state); } - if (file.transformers["es6.blockScopingTDZ"].canRun && param.isIdentifier()) { + if (file.transformers["es6.blockScopingTDZ"].canTransform && param.isIdentifier()) { pushDefNode(param.node, t.identifier("undefined"), i); } diff --git a/src/babel/transformation/transformers/es7/exponentiation-operator.js b/src/babel/transformation/transformers/es7/exponentiation-operator.js index 5ff6319fe9..a2cf7bd27b 100644 --- a/src/babel/transformation/transformers/es7/exponentiation-operator.js +++ b/src/babel/transformation/transformers/es7/exponentiation-operator.js @@ -3,10 +3,6 @@ import build from "../../helpers/build-binary-assignment-operator-transformer"; import * as t from "../../../types"; -export var metadata = { - optional: true -}; - var MATH_POW = t.memberExpression(t.identifier("Math"), t.identifier("pow")); build(exports, { diff --git a/src/babel/transformation/transformers/internal/module-formatter.js b/src/babel/transformation/transformers/internal/module-formatter.js index a1a9e6de65..54aa41a90a 100644 --- a/src/babel/transformation/transformers/internal/module-formatter.js +++ b/src/babel/transformation/transformers/internal/module-formatter.js @@ -5,7 +5,7 @@ export function Program(program, parent, scope, file) { program.body = file.dynamicImports.concat(program.body); }); - if (!file.transformers["es6.modules"].canRun) return; + if (!file.transformers["es6.modules"].canTransform) return; if (file.moduleFormatter.transform) { file.moduleFormatter.transform(program); diff --git a/src/babel/transformation/transformers/internal/modules.js b/src/babel/transformation/transformers/internal/modules.js index 50ecd3a7a8..241072caee 100644 --- a/src/babel/transformation/transformers/internal/modules.js +++ b/src/babel/transformation/transformers/internal/modules.js @@ -17,12 +17,9 @@ export function ImportDeclaration(node, parent, scope, file) { } } -export function ExportDeclaration(node, parent, scope) { +export function ExportDefaultDeclaration(node, parent, scope) { ImportDeclaration.apply(this, arguments); - // flow type - if (node.isType) return; - var declar = node.declaration; var getDeclar = function () { @@ -30,46 +27,55 @@ export function ExportDeclaration(node, parent, scope) { return declar; }; - if (node.default) { - if (t.isClassDeclaration(declar)) { - // export default class Foo {}; - this.node = [getDeclar(), node]; - node.declaration = declar.id; - } else if (t.isClassExpression(declar)) { - // export default class {}; - var temp = scope.generateUidIdentifier("default"); - declar = t.variableDeclaration("var", [ - t.variableDeclarator(temp, declar) - ]); - node.declaration = temp; - return [getDeclar(), node]; - } else if (t.isFunctionDeclaration(declar)) { - // export default function Foo() {} - node._blockHoist = 2; - node.declaration = declar.id; - return [getDeclar(), node]; - } - } else { - if (t.isClassDeclaration(declar)) { - // export class Foo {} - node.specifiers = [t.importSpecifier(declar.id, declar.id)]; - node.declaration = null; - return [getDeclar(), node]; - } else if (t.isFunctionDeclaration(declar)) { - // export function Foo() {} - node.specifiers = [t.importSpecifier(declar.id, declar.id)]; - node.declaration = null; - node._blockHoist = 2; - return [getDeclar(), node]; - } else if (t.isVariableDeclaration(declar)) { - // export var foo = "bar"; - var specifiers = []; - var bindings = this.get("declaration").getBindingIdentifiers(); - for (var key in bindings) { - var id = bindings[key]; - specifiers.push(t.exportSpecifier(id, id)); - } - return [declar, t.exportDeclaration(null, specifiers)]; - } + if (t.isClassDeclaration(declar)) { + // export default class Foo {}; + this.node = [getDeclar(), node]; + node.declaration = declar.id; + } else if (t.isClassExpression(declar)) { + // export default class {}; + var temp = scope.generateUidIdentifier("default"); + declar = t.variableDeclaration("var", [ + t.variableDeclarator(temp, declar) + ]); + node.declaration = temp; + return [getDeclar(), node]; + } else if (t.isFunctionDeclaration(declar)) { + // export default function Foo() {} + node._blockHoist = 2; + node.declaration = declar.id; + return [getDeclar(), node]; + } +} + +export function ExportNamedDeclaration(node, parent, scope) { + ImportDeclaration.apply(this, arguments); + + var declar = node.declaration; + + var getDeclar = function () { + declar._ignoreUserWhitespace = true; + return declar; + }; + + if (t.isClassDeclaration(declar)) { + // export class Foo {} + node.specifiers = [t.importSpecifier(declar.id, declar.id)]; + node.declaration = null; + return [getDeclar(), node]; + } else if (t.isFunctionDeclaration(declar)) { + // export function Foo() {} + node.specifiers = [t.importSpecifier(declar.id, declar.id)]; + node.declaration = null; + node._blockHoist = 2; + return [getDeclar(), node]; + } else if (t.isVariableDeclaration(declar)) { + // export var foo = "bar"; + var specifiers = []; + var bindings = this.get("declaration").getBindingIdentifiers(); + for (var key in bindings) { + var id = bindings[key]; + specifiers.push(t.exportSpecifier(id, id)); + } + return [declar, t.exportNamedDeclaration(null, specifiers)]; } } diff --git a/src/babel/transformation/transformers/internal/strict.js b/src/babel/transformation/transformers/internal/strict.js index 1cd910a20b..e9e1b72ef5 100644 --- a/src/babel/transformation/transformers/internal/strict.js +++ b/src/babel/transformation/transformers/internal/strict.js @@ -1,7 +1,7 @@ import * as t from "../../../types"; export function Program(program, parent, scope, file) { - if (file.transformers.strict.canRun) { + if (file.transformers.strict.canTransform) { var directive = file.get("existingStrictDirective"); if (!directive) { diff --git a/src/babel/transformation/transformers/other/flow.js b/src/babel/transformation/transformers/other/flow.js index d065bf4bd2..bb6bf4c393 100644 --- a/src/babel/transformation/transformers/other/flow.js +++ b/src/babel/transformation/transformers/other/flow.js @@ -1,9 +1,5 @@ import * as t from "../../../types"; -export var metadata = { - react: true -}; - export function Flow(node) { this.remove(); } diff --git a/src/babel/transformation/transformers/other/react-compat.js b/src/babel/transformation/transformers/other/react-compat.js index 14a7070768..0546d203ef 100644 --- a/src/babel/transformation/transformers/other/react-compat.js +++ b/src/babel/transformation/transformers/other/react-compat.js @@ -6,8 +6,7 @@ export function manipulateOptions(opts) { } export var metadata = { - optional: true, - react: true + optional: true }; require("../../helpers/build-react-transformer")(exports, { diff --git a/src/babel/transformation/transformers/other/react.js b/src/babel/transformation/transformers/other/react.js index da00e89c32..2b098e5461 100644 --- a/src/babel/transformation/transformers/other/react.js +++ b/src/babel/transformation/transformers/other/react.js @@ -3,10 +3,6 @@ import * as t from "../../../types"; var JSX_ANNOTATION_REGEX = /^\*\s*@jsx\s+([^\s]+)/; -export var metadata = { - react: true -}; - export function Program(node, parent, scope, file) { var id = "React.createElement";