Skip to content

Commit 84efd4d

Browse files
committed
fix: maintain text formatting of "pre" elements in jsx
Closes #398
1 parent d17755d commit 84efd4d

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/generation/generate.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3365,6 +3365,15 @@ fn is_jsx_paren_expr_handled_node(node: &Node, context: &Context) -> bool {
33653365

33663366
fn gen_jsx_element<'a>(node: &'a JSXElement, context: &mut Context<'a>) -> PrintItems {
33673367
let items = if let Some(closing) = node.closing {
3368+
// pre element bodies should be formatted as-is
3369+
if node.opening.name.text_fast(context.program) == "pre" {
3370+
let mut items = gen_node(node.opening.into(), context);
3371+
let in_between_range = SourceRange::new(node.opening.end(), closing.start());
3372+
items.extend(ir_helpers::gen_from_raw_string_trim_line_ends(in_between_range.text_fast(context.program)));
3373+
items.extend(gen_node(closing.into(), context));
3374+
return items;
3375+
}
3376+
33683377
let result = gen_jsx_with_opening_and_closing(
33693378
GenJsxWithOpeningAndClosingOptions {
33703379
opening_element: node.opening.into(),

tests/specs/jsx/JsxText/JsxText_All.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,31 @@ const t = <>
4242
Here is some text that will exceed the line
4343
width, but will be wrapped because of it.
4444
</>;
45+
46+
== should maintain text for pre element ==
47+
const t = <pre>
48+
&lt;p&gt;
49+
&lt;span&gt;This is some text.&lt;/span&gt;
50+
&lt;/p&gt;
51+
</pre>;
52+
53+
[expect]
54+
const t = <pre>
55+
&lt;p&gt;
56+
&lt;span&gt;This is some text.&lt;/span&gt;
57+
&lt;/p&gt;
58+
</pre>;
59+
60+
== should maintain pre element text when has nested element as well ==
61+
const t = <pre>
62+
<code className="language-html">
63+
&lt;p&gt; &lt;span&gt;This is some text.&lt;/span&gt; &lt;/p&gt;
64+
</code>
65+
</pre>;
66+
67+
[expect]
68+
const t = <pre>
69+
<code className="language-html">
70+
&lt;p&gt; &lt;span&gt;This is some text.&lt;/span&gt; &lt;/p&gt;
71+
</code>
72+
</pre>;

0 commit comments

Comments
 (0)