d11b9165ee
This may be potentially useful for - avoiding uses of `hir::ItemKind::Use` - preserving documentation comments on all reexports - preserving and checking stability/deprecation info on reexports - all kinds of diagnostics
52 lines
1.9 KiB
Rust
52 lines
1.9 KiB
Rust
use crate::ty;
|
|
|
|
use rustc_hir::def::Res;
|
|
use rustc_macros::HashStable;
|
|
use rustc_span::def_id::DefId;
|
|
use rustc_span::symbol::Ident;
|
|
use rustc_span::Span;
|
|
use smallvec::SmallVec;
|
|
|
|
/// A simplified version of `ImportKind` from resolve.
|
|
/// `DefId`s here correspond to `use` and `extern crate` items themselves, not their targets.
|
|
#[derive(Clone, Copy, Debug, TyEncodable, TyDecodable, HashStable)]
|
|
pub enum Reexport {
|
|
Single(DefId),
|
|
Glob(DefId),
|
|
ExternCrate(DefId),
|
|
MacroUse,
|
|
MacroExport,
|
|
}
|
|
|
|
impl Reexport {
|
|
pub fn id(self) -> Option<DefId> {
|
|
match self {
|
|
Reexport::Single(id) | Reexport::Glob(id) | Reexport::ExternCrate(id) => Some(id),
|
|
Reexport::MacroUse | Reexport::MacroExport => None,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// This structure is supposed to keep enough data to re-create `NameBinding`s for other crates
|
|
/// during name resolution. Right now the bindings are not recreated entirely precisely so we may
|
|
/// need to add more data in the future to correctly support macros 2.0, for example.
|
|
/// Module child can be either a proper item or a reexport (including private imports).
|
|
/// In case of reexport all the fields describe the reexport item itself, not what it refers to.
|
|
#[derive(Debug, TyEncodable, TyDecodable, HashStable)]
|
|
pub struct ModChild {
|
|
/// Name of the item.
|
|
pub ident: Ident,
|
|
/// Resolution result corresponding to the item.
|
|
/// Local variables cannot be exported, so this `Res` doesn't need the ID parameter.
|
|
pub res: Res<!>,
|
|
/// Visibility of the item.
|
|
pub vis: ty::Visibility<DefId>,
|
|
/// Span of the item.
|
|
pub span: Span,
|
|
/// A proper `macro_rules` item (not a reexport).
|
|
pub macro_rules: bool,
|
|
/// Reexport chain linking this module child to its original reexported item.
|
|
/// Empty if the module child is a proper item.
|
|
pub reexport_chain: SmallVec<[Reexport; 2]>,
|
|
}
|