6008f2c982
This commit makes several changes to the stability index infrastructure: * Stability levels are now inherited lexically, i.e., each item's stability level becomes the default for any nested items. * The computed stability level for an item is stored as part of the metadata. When using an item from an external crate, this data is looked up and cached. * The stability lint works from the computed stability level, rather than manual stability attribute annotations. However, the lint still checks only a limited set of item uses (e.g., it does not check every component of a path on import). This will be addressed in a later PR, as part of issue #8962. * The stability lint only applies to items originating from external crates, since the stability index is intended as a promise to downstream crates. * The "experimental" lint is now _allow_ by default. This is because almost all existing crates have been marked "experimental", pending library stabilization. With inheritance in place, this would generate a massive explosion of warnings for every Rust program. The lint should be changed back to deny-by-default after library stabilization is complete. * The "deprecated" lint still warns by default. The net result: we can begin tracking stability index for the standard libraries as we stabilize, without impacting most clients. Closes #13540.
52 lines
1.0 KiB
Rust
52 lines
1.0 KiB
Rust
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
#![crate_id="inherited_stability#0.1"]
|
|
#![crate_type = "lib"]
|
|
#![experimental]
|
|
|
|
pub fn experimental() {}
|
|
|
|
#[stable]
|
|
pub fn stable() {}
|
|
|
|
#[stable]
|
|
pub mod stable_mod {
|
|
#[experimental]
|
|
pub fn experimental() {}
|
|
|
|
pub fn stable() {}
|
|
}
|
|
|
|
pub mod experimental_mod {
|
|
pub fn experimental() {}
|
|
|
|
#[stable]
|
|
pub fn stable() {}
|
|
}
|
|
|
|
#[stable]
|
|
pub trait Stable {
|
|
#[experimental]
|
|
fn experimental(&self);
|
|
|
|
fn stable(&self);
|
|
}
|
|
|
|
impl Stable for uint {
|
|
fn experimental(&self) {}
|
|
fn stable(&self) {}
|
|
}
|
|
|
|
pub enum Experimental {
|
|
ExperimentalVariant,
|
|
#[stable]
|
|
StableVariant
|
|
}
|