Skip to content

Commit 0b5e9f9

Browse files
committed
add UnsatisfiedPredicate type alias
1 parent 92d5196 commit 0b5e9f9

File tree

3 files changed

+17
-53
lines changed

3 files changed

+17
-53
lines changed

compiler/rustc_hir_typeck/src/method/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use tracing::{debug, instrument};
2626
pub(crate) use self::MethodError::*;
2727
use self::probe::{IsSuggestion, ProbeScope};
2828
use crate::FnCtxt;
29+
use crate::method::probe::UnsatisfiedPredicate;
2930

3031
#[derive(Clone, Copy, Debug)]
3132
pub(crate) struct MethodCallee<'tcx> {
@@ -71,8 +72,7 @@ pub(crate) enum MethodError<'tcx> {
7172
#[derive(Debug)]
7273
pub(crate) struct NoMatchData<'tcx> {
7374
pub static_candidates: Vec<CandidateSource>,
74-
pub unsatisfied_predicates:
75-
Vec<(ty::Predicate<'tcx>, Option<ty::Predicate<'tcx>>, Option<ObligationCause<'tcx>>)>,
75+
pub unsatisfied_predicates: Vec<UnsatisfiedPredicate<'tcx>>,
7676
pub out_of_scope_traits: Vec<DefId>,
7777
pub similar_candidate: Option<ty::AssocItem>,
7878
pub mode: probe::Mode,

compiler/rustc_hir_typeck/src/method/probe.rs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,12 @@ struct PickDiagHints<'a, 'tcx> {
165165

166166
/// Collects near misses when trait bounds for type parameters are unsatisfied and is only used
167167
/// for error reporting
168-
unsatisfied_predicates: &'a mut Vec<(
169-
ty::Predicate<'tcx>,
170-
Option<ty::Predicate<'tcx>>,
171-
Option<ObligationCause<'tcx>>,
172-
)>,
168+
unsatisfied_predicates: &'a mut Vec<UnsatisfiedPredicate<'tcx>>,
173169
}
174170

