From 9a5b447c7f68b21f5bfb5ef2ac455b54a3b64b25 Mon Sep 17 00:00:00 2001 From: James Long Date: Wed, 12 Apr 2017 12:26:27 -0400 Subject: [PATCH] Propagate hard breaks within member expressions (fixes #1117) (#1193) --- src/printer.js | 8 +++- tests/member/__snapshots__/jsfmt.spec.js.snap | 44 ++++++++++++++++++- tests/member/expand.js | 20 ++++++++- 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/src/printer.js b/src/printer.js index e9e056a78..1f65cf374 100644 --- a/src/printer.js +++ b/src/printer.js @@ -2827,7 +2827,13 @@ function printMemberChain(path, options, print) { return group(expanded); } - return conditionalGroup([oneLine, expanded]); + return concat([ + // We only need to check `oneLine` because if `expanded` is chosen + // that means that the parent group has already been broken + // naturally + willBreak(oneLine) ? breakParent : "", + conditionalGroup([oneLine, expanded]) + ]) } function isEmptyJSXElement(node) { diff --git a/tests/member/__snapshots__/jsfmt.spec.js.snap b/tests/member/__snapshots__/jsfmt.spec.js.snap index b02f6477c..1191d9b3d 100644 --- a/tests/member/__snapshots__/jsfmt.spec.js.snap +++ b/tests/member/__snapshots__/jsfmt.spec.js.snap @@ -2,9 +2,51 @@ exports[`expand.js 1`] = ` "const veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1]; -const small = doc.expandedStates[doc.expandedStates.length - 1];~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +const small = doc.expandedStates[doc.expandedStates.length - 1]; + +const promises = [ + promise.resolve().then(console.log).catch(err => { + console.log(err) + return null + }), + redis.fetch(), + other.fetch(), +]; + +const promises = [ + promise.resolve().veryLongFunctionCall().veryLongFunctionCall().then(console.log).catch(err => { + console.log(err) + return null + }), + redis.fetch(), + other.fetch(), +]; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1]; const small = doc.expandedStates[doc.expandedStates.length - 1]; + +const promises = [ + promise.resolve().then(console.log).catch(err => { + console.log(err); + return null; + }), + redis.fetch(), + other.fetch() +]; + +const promises = [ + promise + .resolve() + .veryLongFunctionCall() + .veryLongFunctionCall() + .then(console.log) + .catch(err => { + console.log(err); + return null; + }), + redis.fetch(), + other.fetch() +]; " `; diff --git a/tests/member/expand.js b/tests/member/expand.js index 16b399d47..cc662fb38 100644 --- a/tests/member/expand.js +++ b/tests/member/expand.js @@ -1,2 +1,20 @@ const veryVeryVeryVeryVeryVeryVeryLong = doc.expandedStates[doc.expandedStates.length - 1]; -const small = doc.expandedStates[doc.expandedStates.length - 1]; \ No newline at end of file +const small = doc.expandedStates[doc.expandedStates.length - 1]; + +const promises = [ + promise.resolve().then(console.log).catch(err => { + console.log(err) + return null + }), + redis.fetch(), + other.fetch(), +]; + +const promises = [ + promise.resolve().veryLongFunctionCall().veryLongFunctionCall().then(console.log).catch(err => { + console.log(err) + return null + }), + redis.fetch(), + other.fetch(), +];