rustdoc: Inline static documentation across crates

This commit is contained in:
Alex Crichton 2014-06-05 17:20:59 -07:00
parent 2290dbb8cc
commit 06f3f9a0c9
3 changed files with 36 additions and 24 deletions

View File

@ -88,6 +88,10 @@ fn try_inline_def(cx: &core::DocContext,
record_extern_fqn(cx, did, clean::TypeModule); record_extern_fqn(cx, did, clean::TypeModule);
clean::ModuleItem(build_module(cx, tcx, did)) clean::ModuleItem(build_module(cx, tcx, did))
} }
ast::DefStatic(did, mtbl) => {
record_extern_fqn(cx, did, clean::TypeStatic);
clean::StaticItem(build_static(tcx, did, mtbl))
}
_ => return None, _ => return None,
}; };
let fqn = csearch::get_item_path(tcx, did); let fqn = csearch::get_item_path(tcx, did);
@ -343,3 +347,13 @@ fn build_module(cx: &core::DocContext, tcx: &ty::ctxt,
is_crate: false, is_crate: false,
} }
} }
fn build_static(tcx: &ty::ctxt,
did: ast::DefId,
mutable: bool) -> clean::Static {
clean::Static {
type_: ty::lookup_item_type(tcx, did).ty.clean(),
mutability: if mutable {clean::Mutable} else {clean::Immutable},
expr: "\n\n\n".to_string(), // trigger the "[definition]" links
}
}

View File

@ -35,6 +35,8 @@ pub struct VisSpace(pub Option<ast::Visibility>);
pub struct FnStyleSpace(pub ast::FnStyle); pub struct FnStyleSpace(pub ast::FnStyle);
/// Wrapper struct for properly emitting a method declaration. /// Wrapper struct for properly emitting a method declaration.
pub struct Method<'a>(pub &'a clean::SelfTy, pub &'a clean::FnDecl); pub struct Method<'a>(pub &'a clean::SelfTy, pub &'a clean::FnDecl);
/// Similar to VisSpace, but used for mutability
pub struct MutableSpace(pub clean::Mutability);
impl VisSpace { impl VisSpace {
pub fn get(&self) -> Option<ast::Visibility> { pub fn get(&self) -> Option<ast::Visibility> {
@ -438,24 +440,14 @@ impl fmt::Show for clean::Type {
clean::Unique(ref t) => write!(f, "~{}", **t), clean::Unique(ref t) => write!(f, "~{}", **t),
clean::Managed(ref t) => write!(f, "@{}", **t), clean::Managed(ref t) => write!(f, "@{}", **t),
clean::RawPointer(m, ref t) => { clean::RawPointer(m, ref t) => {
write!(f, "*{}{}", write!(f, "*{}{}", MutableSpace(m), **t)
match m {
clean::Mutable => "mut ",
clean::Immutable => "",
}, **t)
} }
clean::BorrowedRef{ lifetime: ref l, mutability, type_: ref ty} => { clean::BorrowedRef{ lifetime: ref l, mutability, type_: ref ty} => {
let lt = match *l { let lt = match *l {
Some(ref l) => format!("{} ", *l), Some(ref l) => format!("{} ", *l),
_ => "".to_string(), _ => "".to_string(),
}; };
write!(f, "&amp;{}{}{}", write!(f, "&amp;{}{}{}", lt, MutableSpace(mutability), **ty)
lt,
match mutability {
clean::Mutable => "mut ",
clean::Immutable => "",
},
**ty)
} }
} }
} }
@ -494,17 +486,13 @@ impl<'a> fmt::Show for Method<'a> {
clean::SelfStatic => {}, clean::SelfStatic => {},
clean::SelfValue => args.push_str("self"), clean::SelfValue => args.push_str("self"),
clean::SelfOwned => args.push_str("~self"), clean::SelfOwned => args.push_str("~self"),
clean::SelfBorrowed(Some(ref lt), clean::Immutable) => { clean::SelfBorrowed(Some(ref lt), mtbl) => {
args.push_str(format!("&amp;{} self", *lt).as_slice()); args.push_str(format!("&amp;{} {}self", *lt,
MutableSpace(mtbl)).as_slice());
} }
clean::SelfBorrowed(Some(ref lt), clean::Mutable) => { clean::SelfBorrowed(None, mtbl) => {
args.push_str(format!("&amp;{} mut self", *lt).as_slice()); args.push_str(format!("&amp;{}self",
} MutableSpace(mtbl)).as_slice());
clean::SelfBorrowed(None, clean::Mutable) => {
args.push_str("&amp;mut self");
}
clean::SelfBorrowed(None, clean::Immutable) => {
args.push_str("&amp;self");
} }
} }
for (i, input) in d.inputs.values.iter().enumerate() { for (i, input) in d.inputs.values.iter().enumerate() {
@ -605,3 +593,12 @@ impl fmt::Show for clean::ViewListIdent {
} }
} }
} }
impl fmt::Show for MutableSpace {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
MutableSpace(clean::Immutable) => Ok(()),
MutableSpace(clean::Mutable) => write!(f, "mut "),
}
}
}

View File

@ -51,7 +51,7 @@ use rustc::util::nodemap::NodeSet;
use clean; use clean;
use doctree; use doctree;
use fold::DocFolder; use fold::DocFolder;
use html::format::{VisSpace, Method, FnStyleSpace}; use html::format::{VisSpace, Method, FnStyleSpace, MutableSpace};
use html::highlight; use html::highlight;
use html::item_type::{ItemType, shortty}; use html::item_type::{ItemType, shortty};
use html::item_type; use html::item_type;
@ -1441,11 +1441,12 @@ fn item_module(w: &mut fmt::Formatter, cx: &Context,
try!(write!(w, " try!(write!(w, "
<tr> <tr>
<td><code>{}static {}: {}</code>{}</td> <td><code>{}static {}{}: {}</code>{}</td>
<td class='docblock'>{}&nbsp;</td> <td class='docblock'>{}&nbsp;</td>
</tr> </tr>
", ",
VisSpace(myitem.visibility), VisSpace(myitem.visibility),
MutableSpace(s.mutability),
*myitem.name.get_ref(), *myitem.name.get_ref(),
s.type_, s.type_,
Initializer(s.expr.as_slice(), Item { cx: cx, item: myitem }), Initializer(s.expr.as_slice(), Item { cx: cx, item: myitem }),