Inline WhereClause into Generics.
This commit is contained in:
parent
71b4e2d852
commit
05b29f9a92
24 changed files with 98 additions and 139 deletions
|
@ -2419,7 +2419,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||
};
|
||||
let sized_trait = self.tcx.lang_items().sized_trait();
|
||||
debug!("maybe_suggest_unsized_generics: generics.params={:?}", generics.params);
|
||||
debug!("maybe_suggest_unsized_generics: generics.where_clause={:?}", generics.where_clause);
|
||||
debug!("maybe_suggest_unsized_generics: generics.predicates={:?}", generics.predicates);
|
||||
let param = generics.params.iter().filter(|param| param.span == span).find(|param| {
|
||||
// Check that none of the explicit trait bounds is `Sized`. Assume that an explicit
|
||||
// `Sized` bound is there intentionally and we don't need to suggest relaxing it.
|
||||
|
@ -2432,7 +2432,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||
return;
|
||||
};
|
||||
let param_def_id = self.tcx.hir().local_def_id(param.hir_id).to_def_id();
|
||||
let preds = generics.where_clause.predicates.iter();
|
||||
let preds = generics.predicates.iter();
|
||||
let explicitly_sized = preds
|
||||
.filter_map(|pred| match pred {
|
||||
hir::WherePredicate::BoundPredicate(bp) => Some(bp),
|
||||
|
|
|
@ -319,12 +319,8 @@ pub trait InferCtxtExt<'tcx> {
|
|||
|
||||
fn predicate_constraint(generics: &hir::Generics<'_>, pred: String) -> (Span, String) {
|
||||
(
|
||||
generics.where_clause.tail_span_for_suggestion(),
|
||||
format!(
|
||||
"{} {}",
|
||||
if !generics.where_clause.predicates.is_empty() { "," } else { " where" },
|
||||
pred,
|
||||
),
|
||||
generics.tail_span_for_predicate_suggestion(),
|
||||
format!("{} {}", if !generics.predicates.is_empty() { "," } else { " where" }, pred,),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -346,7 +342,7 @@ fn suggest_restriction<'tcx>(
|
|||
// - ^^^^^^^^^ GenericBounds
|
||||
// |
|
||||
// &Ident
|
||||
let span = generics.where_clause.span_for_predicates_or_empty_place();
|
||||
let span = generics.span_for_predicates_or_empty_place();
|
||||
if span.from_expansion() || span.desugaring_kind().is_some() {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -221,7 +221,6 @@ fn get_sized_bounds(tcx: TyCtxt<'_>, trait_def_id: DefId) -> SmallVec<[Span; 1]>
|
|||
..
|
||||
}) => Some(
|
||||
generics
|
||||
.where_clause
|
||||
.predicates
|
||||
.iter()
|
||||
.filter_map(|pred| {
|
||||
|
@ -399,8 +398,8 @@ fn virtual_call_violation_for_method<'tcx>(
|
|||
// We'll attempt to provide a structured suggestion for `Self: Sized`.
|
||||
let sugg =
|
||||
tcx.hir().get_if_local(method.def_id).as_ref().and_then(|node| node.generics()).map(
|
||||
|generics| match generics.where_clause.predicates {
|
||||
[] => (" where Self: Sized", generics.where_clause.span),
|
||||
|generics| match generics.predicates {
|
||||
[] => (" where Self: Sized", generics.where_clause_span),
|
||||
[.., pred] => (", Self: Sized", pred.span().shrink_to_hi()),
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue