1 | use crate::clean::*; |
---|---|
2 | |
3 | pub(crate) trait DocVisitor: Sized { |
4 | fn visit_item(&mut self, item: &Item) { |
5 | self.visit_item_recur(item) |
6 | } |
7 | |
8 | /// don't override! |
9 | fn visit_inner_recur(&mut self, kind: &ItemKind) { |
10 | match kind { |
11 | StrippedItem(..) => unreachable!(), |
12 | ModuleItem(i) => { |
13 | self.visit_mod(i); |
14 | } |
15 | StructItem(i) => i.fields.iter().for_each(|x| self.visit_item(x)), |
16 | UnionItem(i) => i.fields.iter().for_each(|x| self.visit_item(x)), |
17 | EnumItem(i) => i.variants.iter().for_each(|x| self.visit_item(x)), |
18 | TraitItem(i) => i.items.iter().for_each(|x| self.visit_item(x)), |
19 | ImplItem(i) => i.items.iter().for_each(|x| self.visit_item(x)), |
20 | VariantItem(i) => match &i.kind { |
21 | VariantKind::Struct(j) => j.fields.iter().for_each(|x| self.visit_item(x)), |
22 | VariantKind::Tuple(fields) => fields.iter().for_each(|x| self.visit_item(x)), |
23 | VariantKind::CLike => {} |
24 | }, |
25 | ExternCrateItem { src: _ } |
26 | | ImportItem(_) |
27 | | FunctionItem(_) |
28 | | TypeAliasItem(_) |
29 | | OpaqueTyItem(_) |
30 | | StaticItem(_) |
31 | | ConstantItem(_) |
32 | | TraitAliasItem(_) |
33 | | TyMethodItem(_) |
34 | | MethodItem(_, _) |
35 | | StructFieldItem(_) |
36 | | ForeignFunctionItem(_) |
37 | | ForeignStaticItem(_) |
38 | | ForeignTypeItem |
39 | | MacroItem(_) |
40 | | ProcMacroItem(_) |
41 | | PrimitiveItem(_) |
42 | | TyAssocConstItem(..) |
43 | | AssocConstItem(..) |
44 | | TyAssocTypeItem(..) |
45 | | AssocTypeItem(..) |
46 | | KeywordItem => {} |
47 | } |
48 | } |
49 | |
50 | /// don't override! |
51 | fn visit_item_recur(&mut self, item: &Item) { |
52 | match &*item.kind { |
53 | StrippedItem(i) => self.visit_inner_recur(i), |
54 | _ => self.visit_inner_recur(&item.kind), |
55 | } |
56 | } |
57 | |
58 | fn visit_mod(&mut self, m: &Module) { |
59 | m.items.iter().for_each(|i| self.visit_item(i)) |
60 | } |
61 | |
62 | fn visit_crate(&mut self, c: &Crate) { |
63 | self.visit_item(&c.module); |
64 | |
65 | // FIXME: make this a simple by-ref for loop once external_traits is cleaned up |
66 | let external_traits = { std::mem::take(&mut *c.external_traits.borrow_mut()) }; |
67 | for (k, v) in external_traits { |
68 | v.items.iter().for_each(|i| self.visit_item(i)); |
69 | c.external_traits.borrow_mut().insert(k, v); |
70 | } |
71 | } |
72 | } |
73 |