From 93c60f26bfe5a6ae07774fb9aa03f3cacd48bae4 Mon Sep 17 00:00:00 2001 From: jam1garner <8260240+jam1garner@users.noreply.github.com> Date: Thu, 27 May 2021 14:54:16 -0400 Subject: [PATCH] Fix missing generic parameters from `future_prelude_collision` lint suggestion --- compiler/rustc_typeck/src/check/method/mod.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_typeck/src/check/method/mod.rs b/compiler/rustc_typeck/src/check/method/mod.rs index c04979ed75c..9497f939b3d 100644 --- a/compiler/rustc_typeck/src/check/method/mod.rs +++ b/compiler/rustc_typeck/src/check/method/mod.rs @@ -544,7 +544,19 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if let probe::PickKind::TraitPick = pick.kind { if !matches!(tcx.crate_name(pick.item.def_id.krate), sym::std | sym::core) { tcx.struct_span_lint_hir(FUTURE_PRELUDE_COLLISION, expr_id, span, |lint| { - let trait_name = tcx.def_path_str(pick.item.container.assert_trait()); + let trait_def_id = pick.item.container.assert_trait(); + let trait_generics = tcx.generics_of(trait_def_id); + let parameter_count = trait_generics.count() - (trait_generics.has_self as usize); + + let trait_name = if parameter_count == 0 { + tcx.def_path_str(trait_def_id) + } else { + format!( + "{}<{}>", + tcx.def_path_str(trait_def_id), + std::iter::repeat("_").take(parameter_count).collect::>().join(", ") + ) + }; let mut lint = lint.build(&format!( "trait-associated function `{}` will become ambiguous in Rust 2021",