diff --git a/crates/oxc_formatter/src/utils/member_chain/mod.rs b/crates/oxc_formatter/src/utils/member_chain/mod.rs index c6133a0d784d1..792eb8ed1606a 100644 --- a/crates/oxc_formatter/src/utils/member_chain/mod.rs +++ b/crates/oxc_formatter/src/utils/member_chain/mod.rs @@ -235,6 +235,13 @@ impl<'a> Format<'a> for MemberChain<'a, '_> { if has_comment || has_new_line_or_comment_between || self.groups_should_break(f) { write!(f, [group(&format_expanded)]) } else { + let has_empty_line_before_tail = + self.tail.first().is_some_and(MemberChainGroup::needs_empty_line); + + if has_empty_line_before_tail || self.last_group().will_break(f) { + write!(f, [expand_parent()])?; + } + write!(f, [best_fitting!(format_one_line, format_expanded)]) } }); diff --git a/crates/oxc_formatter/tests/fixtures/js/member-chains/conditional.js b/crates/oxc_formatter/tests/fixtures/js/member-chains/conditional.js new file mode 100644 index 0000000000000..69d8fcdb2413b --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/js/member-chains/conditional.js @@ -0,0 +1,10 @@ +id === null + ? null + : internal.getSuspenseCache(client).getFragmentRef( + [id, options.fragment, cache.canonicalStringify(variables)], + client, + tslib.__assign(tslib.__assign({}, options), { + variables: variables, + from: id, + }), + ); diff --git a/crates/oxc_formatter/tests/fixtures/js/member-chains/conditional.js.snap b/crates/oxc_formatter/tests/fixtures/js/member-chains/conditional.js.snap new file mode 100644 index 0000000000000..f67b04355c74f --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/js/member-chains/conditional.js.snap @@ -0,0 +1,28 @@ +--- +source: crates/oxc_formatter/tests/fixtures/mod.rs +--- +==================== Input ==================== +id === null + ? null + : internal.getSuspenseCache(client).getFragmentRef( + [id, options.fragment, cache.canonicalStringify(variables)], + client, + tslib.__assign(tslib.__assign({}, options), { + variables: variables, + from: id, + }), + ); + +==================== Output ==================== +id === null + ? null + : internal.getSuspenseCache(client).getFragmentRef( + [id, options.fragment, cache.canonicalStringify(variables)], + client, + tslib.__assign(tslib.__assign({}, options), { + variables: variables, + from: id, + }), + ); + +===================== End =====================