Skip to content

Document how to modify feature gates #968

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Nov 27, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
- [Implementing new features](./implementing_new_features.md)
- [Stability attributes](./stability.md)
- [Stabilizing Features](./stabilization_guide.md)
- [Feature Gates](./feature-gates.md)
- [Coding conventions](./conventions.md)
- [Notification groups](notification-groups/about.md)
- [ARM](notification-groups/arm.md)
Expand Down
65 changes: 65 additions & 0 deletions src/feature-gates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Feature Gates

This chapter is intended to provide basic help for modifying feature gates. See
["Stability in code"][stability-section] for help with *adding* feature gates.

[stability-section]: ./implementing_new_features.md#stability-in-code


## Removing a feature gate

[removing]: #removing-a-feature-gate

To remove a feature gate, follow these steps:

1. Remove the feature gate declaration in `rustc_feature/src/active.rs`.
It will look like this:

```rust,ignore
/// description of feature
(active, $feature_name, "$version", Some($tracking_issue_number), $edition)
```

2. Add a modified version of the feature gate declaration that you just
removed to `rustc_feature/src/removed.rs`:

```rust,ignore
/// description of feature
(removed, $old_feature_name, "$version", Some($tracking_issue_number), $edition,
Some("$why_it_was_removed"))
```


## Renaming a feature gate

[renaming]: #renaming-a-feature-gate

To rename a feature gate, follow these steps (the first two are the same steps
to follow when [removing a feature gate][removing]):

1. Remove the old feature gate declaration in `rustc_feature/src/active.rs`.
It will look like this:

```rust,ignore
/// description of feature
(active, $old_feature_name, "$version", Some($tracking_issue_number), $edition)
```

2. Add a modified version of the old feature gate declaration that you just
removed to `rustc_feature/src/removed.rs`:

```rust,ignore
/// description of feature
/// Renamed to `$new_feature_name`
(removed, $old_feature_name, "$version", Some($tracking_issue_number), $edition,
Some("renamed to `$new_feature_name`"))
```

3. Add a feature gate declaration with the new name to
`rustc_feature/src/active.rs`. It should look very similar to the old
declaration:

```rust,ignore
/// description of feature
(active, $new_feature_name, "$version", Some($tracking_issue_number), $edition)
```