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 Res
s will be:
str
will resolve toRes::PrimTy
;String
will resolve toRes::Def
, and theRes
will include theDefId
forString
as defined in the standard library;String::from
will also resolve toRes::Def
, with theDefId
pointing toString::from
;s
will resolve toRes::Local
;- the call to
str_to_string
will resolve toRes::Def
, with theDefId
pointing to the definition ofstr_to_string
in the current crate.
Variants
Definition having a unique ID (DefId
), corresponds to something defined in user code.
Not bound to a specific namespace.
PrimTy(PrimTy)
A primitive type such as i32
or str
.
Belongs to the type namespace.
Tuple Fields of PrimTy
0: PrimTy
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(generic_const_exprs): Remove this bodge once that feature is stable.
Tuple Fields of SelfTy
A tool attribute module; e.g., the rustfmt
in #[rustfmt::skip]
.
Belongs to the type namespace.
SelfCtor(DefId)
The Self
constructor, along with the DefId
of the impl it is associated with.
Belongs to the value namespace.
See also Res::SelfTy
.
Tuple Fields of SelfCtor
0: DefId
A local variable or function parameter.
Belongs to the value namespace.
NonMacroAttr(NonMacroAttrKind)
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.
Tuple Fields of NonMacroAttr
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
Return the DefId
of this Def
if it has an ID, else panic.
Return Some(..)
with the DefId
of this Res
if it has a ID, else None
.
Return the DefId
of this Res
if it represents a module.
A human readable name for the res kind (“function”, “module”, etc.).
Always returns true
if self
is Res::Err
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>,
impl<Id, __CTX> HashStable<__CTX> for Res<Id> where
__CTX: HashStableContext,
Id: HashStable<__CTX>,
Auto Trait Implementations
impl<Id> RefUnwindSafe for Res<Id> where
Id: RefUnwindSafe,
impl<Id> UnwindSafe for Res<Id> where
Id: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Layout
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.