From d32fae6fcdd3e617f250c4052e7ad7864dbfc595 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 24 Nov 2015 19:07:03 -0800 Subject: [PATCH 1/4] No need for parens for new expressions without args --- packages/babel-generator/src/generators/expressions.js | 2 ++ .../test/fixtures/compact/new-expression/actual.js | 1 + .../test/fixtures/compact/new-expression/expected.js | 1 + 3 files changed, 4 insertions(+) create mode 100644 packages/babel-generator/test/fixtures/compact/new-expression/actual.js create mode 100644 packages/babel-generator/test/fixtures/compact/new-expression/expected.js diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index ffe55eb3f1..ca0f251d34 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -62,6 +62,8 @@ export function ConditionalExpression(node: Object) { export function NewExpression(node: Object) { this.push("new "); this.print(node.callee, node); + if (node.arguments.length === 0 && this.format.compact) return; + this.push("("); this.printList(node.arguments, node); this.push(")"); diff --git a/packages/babel-generator/test/fixtures/compact/new-expression/actual.js b/packages/babel-generator/test/fixtures/compact/new-expression/actual.js new file mode 100644 index 0000000000..e81ff8d9bf --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/new-expression/actual.js @@ -0,0 +1 @@ +new X(); diff --git a/packages/babel-generator/test/fixtures/compact/new-expression/expected.js b/packages/babel-generator/test/fixtures/compact/new-expression/expected.js new file mode 100644 index 0000000000..e1ffdf2a25 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/new-expression/expected.js @@ -0,0 +1 @@ +new X; From f1f6c820feeb90165d7b3f3c95c49a3b00e542d3 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 24 Nov 2015 19:12:24 -0800 Subject: [PATCH 2/4] Handle new X()() --- packages/babel-generator/src/generators/expressions.js | 4 ++-- .../test/fixtures/compact/new-expression/actual.js | 1 + .../test/fixtures/compact/new-expression/expected.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index ca0f251d34..0534844d13 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -59,10 +59,10 @@ export function ConditionalExpression(node: Object) { this.print(node.alternate, node); } -export function NewExpression(node: Object) { +export function NewExpression(node: Object, parent: Object) { this.push("new "); this.print(node.callee, node); - if (node.arguments.length === 0 && this.format.compact) return; + if (node.arguments.length === 0 && this.format.compact && !t.isCallExpression(parent)) return; this.push("("); this.printList(node.arguments, node); diff --git a/packages/babel-generator/test/fixtures/compact/new-expression/actual.js b/packages/babel-generator/test/fixtures/compact/new-expression/actual.js index e81ff8d9bf..1957ac85ec 100644 --- a/packages/babel-generator/test/fixtures/compact/new-expression/actual.js +++ b/packages/babel-generator/test/fixtures/compact/new-expression/actual.js @@ -1 +1,2 @@ new X(); +new Y()(); diff --git a/packages/babel-generator/test/fixtures/compact/new-expression/expected.js b/packages/babel-generator/test/fixtures/compact/new-expression/expected.js index e1ffdf2a25..d50100ac49 100644 --- a/packages/babel-generator/test/fixtures/compact/new-expression/expected.js +++ b/packages/babel-generator/test/fixtures/compact/new-expression/expected.js @@ -1 +1 @@ -new X; +new X;new Y()(); From 486d781be303b756eea2b53001ca31c65dd41c2d Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 24 Nov 2015 19:20:06 -0800 Subject: [PATCH 3/4] Handle member expressions --- packages/babel-generator/src/generators/expressions.js | 3 ++- .../test/fixtures/compact/new-expression/actual.js | 1 + .../test/fixtures/compact/new-expression/expected.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 0534844d13..b100e25599 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -62,7 +62,8 @@ export function ConditionalExpression(node: Object) { export function NewExpression(node: Object, parent: Object) { this.push("new "); this.print(node.callee, node); - if (node.arguments.length === 0 && this.format.compact && !t.isCallExpression(parent)) return; + if (node.arguments.length === 0 && this.format.compact && + !t.isCallExpression(parent) && !t.isMemberExpression(parent)) return; this.push("("); this.printList(node.arguments, node); diff --git a/packages/babel-generator/test/fixtures/compact/new-expression/actual.js b/packages/babel-generator/test/fixtures/compact/new-expression/actual.js index 1957ac85ec..ae661bc5d3 100644 --- a/packages/babel-generator/test/fixtures/compact/new-expression/actual.js +++ b/packages/babel-generator/test/fixtures/compact/new-expression/actual.js @@ -1,2 +1,3 @@ new X(); new Y()(); +new F().z; diff --git a/packages/babel-generator/test/fixtures/compact/new-expression/expected.js b/packages/babel-generator/test/fixtures/compact/new-expression/expected.js index d50100ac49..4491231de6 100644 --- a/packages/babel-generator/test/fixtures/compact/new-expression/expected.js +++ b/packages/babel-generator/test/fixtures/compact/new-expression/expected.js @@ -1 +1 @@ -new X;new Y()(); +new X;new Y()();new F().z; From c78c27a8d6d7420bb9ed9f26d95d381003ada861 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 24 Nov 2015 19:24:05 -0800 Subject: [PATCH 4/4] It's only valid if the node is the callee --- packages/babel-generator/src/generators/expressions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index b100e25599..20d16c726a 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -63,7 +63,7 @@ export function NewExpression(node: Object, parent: Object) { this.push("new "); this.print(node.callee, node); if (node.arguments.length === 0 && this.format.compact && - !t.isCallExpression(parent) && !t.isMemberExpression(parent)) return; + !t.isCallExpression(parent, { callee: node }) && !t.isMemberExpression(parent)) return; this.push("("); this.printList(node.arguments, node);