rustdoc: Put primitives in respective modules
The logical location for the documentation of a primitive is in the module that declared it was a module for that primitive.
This commit is contained in:
parent
f02f739a82
commit
1827241840
|
@ -93,6 +93,7 @@ impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
|
||||||
cx.sess().cstore.iter_crate_data(|n, meta| {
|
cx.sess().cstore.iter_crate_data(|n, meta| {
|
||||||
externs.push((n, meta.clean()));
|
externs.push((n, meta.clean()));
|
||||||
});
|
});
|
||||||
|
externs.sort_by(|&(a, _), &(b, _)| a.cmp(&b));
|
||||||
|
|
||||||
// Figure out the name of this crate
|
// Figure out the name of this crate
|
||||||
let input = driver::FileInput(cx.src.clone());
|
let input = driver::FileInput(cx.src.clone());
|
||||||
|
@ -132,24 +133,33 @@ impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
let mut tmp = Vec::new();
|
let mut tmp = Vec::new();
|
||||||
for child in m.items.iter() {
|
for child in m.items.mut_iter() {
|
||||||
match child.inner {
|
let inner = match child.inner {
|
||||||
ModuleItem(..) => {},
|
ModuleItem(ref mut m) => m,
|
||||||
_ => continue,
|
_ => continue,
|
||||||
}
|
};
|
||||||
let prim = match Primitive::find(child.attrs.as_slice()) {
|
let prim = match Primitive::find(child.attrs.as_slice()) {
|
||||||
Some(prim) => prim,
|
Some(prim) => prim,
|
||||||
None => continue,
|
None => continue,
|
||||||
};
|
};
|
||||||
primitives.push(prim);
|
primitives.push(prim);
|
||||||
tmp.push(Item {
|
let mut i = Item {
|
||||||
source: Span::empty(),
|
source: Span::empty(),
|
||||||
name: Some(prim.to_url_str().to_string()),
|
name: Some(prim.to_url_str().to_string()),
|
||||||
attrs: child.attrs.clone(),
|
attrs: Vec::new(),
|
||||||
visibility: Some(ast::Public),
|
visibility: None,
|
||||||
def_id: ast_util::local_def(prim.to_node_id()),
|
def_id: ast_util::local_def(prim.to_node_id()),
|
||||||
inner: PrimitiveItem(prim),
|
inner: PrimitiveItem(prim),
|
||||||
});
|
};
|
||||||
|
// Push one copy to get indexed for the whole crate, and push a
|
||||||
|
// another copy in the proper location which will actually get
|
||||||
|
// documented. The first copy will also serve as a redirect to
|
||||||
|
// the other copy.
|
||||||
|
tmp.push(i.clone());
|
||||||
|
i.visibility = Some(ast::Public);
|
||||||
|
i.attrs = child.attrs.clone();
|
||||||
|
inner.items.push(i);
|
||||||
|
|
||||||
}
|
}
|
||||||
m.items.extend(tmp.move_iter());
|
m.items.extend(tmp.move_iter());
|
||||||
}
|
}
|
||||||
|
@ -1027,7 +1037,7 @@ pub enum Type {
|
||||||
// region, raw, other boxes, mutable
|
// region, raw, other boxes, mutable
|
||||||
}
|
}
|
||||||
|
|
||||||
#[deriving(Clone, Encodable, Decodable, PartialEq, TotalEq, Hash)]
|
#[deriving(Clone, Encodable, Decodable, PartialEq, Eq, Hash)]
|
||||||
pub enum Primitive {
|
pub enum Primitive {
|
||||||
Int, I8, I16, I32, I64,
|
Int, I8, I16, I32, I64,
|
||||||
Uint, U8, U16, U32, U64,
|
Uint, U8, U16, U32, U64,
|
||||||
|
|
|
@ -867,6 +867,12 @@ impl DocFolder for Cache {
|
||||||
stack.pop();
|
stack.pop();
|
||||||
self.paths.insert(item.def_id, (stack, item_type::Enum));
|
self.paths.insert(item.def_id, (stack, item_type::Enum));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clean::PrimitiveItem(..) if item.visibility.is_some() => {
|
||||||
|
self.paths.insert(item.def_id, (self.stack.clone(),
|
||||||
|
shortty(&item)));
|
||||||
|
}
|
||||||
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1082,21 +1088,21 @@ impl Context {
|
||||||
writer.flush()
|
writer.flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Private modules may survive the strip-private pass if they
|
||||||
|
// contain impls for public types. These modules can also
|
||||||
|
// contain items such as publicly reexported structures.
|
||||||
|
//
|
||||||
|
// External crates will provide links to these structures, so
|
||||||
|
// these modules are recursed into, but not rendered normally (a
|
||||||
|
// flag on the context).
|
||||||
|
if !self.render_redirect_pages {
|
||||||
|
self.render_redirect_pages = ignore_private_item(&item);
|
||||||
|
}
|
||||||
|
|
||||||
match item.inner {
|
match item.inner {
|
||||||
// modules are special because they add a namespace. We also need to
|
// modules are special because they add a namespace. We also need to
|
||||||
// recurse into the items of the module as well.
|
// recurse into the items of the module as well.
|
||||||
clean::ModuleItem(..) => {
|
clean::ModuleItem(..) => {
|
||||||
// Private modules may survive the strip-private pass if they
|
|
||||||
// contain impls for public types. These modules can also
|
|
||||||
// contain items such as publicly reexported structures.
|
|
||||||
//
|
|
||||||
// External crates will provide links to these structures, so
|
|
||||||
// these modules are recursed into, but not rendered normally (a
|
|
||||||
// flag on the context).
|
|
||||||
if !self.render_redirect_pages {
|
|
||||||
self.render_redirect_pages = ignore_private_module(&item);
|
|
||||||
}
|
|
||||||
|
|
||||||
let name = item.name.get_ref().to_string();
|
let name = item.name.get_ref().to_string();
|
||||||
let mut item = Some(item);
|
let mut item = Some(item);
|
||||||
self.recurse(name, |this| {
|
self.recurse(name, |this| {
|
||||||
|
@ -1330,7 +1336,7 @@ fn item_module(w: &mut fmt::Formatter, cx: &Context,
|
||||||
item: &clean::Item, items: &[clean::Item]) -> fmt::Result {
|
item: &clean::Item, items: &[clean::Item]) -> fmt::Result {
|
||||||
try!(document(w, item));
|
try!(document(w, item));
|
||||||
let mut indices = range(0, items.len()).filter(|i| {
|
let mut indices = range(0, items.len()).filter(|i| {
|
||||||
!ignore_private_module(&items[*i])
|
!ignore_private_item(&items[*i])
|
||||||
}).collect::<Vec<uint>>();
|
}).collect::<Vec<uint>>();
|
||||||
|
|
||||||
fn cmp(i1: &clean::Item, i2: &clean::Item, idx1: uint, idx2: uint) -> Ordering {
|
fn cmp(i1: &clean::Item, i2: &clean::Item, idx1: uint, idx2: uint) -> Ordering {
|
||||||
|
@ -2016,7 +2022,7 @@ impl<'a> fmt::Show for Sidebar<'a> {
|
||||||
fn build_sidebar(m: &clean::Module) -> HashMap<String, Vec<String>> {
|
fn build_sidebar(m: &clean::Module) -> HashMap<String, Vec<String>> {
|
||||||
let mut map = HashMap::new();
|
let mut map = HashMap::new();
|
||||||
for item in m.items.iter() {
|
for item in m.items.iter() {
|
||||||
if ignore_private_module(item) { continue }
|
if ignore_private_item(item) { continue }
|
||||||
|
|
||||||
let short = shortty(item).to_static_str();
|
let short = shortty(item).to_static_str();
|
||||||
let myname = match item.name {
|
let myname = match item.name {
|
||||||
|
@ -2066,12 +2072,13 @@ fn item_primitive(w: &mut fmt::Formatter,
|
||||||
render_methods(w, it)
|
render_methods(w, it)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ignore_private_module(it: &clean::Item) -> bool {
|
fn ignore_private_item(it: &clean::Item) -> bool {
|
||||||
match it.inner {
|
match it.inner {
|
||||||
clean::ModuleItem(ref m) => {
|
clean::ModuleItem(ref m) => {
|
||||||
(m.items.len() == 0 && it.doc_value().is_none()) ||
|
(m.items.len() == 0 && it.doc_value().is_none()) ||
|
||||||
it.visibility != Some(ast::Public)
|
it.visibility != Some(ast::Public)
|
||||||
}
|
}
|
||||||
|
clean::PrimitiveItem(..) => it.visibility != Some(ast::Public),
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue