Gather deprecation information during cleaning

This commit is contained in:
Mark Rousskov 2019-07-24 16:22:48 -04:00
parent 11735b6235
commit 4beb751575
4 changed files with 21 additions and 56 deletions

View file

@ -655,7 +655,7 @@ impl Clean<Item> for doctree::Module<'_> {
source: whence.clean(cx),
visibility: self.vis.clean(cx),
stability: cx.stability(self.hid).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.hid).clean(cx),
def_id: cx.tcx.hir().local_def_id_from_node_id(self.id),
inner: ModuleItem(Module {
is_crate: self.is_crate,
@ -1941,7 +1941,7 @@ impl Clean<Item> for doctree::Function<'_> {
source: self.whence.clean(cx),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
def_id: did,
inner: FunctionItem(Function {
decl,
@ -2141,7 +2141,7 @@ impl Clean<Item> for doctree::Trait<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: TraitItem(Trait {
auto: self.is_auto.clean(cx),
unsafety: self.unsafety,
@ -2171,7 +2171,7 @@ impl Clean<Item> for doctree::TraitAlias<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: TraitAliasItem(TraitAlias {
generics: self.generics.clean(cx),
bounds: self.bounds.clean(cx),
@ -3245,7 +3245,7 @@ impl Clean<Item> for doctree::Struct<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: StructItem(Struct {
struct_type: self.struct_type,
generics: self.generics.clean(cx),
@ -3265,7 +3265,7 @@ impl Clean<Item> for doctree::Union<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: UnionItem(Union {
struct_type: self.struct_type,
generics: self.generics.clean(cx),
@ -3312,7 +3312,7 @@ impl Clean<Item> for doctree::Enum<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: EnumItem(Enum {
variants: self.variants.iter().map(|v| v.clean(cx)).collect(),
generics: self.generics.clean(cx),
@ -3335,7 +3335,7 @@ impl Clean<Item> for doctree::Variant<'_> {
source: self.whence.clean(cx),
visibility: None,
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
def_id: cx.tcx.hir().local_def_id(self.id),
inner: VariantItem(Variant {
kind: self.def.clean(cx),
@ -3640,7 +3640,7 @@ impl Clean<Item> for doctree::Typedef<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: TypedefItem(Typedef {
type_: self.ty.clean(cx),
generics: self.gen.clean(cx),
@ -3664,7 +3664,7 @@ impl Clean<Item> for doctree::OpaqueTy<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: OpaqueTyItem(OpaqueTy {
bounds: self.opaque_ty.bounds.clean(cx),
generics: self.opaque_ty.generics.clean(cx),
@ -3715,7 +3715,7 @@ impl Clean<Item> for doctree::Static<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: StaticItem(Static {
type_: self.type_.clean(cx),
mutability: self.mutability.clean(cx),
@ -3740,7 +3740,7 @@ impl Clean<Item> for doctree::Constant<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: ConstantItem(Constant {
type_: self.type_.clean(cx),
expr: print_const_expr(cx, self.expr),
@ -3827,7 +3827,7 @@ impl Clean<Vec<Item>> for doctree::Impl<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner: ImplItem(Impl {
unsafety: self.unsafety,
generics: self.generics.clean(cx),
@ -4066,7 +4066,7 @@ impl Clean<Item> for doctree::ForeignItem<'_> {
def_id: cx.tcx.hir().local_def_id(self.id),
visibility: self.vis.clean(cx),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
inner,
}
}
@ -4249,7 +4249,7 @@ impl Clean<Item> for doctree::Macro<'_> {
source: self.whence.clean(cx),
visibility: Some(Public),
stability: cx.stability(self.hid).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.hid).clean(cx),
def_id: self.def_id,
inner: MacroItem(Macro {
source: format!("macro_rules! {} {{\n{}}}",
@ -4277,7 +4277,7 @@ impl Clean<Item> for doctree::ProcMacro<'_> {
source: self.whence.clean(cx),
visibility: Some(Public),
stability: cx.stability(self.id).clean(cx),
deprecation: self.depr.clean(cx),
deprecation: cx.deprecation(self.id).clean(cx),
def_id: cx.tcx.hir().local_def_id(self.id),
inner: ProcMacroItem(ProcMacro {
kind: self.kind,

View file

@ -171,6 +171,11 @@ impl<'tcx> DocContext<'tcx> {
self.tcx.hir().opt_local_def_id(id)
.and_then(|def_id| self.tcx.lookup_stability(def_id)).cloned()
}
pub fn deprecation(&self, id: HirId) -> Option<attr::Deprecation> {
self.tcx.hir().opt_local_def_id(id)
.and_then(|def_id| self.tcx.lookup_deprecation(def_id))
}
}
pub trait DocAccessLevels {

View file

@ -4,7 +4,6 @@ pub use self::StructType::*;
use syntax::ast;
use syntax::ast::{Name, NodeId};
use syntax::attr;
use syntax::ext::base::MacroKind;
use syntax_pos::{self, Span};
@ -32,7 +31,6 @@ pub struct Module<'hir> {
pub constants: Vec<Constant<'hir>>,
pub traits: Vec<Trait<'hir>>,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub impls: Vec<Impl<'hir>>,
pub foreigns: Vec<ForeignItem<'hir>>,
pub macros: Vec<Macro<'hir>>,
@ -52,7 +50,6 @@ impl Module<'hir> {
id: ast::CRATE_NODE_ID,
hid: hir::CRATE_HIR_ID,
vis,
depr: None,
where_outer: syntax_pos::DUMMY_SP,
where_inner: syntax_pos::DUMMY_SP,
attrs,
@ -90,7 +87,6 @@ pub enum StructType {
pub struct Struct<'hir> {
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub struct_type: StructType,
pub name: Name,
@ -102,7 +98,6 @@ pub struct Struct<'hir> {
pub struct Union<'hir> {
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub struct_type: StructType,
pub name: Name,
@ -114,7 +109,6 @@ pub struct Union<'hir> {
pub struct Enum<'hir> {
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub variants: Vec<Variant<'hir>>,
pub generics: &'hir hir::Generics,
pub attrs: &'hir hir::HirVec<ast::Attribute>,
@ -128,7 +122,6 @@ pub struct Variant<'hir> {
pub id: hir::HirId,
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub def: &'hir hir::VariantData,
pub depr: Option<attr::Deprecation>,
pub whence: Span,
}
@ -138,7 +131,6 @@ pub struct Function<'hir> {
pub id: hir::HirId,
pub name: Name,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub header: hir::FnHeader,
pub whence: Span,
pub generics: &'hir hir::Generics,
@ -153,7 +145,6 @@ pub struct Typedef<'hir> {
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
}
pub struct OpaqueTy<'hir> {
@ -163,7 +154,6 @@ pub struct OpaqueTy<'hir> {
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
}
#[derive(Debug)]
@ -174,7 +164,6 @@ pub struct Static<'hir> {
pub name: Name,
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub whence: Span,
}
@ -185,7 +174,6 @@ pub struct Constant<'hir> {
pub name: Name,
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub whence: Span,
}
@ -201,7 +189,6 @@ pub struct Trait<'hir> {
pub id: hir::HirId,
pub whence: Span,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
}
pub struct TraitAlias<'hir> {
@ -212,7 +199,6 @@ pub struct TraitAlias<'hir> {
pub id: hir::HirId,
pub whence: Span,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
}
#[derive(Debug)]
@ -227,13 +213,11 @@ pub struct Impl<'hir> {
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
}
pub struct ForeignItem<'hir> {
pub vis: &'hir hir::Visibility,
pub depr: Option<attr::Deprecation>,
pub id: hir::HirId,
pub name: Name,
pub kind: &'hir hir::ForeignItemKind,
@ -250,7 +234,6 @@ pub struct Macro<'hir> {
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub matchers: hir::HirVec<Span>,
pub depr: Option<attr::Deprecation>,
pub imported_from: Option<Name>,
}
@ -280,7 +263,6 @@ pub struct ProcMacro<'hir> {
pub helpers: Vec<Name>,
pub attrs: &'hir hir::HirVec<ast::Attribute>,
pub whence: Span,
pub depr: Option<attr::Deprecation>,
}
pub fn struct_type_from_def(vdata: &hir::VariantData) -> StructType {

View file

@ -7,7 +7,6 @@ use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::middle::privacy::AccessLevel;
use rustc::util::nodemap::{FxHashSet, FxHashMap};
use syntax::ast;
use syntax::attr;
use syntax::ext::base::MacroKind;
use syntax::source_map::Spanned;
use syntax::symbol::sym;
@ -57,11 +56,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
}
}
fn deprecation(&self, id: hir::HirId) -> Option<attr::Deprecation> {
self.cx.tcx.hir().opt_local_def_id(id)
.and_then(|def_id| self.cx.tcx.lookup_deprecation(def_id))
}
pub fn visit(mut self, krate: &'tcx hir::Crate) -> Module<'tcx> {
let mut module = self.visit_mod_contents(krate.span,
&krate.attrs,
@ -91,7 +85,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
struct_type,
name,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
attrs: &item.attrs,
generics,
fields: sd.fields(),
@ -109,7 +102,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
struct_type,
name,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
attrs: &item.attrs,
generics,
fields: sd.fields(),
@ -127,12 +119,10 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
name: v.node.ident.name,
id: v.node.id,
attrs: &v.node.attrs,
depr: self.deprecation(v.node.id),
def: &v.node.data,
whence: v.span,
}).collect(),
vis: &it.vis,
depr: self.deprecation(it.hir_id),
generics,
attrs: &it.attrs,
id: it.hir_id,
@ -191,14 +181,12 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
helpers,
attrs: &item.attrs,
whence: item.span,
depr: self.deprecation(item.hir_id),
});
}
None => {
om.fns.push(Function {
id: item.hir_id,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
attrs: &item.attrs,
decl,
name,
@ -218,7 +206,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
let mut om = Module::new(name, attrs, vis);
om.where_outer = span;
om.where_inner = m.inner;
om.depr = self.deprecation(id);
om.hid = id;
om.id = self.cx.tcx.hir().hir_to_node_id(id);
// Keep track of if there were any private modules in the path.
@ -449,7 +436,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
attrs: &item.attrs,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.typedefs.push(t);
},
@ -461,7 +447,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
attrs: &item.attrs,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.opaque_tys.push(t);
},
@ -475,7 +460,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
attrs: &item.attrs,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.statics.push(s);
},
@ -488,7 +472,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
attrs: &item.attrs,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.constants.push(s);
},
@ -507,7 +490,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
attrs: &item.attrs,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.traits.push(t);
},
@ -520,7 +502,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
attrs: &item.attrs,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.trait_aliases.push(t);
},
@ -550,7 +531,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
id: item.hir_id,
whence: item.span,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
};
om.impls.push(i);
}
@ -570,7 +550,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
name: renamed.unwrap_or(item.ident).name,
kind: &item.node,
vis: &item.vis,
depr: self.deprecation(item.hir_id),
attrs: &item.attrs,
whence: item.span
});
@ -594,7 +573,6 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
name: renamed.unwrap_or(def.name),
whence: def.span,
matchers,
depr: self.deprecation(def.hir_id),
imported_from: None,
}
}