]>
Commit | Line | Data |
---|---|---|
3c0e092e XL |
1 | use crate::clean::*; |
2 | ||
923072b8 | 3 | pub(crate) trait DocVisitor: Sized { |
3c0e092e XL |
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); | |
3c0e092e XL |
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 { | |
21 | Variant::Struct(j) => j.fields.iter().for_each(|x| self.visit_item(x)), | |
22 | Variant::Tuple(fields) => fields.iter().for_each(|x| self.visit_item(x)), | |
23 | Variant::CLike => {} | |
24 | }, | |
25 | ExternCrateItem { src: _ } | |
26 | | ImportItem(_) | |
27 | | FunctionItem(_) | |
04454e1e | 28 | | TypedefItem(_) |
3c0e092e XL |
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(_) | |
04454e1e FG |
42 | | TyAssocConstItem(..) |
43 | | AssocConstItem(..) | |
44 | | TyAssocTypeItem(..) | |
5e7ed085 | 45 | | AssocTypeItem(..) |
3c0e092e XL |
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.trait_.items.iter().for_each(|i| self.visit_item(i)); | |
69 | c.external_traits.borrow_mut().insert(k, v); | |
70 | } | |
71 | } | |
72 | } |