use string::{rewrite_string, StringFormat};
use types::{can_be_overflowed_type, rewrite_path, PathContext};
use utils::{
- colon_spaces, contains_skip, count_newlines, first_line_width, inner_attributes,
- last_line_extendable, last_line_width, mk_sp, outer_attributes, ptr_vec_to_ref_vec,
- semicolon_for_stmt, wrap_str,
+ colon_spaces, contains_skip, count_newlines, first_line_ends_with, first_line_width,
+ inner_attributes, last_line_extendable, last_line_width, mk_sp, outer_attributes,
+ ptr_vec_to_ref_vec, semicolon_for_stmt, wrap_str,
};
use vertical::rewrite_with_alignment;
use visitor::FmtVisitor;
}
// FIXME(#2743)
ast::ExprKind::ObsoleteInPlace(..) => unimplemented!(),
- // FIXME(topecongiro) Format async block.
- ast::ExprKind::Async(..) => None,
+ ast::ExprKind::Async(capture_by, _node_id, ref block) => {
+ let mover = if capture_by == ast::CaptureBy::Value {
+ "move "
+ } else {
+ ""
+ };
+ if let rw @ Some(_) = rewrite_single_line_block(
+ context,
+ format!("{}{}", "async ", mover).as_str(),
+ block,
+ Some(&expr.attrs),
+ None,
+ shape,
+ ) {
+ rw
+ } else {
+ // 6 = `async `
+ let budget = shape.width.saturating_sub(6);
+ Some(format!(
+ "{}{}{}",
+ "async ",
+ mover,
+ rewrite_block(
+ block,
+ Some(&expr.attrs),
+ None,
+ context,
+ Shape::legacy(budget, shape.indent)
+ )?
+ ))
+ }
+ }
};
expr_rw
shape.width,
)
};
- let fmt = ListFormatting {
- tactic,
- separator: " |",
- trailing_separator: SeparatorTactic::Never,
- separator_place: context.config.binop_separator(),
- shape,
- ends_with_newline: false,
- preserve_newline: false,
- nested: false,
- config: context.config,
- };
+ let fmt = ListFormatting::new(shape, context.config)
+ .tactic(tactic)
+ .separator(" |")
+ .separator_place(context.config.binop_separator())
+ .ends_with_newline(false);
write_list(&items, &fmt)
}
new_indent.to_string(context.config),
line.trim_left()
)
- })
- .collect::<Vec<_>>()
+ }).collect::<Vec<_>>()
.join("\n")
.trim_left(),
);
if !attrs_str.is_empty() {
attrs_str.push_str(&shape.indent.to_string_with_newline(context.config));
};
- let name = &field.ident.name.to_string();
+ let name = context.snippet(field.ident.span);
if field.is_shorthand {
Some(attrs_str + &name)
} else {
Separator::Comma,
nested_shape.width,
);
- let fmt = ListFormatting {
- tactic,
- separator: ",",
- trailing_separator: SeparatorTactic::Never,
- separator_place: SeparatorPlace::Back,
- shape,
- ends_with_newline: false,
- preserve_newline: false,
- nested: false,
- config: context.config,
- };
+ let fmt = ListFormatting::new(shape, context.config)
+ .tactic(tactic)
+ .ends_with_newline(false);
let list_str = write_list(&item_vec, &fmt)?;
Some(format!("({})", list_str))
rhs_tactics == RhsTactics::ForceNextLineWithoutIndent
|| !next_line_rhs.contains('\n')
|| count_newlines(orig_rhs) > count_newlines(next_line_rhs) + 1
+ || first_line_ends_with(orig_rhs, '(') && !first_line_ends_with(next_line_rhs, '(')
+ || first_line_ends_with(orig_rhs, '{') && !first_line_ends_with(next_line_rhs, '{')
+ || first_line_ends_with(orig_rhs, '[') && !first_line_ends_with(next_line_rhs, '[')
}
fn rewrite_expr_addrof(