term_rustdoc/decl/
mod.rs

1use crate::tree::IDMap;
2use rustdoc_types::{ItemEnum, Visibility};
3use std::fmt::Write;
4
5mod fn_;
6mod struct_;
7
8fn vis(v: &Visibility, buf: &mut String) {
9    match v {
10        Visibility::Public => buf.push_str("pub "),
11        Visibility::Default => (),
12        Visibility::Crate => buf.push_str("pub(crate) "),
13        Visibility::Restricted { path, .. } => _ = write!(buf, "pub({path}) "),
14    };
15}
16
17fn buf(v: &Visibility) -> String {
18    let mut buf = String::with_capacity(128);
19    vis(v, &mut buf);
20    buf
21}
22
23/// Format Item as String.
24trait Format {
25    fn parse(&self, v: &Visibility, fname: &str, map: &IDMap) -> String;
26}
27
28/// Format an Item.
29///
30/// If the id refers to non-item, the return string is empty.
31pub fn item_str(id: &str, map: &IDMap) -> String {
32    if let Some(item) = map.get_item(id) {
33        let fname = item.name.as_deref().unwrap_or("");
34        let vis = &item.visibility;
35        return match &item.inner {
36            ItemEnum::Import(reexport) => reexport
37                .id
38                .as_ref()
39                .map(|id| item_str(&id.0, map))
40                .unwrap_or_default(),
41            ItemEnum::Function(f) => f.parse(vis, fname, map),
42            ItemEnum::Struct(s) => s.parse(vis, fname, map),
43            _ => String::new(),
44        };
45    }
46    String::new()
47}