diff --git a/lib/6to5/builders.js b/lib/6to5/builders.js new file mode 100644 index 0000000000..b015dbc0f0 --- /dev/null +++ b/lib/6to5/builders.js @@ -0,0 +1,46 @@ +var _ = require("lodash"); + +var build = function (type, keys) { + return function () { + var args = arguments; + var node = { type: type }; + _.each(keys, function (key, i) { + node[key] = args[i]; + }); + return node; + }; +}; + +exports.identifier = build("Identifier", ["name"]); + +exports.literal = build("Literal", ["value"]); + +exports.functionExpression = build("FunctionExpression", ["id", "params", "body"]); + +exports.returnStatement = build("ReturnStatement", ["argument"]); + +exports.assignmentExpression = build("AssignmentExpression", ["operator", "left", "right"]); + +exports.ifStatement = build("IfStatement", ["test", "consequent", "alternate"]); + +exports.callExpression = build("CallExpression", ["callee", "arguments"]); + +exports.blockStatement = build("BlockStatement", ["body"]); + +exports.memberExpression = build("MemberExpression", ["object", "property", "computed"]); + +exports.variableDeclaration = build("VariableDeclaration", ["kind", "declarations"]); + +exports.variableDeclarator = build("VariableDeclarator", ["id", "init"]); + +exports.arrayExpression = build("ArrayExpression", ["elements"]); + +exports.binaryExpression = build("BinaryExpression", ["operator", "left", "right"]); + +exports.expressionStatement = build("ExpressionStatement", ["expression"]); + +exports.thisExpression = build("ThisExpression"); + +exports.objectExpression = build("ObjectExpression", ["properties"]); + +exports.property = build("Property", ["kind", "key", "value"]); diff --git a/lib/6to5/file.js b/lib/6to5/file.js index e0d1cdc41d..751b032255 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -5,7 +5,7 @@ var SHEBANG_REGEX = /^\#\!.*/; var transform = require("./transform"); var generate = require("./generator"); var util = require("./util"); -var b = require("acorn-ast-types").builders; +var b = require("./builders"); var _ = require("lodash"); function File(opts) { diff --git a/lib/6to5/modules/amd.js b/lib/6to5/modules/amd.js index 971c44c678..073cd596a6 100644 --- a/lib/6to5/modules/amd.js +++ b/lib/6to5/modules/amd.js @@ -2,7 +2,7 @@ module.exports = AMDFormatter; var CommonJSFormatter = require("./common"); var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); function AMDFormatter(file) { diff --git a/lib/6to5/modules/common.js b/lib/6to5/modules/common.js index bbb672a118..8cd1013c65 100644 --- a/lib/6to5/modules/common.js +++ b/lib/6to5/modules/common.js @@ -1,7 +1,7 @@ module.exports = CommonJSFormatter; var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); function CommonJSFormatter(file) { this.file = file; diff --git a/lib/6to5/modules/umd.js b/lib/6to5/modules/umd.js index a73e876554..ccb3d1ab87 100644 --- a/lib/6to5/modules/umd.js +++ b/lib/6to5/modules/umd.js @@ -2,7 +2,7 @@ module.exports = UMDFormatter; var AMDFormatter = require("./amd"); var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); function UMDFormatter(file) { diff --git a/lib/6to5/transformers/_alias-functions.js b/lib/6to5/transformers/_alias-functions.js index d0895d8de5..77928084ce 100644 --- a/lib/6to5/transformers/_alias-functions.js +++ b/lib/6to5/transformers/_alias-functions.js @@ -1,6 +1,6 @@ var traverse = require("../traverse"); var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var go = function (getBody, node, file) { var argumentsId; diff --git a/lib/6to5/transformers/_declarations.js b/lib/6to5/transformers/_declarations.js index 733e8923af..0090aa3d50 100644 --- a/lib/6to5/transformers/_declarations.js +++ b/lib/6to5/transformers/_declarations.js @@ -1,4 +1,4 @@ -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); module.exports = function (ast, file) { diff --git a/lib/6to5/transformers/array-comprehension.js b/lib/6to5/transformers/array-comprehension.js index 72bf66076f..d0448b7f0a 100644 --- a/lib/6to5/transformers/array-comprehension.js +++ b/lib/6to5/transformers/array-comprehension.js @@ -1,5 +1,5 @@ var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var single = function (node) { var block = node.blocks[0]; diff --git a/lib/6to5/transformers/classes.js b/lib/6to5/transformers/classes.js index 0dac35520e..88d47b7217 100644 --- a/lib/6to5/transformers/classes.js +++ b/lib/6to5/transformers/classes.js @@ -1,6 +1,6 @@ var traverse = require("../traverse"); var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); exports.ClassDeclaration = function (node, parent, file) { diff --git a/lib/6to5/transformers/computed-property-names.js b/lib/6to5/transformers/computed-property-names.js index da1cf6e300..1aeb9bcaa1 100644 --- a/lib/6to5/transformers/computed-property-names.js +++ b/lib/6to5/transformers/computed-property-names.js @@ -1,5 +1,5 @@ var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); exports.ObjectExpression = function (node, parent, file) { diff --git a/lib/6to5/transformers/destructuring.js b/lib/6to5/transformers/destructuring.js index 4ce26b813f..84d2335a8e 100644 --- a/lib/6to5/transformers/destructuring.js +++ b/lib/6to5/transformers/destructuring.js @@ -1,6 +1,6 @@ var traverse = require("../traverse"); var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); var buildVariableAssign = function (kind, id, init) { diff --git a/lib/6to5/transformers/for-of.js b/lib/6to5/transformers/for-of.js index e29c6c66bf..14ee860db2 100644 --- a/lib/6to5/transformers/for-of.js +++ b/lib/6to5/transformers/for-of.js @@ -1,5 +1,5 @@ var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); exports.ForOfStatement = function (node, parent, file) { var left = node.left; diff --git a/lib/6to5/transformers/jsx.js b/lib/6to5/transformers/jsx.js index 79e16c9ddd..0065d9a029 100644 --- a/lib/6to5/transformers/jsx.js +++ b/lib/6to5/transformers/jsx.js @@ -2,7 +2,7 @@ // https://github.com/RReverser/jsx-transpiler var esutils = require("esutils"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); var JSX_ANNOTATION_REGEX = /^\*\s*@jsx\s+([^\s]+)/; @@ -11,9 +11,7 @@ exports.Program = function (node, parent, file) { var jsx = "React.DOM"; // looking for namespace annotation - _.each(node.comments, function (comment) { - if (!comment.possiblyLeading) return; - + _.each(node.leadingComments, function (comment) { var matches = JSX_ANNOTATION_REGEX.exec(comment.value); if (matches) jsx = matches[1]; }); @@ -64,10 +62,13 @@ exports.XJSAttribute = { exports.XJSOpeningElement = { exit: function (node, parent, file) { var tagExpr = node.name; - var tagName = tagExpr.name; - if (/[a-z]/.exec(tagName[0]) || _.contains(tagName, "-")) { - tagExpr = b.memberExpression(file.jsx, tagExpr, false); + if (tagExpr.type === "Identifier") { + var tagName = tagExpr.name; + + if (/[a-z]/.exec(tagName[0]) || _.contains(tagName, "-")) { + tagExpr = b.memberExpression(file.jsx, tagExpr, false); + } } var props = node.attributes; diff --git a/lib/6to5/transformers/let-scoping.js b/lib/6to5/transformers/let-scoping.js index df46d2a823..6bf477509a 100644 --- a/lib/6to5/transformers/let-scoping.js +++ b/lib/6to5/transformers/let-scoping.js @@ -1,6 +1,6 @@ var traverse = require("../traverse"); var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); exports.VariableDeclaration = function (node, parent, file) { diff --git a/lib/6to5/transformers/react.js b/lib/6to5/transformers/react.js index 9732174fa0..e527088882 100644 --- a/lib/6to5/transformers/react.js +++ b/lib/6to5/transformers/react.js @@ -1,4 +1,4 @@ -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); var addDisplayName = function (id, call) { diff --git a/lib/6to5/transformers/rest-parameters.js b/lib/6to5/transformers/rest-parameters.js index 9ad33b58c4..04b68fb6d6 100644 --- a/lib/6to5/transformers/rest-parameters.js +++ b/lib/6to5/transformers/rest-parameters.js @@ -1,5 +1,5 @@ var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); exports.Function = function (node, parent, file) { if (!node.rest) return; diff --git a/lib/6to5/transformers/spread.js b/lib/6to5/transformers/spread.js index 8766aca3e5..862d21e60b 100644 --- a/lib/6to5/transformers/spread.js +++ b/lib/6to5/transformers/spread.js @@ -1,5 +1,5 @@ var util = require("../util"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); var getSpreadLiteral = function (spread, file) { diff --git a/lib/6to5/transformers/template-literals.js b/lib/6to5/transformers/template-literals.js index de0efbe9ba..ecfba6057e 100644 --- a/lib/6to5/transformers/template-literals.js +++ b/lib/6to5/transformers/template-literals.js @@ -1,4 +1,4 @@ -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); var buildBinaryExpression = function (left, right) { diff --git a/lib/6to5/transformers/unicode-regex.js b/lib/6to5/transformers/unicode-regex.js index c06ae2ed07..b1d5e4e0a1 100644 --- a/lib/6to5/transformers/unicode-regex.js +++ b/lib/6to5/transformers/unicode-regex.js @@ -1,5 +1,5 @@ var rewritePattern = require("regexpu/rewrite-pattern"); -var b = require("acorn-ast-types").builders; +var b = require("../builders"); var _ = require("lodash"); exports.Literal = function (node) { diff --git a/lib/6to5/transformers/use-strict.js b/lib/6to5/transformers/use-strict.js index f6bfd8ea18..f3fedf89df 100644 --- a/lib/6to5/transformers/use-strict.js +++ b/lib/6to5/transformers/use-strict.js @@ -1,4 +1,4 @@ -var b = require("acorn-ast-types").builders; +var b = require("../builders"); module.exports = function (ast, file) { var body = ast.program.body;