From b6e4db1f2f2274aed8c1d0eef0e4ecea8402ceb9 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Mon, 16 Jan 2023 16:36:50 -0800 Subject: [PATCH] fix: immediate exprs --- packages/autofmt/src/expr.rs | 7 ++----- packages/autofmt/src/lib.rs | 8 ++++++-- packages/autofmt/tests/samples.rs | 3 ++- packages/autofmt/tests/samples/immediate_expr.rsx | 4 ++++ 4 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 packages/autofmt/tests/samples/immediate_expr.rsx diff --git a/packages/autofmt/src/expr.rs b/packages/autofmt/src/expr.rs index 9e09cdeb5..3ff133e7f 100644 --- a/packages/autofmt/src/expr.rs +++ b/packages/autofmt/src/expr.rs @@ -16,11 +16,8 @@ impl Writer<'_> { // if the expr is on one line, just write it directly if start.line == end.line { - write!( - self.out, - "{}", - &self.src[start.line - 1][start.column - 1..end.column].trim() - )?; + let row = &self.src[start.line - 1][start.column..end.column].trim(); + write!(self.out, "{}", row)?; return Ok(()); } diff --git a/packages/autofmt/src/lib.rs b/packages/autofmt/src/lib.rs index 18a43c1b2..5b98fb1b6 100644 --- a/packages/autofmt/src/lib.rs +++ b/packages/autofmt/src/lib.rs @@ -1,6 +1,6 @@ use crate::writer::*; use collect_macros::byte_offset; -use dioxus_rsx::CallBody; +use dioxus_rsx::{BodyNode, CallBody}; use proc_macro2::LineColumn; use syn::{ExprMacro, MacroDelimiter}; @@ -105,7 +105,11 @@ pub fn fmt_file(contents: &str) -> Vec { let start = byte_offset(contents, span.start()) + 1; let end = byte_offset(contents, span.end()) - 1; - if formatted.len() <= 80 && !formatted.contains('\n') { + // Rustfmt will remove the space between the macro and the opening paren if the macro is a single expression + let body_is_solo_expr = + body.roots.len() == 1 && matches!(body.roots[0], BodyNode::RawExpr(_)); + + if formatted.len() <= 80 && !formatted.contains('\n') && !body_is_solo_expr { formatted = format!(" {} ", formatted); } diff --git a/packages/autofmt/tests/samples.rs b/packages/autofmt/tests/samples.rs index 0c031c0d2..b3198f9a7 100644 --- a/packages/autofmt/tests/samples.rs +++ b/packages/autofmt/tests/samples.rs @@ -37,5 +37,6 @@ twoway![ long_exprs, ifchain_forloop, t2, - reallylong + reallylong, + immediate_expr ]; diff --git a/packages/autofmt/tests/samples/immediate_expr.rsx b/packages/autofmt/tests/samples/immediate_expr.rsx new file mode 100644 index 000000000..9e298499d --- /dev/null +++ b/packages/autofmt/tests/samples/immediate_expr.rsx @@ -0,0 +1,4 @@ +fn it_works() { + cx.render(rsx!(())) +} +