Format Async block and async fn

This commit is contained in:
Ben Brittain 2018-07-29 07:37:24 -07:00
parent 69ad879d52
commit 0b25f602fd
4 changed files with 34 additions and 3 deletions

View file

@ -345,8 +345,27 @@ pub fn format_expr(
}
// FIXME(#2743)
ast::ExprKind::ObsoleteInPlace(..) => unimplemented!(),
// FIXME(topecongiro) Format async block.
ast::ExprKind::Async(..) => None,
ast::ExprKind::Async(_capture_by, _node_id, ref block) => {
if let rw @ Some(_) =
rewrite_single_line_block(context, "async ", block, Some(&expr.attrs), None, shape)
{
rw
} else {
// 6 = `async `
let budget = shape.width.saturating_sub(6);
Some(format!(
"{}{}",
"async ",
rewrite_block(
block,
Some(&expr.attrs),
None,
context,
Shape::legacy(budget, shape.indent)
)?
))
}
}
};
expr_rw

View file

@ -164,6 +164,7 @@ pub struct FnSig<'a> {
decl: &'a ast::FnDecl,
generics: &'a ast::Generics,
abi: abi::Abi,
asyncness: ast::IsAsync,
constness: ast::Constness,
defaultness: ast::Defaultness,
unsafety: ast::Unsafety,
@ -180,6 +181,7 @@ impl<'a> FnSig<'a> {
decl,
generics,
abi: abi::Abi::Rust,
asyncness: ast::IsAsync::NotAsync,
constness: ast::Constness::NotConst,
defaultness: ast::Defaultness::Final,
unsafety: ast::Unsafety::Normal,
@ -193,6 +195,7 @@ impl<'a> FnSig<'a> {
) -> FnSig<'a> {
FnSig {
unsafety: method_sig.header.unsafety,
asyncness: method_sig.header.asyncness,
constness: method_sig.header.constness.node,
defaultness: ast::Defaultness::Final,
abi: method_sig.header.abi,
@ -214,6 +217,7 @@ impl<'a> FnSig<'a> {
generics,
abi: fn_header.abi,
constness: fn_header.constness.node,
asyncness: fn_header.asyncness,
defaultness,
unsafety: fn_header.unsafety,
visibility: visibility.clone(),
@ -235,6 +239,7 @@ impl<'a> FnSig<'a> {
// Vis defaultness constness unsafety abi.
result.push_str(&*format_visibility(context, &self.visibility));
result.push_str(format_defaultness(self.defaultness));
result.push_str(format_asyncness(self.asyncness));
result.push_str(format_constness(self.constness));
result.push_str(format_unsafety(self.unsafety));
result.push_str(&format_abi(

View file

@ -81,6 +81,14 @@ pub fn format_visibility(context: &RewriteContext, vis: &Visibility) -> Cow<'sta
}
}
#[inline]
pub fn format_asyncness(asyncness: ast::IsAsync) -> &'static str {
match asyncness {
ast::IsAsync::Async { .. } => "async ",
ast::IsAsync::NotAsync => "",
}
}
#[inline]
pub fn format_constness(constness: ast::Constness) -> &'static str {
match constness {

View file

@ -253,7 +253,6 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
// Note that this only gets called for function definitions. Required methods
// on traits do not get handled here.
// FIXME(topecongiro) Format async fn (#2812).
fn visit_fn(
&mut self,
fk: visit::FnKind,