Merge pull request #779 from DioxusLabs/jk/dioxus-fmt

fix: immediate exprs in autofmt
This commit is contained in:
Jon Kelley 2023-01-16 16:56:01 -08:00 committed by GitHub
commit ab967bb3d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 8 deletions

View file

@ -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(());
}

View file

@ -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<FormattedBlock> {
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);
}

View file

@ -37,5 +37,6 @@ twoway![
long_exprs,
ifchain_forloop,
t2,
reallylong
reallylong,
immediate_expr
];

View file

@ -0,0 +1,4 @@
fn it_works() {
cx.render(rsx!(()))
}