diff --git a/crates/rome_js_formatter/src/jsx/lists/child_list.rs b/crates/rome_js_formatter/src/jsx/lists/child_list.rs index ff42a88eeeb..9987c4b389f 100644 --- a/crates/rome_js_formatter/src/jsx/lists/child_list.rs +++ b/crates/rome_js_formatter/src/jsx/lists/child_list.rs @@ -43,6 +43,7 @@ impl FormatRule for FormatJsxChildList { } } +#[derive(Debug)] pub(crate) enum FormatChildrenResult { ForceMultiline(FormatMultilineChildren), BestFitting { @@ -339,11 +340,13 @@ impl FormatJsxChildList { match child { JsxElement(_) | JsxFragment(_) | JsxSelfClosingElement(_) => meta.any_tag = true, - JsxExpressionChild(expression) - if !is_whitespace_jsx_expression(&expression, comments) => - { - meta.multiple_expressions = has_expression; - has_expression = true; + JsxExpressionChild(expression) => { + if is_whitespace_jsx_expression(&expression, comments) { + meta.meaningful_text = true; + } else { + meta.multiple_expressions = has_expression; + has_expression = true; + } } JsxText(text) => { meta.meaningful_text = meta.meaningful_text @@ -565,6 +568,7 @@ impl MultilineBuilder { } } +#[derive(Debug)] pub(crate) struct FormatMultilineChildren { layout: MultilineLayout, elements: RefCell>, @@ -640,6 +644,7 @@ impl FlatBuilder { } } +#[derive(Debug)] pub(crate) struct FormatFlatChildren { elements: RefCell>, } diff --git a/crates/rome_js_formatter/src/lib.rs b/crates/rome_js_formatter/src/lib.rs index cd71934dbc9..9226cc9d03e 100644 --- a/crates/rome_js_formatter/src/lib.rs +++ b/crates/rome_js_formatter/src/lib.rs @@ -787,11 +787,16 @@ function() { // use this test check if your snippet prints as you wish, without using a snapshot fn quick_test() { let src = r#" -describe.each`a | b | expected -${11111111111} | ${a().b(x => x).c().d()} | ${2} -${1} | ${2} | ${3} -${2} | ${1} | ${3}` - +// different output than prettier +function Component4() { + + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)}{' '} +
+
+ ); +} "#; let syntax = SourceType::tsx(); diff --git a/crates/rome_js_formatter/tests/specs/jsx/element.jsx b/crates/rome_js_formatter/tests/specs/jsx/element.jsx index fe78b8cac8d..a10a12fb372 100644 --- a/crates/rome_js_formatter/tests/specs/jsx/element.jsx +++ b/crates/rome_js_formatter/tests/specs/jsx/element.jsx @@ -299,3 +299,32 @@ let a = ( /> ); + +function Component() { + return ( +
+ {fn(data)}{' '} + +
+ ); +} + +// jsx whitespace {' '} adds meaningful jsx text +function Component() { + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)}{' '} + +
+ ); +} + +// not jsx whitespace doesn't add meaningful jsx text +function Component() { + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)}{' '} + +
+ ); +} diff --git a/crates/rome_js_formatter/tests/specs/jsx/element.jsx.snap b/crates/rome_js_formatter/tests/specs/jsx/element.jsx.snap index 527d233612e..01f2836960a 100644 --- a/crates/rome_js_formatter/tests/specs/jsx/element.jsx.snap +++ b/crates/rome_js_formatter/tests/specs/jsx/element.jsx.snap @@ -308,6 +308,35 @@ let a = ( ); +function Component() { + return ( +
+ {fn(data)}{' '} + +
+ ); +} + +// jsx whitespace {' '} adds meaningful jsx text +function Component() { + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)}{' '} + +
+ ); +} + +// not jsx whitespace doesn't add meaningful jsx text +function Component() { + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)}{' '} + +
+ ); +} + ``` @@ -695,6 +724,35 @@ let a = ( ); +function Component() { + return ( +
+ {fn(data)} +
+ ); +} + +// jsx whitespace {' '} adds meaningful jsx text +function Component() { + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)}{" "} + +
+ ); +} + +// not jsx whitespace doesn't add meaningful jsx text +function Component() { + return ( +
+ {fn(datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata)} + {" "} + +
+ ); +} + ## Lines exceeding width of 80 characters