Skip to content

Commit

Permalink
rustdoc: Properly inline const items
Browse files Browse the repository at this point in the history
Build `clean::ConstantItem` values in the `inline` module and
pretty-print the AST for inlined const items.

Doc strings are still missing from inlined constants (see #19773).

Partially address #18156, #19722, #19185

Fix #15821
  • Loading branch information
tomjakubowski committed Dec 12, 2014
1 parent d2e2bd1 commit 25223c8
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
22 changes: 22 additions & 0 deletions src/librustdoc/clean/inline.rs
Expand Up @@ -104,6 +104,10 @@ fn try_inline_def(cx: &DocContext, tcx: &ty::ctxt,
record_extern_fqn(cx, did, clean::TypeStatic);
clean::StaticItem(build_static(cx, tcx, did, mtbl))
}
def::DefConst(did) => {
record_extern_fqn(cx, did, clean::TypeConst);
clean::ConstantItem(build_const(cx, tcx, did))
}
_ => return None,
};
let fqn = csearch::get_item_path(tcx, did);
Expand Down Expand Up @@ -387,6 +391,24 @@ fn build_module(cx: &DocContext, tcx: &ty::ctxt,
}
}

fn build_const(cx: &DocContext, tcx: &ty::ctxt,
did: ast::DefId) -> clean::Constant {
use rustc::middle::const_eval;
use syntax::print::pprust;

let expr = const_eval::lookup_const_by_id(tcx, did).unwrap_or_else(|| {
panic!("expected lookup_const_by_id to succeed for {}", did);
});
debug!("converting constant expr {} to snippet", expr);
let sn = pprust::expr_to_string(expr);
debug!("got snippet {}", sn);

clean::Constant {
type_: ty::lookup_item_type(tcx, did).ty.clean(cx),
expr: sn
}
}

fn build_static(cx: &DocContext, tcx: &ty::ctxt,
did: ast::DefId,
mutable: bool) -> clean::Static {
Expand Down
3 changes: 2 additions & 1 deletion src/librustdoc/clean/mod.rs
Expand Up @@ -1185,6 +1185,7 @@ pub enum TypeKind {
TypeEnum,
TypeFunction,
TypeModule,
TypeConst,
TypeStatic,
TypeStruct,
TypeTrait,
Expand Down Expand Up @@ -1818,7 +1819,7 @@ impl Clean<Item> for doctree::Static {
}
}

#[deriving(Clone, Encodable, Decodable)]
#[deriving(Clone, Encodable, Decodable, Show)]
pub struct Constant {
pub type_: Type,
pub expr: String,
Expand Down
1 change: 1 addition & 0 deletions src/librustdoc/html/item_type.rs
Expand Up @@ -76,6 +76,7 @@ impl ItemType {
clean::TypeTrait => ItemType::Trait,
clean::TypeModule => ItemType::Module,
clean::TypeStatic => ItemType::Static,
clean::TypeConst => ItemType::Constant,
clean::TypeVariant => ItemType::Variant,
clean::TypeTypedef => ItemType::Typedef,
}
Expand Down

0 comments on commit 25223c8

Please sign in to comment.