From a14e1e8fd159637816eb6a4b7e143819b07903e7 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 28 Feb 2015 11:28:22 +1100 Subject: [PATCH] clean up toAst method and properly transform rest elements away - fixes babel/babel-eslint#7 --- .../babel-eslint-parser/acorn-to-esprima.js | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/eslint/babel-eslint-parser/acorn-to-esprima.js b/eslint/babel-eslint-parser/acorn-to-esprima.js index b82cf6aeea..29b2b003fe 100644 --- a/eslint/babel-eslint-parser/acorn-to-esprima.js +++ b/eslint/babel-eslint-parser/acorn-to-esprima.js @@ -22,38 +22,43 @@ exports.toAST = function (ast) { var astTransformVisitor = { noScope: true, enter: function (node) { + if (t.isSpreadProperty(node)) { + node.type = "Property"; + node.kind = "init"; + node.computed = false; + node.key = node.value = node.argument; + delete node.argument; + } + + if (t.isClassProperty(node)) { + // eslint doesn't like these + this.remove(); + } + if (t.isImportBatchSpecifier(node)) { // ImportBatchSpecifier => ImportNamespaceSpecifier node.type = "ImportNamespaceSpecifier"; node.id = node.name; delete node.name; - } else if (t.isFunction(node)) { - // defaults + } + + // functions + + if (t.isFunction(node)) { node.defaults = []; node.params = node.params.map(function (param) { if (t.isAssignmentPattern(param)) { node.defaults.push(param.right); return param.left; } else { + if (t.isRestElement(param)) param = param.argument; node.defaults.push(null); return param; } }); + } - // rest - if (t.isRestElement(node.params[node.params.length - 1])) { - node.rest = node.params.pop(); - } - } else if (t.isSpreadProperty(node)) { - node.type = "Property"; - node.kind = "init"; - node.computed = false; - node.key = node.value = node.argument; - delete node.argument; - } else if (t.isClassProperty(node)) { - // eslint doesn't like these - this.remove(); - } else if (t.isArrowFunctionExpression(node)) { + if (t.isArrowFunctionExpression(node)) { node.type = "FunctionExpression"; } }