Simplify included import items handling
This commit is contained in:
parent
bfdfc66f73
commit
6bea76f175
|
@ -498,7 +498,7 @@ fn build_module(cx: &DocContext<'_>, did: DefId, visited: &mut FxHashSet<DefId>)
|
||||||
visibility: clean::Public,
|
visibility: clean::Public,
|
||||||
stability: None,
|
stability: None,
|
||||||
deprecation: None,
|
deprecation: None,
|
||||||
inner: clean::ImportItem(clean::Import::Simple(
|
inner: clean::ImportItem(clean::Import::new_simple(
|
||||||
item.ident.to_string(),
|
item.ident.to_string(),
|
||||||
clean::ImportSource {
|
clean::ImportSource {
|
||||||
path: clean::Path {
|
path: clean::Path {
|
||||||
|
@ -514,7 +514,7 @@ fn build_module(cx: &DocContext<'_>, did: DefId, visited: &mut FxHashSet<DefId>)
|
||||||
},
|
},
|
||||||
did: None,
|
did: None,
|
||||||
},
|
},
|
||||||
false,
|
true,
|
||||||
)),
|
)),
|
||||||
});
|
});
|
||||||
} else if let Some(i) =
|
} else if let Some(i) =
|
||||||
|
|
|
@ -2269,12 +2269,12 @@ impl Clean<Vec<Item>> for doctree::Import<'_> {
|
||||||
visibility: self.vis.clean(cx),
|
visibility: self.vis.clean(cx),
|
||||||
stability: None,
|
stability: None,
|
||||||
deprecation: None,
|
deprecation: None,
|
||||||
inner: ImportItem(Import::Glob(resolve_use_source(cx, path), false)),
|
inner: ImportItem(Import::new_glob(resolve_use_source(cx, path), false)),
|
||||||
});
|
});
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Import::Glob(resolve_use_source(cx, path), true)
|
Import::new_glob(resolve_use_source(cx, path), true)
|
||||||
} else {
|
} else {
|
||||||
let name = self.name;
|
let name = self.name;
|
||||||
if !please_inline {
|
if !please_inline {
|
||||||
|
@ -2297,9 +2297,6 @@ impl Clean<Vec<Item>> for doctree::Import<'_> {
|
||||||
Some(self.attrs),
|
Some(self.attrs),
|
||||||
&mut visited,
|
&mut visited,
|
||||||
) {
|
) {
|
||||||
// In case this is a macro, we don't want to show the reexport, only the macro
|
|
||||||
// itself.
|
|
||||||
let is_macro = matches!(path.res, Res::Def(DefKind::Macro(_), _));
|
|
||||||
items.push(Item {
|
items.push(Item {
|
||||||
name: None,
|
name: None,
|
||||||
attrs: self.attrs.clean(cx),
|
attrs: self.attrs.clean(cx),
|
||||||
|
@ -2308,16 +2305,16 @@ impl Clean<Vec<Item>> for doctree::Import<'_> {
|
||||||
visibility: self.vis.clean(cx),
|
visibility: self.vis.clean(cx),
|
||||||
stability: None,
|
stability: None,
|
||||||
deprecation: None,
|
deprecation: None,
|
||||||
inner: ImportItem(Import::Simple(
|
inner: ImportItem(Import::new_simple(
|
||||||
self.name.clean(cx),
|
self.name.clean(cx),
|
||||||
resolve_use_source(cx, path),
|
resolve_use_source(cx, path),
|
||||||
is_macro,
|
false,
|
||||||
)),
|
)),
|
||||||
});
|
});
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Import::Simple(name.clean(cx), resolve_use_source(cx, path), false)
|
Import::new_simple(name.clean(cx), resolve_use_source(cx, path), true)
|
||||||
};
|
};
|
||||||
|
|
||||||
vec![Item {
|
vec![Item {
|
||||||
|
|
|
@ -177,6 +177,7 @@ impl Item {
|
||||||
pub fn is_stripped(&self) -> bool {
|
pub fn is_stripped(&self) -> bool {
|
||||||
match self.inner {
|
match self.inner {
|
||||||
StrippedItem(..) => true,
|
StrippedItem(..) => true,
|
||||||
|
ImportItem(ref i) => !i.should_be_displayed,
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1653,22 +1654,28 @@ pub struct Impl {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub enum Import {
|
pub struct Import {
|
||||||
// use source as str;
|
pub kind: ImportKind,
|
||||||
// The bool indicates whether it imports a macro or not.
|
pub source: ImportSource,
|
||||||
Simple(String, ImportSource, bool),
|
pub should_be_displayed: bool,
|
||||||
// use source::*;
|
|
||||||
// The bool indicates whether this is from an import.
|
|
||||||
Glob(ImportSource, bool),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Import {
|
impl Import {
|
||||||
pub fn should_be_displayed(&self) -> bool {
|
pub fn new_simple(name: String, source: ImportSource, should_be_displayed: bool) -> Self {
|
||||||
match *self {
|
Self { kind: ImportKind::Simple(name), source, should_be_displayed }
|
||||||
Self::Simple(_, _, is_macro) => !is_macro,
|
|
||||||
Self::Glob(_, is_from_import) => is_from_import,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_glob(source: ImportSource, should_be_displayed: bool) -> Self {
|
||||||
|
Self { kind: ImportKind::Glob, source, should_be_displayed }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub enum ImportKind {
|
||||||
|
// use source as str;
|
||||||
|
Simple(String),
|
||||||
|
// use source::*;
|
||||||
|
Glob,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
|
@ -1149,19 +1149,19 @@ impl PrintWithSpace for hir::Mutability {
|
||||||
|
|
||||||
impl clean::Import {
|
impl clean::Import {
|
||||||
crate fn print(&self) -> impl fmt::Display + '_ {
|
crate fn print(&self) -> impl fmt::Display + '_ {
|
||||||
display_fn(move |f| match *self {
|
display_fn(move |f| match self.kind {
|
||||||
clean::Import::Simple(ref name, ref src, _) => {
|
clean::ImportKind::Simple(ref name) => {
|
||||||
if *name == src.path.last_name() {
|
if *name == self.source.path.last_name() {
|
||||||
write!(f, "use {};", src.print())
|
write!(f, "use {};", self.source.print())
|
||||||
} else {
|
} else {
|
||||||
write!(f, "use {} as {};", src.print(), *name)
|
write!(f, "use {} as {};", self.source.print(), *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clean::Import::Glob(ref src, _) => {
|
clean::ImportKind::Glob => {
|
||||||
if src.path.segments.is_empty() {
|
if self.source.path.segments.is_empty() {
|
||||||
write!(f, "use *;")
|
write!(f, "use *;")
|
||||||
} else {
|
} else {
|
||||||
write!(f, "use {}::*;", src.print())
|
write!(f, "use {}::*;", self.source.print())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -2074,14 +2074,12 @@ fn item_module(w: &mut Buffer, cx: &Context, item: &clean::Item, items: &[clean:
|
||||||
}
|
}
|
||||||
|
|
||||||
clean::ImportItem(ref import) => {
|
clean::ImportItem(ref import) => {
|
||||||
if import.should_be_displayed() {
|
write!(
|
||||||
write!(
|
w,
|
||||||
w,
|
"<tr><td><code>{}{}</code></td></tr>",
|
||||||
"<tr><td><code>{}{}</code></td></tr>",
|
myitem.visibility.print_with_space(),
|
||||||
myitem.visibility.print_with_space(),
|
import.print()
|
||||||
import.print()
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -4440,8 +4438,9 @@ fn item_ty_to_strs(ty: &ItemType) -> (&'static str, &'static str) {
|
||||||
fn sidebar_module(buf: &mut Buffer, items: &[clean::Item]) {
|
fn sidebar_module(buf: &mut Buffer, items: &[clean::Item]) {
|
||||||
let mut sidebar = String::new();
|
let mut sidebar = String::new();
|
||||||
|
|
||||||
if items.iter().any(|it| it.type_() == ItemType::ExternCrate || it.type_() == ItemType::Import)
|
if items.iter().any(|it| {
|
||||||
{
|
it.type_() == ItemType::ExternCrate || (it.type_() == ItemType::Import && !it.is_stripped())
|
||||||
|
}) {
|
||||||
sidebar.push_str(&format!(
|
sidebar.push_str(&format!(
|
||||||
"<li><a href=\"#{id}\">{name}</a></li>",
|
"<li><a href=\"#{id}\">{name}</a></li>",
|
||||||
id = "reexports",
|
id = "reexports",
|
||||||
|
|
|
@ -758,7 +758,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
|
||||||
debug!("ignoring extern crate item {:?}", item.def_id);
|
debug!("ignoring extern crate item {:?}", item.def_id);
|
||||||
return self.fold_item_recur(item);
|
return self.fold_item_recur(item);
|
||||||
}
|
}
|
||||||
ImportItem(Import::Simple(ref name, ..)) => Some(name.clone()),
|
ImportItem(Import { kind: ImportKind::Simple(ref name, ..), .. }) => Some(name.clone()),
|
||||||
MacroItem(..) => None,
|
MacroItem(..) => None,
|
||||||
_ => item.name.clone(),
|
_ => item.name.clone(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
|
// @!has 'foo/index.html' '//code' 'pub use self::i32;'
|
||||||
|
// @has 'foo/index.html' '//tr[@class="module-item"]' 'i32'
|
||||||
|
// @has 'foo/i32/index.html'
|
||||||
|
pub use std::i32;
|
||||||
|
// @!has 'foo/index.html' '//code' 'pub use self::string::String;'
|
||||||
|
// @has 'foo/index.html' '//tr[@class="module-item"]' 'String'
|
||||||
|
pub use std::string::String;
|
||||||
|
// @!has 'foo/index.html' '//code' 'pub use self::string::*;'
|
||||||
|
pub use std::string::*;
|
Loading…
Reference in New Issue