pub struct Generics<'hir> {
pub params: &'hir [GenericParam<'hir>],
pub predicates: &'hir [WherePredicate<'hir>],
pub has_where_clause_predicates: bool,
pub where_clause_span: Span,
pub span: Span,
}
Expand description
Represents lifetimes and type parameters attached to a declaration of a function, enum, trait, etc.
Fields§
§params: &'hir [GenericParam<'hir>]
§predicates: &'hir [WherePredicate<'hir>]
§has_where_clause_predicates: bool
§where_clause_span: Span
§span: Span
Implementations§
source§impl<'hir> Generics<'hir>
impl<'hir> Generics<'hir>
pub const fn empty() -> &'hir Generics<'hir>
pub fn get_named(&self, name: Symbol) -> Option<&GenericParam<'hir>>
sourcepub fn span_for_lifetime_suggestion(&self) -> Option<Span>
pub fn span_for_lifetime_suggestion(&self) -> Option<Span>
If there are generic parameters, return where to introduce a new one.
sourcepub fn span_for_param_suggestion(&self) -> Option<Span>
pub fn span_for_param_suggestion(&self) -> Option<Span>
If there are generic parameters, return where to introduce a new one.
sourcepub fn tail_span_for_predicate_suggestion(&self) -> Span
pub fn tail_span_for_predicate_suggestion(&self) -> Span
Span
where further predicates would be suggested, accounting for trailing commas, like
in fn foo<T>(t: T) where T: Foo,
so we don’t suggest two trailing commas.
pub fn add_where_or_trailing_comma(&self) -> &'static str
pub fn bounds_for_param( &self, param_def_id: LocalDefId, ) -> impl Iterator<Item = &WhereBoundPredicate<'hir>>
pub fn outlives_for_param( &self, param_def_id: LocalDefId, ) -> impl Iterator<Item = &WhereRegionPredicate<'_>>
sourcepub fn bounds_span_for_suggestions(
&self,
param_def_id: LocalDefId,
) -> Option<(Span, Option<Span>)>
pub fn bounds_span_for_suggestions( &self, param_def_id: LocalDefId, ) -> Option<(Span, Option<Span>)>
Returns a suggestable empty span right after the “final” bound of the generic parameter.
If that bound needs to be wrapped in parentheses to avoid ambiguity with subsequent bounds, it also returns an empty span for an open parenthesis as the second component.
E.g., adding + 'static
after Fn() -> dyn Future<Output = ()>
or
Fn() -> &'static dyn Debug
requires parentheses:
Fn() -> (dyn Future<Output = ()>) + 'static
and
Fn() -> &'static (dyn Debug) + 'static
, respectively.
pub fn span_for_predicate_removal(&self, pos: usize) -> Span
pub fn span_for_bound_removal( &self, predicate_pos: usize, bound_pos: usize, ) -> Span
Trait Implementations§
source§impl<'hir, __CTX> HashStable<__CTX> for Generics<'hir>where
__CTX: HashStableContext,
impl<'hir, __CTX> HashStable<__CTX> for Generics<'hir>where
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
impl<'hir> Copy for Generics<'hir>
Auto Trait Implementations§
impl<'hir> Freeze for Generics<'hir>
impl<'hir> RefUnwindSafe for Generics<'hir>
impl<'hir> !Send for Generics<'hir>
impl<'hir> !Sync for Generics<'hir>
impl<'hir> Unpin for Generics<'hir>
impl<'hir> UnwindSafe for Generics<'hir>
Blanket Implementations§
source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on<'a>(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter<'a>( arena: &'a Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'a mut [T]
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§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>
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>
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 moresource§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 56 bytes