From e24a0172b0df21b0bc17f3c9a16773d8889dd2b1 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sun, 19 Jul 2020 16:39:20 -0400 Subject: [PATCH] Only skip impls of foreign unstable traits Previously unstable impls were skipped, which meant that any impl with an unstable method would get skipped. --- src/librustdoc/clean/inline.rs | 8 +++--- src/test/rustdoc/auxiliary/unstable-trait.rs | 26 ++++++++++++++++++++ src/test/rustdoc/hide-unstable-trait.rs | 11 +++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/test/rustdoc/auxiliary/unstable-trait.rs create mode 100644 src/test/rustdoc/hide-unstable-trait.rs diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 491daa80e5c85..1f576a17dd9d6 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -346,9 +346,11 @@ pub fn build_impl( // such. This helps prevent dependencies of the standard library, for // example, from getting documented as "traits `u32` implements" which // isn't really too helpful. - if let Some(stab) = cx.tcx.lookup_stability(did) { - if stab.level.is_unstable() { - return; + if let Some(trait_did) = associated_trait { + if let Some(stab) = cx.tcx.lookup_stability(trait_did.def_id) { + if stab.level.is_unstable() { + return; + } } } } diff --git a/src/test/rustdoc/auxiliary/unstable-trait.rs b/src/test/rustdoc/auxiliary/unstable-trait.rs new file mode 100644 index 0000000000000..6f06a6e2656d7 --- /dev/null +++ b/src/test/rustdoc/auxiliary/unstable-trait.rs @@ -0,0 +1,26 @@ +#![feature(staged_api)] +#![stable(feature = "private_general", since = "1.0.0")] + +#[unstable(feature = "private_trait", issue = "none")] +pub trait Bar {} + +#[stable(feature = "private_general", since = "1.0.0")] +pub struct Foo { + // nothing +} + +impl Foo { + #[stable(feature = "private_general", since = "1.0.0")] + pub fn stable_impl() {} +} + +impl Foo { + #[unstable(feature = "private_trait", issue = "none")] + pub fn bar() {} + + #[stable(feature = "private_general", since = "1.0.0")] + pub fn bar2() {} +} + +#[stable(feature = "private_general", since = "1.0.0")] +impl Bar for Foo {} diff --git a/src/test/rustdoc/hide-unstable-trait.rs b/src/test/rustdoc/hide-unstable-trait.rs new file mode 100644 index 0000000000000..c30d6ed7b5220 --- /dev/null +++ b/src/test/rustdoc/hide-unstable-trait.rs @@ -0,0 +1,11 @@ +// aux-build:unstable-trait.rs + +#![crate_name = "foo"] +#![feature(private_trait)] + +extern crate unstable_trait; + +// @has foo/struct.Foo.html 'bar' +// @has foo/struct.Foo.html 'bar2' +#[doc(inline)] +pub use unstable_trait::Foo;