#![feature(staged_api)] #![feature(rustc_attrs)] #![feature(rustdoc_internals)] #![stable(feature = "core", since = "1.6.0")] //@ has stability/index.html //@ has - '//ul[@class="item-table"]/li[1]//a' AaStable //@ has - '//ul[@class="item-table"]/li[2]//a' ZzStable //@ has - '//ul[@class="item-table"]/li[3]//a' Unstable #[stable(feature = "rust2", since = "2.2.2")] pub struct AaStable; #[unstable(feature = "test", issue = "none")] pub struct Unstable { //@ has stability/struct.Unstable.html \ // '//span[@class="item-info"]//div[@class="stab unstable"]' \ // 'This is a nightly-only experimental API' //@ count stability/struct.Unstable.html '//span[@class="stab unstable"]' 0 pub foo: u32, pub bar: u32, } #[stable(feature = "rust2", since = "2.2.2")] pub struct ZzStable; #[unstable(feature = "unstable", issue = "none")] pub mod unstable { //@ !hasraw stability/unstable/struct.StableInUnstable.html \ // '//div[@class="main-heading"]//span[@class="since"]' //@ has - '//div[@class="stab unstable"]' 'experimental' #[stable(feature = "rust1", since = "1.0.0")] pub struct StableInUnstable; #[stable(feature = "rust1", since = "1.0.0")] pub mod stable_in_unstable { //@ !hasraw stability/unstable/stable_in_unstable/struct.Inner.html \ // '//div[@class="main-heading"]//span[@class="since"]' //@ has - '//div[@class="stab unstable"]' 'experimental' #[stable(feature = "rust1", since = "1.0.0")] pub struct Inner; } //@ has stability/struct.AaStable.html \ // '//*[@id="method.foo"]//span[@class="since"]' '2.2.2' impl super::AaStable { #[stable(feature = "rust2", since = "2.2.2")] pub fn foo() {} } //@ has stability/unstable/struct.StableInUnstable.html \ // '//*[@id="method.foo"]//span[@class="since"]' '1.0.0' impl StableInUnstable { #[stable(feature = "rust1", since = "1.0.0")] pub fn foo() {} } } #[unstable(feature = "unstable", issue = "none")] #[doc(hidden)] pub mod unstable_stripped { //@ has stability/struct.AaStable.html \ // '//*[@id="method.foo"]//span[@class="since"]' '2.2.2' impl super::AaStable { #[stable(feature = "rust2", since = "2.2.2")] pub fn foo() {} } } #[stable(feature = "rust2", since = "2.2.2")] pub mod stable_later { //@ has stability/stable_later/struct.StableInLater.html \ // '//div[@class="main-heading"]//span[@class="since"]' '2.2.2' #[stable(feature = "rust1", since = "1.0.0")] pub struct StableInLater; #[stable(feature = "rust1", since = "1.0.0")] pub mod stable_in_later { //@ has stability/stable_later/stable_in_later/struct.Inner.html \ // '//div[@class="main-heading"]//span[@class="since"]' '2.2.2' #[stable(feature = "rust1", since = "1.0.0")] pub struct Inner; } } #[stable(feature = "rust1", since = "1.0.0")] #[rustc_allowed_through_unstable_modules] pub mod stable_earlier1 { //@ has stability/stable_earlier1/struct.StableInUnstable.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.0.0' //@ has - '//*[@id="method.foo"]//span[@class="since"]' '1.0.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::unstable::StableInUnstable; //@ has stability/stable_earlier1/stable_in_unstable/struct.Inner.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.0.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::unstable::stable_in_unstable; //@ has stability/stable_earlier1/struct.StableInLater.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.0.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::stable_later::StableInLater; //@ has stability/stable_earlier1/stable_in_later/struct.Inner.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.0.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::stable_later::stable_in_later; } /// These will inherit the crate stability. #[stable(feature = "rust1", since = "1.0.0")] pub mod stable_earlier2 { //@ has stability/stable_earlier2/struct.StableInUnstable.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.6.0' //@ has - '//*[@id="method.foo"]//span[@class="since"]' '1.0.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::unstable::StableInUnstable; //@ has stability/stable_earlier2/stable_in_unstable/struct.Inner.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.6.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::unstable::stable_in_unstable; //@ has stability/stable_earlier2/struct.StableInLater.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.6.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::stable_later::StableInLater; //@ has stability/stable_earlier2/stable_in_later/struct.Inner.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.6.0' #[doc(inline)] #[stable(feature = "rust1", since = "1.0.0")] pub use crate::stable_later::stable_in_later; } //@ !hasraw stability/trait.UnstableTraitWithStableMethod.html \ // '//div[@class="main-heading"]//span[@class="since"]' //@ has - '//*[@id="tymethod.foo"]//span[@class="since"]' '1.0.0' //@ has - '//*[@id="method.bar"]//span[@class="since"]' '1.0.0' #[unstable(feature = "unstable", issue = "none")] pub trait UnstableTraitWithStableMethod { #[stable(feature = "rust1", since = "1.0.0")] fn foo(); #[stable(feature = "rust1", since = "1.0.0")] fn bar() {} } //@ has stability/primitive.i32.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.0.0' #[rustc_doc_primitive = "i32"] // /// `i32` is always stable in 1.0, even if you look at it from core. #[stable(feature = "rust1", since = "1.0.0")] mod prim_i32 {} //@ has stability/keyword.if.html \ // '//div[@class="main-heading"]//span[@class="since"]' '1.0.0' #[doc(keyword = "if")] // /// We currently don't document stability for keywords, but let's test it anyway. #[stable(feature = "rust1", since = "1.0.0")] mod if_keyword {}