c27133e2ce
This partially implements the feature staging described in the [release channel RFC][rc]. It does not yet fully conform to the RFC as written, but does accomplish its goals sufficiently for the 1.0 alpha release. It has three primary user-visible effects: * On the nightly channel, use of unstable APIs generates a warning. * On the beta channel, use of unstable APIs generates a warning. * On the beta channel, use of feature gates generates a warning. Code that does not trigger these warnings is considered 'stable', modulo pre-1.0 bugs. Disabling the warnings for unstable APIs continues to be done in the existing (i.e. old) style, via `#[allow(...)]`, not that specified in the RFC. I deem this marginally acceptable since any code that must do this is not using the stable dialect of Rust. Use of feature gates is itself gated with the new 'unstable_features' lint, on nightly set to 'allow', and on beta 'warn'. The attribute scheme used here corresponds to an older version of the RFC, with the `#[staged_api]` crate attribute toggling the staging behavior of the stability attributes, but the user impact is only in-tree so I'm not concerned about having to make design changes later (and I may ultimately prefer the scheme here after all, with the `#[staged_api]` crate attribute). Since the Rust codebase itself makes use of unstable features the compiler and build system to a midly elaborate dance to allow it to bootstrap while disobeying these lints (which would otherwise be errors because Rust builds with `-D warnings`). This patch includes one significant hack that causes a regression. Because the `format_args!` macro emits calls to unstable APIs it would trigger the lint. I added a hack to the lint to make it not trigger, but this in turn causes arguments to `println!` not to be checked for feature gates. I don't presently understand macro expansion well enough to fix. This is bug #20661. Closes #16678 [rc]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md |
||
---|---|---|
.. | ||
asm-clobbers.rs | ||
asm-options.rs | ||
attr-fn-inner.rs | ||
blank-lines.rs | ||
block-comment-multiple-asterisks.rs | ||
block-comment-trailing-whitespace2.rs | ||
block-comment-trailing-whitespace.rs | ||
block-comment-wchar.pp | ||
block-comment-wchar.rs | ||
block-disambig.rs | ||
closure-reform-pretty.rs | ||
disamb-stmt-expr.rs | ||
do1.rs | ||
doc-comments.rs | ||
empty-impl.pp | ||
empty-impl.rs | ||
empty-lines.rs | ||
example1.rs | ||
example2.pp | ||
example2.rs | ||
fn-types.rs | ||
for-comment.rs | ||
issue-929.rs | ||
issue-4264.pp | ||
issue-4264.rs | ||
issue-19077.rs | ||
let.rs | ||
match-block-expr.rs | ||
match-naked-expr-medium.rs | ||
match-naked-expr.rs | ||
path-type-bounds.rs | ||
raw-str-nonexpr.rs | ||
record-trailing-comma.rs | ||
struct-pattern.rs | ||
struct-tuple.rs | ||
tag-blank-lines.rs | ||
trait-polarity.rs | ||
trait-safety.rs | ||
unary-op-disambig.rs | ||
vec-comments.pp | ||
vec-comments.rs | ||
where-clauses.rs |