Struct PredicateSearcher
pub struct PredicateSearcher<'tcx> {
tcx: TyCtxt<'tcx>,
typing_env: TypingEnv<'tcx>,
candidates: HashMap<Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, Candidate<'tcx>>,
options: BoundsOptions,
implicit_self_clause: bool,
}Expand description
Stores a set of predicates along with where they came from.
Fields§
§tcx: TyCtxt<'tcx>§typing_env: TypingEnv<'tcx>§candidates: HashMap<Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, Candidate<'tcx>>§options: BoundsOptions§implicit_self_clause: boolImplementations§
§impl<'tcx> PredicateSearcher<'tcx>
impl<'tcx> PredicateSearcher<'tcx>
pub fn new_for_owner(
tcx: TyCtxt<'tcx>,
owner_id: DefId,
options: &BoundsOptions,
) -> PredicateSearcher<'tcx>
pub fn new_for_owner( tcx: TyCtxt<'tcx>, owner_id: DefId, options: &BoundsOptions, ) -> PredicateSearcher<'tcx>
Initialize the elaborator with the predicates accessible within this item.
pub fn insert_bound_predicates(
&mut self,
preds: impl IntoIterator<Item = ItemPredicate<'tcx>>,
)
pub fn insert_bound_predicates( &mut self, preds: impl IntoIterator<Item = ItemPredicate<'tcx>>, )
Insert the bound clauses in the search context. Prefer inserting them all at once as this
will give priority to shorter resolution paths. Bound clauses are numbered from 0 in
insertion order.
pub fn set_param_env(&mut self, param_env: ParamEnv<'tcx>)
pub fn set_param_env(&mut self, param_env: ParamEnv<'tcx>)
Override the param env; we use this when resolving dyn predicates to add more clauses to
the scope.
pub fn resolve(
&mut self,
tref: &Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>,
warn: &impl Fn(&str),
) -> Result<ImplExpr<'tcx>, String>
pub fn resolve( &mut self, tref: &Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, warn: &impl Fn(&str), ) -> Result<ImplExpr<'tcx>, String>
Resolve the given trait reference in the local context.
pub fn resolve_item_required_predicates(
&mut self,
def_id: DefId,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
warn: &impl Fn(&str),
) -> Result<Vec<ImplExpr<'tcx>>, String>
pub fn resolve_item_required_predicates( &mut self, def_id: DefId, generics: &'tcx RawList<(), GenericArg<'tcx>>, warn: &impl Fn(&str), ) -> Result<Vec<ImplExpr<'tcx>>, String>
Resolve the predicates required by the given item.
pub fn resolve_item_implied_predicates(
&mut self,
def_id: DefId,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
warn: &impl Fn(&str),
) -> Result<Vec<ImplExpr<'tcx>>, String>
pub fn resolve_item_implied_predicates( &mut self, def_id: DefId, generics: &'tcx RawList<(), GenericArg<'tcx>>, warn: &impl Fn(&str), ) -> Result<Vec<ImplExpr<'tcx>>, String>
Resolve the predicates implied by the given item.
pub fn resolve_predicates(
&mut self,
generics: &'tcx RawList<(), GenericArg<'tcx>>,
predicates: ItemPredicates<'tcx>,
warn: &impl Fn(&str),
) -> Result<Vec<ImplExpr<'tcx>>, String>
pub fn resolve_predicates( &mut self, generics: &'tcx RawList<(), GenericArg<'tcx>>, predicates: ItemPredicates<'tcx>, warn: &impl Fn(&str), ) -> Result<Vec<ImplExpr<'tcx>>, String>
Apply the given generics to the provided clauses and resolve the trait references in the current context.
Trait Implementations§
§impl<'tcx> Clone for PredicateSearcher<'tcx>
impl<'tcx> Clone for PredicateSearcher<'tcx>
§fn clone(&self) -> PredicateSearcher<'tcx>
fn clone(&self) -> PredicateSearcher<'tcx>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<'tcx> Freeze for PredicateSearcher<'tcx>
impl<'tcx> !RefUnwindSafe for PredicateSearcher<'tcx>
impl<'tcx> !Send for PredicateSearcher<'tcx>
impl<'tcx> !Sync for PredicateSearcher<'tcx>
impl<'tcx> Unpin for PredicateSearcher<'tcx>
impl<'tcx> !UnwindSafe for PredicateSearcher<'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
Given the context attached to a nom error, and given the original
input to the nom parser, extract more the useful context information. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Given the original input, as well as the context reported by nom,
recreate a context in the original string where the error occurred. Read more