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