about summary refs log tree commit diff
diff options
context:
space:
mode:
authorjam1garner <8260240+jam1garner@users.noreply.github.com>2021-05-27 14:54:16 -0400
committerNiko Matsakis <niko@alum.mit.edu>2021-06-14 13:27:24 -0400
commit93c60f26bfe5a6ae07774fb9aa03f3cacd48bae4 (patch)
treef931c0c00a4e7c31e8df4769bc0998e21d33b381
parenteb5e0af3a990747174fb8ee84fbfe52e57f00ecf (diff)
downloadrust-93c60f26bfe5a6ae07774fb9aa03f3cacd48bae4.tar.gz
rust-93c60f26bfe5a6ae07774fb9aa03f3cacd48bae4.zip
Fix missing generic parameters from `future_prelude_collision` lint suggestion
-rw-r--r--compiler/rustc_typeck/src/check/method/mod.rs14
1 files changed, 13 insertions, 1 deletions
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::<Vec<_>>().join(", ")
+                                )
+                            };
 
                             let mut lint = lint.build(&format!(
                                 "trait-associated function `{}` will become ambiguous in Rust 2021",