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+180191impl Rewrite for ast::AssocItemConstraint {
181192fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
182193use 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(
933945fn is_generic_bounds_in_order(generic_bounds: &[ast::GenericBound]) -> bool {
934946let 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};
940950let is_lifetime = |b: &ast::GenericBound| !is_trait(b);
941951let last_trait_index = generic_bounds.iter().rposition(is_trait);
@@ -969,9 +979,8 @@ fn join_bounds_inner(
969979let generic_bounds_in_order = is_generic_bounds_in_order(items);
970980let 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