diff options
| author | jam1garner <8260240+jam1garner@users.noreply.github.com> | 2021-05-27 14:54:16 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2021-06-14 13:27:24 -0400 |
| commit | 93c60f26bfe5a6ae07774fb9aa03f3cacd48bae4 (patch) | |
| tree | f931c0c00a4e7c31e8df4769bc0998e21d33b381 | |
| parent | eb5e0af3a990747174fb8ee84fbfe52e57f00ecf (diff) | |
| download | rust-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.rs | 14 |
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", |