171+
pub(crate) type UnsatisfiedPredicate<'tcx> =
172+
(ty::Predicate<'tcx>, Option<ty::Predicate<'tcx>>, Option<ObligationCause<'tcx>>);
173+
175174
/// Criteria to apply when searching for a given Pick. This is used during
176175
/// the search for potentially shadowed methods to ensure we don't search
177176
/// more candidates than strictly necessary.
@@ -1212,11 +1211,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
12121211

12131212
fn pick_core(
12141213
&self,
1215-
unsatisfied_predicates: &mut Vec<(
1216-
ty::Predicate<'tcx>,
1217-
Option<ty::Predicate<'tcx>>,
1218-
Option<ObligationCause<'tcx>>,
1219-
)>,
1214+
unsatisfied_predicates: &mut Vec<UnsatisfiedPredicate<'tcx>>,
12201215
) -> Option<PickResult<'tcx>> {
12211216
// Pick stable methods only first, and consider unstable candidates if not found.
12221217
self.pick_all_method(&mut PickDiagHints {
@@ -1889,11 +1884,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
18891884
self_ty: Ty<'tcx>,
18901885
instantiate_self_ty_obligations: &[PredicateObligation<'tcx>],
18911886
probe: &Candidate<'tcx>,
1892-
possibly_unsatisfied_predicates: &mut Vec<(
1893-
ty::Predicate<'tcx>,
1894-
Option<ty::Predicate<'tcx>>,
1895-
Option<ObligationCause<'tcx>>,
1896-
)>,
1887+
possibly_unsatisfied_predicates: &mut Vec<UnsatisfiedPredicate<'tcx>>,
18971888
) -> ProbeResult {
18981889
self.probe(|snapshot| {
18991890
let outer_universe = self.universe();

compiler/rustc_hir_typeck/src/method/suggest.rs

Lines changed: 9 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@ use rustc_trait_selection::error_reporting::traits::on_unimplemented::OnUnimplem
3838
use rustc_trait_selection::infer::InferCtxtExt;
3939
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
4040
use rustc_trait_selection::traits::{
41-
FulfillmentError, Obligation, ObligationCause, ObligationCauseCode, supertraits,
41+
FulfillmentError, Obligation, ObligationCauseCode, supertraits,
4242
};
4343
use tracing::{debug, info, instrument};
4444

4545
use super::probe::{AutorefOrPtrAdjustment, IsSuggestion, Mode, ProbeScope};
4646
use super::{CandidateSource, MethodError, NoMatchData};
4747
use crate::errors::{self, CandidateTraitNote, NoAssociatedItem};
48+
use crate::method::probe::UnsatisfiedPredicate;
4849
use crate::{Expectation, FnCtxt};
4950

5051
impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
@@ -58,11 +59,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
5859
&self,
5960
ty: Ty<'tcx>,
6061
span: Span,
61-
unsatisfied_predicates: &Vec<(
62-
ty::Predicate<'tcx>,
63-
Option<ty::Predicate<'tcx>>,
64-
Option<ObligationCause<'tcx>>,
65-
)>,
62+
unsatisfied_predicates: &Vec<UnsatisfiedPredicate<'tcx>>,
6663
) -> bool {
6764
fn predicate_bounds_generic_param<'tcx>(
6865
predicate: ty::Predicate<'_>,
@@ -410,11 +407,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
410407
source: SelfSource<'tcx>,
411408
is_method: bool,
412409
sugg_span: Span,
413-
unsatisfied_predicates: &Vec<(
414-
ty::Predicate<'tcx>,
415-
Option<ty::Predicate<'tcx>>,
416-
Option<ObligationCause<'tcx>>,
417-
)>,
410+
unsatisfied_predicates: &Vec<UnsatisfiedPredicate<'tcx>>,
418411
) -> Diag<'_> {
419412
// Don't show expanded generic arguments when the method can't be found in any
420413
// implementation (#81576).
@@ -1096,11 +1089,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
10961089
mode: Mode,
10971090
source: SelfSource<'tcx>,
10981091
span: Span,
1099-
unsatisfied_predicates: &Vec<(
1100-
ty::Predicate<'tcx>,
1101-
Option<ty::Predicate<'tcx>>,
1102-
Option<ObligationCause<'tcx>>,
1103-
)>,
1092+
unsatisfied_predicates: &Vec<UnsatisfiedPredicate<'tcx>>,
11041093
find_candidate_for_method: &mut bool,
11051094
) {
11061095
let ty_str = self.tcx.short_string(rcvr_ty, err.long_ty_path());
@@ -1198,11 +1187,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
11981187
item_ident: Ident,
11991188
span: Span,
12001189
source: SelfSource<'tcx>,
1201-
unsatisfied_predicates: &Vec<(
1202-
ty::Predicate<'tcx>,
1203-
Option<ty::Predicate<'tcx>>,
1204-
Option<ObligationCause<'tcx>>,
1205-
)>,
1190+
unsatisfied_predicates: &Vec<UnsatisfiedPredicate<'tcx>>,
12061191
) {
12071192
// Don't emit a suggestion if we found an actual method that had unsatisfied trait bounds
12081193
if !unsatisfied_predicates.is_empty() || !rcvr_ty.is_enum() {
@@ -1338,11 +1323,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
13381323
item_ident: Ident,
13391324
item_kind: &str,
13401325
span: Span,
1341-
unsatisfied_predicates: &Vec<(
1342-
ty::Predicate<'tcx>,
1343-
Option<ty::Predicate<'tcx>>,
1344-
Option<ObligationCause<'tcx>>,
1345-
)>,
1326+
unsatisfied_predicates: &Vec<UnsatisfiedPredicate<'tcx>>,
13461327
restrict_type_params: &mut bool,
13471328
suggested_derive: &mut bool,
13481329
unsatisfied_bounds: &mut bool,
@@ -3122,11 +3103,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
31223103
fn note_predicate_source_and_get_derives(
31233104
&self,
31243105
err: &mut Diag<'_>,
3125-
unsatisfied_predicates: &[(
3126-
ty::Predicate<'tcx>,
3127-
Option<ty::Predicate<'tcx>>,
3128-
Option<ObligationCause<'tcx>>,
3129-
)],
3106+
unsatisfied_predicates: &[UnsatisfiedPredicate<'tcx>],
31303107
) -> Vec<(String, Span, Symbol)> {
31313108
let mut derives = Vec::<(String, Span, Symbol)>::new();
31323109
let mut traits = Vec::new();
@@ -3204,11 +3181,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
32043181
pub(crate) fn suggest_derive(
32053182
&self,
32063183
err: &mut Diag<'_>,
3207-
unsatisfied_predicates: &[(
3208-
ty::Predicate<'tcx>,
3209-
Option<ty::Predicate<'tcx>>,
3210-
Option<ObligationCause<'tcx>>,
3211-
)],
3184+
unsatisfied_predicates: &[UnsatisfiedPredicate<'tcx>],
32123185
) -> bool {
32133186
let mut derives = self.note_predicate_source_and_get_derives(err, unsatisfied_predicates);
32143187
derives.sort();

0 commit comments

Comments
 (0)