move CONTRIBUTING.md to rustc-dev-guide
This commit is contained in:
parent
431c3a3be2
commit
60b8d21d5c
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
# Contributing to Rust
|
# Contributing to Rust
|
||||||
|
|
||||||
|
- [Introduction](./contributing.md)
|
||||||
- [About the compiler team](./compiler-team.md)
|
- [About the compiler team](./compiler-team.md)
|
||||||
- [Walkthrough: a typical contribution](./walkthrough.md)
|
- [Walkthrough: a typical contribution](./walkthrough.md)
|
||||||
- [Bug Fix Procedure](./bug-fix-procedure.md)
|
- [Bug Fix Procedure](./bug-fix-procedure.md)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,499 @@
|
||||||
|
# Contributing to Rust
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to Rust! There are many ways to
|
||||||
|
contribute, and we appreciate all of them.
|
||||||
|
|
||||||
|
* [Feature Requests](#feature-requests)
|
||||||
|
* [Bug Reports](#bug-reports)
|
||||||
|
* [The Build System](#the-build-system)
|
||||||
|
* [Pull Requests](#pull-requests)
|
||||||
|
* [Writing Documentation](#writing-documentation)
|
||||||
|
* [Issue Triage](#issue-triage)
|
||||||
|
* [Out-of-tree Contributions](#out-of-tree-contributions)
|
||||||
|
* [Helpful Links and Information](#helpful-links-and-information)
|
||||||
|
|
||||||
|
If you have questions, please make a post on [internals.rust-lang.org][internals] or
|
||||||
|
hop on the [Rust Discord server][rust-discord] or [Rust Zulip server][rust-zulip].
|
||||||
|
|
||||||
|
As a reminder, all contributors are expected to follow our [Code of Conduct][coc].
|
||||||
|
|
||||||
|
If this is your first time contributing, the [Getting Started] and
|
||||||
|
[walkthrough] chapters can give you a good example of how a typical
|
||||||
|
contribution would go.
|
||||||
|
|
||||||
|
[internals]: https://internals.rust-lang.org
|
||||||
|
[rust-discord]: http://discord.gg/rust-lang
|
||||||
|
[rust-zulip]: https://rust-lang.zulipchat.com
|
||||||
|
[coc]: https://www.rust-lang.org/conduct.html
|
||||||
|
[walkthrough]: ./walkthrough.md
|
||||||
|
[Getting Started]: ./getting-started.md
|
||||||
|
|
||||||
|
## Feature Requests
|
||||||
|
|
||||||
|
Feature requests need to go through a process to be approved by the relevant
|
||||||
|
teams. Usually this requires a Final Comment Period (FCP) or even a Request for
|
||||||
|
Comments (RFC). See [Getting Started] for more information about these processes.
|
||||||
|
|
||||||
|
## Bug Reports
|
||||||
|
|
||||||
|
While bugs are unfortunate, they're a reality in software. We can't fix what we
|
||||||
|
don't know about, so please report liberally. If you're not sure if something
|
||||||
|
is a bug or not, feel free to file a bug anyway.
|
||||||
|
|
||||||
|
**If you believe reporting your bug publicly represents a security risk to Rust users,
|
||||||
|
please follow our [instructions for reporting security vulnerabilities][vuln]**.
|
||||||
|
|
||||||
|
[vuln]: https://www.rust-lang.org/policies/security
|
||||||
|
|
||||||
|
If you're using the nightly channel, please check if the bug exists in the
|
||||||
|
latest toolchain before filing your bug. It might be fixed already.
|
||||||
|
|
||||||
|
If you have the chance, before reporting a bug, please [search existing
|
||||||
|
issues](https://github.com/rust-lang/rust/search?q=&type=Issues&utf8=%E2%9C%93),
|
||||||
|
as it's possible that someone else has already reported your error. This doesn't
|
||||||
|
always work, and sometimes it's hard to know what to search for, so consider this
|
||||||
|
extra credit. We won't mind if you accidentally file a duplicate report.
|
||||||
|
|
||||||
|
Similarly, to help others who encountered the bug find your issue, consider
|
||||||
|
filing an issue with a descriptive title, which contains information that might
|
||||||
|
be unique to it. This can be the language or compiler feature used, the
|
||||||
|
conditions that trigger the bug, or part of the error message if there is any.
|
||||||
|
An example could be: **"impossible case reached" on lifetime inference for impl
|
||||||
|
Trait in return position**.
|
||||||
|
|
||||||
|
Opening an issue is as easy as following [this
|
||||||
|
link](https://github.com/rust-lang/rust/issues/new) and filling out the fields
|
||||||
|
in the appropriate provided template.
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
Pull requests are the primary mechanism we use to change Rust. GitHub itself
|
||||||
|
has some [great documentation][about-pull-requests] on using the Pull Request feature.
|
||||||
|
We use the "fork and pull" model [described here][development-models], where
|
||||||
|
contributors push changes to their personal fork and create pull requests to
|
||||||
|
bring those changes into the source repository.
|
||||||
|
|
||||||
|
[about-pull-requests]: https://help.github.com/articles/about-pull-requests/
|
||||||
|
[development-models]: https://help.github.com/articles/about-collaborative-development-models/
|
||||||
|
|
||||||
|
Please make pull requests against the `master` branch.
|
||||||
|
|
||||||
|
Rust follows a _no merge-commit policy_, meaning, when you encounter merge
|
||||||
|
conflicts you are expected to always rebase instead of merge. E.g. always use
|
||||||
|
rebase when bringing the latest changes from the master branch to your feature
|
||||||
|
branch. Also, please make sure that fixup commits are squashed into other
|
||||||
|
related commits with meaningful commit messages.
|
||||||
|
|
||||||
|
GitHub allows [closing issues using keywords][closing-keywords]. This feature
|
||||||
|
should be used to keep the issue tracker tidy. However, it is generally preferred
|
||||||
|
to put the "closes #123" text in the PR description rather than the issue commit;
|
||||||
|
particularly during rebasing, citing the issue number in the commit can "spam"
|
||||||
|
the issue in question.
|
||||||
|
|
||||||
|
[closing-keywords]: https://help.github.com/en/articles/closing-issues-using-keywords
|
||||||
|
|
||||||
|
Please make sure your pull request is in compliance with Rust's style
|
||||||
|
guidelines by running
|
||||||
|
|
||||||
|
$ ./x.py test tidy
|
||||||
|
|
||||||
|
Make this check before every pull request (and every new commit in a pull
|
||||||
|
request); you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
|
||||||
|
before every push to make sure you never forget to make this check. The
|
||||||
|
CI will also run tidy and will fail if tidy fails.
|
||||||
|
|
||||||
|
All pull requests are reviewed by another person. We have a bot,
|
||||||
|
[@rust-highfive][rust-highfive], that will automatically assign a random person
|
||||||
|
to review your request.
|
||||||
|
|
||||||
|
If you want to request that a specific person reviews your pull request, you
|
||||||
|
can add an `r?` to the pull request description. For example,
|
||||||
|
[Steve][steveklabnik] usually reviews documentation changes. So if you were to
|
||||||
|
make a documentation change, add
|
||||||
|
|
||||||
|
r? @steveklabnik
|
||||||
|
|
||||||
|
to the end of the pull request description, and [@rust-highfive][rust-highfive] will assign
|
||||||
|
[@steveklabnik][steveklabnik] instead of a random person. This is entirely optional.
|
||||||
|
|
||||||
|
After someone has reviewed your pull request, they will leave an annotation
|
||||||
|
on the pull request with an `r+`. It will look something like this:
|
||||||
|
|
||||||
|
@bors r+
|
||||||
|
|
||||||
|
This tells [@bors][bors], our lovable integration bot, that your pull request has
|
||||||
|
been approved. The PR then enters the [merge queue][merge-queue], where [@bors][bors]
|
||||||
|
will run all the tests on every platform we support. If it all works out,
|
||||||
|
[@bors][bors] will merge your code into `master` and close the pull request.
|
||||||
|
|
||||||
|
Depending on the scale of the change, you may see a slightly different form of `r+`:
|
||||||
|
|
||||||
|
@bors r+ rollup
|
||||||
|
|
||||||
|
The additional `rollup` tells [@bors][bors] that this change is eligible for to be
|
||||||
|
"rolled up". Changes that are rolled up are tested and merged at the same time, to
|
||||||
|
speed the process up. Typically only small changes that are expected not to conflict
|
||||||
|
with one another are rolled up.
|
||||||
|
|
||||||
|
[rust-highfive]: https://github.com/rust-highfive
|
||||||
|
[steveklabnik]: https://github.com/steveklabnik
|
||||||
|
[bors]: https://github.com/bors
|
||||||
|
[merge-queue]: https://buildbot2.rust-lang.org/homu/queue/rust
|
||||||
|
|
||||||
|
Speaking of tests, Rust has a comprehensive test suite. More information about
|
||||||
|
it can be found [here][rctd].
|
||||||
|
|
||||||
|
### External Dependencies (subtree)
|
||||||
|
|
||||||
|
As a developer to this repository, you don't have to treat the following external projects
|
||||||
|
differently from other crates that are directly in this repo:
|
||||||
|
|
||||||
|
* Clippy
|
||||||
|
|
||||||
|
They are just regular files and directories. This is in contrast to `submodule` dependencies
|
||||||
|
(see below for those). Only tool authors will actually use any operations here.
|
||||||
|
|
||||||
|
#### Synchronizing a subtree
|
||||||
|
|
||||||
|
There are two synchronization directions: `subtree push` and `subtree pull`.
|
||||||
|
|
||||||
|
```
|
||||||
|
git subtree push -P src/tools/clippy git@github.com:your-github-name/rust-clippy sync-from-rust
|
||||||
|
```
|
||||||
|
|
||||||
|
takes all the changes that
|
||||||
|
happened to the copy in this repo and creates commits on the remote repo that match the local
|
||||||
|
changes. Every local commit that touched the subtree causes a commit on the remote repo, but is
|
||||||
|
modified to move the files from the specified directory to the tool repo root.
|
||||||
|
|
||||||
|
Make sure to not pick the `master` branch on the tool repo, so you can open a normal PR to the tool
|
||||||
|
to merge that subrepo push.
|
||||||
|
|
||||||
|
```
|
||||||
|
git subtree pull -P src/tools/clippy https://github.com/rust-lang/rust-clippy master
|
||||||
|
```
|
||||||
|
|
||||||
|
takes all changes since the last `subtree pull` from the tool repo
|
||||||
|
repo and adds these commits to the rustc repo + a merge commit that moves the tool changes into
|
||||||
|
the specified directory in the rust repository.
|
||||||
|
|
||||||
|
It is recommended that you always do a push first and get that merged to the tool master branch.
|
||||||
|
Then, when you do a pull, the merge works without conflicts.
|
||||||
|
While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict
|
||||||
|
resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to
|
||||||
|
rebase the result of a `git subtree pull`, rebasing merge commits is a bad idea in general.
|
||||||
|
|
||||||
|
You always need to specify the `-P` prefix to the subtree directory and the corresponding remote
|
||||||
|
repository. If you specify the wrong directory or repository
|
||||||
|
you'll get very fun merges that try to push the wrong directory to the wrong remote repository.
|
||||||
|
Luckily you can just abort this without any consequences by throwing away either the pulled commits
|
||||||
|
in rustc or the pushed branch on the remote and try again. It is usually fairly obvious
|
||||||
|
that this is happening because you suddenly get thousands of commits that want to be synchronized.
|
||||||
|
|
||||||
|
#### Creating a new subtree dependency
|
||||||
|
|
||||||
|
If you want to create a new subtree dependency from an existing repository, call (from this
|
||||||
|
repository's root directory!)
|
||||||
|
|
||||||
|
```
|
||||||
|
git subtree add -P src/tools/clippy https://github.com/rust-lang/rust-clippy.git master
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a new commit, which you may not rebase under any circumstances! Delete the commit
|
||||||
|
and redo the operation if you need to rebase.
|
||||||
|
|
||||||
|
Now you're done, the `src/tools/clippy` directory behaves as if Clippy were part of the rustc
|
||||||
|
monorepo, so no one but you (or others that synchronize subtrees) actually needs to use `git subtree`.
|
||||||
|
|
||||||
|
|
||||||
|
### External Dependencies (submodules)
|
||||||
|
|
||||||
|
Currently building Rust will also build the following external projects:
|
||||||
|
|
||||||
|
* [miri](https://github.com/rust-lang/miri)
|
||||||
|
* [rustfmt](https://github.com/rust-lang/rustfmt)
|
||||||
|
* [rls](https://github.com/rust-lang/rls/)
|
||||||
|
|
||||||
|
We allow breakage of these tools in the nightly channel. Maintainers of these
|
||||||
|
projects will be notified of the breakages and should fix them as soon as
|
||||||
|
possible.
|
||||||
|
|
||||||
|
After the external is fixed, one could add the changes with
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git add path/to/submodule
|
||||||
|
```
|
||||||
|
|
||||||
|
outside the submodule.
|
||||||
|
|
||||||
|
In order to prepare your tool-fixing PR, you can run the build locally by doing
|
||||||
|
`./x.py build src/tools/TOOL`. If you will be editing the sources
|
||||||
|
there, you may wish to set `submodules = false` in the `config.toml`
|
||||||
|
to prevent `x.py` from resetting to the original branch.
|
||||||
|
|
||||||
|
Breakage is not allowed in the beta and stable channels, and must be addressed
|
||||||
|
before the PR is merged.
|
||||||
|
|
||||||
|
#### Breaking Tools Built With The Compiler
|
||||||
|
|
||||||
|
Rust's build system builds a number of tools that make use of the
|
||||||
|
internals of the compiler. This includes
|
||||||
|
[RLS](https://github.com/rust-lang/rls) and
|
||||||
|
[rustfmt](https://github.com/rust-lang/rustfmt). If these tools
|
||||||
|
break because of your changes, you may run into a sort of "chicken and egg"
|
||||||
|
problem. These tools rely on the latest compiler to be built so you can't update
|
||||||
|
them to reflect your changes to the compiler until those changes are merged into
|
||||||
|
the compiler. At the same time, you can't get your changes merged into the compiler
|
||||||
|
because the rust-lang/rust build won't pass until those tools build and pass their
|
||||||
|
tests.
|
||||||
|
|
||||||
|
That means that, in the default state, you can't update the compiler without first
|
||||||
|
fixing rustfmt, rls and the other tools that the compiler builds.
|
||||||
|
|
||||||
|
Luckily, a feature was [added to Rust's build](https://github.com/rust-lang/rust/issues/45861)
|
||||||
|
to make all of this easy to handle. The idea is that we allow these tools to be "broken",
|
||||||
|
so that the rust-lang/rust build passes without trying to build them, then land the change
|
||||||
|
in the compiler, wait for a nightly, and go update the tools that you broke. Once you're done
|
||||||
|
and the tools are working again, you go back in the compiler and update the tools
|
||||||
|
so they can be distributed again.
|
||||||
|
|
||||||
|
This should avoid a bunch of synchronization dances and is also much easier on contributors as
|
||||||
|
there's no need to block on rls/rustfmt/other tools changes going upstream.
|
||||||
|
|
||||||
|
Here are those same steps in detail:
|
||||||
|
|
||||||
|
1. (optional) First, if it doesn't exist already, create a `config.toml` by copying
|
||||||
|
`config.toml.example` in the root directory of the Rust repository.
|
||||||
|
Set `submodules = false` in the `[build]` section. This will prevent `x.py`
|
||||||
|
from resetting to the original branch after you make your changes. If you
|
||||||
|
need to [update any submodules to their latest versions](#updating-submodules),
|
||||||
|
see the section of this file about that for more information.
|
||||||
|
2. (optional) Run `./x.py test src/tools/rustfmt` (substituting the submodule
|
||||||
|
that broke for `rustfmt`). Fix any errors in the submodule (and possibly others).
|
||||||
|
3. (optional) Make commits for your changes and send them to upstream repositories as a PR.
|
||||||
|
4. (optional) Maintainers of these submodules will **not** merge the PR. The PR can't be
|
||||||
|
merged because CI will be broken. You'll want to write a message on the PR referencing
|
||||||
|
your change, and how the PR should be merged once your change makes it into a nightly.
|
||||||
|
5. Wait for your PR to merge.
|
||||||
|
6. Wait for a nightly
|
||||||
|
7. (optional) Help land your PR on the upstream repository now that your changes are in nightly.
|
||||||
|
8. (optional) Send a PR to rust-lang/rust updating the submodule.
|
||||||
|
|
||||||
|
#### Updating submodules
|
||||||
|
|
||||||
|
These instructions are specific to updating `rustfmt`, however they may apply
|
||||||
|
to the other submodules as well. Please help by improving these instructions
|
||||||
|
if you find any discrepancies or special cases that need to be addressed.
|
||||||
|
|
||||||
|
To update the `rustfmt` submodule, start by running the appropriate
|
||||||
|
[`git submodule` command](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
|
||||||
|
For example, to update to the latest commit on the remote master branch,
|
||||||
|
you may want to run:
|
||||||
|
```
|
||||||
|
git submodule update --remote src/tools/rustfmt
|
||||||
|
```
|
||||||
|
If you run `./x.py build` now, and you are lucky, it may just work. If you see
|
||||||
|
an error message about patches that did not resolve to any crates, you will need
|
||||||
|
to complete a few more steps which are outlined with their rationale below.
|
||||||
|
|
||||||
|
*(This error may change in the future to include more information.)*
|
||||||
|
```
|
||||||
|
error: failed to resolve patches for `https://github.com/rust-lang/rustfmt`
|
||||||
|
|
||||||
|
Caused by:
|
||||||
|
patch for `rustfmt-nightly` in `https://github.com/rust-lang/rustfmt` did not resolve to any crates
|
||||||
|
failed to run: ~/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path ~/rust/src/bootstrap/Cargo.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
If you haven't used the `[patch]`
|
||||||
|
section of `Cargo.toml` before, there is [some relevant documentation about it
|
||||||
|
in the cargo docs](http://doc.crates.io/manifest.html#the-patch-section). In
|
||||||
|
addition to that, you should read the
|
||||||
|
[Overriding dependencies](http://doc.crates.io/specifying-dependencies.html#overriding-dependencies)
|
||||||
|
section of the documentation as well.
|
||||||
|
|
||||||
|
Specifically, the following [section in Overriding dependencies](http://doc.crates.io/specifying-dependencies.html#testing-a-bugfix) reveals what the problem is:
|
||||||
|
|
||||||
|
> Next up we need to ensure that our lock file is updated to use this new
|
||||||
|
> version of uuid so our project uses the locally checked out copy instead of
|
||||||
|
> one from crates.io. The way [patch] works is that it'll load the dependency
|
||||||
|
> at ../path/to/uuid and then whenever crates.io is queried for versions of
|
||||||
|
> uuid it'll also return the local version.
|
||||||
|
>
|
||||||
|
> This means that the version number of the local checkout is significant and
|
||||||
|
> will affect whether the patch is used. Our manifest declared uuid = "1.0"
|
||||||
|
> which means we'll only resolve to >= 1.0.0, < 2.0.0, and Cargo's greedy
|
||||||
|
> resolution algorithm also means that we'll resolve to the maximum version
|
||||||
|
> within that range. Typically this doesn't matter as the version of the git
|
||||||
|
> repository will already be greater or match the maximum version published on
|
||||||
|
> crates.io, but it's important to keep this in mind!
|
||||||
|
|
||||||
|
This says that when we updated the submodule, the version number in our
|
||||||
|
`src/tools/rustfmt/Cargo.toml` changed. The new version is different from
|
||||||
|
the version in `Cargo.lock`, so the build can no longer continue.
|
||||||
|
|
||||||
|
To resolve this, we need to update `Cargo.lock`. Luckily, cargo provides a
|
||||||
|
command to do this easily.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cargo update -p rustfmt-nightly
|
||||||
|
```
|
||||||
|
|
||||||
|
This should change the version listed in `Cargo.lock` to the new version you updated
|
||||||
|
the submodule to. Running `./x.py build` should work now.
|
||||||
|
|
||||||
|
## Writing Documentation
|
||||||
|
|
||||||
|
Documentation improvements are very welcome. The source of `doc.rust-lang.org`
|
||||||
|
is located in `src/doc` in the tree, and standard API documentation is generated
|
||||||
|
from the source code itself. Documentation pull requests function in the same way
|
||||||
|
as other pull requests.
|
||||||
|
|
||||||
|
To find documentation-related issues, sort by the [T-doc label][tdoc].
|
||||||
|
|
||||||
|
[tdoc]: https://github.com/rust-lang/rust/issues?q=is%3Aopen%20is%3Aissue%20label%3AT-doc
|
||||||
|
|
||||||
|
You can find documentation style guidelines in [RFC 1574][rfc1574].
|
||||||
|
|
||||||
|
[rfc1574]: https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text
|
||||||
|
|
||||||
|
In many cases, you don't need a full `./x.py doc`, which will build the entire
|
||||||
|
stage 2 compiler and compile the various books published on
|
||||||
|
[doc.rust-lang.org]. When updating documentation for the standard library,
|
||||||
|
first try `./x.py doc --stage 0 src/libstd`. If that fails, or if you need to
|
||||||
|
see the output from the latest version of `rustdoc`, use `--stage 1` instead of
|
||||||
|
`--stage 0`. Results should appear in `build/$TARGET/crate-docs`.
|
||||||
|
|
||||||
|
[doc.rust-lang.org]: htts://doc.rust-lang.org
|
||||||
|
|
||||||
|
You can also use `rustdoc` directly to check small fixes. For example,
|
||||||
|
`rustdoc src/doc/reference.md` will render reference to `doc/reference.html`.
|
||||||
|
The CSS might be messed up, but you can verify that the HTML is right.
|
||||||
|
|
||||||
|
Additionally, contributions to the [rustc-dev-guide] are always welcome. Contributions
|
||||||
|
can be made directly at [the
|
||||||
|
rust-lang/rustc-dev-guide](https://github.com/rust-lang/rustc-dev-guide) repo. The issue
|
||||||
|
tracker in that repo is also a great way to find things that need doing. There
|
||||||
|
are issues for beginners and advanced compiler devs alike!
|
||||||
|
|
||||||
|
## Issue Triage
|
||||||
|
|
||||||
|
Sometimes, an issue will stay open, even though the bug has been fixed. And
|
||||||
|
sometimes, the original bug may go stale because something has changed in the
|
||||||
|
meantime.
|
||||||
|
|
||||||
|
It can be helpful to go through older bug reports and make sure that they are
|
||||||
|
still valid. Load up an older issue, double check that it's still true, and
|
||||||
|
leave a comment letting us know if it is or is not. The [least recently
|
||||||
|
updated sort][lru] is good for finding issues like this.
|
||||||
|
|
||||||
|
Contributors with sufficient permissions on the Rust repo can help by adding
|
||||||
|
labels to triage issues:
|
||||||
|
|
||||||
|
* Yellow, **A**-prefixed labels state which **area** of the project an issue
|
||||||
|
relates to.
|
||||||
|
|
||||||
|
* Magenta, **B**-prefixed labels identify bugs which are **blockers**.
|
||||||
|
|
||||||
|
* Dark blue, **beta-** labels track changes which need to be backported into
|
||||||
|
the beta branches.
|
||||||
|
|
||||||
|
* Light purple, **C**-prefixed labels represent the **category** of an issue.
|
||||||
|
|
||||||
|
* Green, **E**-prefixed labels explain the level of **experience** necessary
|
||||||
|
to fix the issue.
|
||||||
|
|
||||||
|
* The dark blue **final-comment-period** label marks bugs that are using the
|
||||||
|
RFC signoff functionality of [rfcbot] and are currently in the final
|
||||||
|
comment period.
|
||||||
|
|
||||||
|
* Red, **I**-prefixed labels indicate the **importance** of the issue. The
|
||||||
|
[I-nominated][inom] label indicates that an issue has been nominated for
|
||||||
|
prioritizing at the next triage meeting.
|
||||||
|
|
||||||
|
* The purple **metabug** label marks lists of bugs collected by other
|
||||||
|
categories.
|
||||||
|
|
||||||
|
* Purple gray, **O**-prefixed labels are the **operating system** or platform
|
||||||
|
that this issue is specific to.
|
||||||
|
|
||||||
|
* Orange, **P**-prefixed labels indicate a bug's **priority**. These labels
|
||||||
|
are only assigned during triage meetings, and replace the [I-nominated][inom]
|
||||||
|
label.
|
||||||
|
|
||||||
|
* The gray **proposed-final-comment-period** label marks bugs that are using
|
||||||
|
the RFC signoff functionality of [rfcbot] and are currently awaiting
|
||||||
|
signoff of all team members in order to enter the final comment period.
|
||||||
|
|
||||||
|
* Pink, **regression**-prefixed labels track regressions from stable to the
|
||||||
|
release channels.
|
||||||
|
|
||||||
|
* The light orange **relnotes** label marks issues that should be documented in
|
||||||
|
the release notes of the next release.
|
||||||
|
|
||||||
|
* Gray, **S**-prefixed labels are used for tracking the **status** of pull
|
||||||
|
requests.
|
||||||
|
|
||||||
|
* Blue, **T**-prefixed bugs denote which **team** the issue belongs to.
|
||||||
|
|
||||||
|
If you're looking for somewhere to start, check out the [E-easy][eeasy] tag.
|
||||||
|
|
||||||
|
[inom]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AI-nominated
|
||||||
|
[eeasy]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy
|
||||||
|
[lru]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc
|
||||||
|
[rfcbot]: https://github.com/anp/rfcbot-rs/
|
||||||
|
|
||||||
|
## Out-of-tree Contributions
|
||||||
|
|
||||||
|
There are a number of other ways to contribute to Rust that don't deal with
|
||||||
|
this repository.
|
||||||
|
|
||||||
|
Answer questions in the _Get Help!_ channels from the [Rust Discord
|
||||||
|
server][rust-discord], on [users.rust-lang.org][users], or on
|
||||||
|
[StackOverflow][so].
|
||||||
|
|
||||||
|
Participate in the [RFC process](https://github.com/rust-lang/rfcs).
|
||||||
|
|
||||||
|
Find a [requested community library][community-library], build it, and publish
|
||||||
|
it to [Crates.io](http://crates.io). Easier said than done, but very, very
|
||||||
|
valuable!
|
||||||
|
|
||||||
|
[rust-discord]: https://discord.gg/rust-lang
|
||||||
|
[users]: https://users.rust-lang.org/
|
||||||
|
[so]: http://stackoverflow.com/questions/tagged/rust
|
||||||
|
[community-library]: https://github.com/rust-lang/rfcs/labels/A-community-library
|
||||||
|
|
||||||
|
## Helpful Links and Information
|
||||||
|
|
||||||
|
For people new to Rust, and just starting to contribute, or even for
|
||||||
|
more seasoned developers, some useful places to look for information
|
||||||
|
are:
|
||||||
|
|
||||||
|
* The [rustc dev guide] contains information about how various parts of the
|
||||||
|
compiler work and how to contribute to the compiler
|
||||||
|
* [Rust Forge][rustforge] contains additional documentation, including
|
||||||
|
write-ups of how to achieve common tasks
|
||||||
|
* The [Rust Internals forum][rif], a place to ask questions and
|
||||||
|
discuss Rust's internals
|
||||||
|
* The [generated documentation for rust's compiler][gdfrustc]
|
||||||
|
* The [rust reference][rr], even though it doesn't specifically talk about
|
||||||
|
Rust's internals, it's a great resource nonetheless
|
||||||
|
* Although out of date, [Tom Lee's great blog article][tlgba] is very helpful
|
||||||
|
* [rustaceans.org][ro] is helpful, but mostly dedicated to IRC
|
||||||
|
* The [Rust Compiler Testing Docs][rctd]
|
||||||
|
* For [@bors][bors], [this cheat sheet][cheatsheet] is helpful
|
||||||
|
(though you'll need to replace `@homu` with `@bors` in any commands)
|
||||||
|
* **Google!** ([search only in Rust Documentation][gsearchdocs] to find types,
|
||||||
|
traits, etc. quickly)
|
||||||
|
* Don't be afraid to ask! The Rust community is friendly and helpful.
|
||||||
|
|
||||||
|
[rustc dev guide]: https://rustc-dev-guide.rust-lang.org/about-this-guide.html
|
||||||
|
[gdfrustc]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/
|
||||||
|
[gsearchdocs]: https://www.google.com/search?q=site:doc.rust-lang.org+your+query+here
|
||||||
|
[rif]: http://internals.rust-lang.org
|
||||||
|
[rr]: https://doc.rust-lang.org/book/README.html
|
||||||
|
[rustforge]: https://forge.rust-lang.org/
|
||||||
|
[tlgba]: http://tomlee.co/2014/04/a-more-detailed-tour-of-the-rust-compiler/
|
||||||
|
[ro]: http://www.rustaceans.org/
|
||||||
|
[rctd]: https://rustc-dev-guide.rust-lang.org/tests/intro.html
|
||||||
|
[cheatsheet]: https://buildbot2.rust-lang.org/homu/
|
||||||
Loading…
Reference in New Issue