From 06f3f9a0c9f25c92b7362a4af6067df8902bd057 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 5 Jun 2014 17:20:59 -0700 Subject: [PATCH] rustdoc: Inline static documentation across crates --- src/librustdoc/clean/inline.rs | 14 ++++++++++++ src/librustdoc/html/format.rs | 41 ++++++++++++++++------------------ src/librustdoc/html/render.rs | 5 +++-- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 9db9a0e7612..e9ea3a7b304 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -88,6 +88,10 @@ fn try_inline_def(cx: &core::DocContext, record_extern_fqn(cx, did, clean::TypeModule); 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, }; let fqn = csearch::get_item_path(tcx, did); @@ -343,3 +347,13 @@ fn build_module(cx: &core::DocContext, tcx: &ty::ctxt, 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 + } +} diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 51d2a67d6cb..1706f00b70a 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -35,6 +35,8 @@ pub struct VisSpace(pub Option); pub struct FnStyleSpace(pub ast::FnStyle); /// Wrapper struct for properly emitting a method declaration. 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 { pub fn get(&self) -> Option { @@ -438,24 +440,14 @@ impl fmt::Show for clean::Type { clean::Unique(ref t) => write!(f, "~{}", **t), clean::Managed(ref t) => write!(f, "@{}", **t), clean::RawPointer(m, ref t) => { - write!(f, "*{}{}", - match m { - clean::Mutable => "mut ", - clean::Immutable => "", - }, **t) + write!(f, "*{}{}", MutableSpace(m), **t) } clean::BorrowedRef{ lifetime: ref l, mutability, type_: ref ty} => { let lt = match *l { Some(ref l) => format!("{} ", *l), _ => "".to_string(), }; - write!(f, "&{}{}{}", - lt, - match mutability { - clean::Mutable => "mut ", - clean::Immutable => "", - }, - **ty) + write!(f, "&{}{}{}", lt, MutableSpace(mutability), **ty) } } } @@ -494,17 +486,13 @@ impl<'a> fmt::Show for Method<'a> { clean::SelfStatic => {}, clean::SelfValue => args.push_str("self"), clean::SelfOwned => args.push_str("~self"), - clean::SelfBorrowed(Some(ref lt), clean::Immutable) => { - args.push_str(format!("&{} self", *lt).as_slice()); + clean::SelfBorrowed(Some(ref lt), mtbl) => { + args.push_str(format!("&{} {}self", *lt, + MutableSpace(mtbl)).as_slice()); } - clean::SelfBorrowed(Some(ref lt), clean::Mutable) => { - args.push_str(format!("&{} mut self", *lt).as_slice()); - } - clean::SelfBorrowed(None, clean::Mutable) => { - args.push_str("&mut self"); - } - clean::SelfBorrowed(None, clean::Immutable) => { - args.push_str("&self"); + clean::SelfBorrowed(None, mtbl) => { + args.push_str(format!("&{}self", + MutableSpace(mtbl)).as_slice()); } } 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 "), + } + } +} diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 4ef3297912f..086232104e3 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -51,7 +51,7 @@ use rustc::util::nodemap::NodeSet; use clean; use doctree; use fold::DocFolder; -use html::format::{VisSpace, Method, FnStyleSpace}; +use html::format::{VisSpace, Method, FnStyleSpace, MutableSpace}; use html::highlight; use html::item_type::{ItemType, shortty}; use html::item_type; @@ -1441,11 +1441,12 @@ fn item_module(w: &mut fmt::Formatter, cx: &Context, try!(write!(w, " - {}static {}: {}{} + {}static {}{}: {}{} {}  ", VisSpace(myitem.visibility), + MutableSpace(s.mutability), *myitem.name.get_ref(), s.type_, Initializer(s.expr.as_slice(), Item { cx: cx, item: myitem }),