diff --git a/src/printer.js b/src/printer.js index 9807820bf..660de8084 100644 --- a/src/printer.js +++ b/src/printer.js @@ -3790,13 +3790,21 @@ function printMemberChain(path, options, print) { // node is just an identifier with the name starting with a capital // letter, just a sequence of _$ or this. The rationale is that they are // likely to be factories. + function isFactory(name) { + return name.match(/(^[A-Z])|^[_$]+$/); + } const shouldMerge = groups.length >= 2 && !groups[1][0].node.comments && - groups[0].length === 1 && - (groups[0][0].node.type === "ThisExpression" || - (groups[0][0].node.type === "Identifier" && - (groups[0][0].node.name.match(/(^[A-Z])|^[_$]+$/) || + ((groups[0].length === 1 && + (groups[0][0].node.type === "ThisExpression" || + (groups[0][0].node.type === "Identifier" && + (isFactory(groups[0][0].node.name) || + (groups[1].length && groups[1][0].node.computed))))) || + (groups[0].length > 1 && + groups[0][groups[0].length - 1].node.type === "MemberExpression" && + groups[0][groups[0].length - 1].node.property.type === "Identifier" && + (isFactory(groups[0][groups[0].length - 1].node.property.name) || (groups[1].length && groups[1][0].node.computed)))); function printGroup(printedGroup) { diff --git a/tests/member/__snapshots__/jsfmt.spec.js.snap b/tests/member/__snapshots__/jsfmt.spec.js.snap index 6f449e2b1..39c531c29 100644 --- a/tests/member/__snapshots__/jsfmt.spec.js.snap +++ b/tests/member/__snapshots__/jsfmt.spec.js.snap @@ -34,6 +34,21 @@ const promises = [ redis.fetch(), other.fetch(), ]; + +window.FooClient.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); + +window.something.FooClient.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); + +window.FooClient.something.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1]; @@ -65,6 +80,23 @@ const promises = [ other.fetch() ]; +window.FooClient.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); + +window.something.FooClient.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); + +window.FooClient.something + .setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token + }) + .initVerify("foo_container"); + `; exports[`logical.js 1`] = ` diff --git a/tests/member/expand.js b/tests/member/expand.js index cc662fb38..e7a31a81b 100644 --- a/tests/member/expand.js +++ b/tests/member/expand.js @@ -18,3 +18,18 @@ const promises = [ redis.fetch(), other.fetch(), ]; + +window.FooClient.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); + +window.something.FooClient.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); + +window.FooClient.something.setVars({ + locale: getFooLocale({ page }), + authorizationToken: data.token +}).initVerify("foo_container"); diff --git a/tests/method-chain/__snapshots__/jsfmt.spec.js.snap b/tests/method-chain/__snapshots__/jsfmt.spec.js.snap index ab85f23b0..471896e58 100644 --- a/tests/method-chain/__snapshots__/jsfmt.spec.js.snap +++ b/tests/method-chain/__snapshots__/jsfmt.spec.js.snap @@ -400,6 +400,10 @@ exports[`computed-merge.js 1`] = ` .then(() => console.log('bar')) .catch(() => console.log('baz')); }); + +window.Data[key]("foo") + .then(() => a) + .catch(() => b); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [].forEach(key => { data[key]("foo") @@ -414,6 +418,10 @@ exports[`computed-merge.js 1`] = ` .catch(() => console.log("baz")); }); +window.Data[key]("foo") + .then(() => a) + .catch(() => b); + `; exports[`conditional.js 1`] = ` diff --git a/tests/method-chain/computed-merge.js b/tests/method-chain/computed-merge.js index 510b9b4df..e86538ffc 100644 --- a/tests/method-chain/computed-merge.js +++ b/tests/method-chain/computed-merge.js @@ -10,3 +10,7 @@ .then(() => console.log('bar')) .catch(() => console.log('baz')); }); + +window.Data[key]("foo") + .then(() => a) + .catch(() => b);