diff --git a/src/printer.js b/src/printer.js index 0d16304b..98a04641 100644 --- a/src/printer.js +++ b/src/printer.js @@ -1309,10 +1309,19 @@ function genericPrintNoParens(path, options, print, args) { ? parent === firstNonConditionalParent ? group(doc) : doc : group(doc); // Always group in normal mode. + // Break the closing paren to keep the chain right after it: + // (a + // ? b + // : c + // ).call() + const breakClosingParen = + !jsxMode && parent.type === "MemberExpression" && !parent.computed; + return maybeGroup( concat([ path.call(print, "test"), - forceNoIndent ? concat(parts) : indent(concat(parts)) + forceNoIndent ? concat(parts) : indent(concat(parts)), + breakClosingParen ? ifBreak(softline, "") : "" ]) ); } @@ -3705,9 +3714,7 @@ function printMemberChain(path, options, print) { groups.length <= cutoff && !hasComment && // (a || b).map() should be break before .map() instead of || - groups[0][0].node.type !== "LogicalExpression" && - // (a ? b : c).map() should be break before .map() instead of ? - groups[0][0].node.type !== "ConditionalExpression" + groups[0][0].node.type !== "LogicalExpression" ) { return group(oneLine); } diff --git a/tests/member/__snapshots__/jsfmt.spec.js.snap b/tests/member/__snapshots__/jsfmt.spec.js.snap index e2dfaec7..989d5315 100644 --- a/tests/member/__snapshots__/jsfmt.spec.js.snap +++ b/tests/member/__snapshots__/jsfmt.spec.js.snap @@ -1,5 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`conditional.js 1`] = ` +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(this.defaultUser)) +.prop; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(this.defaultUser)).prop; + +`; + exports[`expand.js 1`] = ` const veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1]; const small = doc.expandedStates[doc.expandedStates.length - 1]; diff --git a/tests/member/conditional.js b/tests/member/conditional.js new file mode 100644 index 00000000..916a775f --- /dev/null +++ b/tests/member/conditional.js @@ -0,0 +1,4 @@ +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(this.defaultUser)) +.prop; diff --git a/tests/method-chain/__snapshots__/jsfmt.spec.js.snap b/tests/method-chain/__snapshots__/jsfmt.spec.js.snap index a60288c2..6fcd1c33 100644 --- a/tests/method-chain/__snapshots__/jsfmt.spec.js.snap +++ b/tests/method-chain/__snapshots__/jsfmt.spec.js.snap @@ -417,23 +417,63 @@ exports[`computed-merge.js 1`] = ` `; exports[`conditional.js 1`] = ` +(a ? b : c).d(); + +(a ? b : c).d().e(); + +(a ? b : c).d().e().f(); + (valid ? helper.responseBody(this.currentUser) - : helper.response(401)) -.map(res => res.json()); + : helper.responseBody(this.defaultUser)) +.map(); + +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(this.defaultUser)) +.map().filter(); (valid ? helper.responseBody(this.currentUser) : helper.responseBody(defaultUser)) -.map(res => res.json()); +.map(); + +object[valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(defaultUser)] +.map(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -(valid ? helper.responseBody(this.currentUser) : helper.response(401)) - .map(res => res.json()); +(a ? b : c).d(); + +(a ? b : c).d().e(); + +(a ? b : c) + .d() + .e() + .f(); (valid ? helper.responseBody(this.currentUser) - : helper.responseBody(defaultUser)) - .map(res => res.json()); + : helper.responseBody(this.defaultUser) +).map(); + +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(this.defaultUser) +) + .map() + .filter(); + +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(defaultUser) +).map(); + +object[ + valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(defaultUser) +].map(); `; diff --git a/tests/method-chain/conditional.js b/tests/method-chain/conditional.js index 5d3299d8..d7e61dee 100644 --- a/tests/method-chain/conditional.js +++ b/tests/method-chain/conditional.js @@ -1,9 +1,25 @@ +(a ? b : c).d(); + +(a ? b : c).d().e(); + +(a ? b : c).d().e().f(); + (valid ? helper.responseBody(this.currentUser) - : helper.response(401)) -.map(res => res.json()); + : helper.responseBody(this.defaultUser)) +.map(); + +(valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(this.defaultUser)) +.map().filter(); (valid ? helper.responseBody(this.currentUser) : helper.responseBody(defaultUser)) -.map(res => res.json()); +.map(); + +object[valid + ? helper.responseBody(this.currentUser) + : helper.responseBody(defaultUser)] +.map();