fix collapsing of multiline components and rsx!{} calls (#2849)

This commit is contained in:
Jonathan Kelley authored and GitHub committed 2024-08-15 17:03:58 -07:00
1 parent 40dc14389e
commit c21b44a4e6
5 files changed
+48 -13

No files matched your search

+6 -1
View File
@@ -118,7 +118,12 @@ pub fn try_fmt_file(
let body_is_solo_expr = body.body.roots.len() == 1 let body_is_solo_expr = body.body.roots.len() == 1
&& matches!(body.body.roots[0], BodyNode::RawExpr(_) | BodyNode::Text(_)); && matches!(body.body.roots[0], BodyNode::RawExpr(_) | BodyNode::Text(_));
if formatted.len() <= 80 && !formatted.contains('\n') && !body_is_solo_expr { // If it's short, and it's not a single expression, and it's not empty, then we can collapse it
if formatted.len() <= 80
&& !formatted.contains('\n')
&& !body_is_solo_expr
&& !formatted.trim().is_empty()
{
formatted = format!(" {formatted} "); formatted = format!(" {formatted} ");
} }
+3 -2
View File
@@ -85,11 +85,12 @@ pub fn unparse_expr(expr: &Expr, src: &str, cfg: &IndentOptions) -> String {
// now we can replace the macros with the formatted blocks // now we can replace the macros with the formatted blocks
for fmted in replacer.formatted_stack.drain(..) { for fmted in replacer.formatted_stack.drain(..) {
let is_multiline = fmted.contains('{'); let is_multiline = fmted.contains('{');
let is_empty = fmted.trim().is_empty();
let mut out_fmt = String::from("rsx! {"); let mut out_fmt = String::from("rsx! {");
if is_multiline { if is_multiline {
out_fmt.push('\n'); out_fmt.push('\n');
} else { } else if !is_empty {
out_fmt.push(' '); out_fmt.push(' ');
} }
@@ -122,7 +123,7 @@ pub fn unparse_expr(expr: &Expr, src: &str, cfg: &IndentOptions) -> String {
if is_multiline { if is_multiline {
out_fmt.push('\n'); out_fmt.push('\n');
out_fmt.push_str(&cfg.indent_str().repeat(whitespace)); out_fmt.push_str(&cfg.indent_str().repeat(whitespace));
} else { } else if !is_empty {
out_fmt.push(' '); out_fmt.push(' ');
} }
+14 -7
View File
@@ -836,13 +836,20 @@ impl<'a> Writer<'a> {
} }
// TODO: let rawexprs to be inlined // TODO: let rawexprs to be inlined
[BodyNode::Component(ref comp)] if comp.fields.is_empty() => Some( [BodyNode::Component(ref comp)]
comp.name // basically if the component is completely empty, we can inline it
.segments if comp.fields.is_empty()
.iter() && comp.children.is_empty()
.map(|s| s.ident.to_string().len() + 2) && comp.spreads.is_empty() =>
.sum::<usize>(), {
), Some(
comp.name
.segments
.iter()
.map(|s| s.ident.to_string().len() + 2)
.sum::<usize>(),
)
}
// Feedback on discord indicates folks don't like combining multiple children on the same line // Feedback on discord indicates folks don't like combining multiple children on the same line
// We used to do a lot of math to figure out if we should expand out the line, but folks just // We used to do a lot of math to figure out if we should expand out the line, but folks just
+4 -3
View File
@@ -6,8 +6,8 @@ macro_rules! twoway {
// doc attrs // doc attrs
$( #[doc = $doc:expr] )* $( #[doc = $doc:expr] )*
$name:ident $name:ident,
),* )*
) => { ) => {
$( $(
$( #[doc = $doc] )* $( #[doc = $doc] )*
@@ -59,5 +59,6 @@ twoway![
trailing_expr, trailing_expr,
oneline, oneline,
prop_rsx, prop_rsx,
asset asset,
collapse,
]; ];
@@ -0,0 +1,21 @@
// nesting pushes out
rsx! {
Fragment {
Fragment {
Fragment {
Fragment {
Fragment {
div { "Finally have a real node!" }
}
}
}
}
}
}
// we don't make extra spaces
rsx! {
Component { blah: rsx! {} }
}
rsx! {}