use syntax::ast::{Name, NodeId};
use syntax::attr;
use syntax::ext::base::MacroKind;
-use syntax::ptr::P;
-use syntax::source_map::Spanned;
use syntax_pos::{self, Span};
use rustc::hir;
use rustc::hir::def_id::CrateNum;
+use rustc::hir::ptr::P;
-pub struct Module {
+pub struct Module<'hir> {
pub name: Option<Name>,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub where_outer: Span,
pub where_inner: Span,
- pub extern_crates: Vec<ExternCrate>,
- pub imports: Vec<Import>,
- pub structs: Vec<Struct>,
- pub unions: Vec<Union>,
- pub enums: Vec<Enum>,
- pub fns: Vec<Function>,
- pub mods: Vec<Module>,
+ pub extern_crates: Vec<ExternCrate<'hir>>,
+ pub imports: Vec<Import<'hir>>,
+ pub structs: Vec<Struct<'hir>>,
+ pub unions: Vec<Union<'hir>>,
+ pub enums: Vec<Enum<'hir>>,
+ pub fns: Vec<Function<'hir>>,
+ pub mods: Vec<Module<'hir>>,
pub id: NodeId,
- pub typedefs: Vec<Typedef>,
- pub existentials: Vec<Existential>,
- pub statics: Vec<Static>,
- pub constants: Vec<Constant>,
- pub traits: Vec<Trait>,
- pub vis: hir::Visibility,
+ pub typedefs: Vec<Typedef<'hir>>,
+ pub existentials: Vec<Existential<'hir>>,
+ pub statics: Vec<Static<'hir>>,
+ pub constants: Vec<Constant<'hir>>,
+ pub traits: Vec<Trait<'hir>>,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
- pub impls: Vec<Impl>,
- pub foreigns: Vec<hir::ForeignMod>,
- pub macros: Vec<Macro>,
- pub proc_macros: Vec<ProcMacro>,
- pub trait_aliases: Vec<TraitAlias>,
+ pub impls: Vec<Impl<'hir>>,
+ pub foreigns: Vec<ForeignItem<'hir>>,
+ pub macros: Vec<Macro<'hir>>,
+ pub proc_macros: Vec<ProcMacro<'hir>>,
+ pub trait_aliases: Vec<TraitAlias<'hir>>,
pub is_crate: bool,
}
-impl Module {
- pub fn new(name: Option<Name>) -> Module {
+impl Module<'hir> {
+ pub fn new(
+ name: Option<Name>,
+ attrs: &'hir hir::HirVec<ast::Attribute>,
+ vis: &'hir hir::Visibility,
+ ) -> Module<'hir> {
Module {
name : name,
id: ast::CRATE_NODE_ID,
- vis: Spanned { span: syntax_pos::DUMMY_SP, node: hir::VisibilityKind::Inherited },
+ vis,
stab: None,
depr: None,
where_outer: syntax_pos::DUMMY_SP,
where_inner: syntax_pos::DUMMY_SP,
- attrs : hir::HirVec::new(),
+ attrs,
extern_crates: Vec::new(),
imports : Vec::new(),
structs : Vec::new(),
}
}
-#[derive(Debug, Clone, RustcEncodable, RustcDecodable, Copy)]
+#[derive(Debug, Clone, Copy)]
pub enum StructType {
/// A braced struct
Plain,
Unit,
}
-pub struct Struct {
- pub vis: hir::Visibility,
+pub struct Struct<'hir> {
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub struct_type: StructType,
pub name: Name,
- pub generics: hir::Generics,
- pub attrs: hir::HirVec<ast::Attribute>,
- pub fields: hir::HirVec<hir::StructField>,
+ pub generics: &'hir hir::Generics,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub fields: &'hir [hir::StructField],
pub whence: Span,
}
-pub struct Union {
- pub vis: hir::Visibility,
+pub struct Union<'hir> {
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub struct_type: StructType,
pub name: Name,
- pub generics: hir::Generics,
- pub attrs: hir::HirVec<ast::Attribute>,
- pub fields: hir::HirVec<hir::StructField>,
+ pub generics: &'hir hir::Generics,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub fields: &'hir [hir::StructField],
pub whence: Span,
}
-pub struct Enum {
- pub vis: hir::Visibility,
+pub struct Enum<'hir> {
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
- pub variants: hir::HirVec<Variant>,
- pub generics: hir::Generics,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub variants: Vec<Variant<'hir>>,
+ pub generics: &'hir hir::Generics,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub id: hir::HirId,
pub whence: Span,
pub name: Name,
}
-pub struct Variant {
+pub struct Variant<'hir> {
pub name: Name,
pub id: hir::HirId,
- pub attrs: hir::HirVec<ast::Attribute>,
- pub def: hir::VariantData,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub def: &'hir hir::VariantData,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub whence: Span,
}
-pub struct Function {
- pub decl: hir::FnDecl,
- pub attrs: hir::HirVec<ast::Attribute>,
+pub struct Function<'hir> {
+ pub decl: &'hir hir::FnDecl,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub id: hir::HirId,
pub name: Name,
- pub vis: hir::Visibility,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub header: hir::FnHeader,
pub whence: Span,
- pub generics: hir::Generics,
+ pub generics: &'hir hir::Generics,
pub body: hir::BodyId,
}
-pub struct Typedef {
- pub ty: P<hir::Ty>,
- pub gen: hir::Generics,
+pub struct Typedef<'hir> {
+ pub ty: &'hir P<hir::Ty>,
+ pub gen: &'hir hir::Generics,
pub name: Name,
pub id: hir::HirId,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
- pub vis: hir::Visibility,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
}
-pub struct Existential {
- pub exist_ty: hir::ExistTy,
+pub struct Existential<'hir> {
+ pub exist_ty: &'hir hir::ExistTy,
pub name: Name,
pub id: hir::HirId,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
- pub vis: hir::Visibility,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
}
#[derive(Debug)]
-pub struct Static {
- pub type_: P<hir::Ty>,
+pub struct Static<'hir> {
+ pub type_: &'hir P<hir::Ty>,
pub mutability: hir::Mutability,
pub expr: hir::BodyId,
pub name: Name,
- pub attrs: hir::HirVec<ast::Attribute>,
- pub vis: hir::Visibility,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub whence: Span,
}
-pub struct Constant {
- pub type_: P<hir::Ty>,
+pub struct Constant<'hir> {
+ pub type_: &'hir P<hir::Ty>,
pub expr: hir::BodyId,
pub name: Name,
- pub attrs: hir::HirVec<ast::Attribute>,
- pub vis: hir::Visibility,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub whence: Span,
}
-pub struct Trait {
+pub struct Trait<'hir> {
pub is_auto: hir::IsAuto,
pub unsafety: hir::Unsafety,
pub name: Name,
- pub items: hir::HirVec<hir::TraitItem>,
- pub generics: hir::Generics,
- pub bounds: hir::HirVec<hir::GenericBound>,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub items: Vec<&'hir hir::TraitItem>,
+ pub generics: &'hir hir::Generics,
+ pub bounds: &'hir hir::HirVec<hir::GenericBound>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub id: hir::HirId,
pub whence: Span,
- pub vis: hir::Visibility,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
}
-pub struct TraitAlias {
+pub struct TraitAlias<'hir> {
pub name: Name,
- pub generics: hir::Generics,
- pub bounds: hir::HirVec<hir::GenericBound>,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub generics: &'hir hir::Generics,
+ pub bounds: &'hir hir::HirVec<hir::GenericBound>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub id: hir::HirId,
pub whence: Span,
- pub vis: hir::Visibility,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
}
#[derive(Debug)]
-pub struct Impl {
+pub struct Impl<'hir> {
pub unsafety: hir::Unsafety,
pub polarity: hir::ImplPolarity,
pub defaultness: hir::Defaultness,
- pub generics: hir::Generics,
- pub trait_: Option<hir::TraitRef>,
- pub for_: P<hir::Ty>,
- pub items: hir::HirVec<hir::ImplItem>,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub generics: &'hir hir::Generics,
+ pub trait_: &'hir Option<hir::TraitRef>,
+ pub for_: &'hir P<hir::Ty>,
+ pub items: Vec<&'hir hir::ImplItem>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
- pub vis: hir::Visibility,
+ pub vis: &'hir hir::Visibility,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
}
+pub struct ForeignItem<'hir> {
+ pub vis: &'hir hir::Visibility,
+ pub stab: Option<attr::Stability>,
+ pub depr: Option<attr::Deprecation>,
+ pub id: hir::HirId,
+ pub name: Name,
+ pub kind: &'hir hir::ForeignItemKind,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub whence: Span,
+}
+
// For Macro we store the DefId instead of the NodeId, since we also create
// these imported macro_rules (which only have a DUMMY_NODE_ID).
-pub struct Macro {
+pub struct Macro<'hir> {
pub name: Name,
pub def_id: hir::def_id::DefId,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub matchers: hir::HirVec<Span>,
pub stab: Option<attr::Stability>,
pub imported_from: Option<Name>,
}
-pub struct ExternCrate {
+pub struct ExternCrate<'hir> {
pub name: Name,
pub cnum: CrateNum,
pub path: Option<String>,
- pub vis: hir::Visibility,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub vis: &'hir hir::Visibility,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
}
-pub struct Import {
+pub struct Import<'hir> {
pub name: Name,
pub id: hir::HirId,
- pub vis: hir::Visibility,
- pub attrs: hir::HirVec<ast::Attribute>,
- pub path: hir::Path,
+ pub vis: &'hir hir::Visibility,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
+ pub path: &'hir hir::Path,
pub glob: bool,
pub whence: Span,
}
-pub struct ProcMacro {
+pub struct ProcMacro<'hir> {
pub name: Name,
pub id: hir::HirId,
pub kind: MacroKind,
pub helpers: Vec<Name>,
- pub attrs: hir::HirVec<ast::Attribute>,
+ pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub stab: Option<attr::Stability>,
pub depr: Option<attr::Deprecation>,