From deeeaf0ddbe3c5244442f3d12d0eaed512d65e75 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 16 Mar 2013 16:17:56 -0700 Subject: [PATCH] rustdoc: Show all impls of traits. #5406 --- src/librustdoc/prune_private_pass.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/prune_private_pass.rs b/src/librustdoc/prune_private_pass.rs index 17f11de8aebfc..67dbc659f9e71 100644 --- a/src/librustdoc/prune_private_pass.rs +++ b/src/librustdoc/prune_private_pass.rs @@ -59,7 +59,19 @@ fn is_visible(srv: astsrv::Srv, doc: doc::ItemDoc) -> bool { do astsrv::exec(srv) |ctxt| { match ctxt.ast_map.get(&id) { ast_map::node_item(item, _) => { - item.vis == ast::public + match item.node { + ast::item_impl(_, Some(_), _, _) => { + // This is a trait implementation, make it visible + // NOTE: This is not quite right since this could be an impl + // of a private trait. We can't know that without running + // resolve though. + true + } + _ => { + // Otherwise just look at the visibility + item.vis == ast::public + } + } } _ => util::unreachable() } @@ -72,6 +84,16 @@ fn should_prune_items_without_pub_modifier() { fail_unless!(vec::is_empty(doc.cratemod().mods())); } +#[test] +fn unless_they_are_trait_impls() { + let doc = test::mk_doc( + ~" \ + trait Foo { } \ + impl Foo for int { } \ + "); + fail_unless!(!doc.cratemod().impls().is_empty()); +} + #[cfg(test)] pub mod test { use astsrv;