Skip to content

Commit a4f6d3e

Browse files
committed
Fix lifetime generics in <T as Trait<..>>::try_from suggestion.
1 parent 13edc17 commit a4f6d3e

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

compiler/rustc_typeck/src/check/method/prelude2021.rs

+17-10
Original file line numberDiff line numberDiff line change
@@ -239,16 +239,23 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
239239
let trait_path = self.trait_path_or_bare_name(span, expr_id, pick.item.container.id());
240240
let trait_generics = self.tcx.generics_of(pick.item.container.id());
241241

242-
let parameter_count = trait_generics.count() - (trait_generics.has_self as usize);
243-
let trait_name = if parameter_count == 0 {
244-
trait_path
245-
} else {
246-
format!(
247-
"{}<{}>",
248-
trait_path,
249-
std::iter::repeat("_").take(parameter_count).collect::<Vec<_>>().join(", ")
250-
)
251-
};
242+
let trait_name =
243+
if trait_generics.params.len() <= trait_generics.has_self as usize {
244+
trait_path
245+
} else {
246+
let counts = trait_generics.own_counts();
247+
format!(
248+
"{}<{}>",
249+
trait_path,
250+
std::iter::repeat("'_")
251+
.take(counts.lifetimes)
252+
.chain(std::iter::repeat("_").take(
253+
counts.types + counts.consts - trait_generics.has_self as usize
254+
))
255+
.collect::<Vec<_>>()
256+
.join(", ")
257+
)
258+
};
252259

253260
let mut lint = lint.build(&format!(
254261
"trait-associated function `{}` will become ambiguous in Rust 2021",

0 commit comments

Comments
 (0)