mozilla/rust — pull request #8921 by huonw (2013-09-01 23:46:20+00:00)
Title: Add support for stability attributes: #[deprecated], #[experimental], etc.

### not ready for review

It appears that attributes on enums and their variants are not encoded into the crate metadata, and just adding the `encode_attributes` call in the last commit doesn't appear to help. I'd like some guidance.

---

Significant progress on #6875, enough that I'll open new bugs and turn that into a metabug when this lands.

Explanation from the commit message:

> There are 6 new compiler recognised attributes: deprecated, experimental,
> unstable, stable, frozen, locked (these levels are taken directly from
> Node's "stability index"[1]). These indicate the stability of the
> item to which they are attached; e.g. `#[deprecated] fn foo() { .. }`
> says that `foo` is deprecated.

> This comes with 3 lints for the first 3 levels (with matching names) that
> will detect the use of items marked with them (the `unstable` lint
> includes items with no stability attribute). The attributes can be given
> a short text note that will be displayed by the lint. An example:
>
> #[warn(unstable)]; // `allow` by default
>
> #[deprecated="use `bar`"]
> fn foo() { }
>
> #[stable]
> fn bar() { }
>
> fn baz() { }
>
> fn main() {
> foo(); // "warning: use of deprecated item: use `bar`"
>
> bar(); // all fine
>
> baz(); // "warning: use of unmarked item"
> }
>
> The lints currently only check the "edges" of the AST: i.e. functions,
> methods, structs and enum variants. Any stability attributes on modules,
> enums, traits and impls are not checked.
>
> [1]: http://nodejs.org/api/documentation.html