]> git.proxmox.com Git - rustc.git/blame - src/librustdoc/visit.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / src / librustdoc / visit.rs
CommitLineData
3c0e092e
XL
1use crate::clean::*;
2
923072b8 3pub(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}