3 crate trait DocVisitor: Sized {
4 fn visit_item(&mut self, item: &Item) {
5 self.visit_item_recur(item)
9 fn visit_inner_recur(&mut self, kind: &ItemKind) {
11 StrippedItem(..) => unreachable!(),
16 StructItem(i) => i.fields.iter().for_each(|x| self.visit_item(x)),
17 UnionItem(i) => i.fields.iter().for_each(|x| self.visit_item(x)),
18 EnumItem(i) => i.variants.iter().for_each(|x| self.visit_item(x)),
19 TraitItem(i) => i.items.iter().for_each(|x| self.visit_item(x)),
20 ImplItem(i) => i.items.iter().for_each(|x| self.visit_item(x)),
21 VariantItem(i) => match i {
22 Variant::Struct(j) => j.fields.iter().for_each(|x| self.visit_item(x)),
23 Variant::Tuple(fields) => fields.iter().for_each(|x| self.visit_item(x)),
26 ExternCrateItem { src: _ }
37 | ForeignFunctionItem(_)
38 | ForeignStaticItem(_)
43 | TyAssocConstItem(..)
47 | KeywordItem(_) => {}
52 fn visit_item_recur(&mut self, item: &Item) {
54 StrippedItem(i) => self.visit_inner_recur(i),
55 _ => self.visit_inner_recur(&item.kind),
59 fn visit_mod(&mut self, m: &Module) {
60 m.items.iter().for_each(|i| self.visit_item(i))
63 fn visit_crate(&mut self, c: &Crate) {
64 self.visit_item(&c.module);
66 // FIXME: make this a simple by-ref for loop once external_traits is cleaned up
67 let external_traits = { std::mem::take(&mut *c.external_traits.borrow_mut()) };
68 for (k, v) in external_traits {
69 v.trait_.items.iter().for_each(|i| self.visit_item(i));
70 c.external_traits.borrow_mut().insert(k, v);