fix collapsing of multiline components and rsx!{} calls (#2849)
This commit is contained in:
1 parent
40dc14389e
commit
c21b44a4e6
5 files changed
+48
-13
No files matched your search
@@ -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} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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! {}
|
||||||
Reference in new issue
Block a user