Implement use<> formatting in rustfmt · rust-lang/rust@a426d6f

@@ -177,6 +177,17 @@ impl<'a> Rewrite for SegmentParam<'a> {

177177

}

178178

}

179179180+

impl Rewrite for ast::PreciseCapturingArg {

181+

fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {

182+

match self {

183+

ast::PreciseCapturingArg::Lifetime(lt) => lt.rewrite(context, shape),

184+

ast::PreciseCapturingArg::Arg(p, _) => {

185+

rewrite_path(context, PathContext::Type, &None, p, shape)

186+

}

187+

}

188+

}

189+

}

190+180191

impl Rewrite for ast::AssocItemConstraint {

181192

fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {

182193

use ast::AssocItemConstraintKind::{Bound, Equality};

@@ -564,9 +575,10 @@ impl Rewrite for ast::GenericBound {

564575

.map(|s| format!("{constness}{asyncness}{polarity}{s}"))

565576

.map(|s| if has_paren { format!("({})", s) } else { s })

566577

}

578+

ast::GenericBound::Use(ref args, span) => {

579+

overflow::rewrite_with_angle_brackets(context, "use", args.iter(), shape, span)

580+

}

567581

ast::GenericBound::Outlives(ref lifetime) => lifetime.rewrite(context, shape),

568-

// FIXME(precise_capturing): Should implement formatting before stabilization.

569-

ast::GenericBound::Use(..) => None,

570582

}

571583

}

572584

}

@@ -933,9 +945,7 @@ fn rewrite_bare_fn(

933945

fn is_generic_bounds_in_order(generic_bounds: &[ast::GenericBound]) -> bool {

934946

let is_trait = |b: &ast::GenericBound| match b {

935947

ast::GenericBound::Outlives(..) => false,

936-

ast::GenericBound::Trait(..) => true,

937-

// FIXME(precise_capturing): This ordering fn should be reworked.

938-

ast::GenericBound::Use(..) => false,

948+

ast::GenericBound::Trait(..) | ast::GenericBound::Use(..) => true,

939949

};

940950

let is_lifetime = |b: &ast::GenericBound| !is_trait(b);

941951

let last_trait_index = generic_bounds.iter().rposition(is_trait);

@@ -969,9 +979,8 @@ fn join_bounds_inner(

969979

let generic_bounds_in_order = is_generic_bounds_in_order(items);

970980

let is_bound_extendable = |s: &str, b: &ast::GenericBound| match b {

971981

ast::GenericBound::Outlives(..) => true,

972-

ast::GenericBound::Trait(..) => last_line_extendable(s),

973-

// FIXME(precise_capturing): This ordering fn should be reworked.

974-

ast::GenericBound::Use(..) => true,

982+

// We treat `use<>` like a trait bound here.

983+

ast::GenericBound::Trait(..) | ast::GenericBound::Use(..) => last_line_extendable(s),

975984

};

976985977986

// Whether a GenericBound item is a PathSegment segment that includes internal array

@@ -993,6 +1002,7 @@ fn join_bounds_inner(

9931002

}

9941003

}

9951004

}

1005+

ast::GenericBound::Use(args, _) => args.len() > 1,

9961006

_ => false,

9971007

};

9981008