diff --git a/lib/6to5/generation/generator.js b/lib/6to5/generation/generator.js index 2f94186b3e..eec6dcfaa9 100644 --- a/lib/6to5/generation/generator.js +++ b/lib/6to5/generation/generator.js @@ -148,11 +148,11 @@ CodeGenerator.prototype.print = function (node, parent, opts) { }; if (this[node.type]) { - var needsCommentParens = t.isExpression(node) && node.leadingComments && node.leadingComments.length; - var needsParens = needsCommentParens || n.needsParens(node, parent); + var needsNoLineTermParens = n.needsParensNoLineTerminator(node, parent); + var needsParens = needsNoLineTermParens || n.needsParens(node, parent); if (needsParens) this.push("("); - if (needsCommentParens) this.indent(); + if (needsNoLineTermParens) this.indent(); this.printLeadingComments(node, parent); @@ -163,7 +163,7 @@ CodeGenerator.prototype.print = function (node, parent, opts) { this[node.type](node, this.buildPrint(node), parent); - if (needsCommentParens) { + if (needsNoLineTermParens) { this.newline(); this.dedent(); } diff --git a/lib/6to5/generation/node/index.js b/lib/6to5/generation/node/index.js index b1ab6b7599..b0b283d853 100644 --- a/lib/6to5/generation/node/index.js +++ b/lib/6to5/generation/node/index.js @@ -69,6 +69,29 @@ Node.prototype.needsParens = function () { return find(parens, node, parent); }; +Node.prototype.needsParensNoLineTerminator = function () { + var parent = this.parent; + var node = this.node; + + if (!parent) return false; + + // no comments + if (!node.leadingComments || !node.leadingComments.length) { + return false; + } + + if (t.isYieldExpression(parent) || t.isAwaitExpression(parent)) { + return true; + } + + if (t.isContinueStatement(parent) || t.isBreakStatement(parent) || + t.isReturnStatement(parent) || t.isThrowStatement(parent)) { + return true; + } + + return false; +}; + _.each(Node.prototype, function (fn, key) { Node[key] = function (node, parent) { var n = new Node(node, parent); diff --git a/lib/6to5/generation/node/parentheses.js b/lib/6to5/generation/node/parentheses.js index bdea11d6d2..6d96d78675 100644 --- a/lib/6to5/generation/node/parentheses.js +++ b/lib/6to5/generation/node/parentheses.js @@ -20,6 +20,20 @@ _.each([ }); }); +exports.ObjectExpression = function (node, parent) { + if (t.isExpressionStatement(parent)) { + // ({ foo: "bar" }); + return true; + } + + if (t.isMemberExpression(parent) && parent.object === node) { + // ({ foo: "bar" }).foo + return true; + } + + return false; +}; + exports.Binary = function (node, parent) { if (t.isCallExpression(parent) && parent.callee === node) { return true;