Skip to content

Commit cf568f3

Browse files
committed
Document how to stabilize a library feature
Note that features can't be stabilized until they go through FCP and that FCP happens on the tracking issue, not the PR.
1 parent b9b5d69 commit cf568f3

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/stability.md

+19-5
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,8 @@ prevents breaking dependencies by leveraging Cargo's lint capping.
4444
[rustc bug]: https://github.com/rust-lang/rust/issues/15702
4545

4646
## stable
47-
4847
The `#[stable(feature = "foo", "since = "1.420.69")]` attribute explicitly
49-
marks an item as stabilized. To do this, follow the instructions in
50-
[Stabilizing Features](./stabilization_guide.md).
51-
52-
Note that stable functions may use unstable things in their body.
48+
marks an item as stabilized. Note that stable functions may use unstable things in their body.
5349

5450
## rustc_const_unstable
5551

@@ -72,6 +68,24 @@ even on an `unstable` function, if that function is called from another
7268
Furthermore this attribute is needed to mark an intrinsic as callable from
7369
`rustc_const_stable` functions.
7470

71+
## Stabilizing a library feature
72+
73+
To stabilize a feature, follow these steps:
74+
75+
0. Ask a **@T-libs** member to start an FCP on the tracking issue and wait for
76+
the FCP to complete (with `disposition-merge`).
77+
1. Change `#[unstable(...)]` to `#[stable(since = "version")]`.
78+
`version` should be the *current nightly*, i.e. stable+2. You can see which version is
79+
the current nightly [on Forge](https://forge.rust-lang.org/#current-release-versions).
80+
2. Remove `#![feature(...)]` from any test or doc-test for this API. If the feature is used in the
81+
compiler or tools, remove it from there as well.
82+
3. If applicable, change `#[rustc_const_unstable(...)]` to
83+
`#[rustc_const_stable(since = "version")]`.
84+
4. Open a PR against `rust-lang/rust`.
85+
- Add the appropriate labels: `@rustbot modify labels: +T-libs`.
86+
- Link to the tracking issue and say "Closes #XXXXX".
87+
88+
You can see an example of stabilizing a feature at [#75132](https://github.com/rust-lang/rust/pull/75132).
7589

7690
## allow_internal_unstable
7791

src/stabilization_guide.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Request for stabilization
22

3+
**NOTE**: this page is about stabilizing language features.
4+
For stabilizing *library* features, see [Stabilizing a library feature].
5+
6+
[Stabilizing a library feature]: ./stability.md#stabilizing-a-library-feature
7+
38
Once an unstable feature has been well-tested with no outstanding
49
concern, anyone may push for its stabilization. It involves the
510
following steps:

0 commit comments

Comments
 (0)