Enum rustc_hir::def::Res [−][src]
pub enum Res<Id = HirId> { Def(DefKind, DefId), PrimTy(PrimTy), SelfTy(Option<DefId>, Option<(DefId, bool)>), ToolMod, SelfCtor(DefId), Local(Id), NonMacroAttr(NonMacroAttrKind), Err, }
Expand description
The resolution of a path or export.
For every path or identifier in Rust, the compiler must determine
what the path refers to. This process is called name resolution,
and Res is the primary result of name resolution.
For example, everything prefixed with /* Res */ in this example has
an associated Res:
fn str_to_string(s: & /* Res */ str) -> /* Res */ String { /* Res */ String::from(/* Res */ s) } /* Res */ str_to_string("hello");
The associated Ress will be:
strwill resolve toRes::PrimTy;Stringwill resolve toRes::Def, and theReswill include theDefIdforStringas defined in the standard library;String::fromwill also resolve toRes::Def, with theDefIdpointing toString::from;swill resolve toRes::Local;- the call to
str_to_stringwill resolve toRes::Def, with theDefIdpointing to the definition ofstr_to_stringin the current crate.
Variants
Expand description
Definition having a unique ID (DefId), corresponds to something defined in user code.
Not bound to a specific namespace.
PrimTy(PrimTy)Expand description
A primitive type such as i32 or str.
Belongs to the type namespace.
Expand description
The Self type, optionally with the trait it is associated with
and optionally with the DefId of the impl it is associated with.
Belongs to the type namespace.
For example, the Self in
trait Foo { fn foo() -> Box<Self>; }
would have the DefId of Foo associated with it. The Self in
struct Bar; impl Bar { fn new() -> Self { Bar } }
would have the DefId of the impl associated with it. Finally, the Self in
impl Foo for Bar { fn foo() -> Box<Self> { Box::new(Bar) } }
would have both the DefId of Foo and the DefId of the impl
associated with it.
See also Res::SelfCtor.
HACK(min_const_generics): impl self types also have an optional requirement to not mention
any generic parameters to allow the following with min_const_generics:
impl Foo { fn test() -> [u8; std::mem::size_of::<Self>()] { todo!() } }
We do however allow Self in repeat expression even if it is generic to not break code
which already works on stable while causing the const_evaluatable_unchecked future compat lint.
FIXME(lazy_normalization_consts): Remove this bodge once that feature is stable.
Expand description
A tool attribute module; e.g., the rustfmt in #[rustfmt::skip].
Belongs to the type namespace.
SelfCtor(DefId)Expand description
The Self constructor, along with the DefId
of the impl it is associated with.
Belongs to the value namespace.
See also Res::SelfTy.
Expand description
A local variable or function parameter.
Belongs to the value namespace.
NonMacroAttr(NonMacroAttrKind)Expand description
An attribute that is not implemented via macro.
E.g., #[inline] and #[rustfmt::skip], which are essentially directives,
as opposed to #[test], which is a builtin macro.
Belongs to the macro namespace.
Expand description
Name resolution failed. We use a dummy Res variant so later phases
of the compiler won’t crash and can instead report more errors.
Not bound to a specific namespace.
Implementations
impl<Id> Res<Id>[src]
impl<Id> Res<Id>[src]pub fn def_id(&self) -> DefId where
Id: Debug, [src]
pub fn def_id(&self) -> DefId where
Id: Debug, [src]Return the DefId of this Def if it has an ID, else panic.
pub fn opt_def_id(&self) -> Option<DefId>[src]
pub fn opt_def_id(&self) -> Option<DefId>[src]Return Some(..) with the DefId of this Res if it has a ID, else None.
pub fn mod_def_id(&self) -> Option<DefId>[src]
pub fn mod_def_id(&self) -> Option<DefId>[src]Return the DefId of this Res if it represents a module.
pub fn descr(&self) -> &'static str[src]
pub fn descr(&self) -> &'static str[src]A human readable name for the res kind (“function”, “module”, etc.).
pub fn map_id<R>(self, map: impl FnMut(Id) -> R) -> Res<R>[src]
pub fn macro_kind(self) -> Option<MacroKind>[src]
pub fn matches_ns(&self, ns: Namespace) -> bool[src]
pub fn matches_ns(&self, ns: Namespace) -> bool[src]Always returns true if self is Res::Err
pub fn expected_in_tuple_struct_pat(&self) -> bool[src]
pub fn expected_in_tuple_struct_pat(&self) -> bool[src]Returns whether such a resolved path can occur in a tuple struct/variant pattern
Trait Implementations
impl<Id, __CTX> HashStable<__CTX> for Res<Id> where
__CTX: HashStableContext,
Id: HashStable<__CTX>, [src]
impl<Id, __CTX> HashStable<__CTX> for Res<Id> where
__CTX: HashStableContext,
Id: HashStable<__CTX>, [src]fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)[src]
impl<Id: Copy> Copy for Res<Id>[src]
impl<Id: Eq> Eq for Res<Id>[src]
impl<Id> StructuralEq for Res<Id>[src]
impl<Id> StructuralPartialEq for Res<Id>[src]
Auto Trait Implementations
impl<Id> RefUnwindSafe for Res<Id> where
Id: RefUnwindSafe,
Id: RefUnwindSafe,
impl<Id> Send for Res<Id> where
Id: Send,
Id: Send,
impl<Id> Sync for Res<Id> where
Id: Sync,
Id: Sync,
impl<Id> Unpin for Res<Id> where
Id: Unpin,
Id: Unpin,
impl<Id> UnwindSafe for Res<Id> where
Id: UnwindSafe,
Id: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
pub fn borrow_mut(&mut self) -> &mut T[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, [src]type Owned = T
type Owned = TThe resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn to_owned(&self) -> T[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)[src]
pub fn clone_into(&self, target: &mut T)[src]🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more