]> git.proxmox.com Git - rustc.git/blame - CONTRIBUTING.md
More pre-tarball updates for 1.24.1
[rustc.git] / CONTRIBUTING.md
CommitLineData
85aaf69f 1# Contributing to Rust
ea8adc8c 2[contributing-to-rust]: #contributing-to-rust
1a4d82fc 3
85aaf69f
SL
4Thank you for your interest in contributing to Rust! There are many ways to
5contribute, and we appreciate all of them. This document is a bit long, so here's
6links to the major sections:
1a4d82fc 7
85aaf69f
SL
8* [Feature Requests](#feature-requests)
9* [Bug Reports](#bug-reports)
7453a54e 10* [The Build System](#the-build-system)
85aaf69f
SL
11* [Pull Requests](#pull-requests)
12* [Writing Documentation](#writing-documentation)
13* [Issue Triage](#issue-triage)
14* [Out-of-tree Contributions](#out-of-tree-contributions)
e9174d1e 15* [Helpful Links and Information](#helpful-links-and-information)
1a4d82fc 16
85aaf69f
SL
17If you have questions, please make a post on [internals.rust-lang.org][internals] or
18hop on [#rust-internals][pound-rust-internals].
1a4d82fc 19
c34b1796 20As a reminder, all contributors are expected to follow our [Code of Conduct][coc].
1a4d82fc 21
ea8adc8c 22[pound-rust-internals]: https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-internals
e9174d1e
SL
23[internals]: https://internals.rust-lang.org
24[coc]: https://www.rust-lang.org/conduct.html
1a4d82fc 25
85aaf69f 26## Feature Requests
ea8adc8c 27[feature-requests]: #feature-requests
1a4d82fc 28
85aaf69f
SL
29To request a change to the way that the Rust language works, please open an
30issue in the [RFCs repository](https://github.com/rust-lang/rfcs/issues/new)
31rather than this one. New features and other significant language changes
32must go through the RFC process.
1a4d82fc 33
85aaf69f 34## Bug Reports
ea8adc8c 35[bug-reports]: #bug-reports
1a4d82fc 36
85aaf69f
SL
37While bugs are unfortunate, they're a reality in software. We can't fix what we
38don't know about, so please report liberally. If you're not sure if something
39is a bug or not, feel free to file a bug anyway.
1a4d82fc 40
92a42be0
SL
41**If you believe reporting your bug publicly represents a security risk to Rust users,
42please follow our [instructions for reporting security vulnerabilities](https://www.rust-lang.org/security.html)**.
43
85aaf69f
SL
44If you have the chance, before reporting a bug, please [search existing
45issues](https://github.com/rust-lang/rust/search?q=&type=Issues&utf8=%E2%9C%93),
46as it's possible that someone else has already reported your error. This doesn't
47always work, and sometimes it's hard to know what to search for, so consider this
48extra credit. We won't mind if you accidentally file a duplicate report.
1a4d82fc 49
85aaf69f
SL
50Opening an issue is as easy as following [this
51link](https://github.com/rust-lang/rust/issues/new) and filling out the fields.
52Here's a template that you can use to file a bug, though it's not necessary to
53use it exactly:
1a4d82fc 54
85aaf69f
SL
55 <short summary of the bug>
56
57 I tried this code:
58
59 <code sample that causes the bug>
60
61 I expected to see this happen: <explanation>
62
63 Instead, this happened: <explanation>
64
65 ## Meta
66
67 `rustc --version --verbose`:
68
69 Backtrace:
70
71All three components are important: what you did, what you expected, what
72happened instead. Please include the output of `rustc --version --verbose`,
73which includes important information about what platform you're on, what
74version of Rust you're using, etc.
75
76Sometimes, a backtrace is helpful, and so including that is nice. To get
54a0048b
SL
77a backtrace, set the `RUST_BACKTRACE` environment variable to a value
78other than `0`. The easiest way
85aaf69f
SL
79to do this is to invoke `rustc` like this:
80
81```bash
82$ RUST_BACKTRACE=1 rustc ...
1a4d82fc
JJ
83```
84
7453a54e 85## The Build System
ea8adc8c 86[the-build-system]: #the-build-system
7453a54e
SL
87
88Rust's build system allows you to bootstrap the compiler, run tests &
89benchmarks, generate documentation, install a fresh build of Rust, and more.
90It's your best friend when working on Rust, allowing you to compile & test
91your contributions before submission.
92
476ff2be
SL
93The build system lives in [the `src/bootstrap` directory][bootstrap] in the
94project root. Our build system is itself written in Rust and is based on Cargo
95to actually build all the compiler's crates. If you have questions on the build
96system internals, try asking in [`#rust-internals`][pound-rust-internals].
7453a54e 97
476ff2be
SL
98[bootstrap]: https://github.com/rust-lang/rust/tree/master/src/bootstrap/
99
7453a54e 100### Configuration
ea8adc8c 101[configuration]: #configuration
7453a54e
SL
102
103Before you can start building the compiler you need to configure the build for
104your system. In most cases, that will just mean using the defaults provided
8bb4bdeb 105for Rust.
7453a54e 106
3b2f2976 107To change configuration, you must copy the file `config.toml.example`
8bb4bdeb
XL
108to `config.toml` in the directory from which you will be running the build, and
109change the settings provided.
110
111There are large number of options provided in this config file that will alter the
112configuration used in the build process. Some options to note:
7453a54e 113
8bb4bdeb
XL
114#### `[llvm]`:
115- `ccache = true` - Use ccache when building llvm
7453a54e 116
8bb4bdeb
XL
117#### `[build]`:
118- `compiler-docs = true` - Build compiler documentation
7453a54e 119
8bb4bdeb
XL
120#### `[rust]`:
121- `debuginfo = true` - Build a compiler with debuginfo
122- `optimize = false` - Disable optimizations to speed up compilation of stage1 rust
123
124For more options, the `config.toml` file contains commented out defaults, with
125descriptions of what each option will do.
126
127Note: Previously the `./configure` script was used to configure this
128project. It can still be used, but it's recommended to use a `config.toml`
129file. If you still have a `config.mk` file in your directory - from
130`./configure` - you may need to delete it for `config.toml` to work.
7453a54e 131
476ff2be 132### Building
ea8adc8c
XL
133[building]: #building
134
135Dependencies
136- [build dependencies](README.md#building-from-source)
137- `gdb` 6.2.0 minimum, 7.1 or later recommended for test builds
476ff2be 138
8bb4bdeb
XL
139The build system uses the `x.py` script to control the build process. This script
140is used to build, test, and document various parts of the compiler. You can
141execute it as:
476ff2be
SL
142
143```sh
144python x.py build
145```
146
147On some systems you can also use the shorter version:
148
149```sh
150./x.py build
151```
152
153To learn more about the driver and top-level targets, you can execute:
154
155```sh
156python x.py --help
157```
158
159The general format for the driver script is:
160
161```sh
162python x.py <command> [<directory>]
163```
164
165Some example commands are `build`, `test`, and `doc`. These will build, test,
166and document the specified directory. The second argument, `<directory>`, is
167optional and defaults to working over the entire compiler. If specified,
168however, only that specific directory will be built. For example:
169
170```sh
171# build the entire compiler
172python x.py build
173
174# build all documentation
175python x.py doc
176
177# run all test suites
178python x.py test
179
180# build only the standard library
181python x.py build src/libstd
182
183# test only one particular test suite
184python x.py test src/test/rustdoc
185
186# build only the stage0 libcore library
187python x.py build src/libcore --stage 0
188```
189
7cac9316 190You can explore the build system through the various `--help` pages for each
476ff2be
SL
191subcommand. For example to learn more about a command you can run:
192
193```
194python x.py build --help
195```
196
197To learn about all possible rules you can execute, run:
198
199```
200python x.py build --help --verbose
201```
202
8bb4bdeb
XL
203Note: Previously `./configure` and `make` were used to build this project.
204They are still available, but `x.py` is the recommended build system.
205
476ff2be 206### Useful commands
ea8adc8c 207[useful-commands]: #useful-commands
476ff2be
SL
208
209Some common invocations of `x.py` are:
210
211- `x.py build --help` - show the help message and explain the subcommand
212- `x.py build src/libtest --stage 1` - build up to (and including) the first
213 stage. For most cases we don't need to build the stage2 compiler, so we can
214 save time by not building it. The stage1 compiler is a fully functioning
215 compiler and (probably) will be enough to determine if your change works as
216 expected.
217- `x.py build src/rustc --stage 1` - This will build just rustc, without libstd.
218 This is the fastest way to recompile after you changed only rustc source code.
219 Note however that the resulting rustc binary won't have a stdlib to link
220 against by default. You can build libstd once with `x.py build src/libstd`,
8bb4bdeb 221 but it is only guaranteed to work if recompiled, so if there are any issues
476ff2be
SL
222 recompile it.
223- `x.py test` - build the full compiler & run all tests (takes a while). This
7453a54e
SL
224 is what gets run by the continuous integration system against your pull
225 request. You should run this before submitting to make sure your tests pass
226 & everything builds in the correct manner.
476ff2be
SL
227- `x.py test src/libstd --stage 1` - test the standard library without
228 recompiling stage 2.
229- `x.py test src/test/run-pass --test-args TESTNAME` - Run a matching set of
230 tests.
54a0048b
SL
231 - `TESTNAME` should be a substring of the tests to match against e.g. it could
232 be the fully qualified test name, or just a part of it.
7453a54e
SL
233 `TESTNAME=collections::hash::map::test_map::test_capacity_not_less_than_len`
234 or `TESTNAME=test_capacity_not_less_than_len`.
476ff2be
SL
235- `x.py test src/test/run-pass --stage 1 --test-args <substring-of-test-name>` -
236 Run a single rpass test with the stage1 compiler (this will be quicker than
237 running the command above as we only build the stage1 compiler, not the entire
238 thing). You can also leave off the directory argument to run all stage1 test
239 types.
240- `x.py test src/libcore --stage 1` - Run stage1 tests in `libcore`.
241- `x.py test src/tools/tidy` - Check that the source code is in compliance with
242 Rust's style guidelines. There is no official document describing Rust's full
243 guidelines as of yet, but basic rules like 4 spaces for indentation and no
244 more than 99 characters in a single line should be kept in mind when writing
245 code.
ea8adc8c
XL
246
247### Using your local build
248[using-local-build]: #using-local-build
249
250If you use Rustup to manage your rust install, it has a feature called ["custom
251toolchains"][toolchain-link] that you can use to access your newly-built compiler
252without having to install it to your system or user PATH. If you've run `python
253x.py build`, then you can add your custom rustc to a new toolchain like this:
254
255[toolchain-link]: https://github.com/rust-lang-nursery/rustup.rs#working-with-custom-toolchains-and-local-builds
256
257```
258rustup toolchain link <name> build/<host-triple>/stage2
259```
260
261Where `<host-triple>` is the build triple for the host (the triple of your
262computer, by default), and `<name>` is the name for your custom toolchain. (If you
263added `--stage 1` to your build command, the compiler will be in the `stage1`
264folder instead.) You'll only need to do this once - it will automatically point
265to the latest build you've done.
266
267Once this is set up, you can use your custom toolchain just like any other. For
268example, if you've named your toolchain `local`, running `cargo +local build` will
269compile a project with your custom rustc, setting `rustup override set local` will
270override the toolchain for your current directory, and `cargo +local doc` will use
271your custom rustc and rustdoc to generate docs. (If you do this with a `--stage 1`
272build, you'll need to build rustdoc specially, since it's not normally built in
273stage 1. `python x.py build --stage 1 src/libstd src/tools/rustdoc` will build
274rustdoc and libstd, which will allow rustdoc to be run with that toolchain.)
7453a54e 275
85aaf69f 276## Pull Requests
ea8adc8c 277[pull-requests]: #pull-requests
1a4d82fc 278
85aaf69f 279Pull requests are the primary mechanism we use to change Rust. GitHub itself
3b2f2976
XL
280has some [great documentation][pull-requests] on using the Pull Request feature.
281We use the "fork and pull" model [described here][development-models], where
282contributors push changes to their personal fork and create pull requests to
283bring those changes into the source repository.
1a4d82fc 284
3b2f2976
XL
285[pull-requests]: https://help.github.com/articles/about-pull-requests/
286[development-models]: https://help.github.com/articles/about-collaborative-development-models/
85aaf69f
SL
287
288Please make pull requests against the `master` branch.
289
8bb4bdeb
XL
290Compiling all of `./x.py test` can take a while. When testing your pull request,
291consider using one of the more specialized `./x.py` targets to cut down on the
c1a9b12d
SL
292amount of time you have to wait. You need to have built the compiler at least
293once before running these will work, but that’s only one full build rather than
294one each time.
295
476ff2be 296 $ python x.py test --stage 1
c1a9b12d
SL
297
298is one such example, which builds just `rustc`, and then runs the tests. If
299you’re adding something to the standard library, try
300
476ff2be 301 $ python x.py test src/libstd --stage 1
c1a9b12d 302
9e0c209e
SL
303Please make sure your pull request is in compliance with Rust's style
304guidelines by running
305
476ff2be 306 $ python x.py test src/tools/tidy
9e0c209e
SL
307
308Make this check before every pull request (and every new commit in a pull
309request) ; you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
310before every push to make sure you never forget to make this check.
311
85aaf69f 312All pull requests are reviewed by another person. We have a bot,
62682a34
SL
313@rust-highfive, that will automatically assign a random person to review your
314request.
85aaf69f
SL
315
316If you want to request that a specific person reviews your pull request,
317you can add an `r?` to the message. For example, Steve usually reviews
318documentation changes. So if you were to make a documentation change, add
319
320 r? @steveklabnik
321
322to the end of the message, and @rust-highfive will assign @steveklabnik instead
323of a random person. This is entirely optional.
324
325After someone has reviewed your pull request, they will leave an annotation
326on the pull request with an `r+`. It will look something like this:
327
328 @bors: r+ 38fe8d2
329
330This tells @bors, our lovable integration bot, that your pull request has
331been approved. The PR then enters the [merge queue][merge-queue], where @bors
332will run all the tests on every platform we support. If it all works out,
333@bors will merge your code into `master` and close the pull request.
334
3b2f2976 335[merge-queue]: https://buildbot2.rust-lang.org/homu/queue/rust
85aaf69f 336
c1a9b12d
SL
337Speaking of tests, Rust has a comprehensive test suite. More information about
338it can be found
339[here](https://github.com/rust-lang/rust-wiki-backup/blob/master/Note-testsuite.md).
340
ea8adc8c
XL
341### External Dependencies
342[external-dependencies]: #external-dependencies
343
344Currently building Rust will also build the following external projects:
345
346* [clippy](https://github.com/rust-lang-nursery/rust-clippy)
347* [miri](https://github.com/solson/miri)
348
349If your changes break one of these projects, you need to fix them by opening
350a pull request against the broken project asking to put the fix on a branch.
351Then you can disable the tool building via `src/tools/toolstate.toml`.
352Once the branch containing your fix is likely to be merged, you can point
353the affected submodule at this branch.
354
355Don't forget to also add your changes with
356
357```
358git add path/to/submodule
359```
360
361outside the submodule.
362
abe05a73
XL
363In order to prepare your PR, you can run the build locally by doing
364`./x.py build src/tools/TOOL`. If you will be editing the sources
365there, you may wish to set `submodules = false` in the `config.toml`
366to prevent `x.py` from resetting to the original branch.
367
368#### Breaking Tools Built With The Compiler
369[breaking-tools-built-with-the-compiler]: #breaking-tools-built-with-the-compiler
370
371Rust's build system builds a number of tools that make use of the
372internals of the compiler. This includes clippy,
373[RLS](https://github.com/rust-lang-nursery/rls) and
374[rustfmt](https://github.com/rust-lang-nursery/rustfmt). If these tools
375break because of your changes, you may run into a sort of "chicken and egg"
376problem. These tools rely on the latest compiler to be built so you can't update
377them to reflect your changes to the compiler until those changes are merged into
378the compiler. At the same time, you can't get your changes merged into the compiler
379because the rust-lang/rust build won't pass until those tools build and pass their
380tests.
381
382That means that, in the default state, you can't update the compiler without first
383fixing rustfmt, rls and the other tools that the compiler builds.
384
385Luckily, a feature was [added to Rust's build](https://github.com/rust-lang/rust/pull/45243)
386to make all of this easy to handle. The idea is that you mark the tools as "broken",
387so that the rust-lang/rust build passes without trying to build them, then land the change
388in the compiler, wait for a nightly, and go update the tools that you broke. Once you're done
389and the tools are working again, you go back in the compiler and change the tools back
390from "broken".
391
392This should avoid a bunch of synchronization dances and is also much easier on contributors as
393there's no need to block on rls/rustfmt/other tools changes going upstream.
394
395Here are those same steps in detail:
396
3971. (optional) First, if it doesn't exist already, create a `config.toml` by copying
398 `config.toml.example` in the root directory of the Rust repository.
399 Set `submodules = false` in the `[build]` section. This will prevent `x.py`
400 from resetting to the original branch after you make your changes. If you
401 need to [update any submodules to their latest versions][updating-submodules],
402 see the section of this file about that for more information.
4032. (optional) Run `./x.py test src/tools/rustfmt` (substituting the submodule
404 that broke for `rustfmt`). Fix any errors in the submodule (and possibly others).
4053. (optional) Make commits for your changes and send them to upstream repositories as a PR.
4064. (optional) Maintainers of these submodules will **not** merge the PR. The PR can't be
407 merged because CI will be broken. You'll want to write a message on the PR referencing
408 your change, and how the PR should be merged once your change makes it into a nightly.
4095. Update `src/tools/toolstate.toml` to indicate that the tool in question is "broken",
410 that will disable building it on CI. See the documentation in that file for the exact
411 configuration values you can use.
4126. Commit the changes to `src/tools/toolstate.toml`, **do not update submodules in your commit**,
413 and then update the PR you have for rust-lang/rust.
4147. Wait for your PR to merge.
4158. Wait for a nightly
4169. (optional) Help land your PR on the upstream repository now that your changes are in nightly.
41710. (optional) Send a PR to rust-lang/rust updating the submodule, reverting `src/tools/toolstate.toml` back to a "building" or "testing" state.
418
419#### Updating submodules
420[updating-submodules]: #updating-submodules
421
422These instructions are specific to updating `rustfmt`, however they may apply
423to the other submodules as well. Please help by improving these instructions
424if you find any discrepencies or special cases that need to be addressed.
425
426To update the `rustfmt` submodule, start by running the appropriate
427[`git submodule` command](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
428For example, to update to the latest commit on the remote master branch,
429you may want to run:
430```
431git submodule update --remote src/tools/rustfmt
432```
433If you run `./x.py build` now, and you are lucky, it may just work. If you see
434an error message about patches that did not resolve to any crates, you will need
435to complete a few more steps which are outlined with their rationale below.
436
437*(This error may change in the future to include more information.)*
438```
439error: failed to resolve patches for `https://github.com/rust-lang-nursery/rustfmt`
440
441Caused by:
442 patch for `rustfmt-nightly` in `https://github.com/rust-lang-nursery/rustfmt` did not resolve to any crates
443failed to run: ~/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path ~/rust/src/bootstrap/Cargo.toml
444```
445
446If you haven't used the `[patch]`
447section of `Cargo.toml` before, there is [some relevant documentation about it
448in the cargo docs](http://doc.crates.io/manifest.html#the-patch-section). In
449addition to that, you should read the
450[Overriding dependencies](http://doc.crates.io/specifying-dependencies.html#overriding-dependencies)
451section of the documentation as well.
452
453Specifically, the following [section in Overriding dependencies](http://doc.crates.io/specifying-dependencies.html#testing-a-bugfix) reveals what the problem is:
454
455> 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.
456>
457> 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!
458
459This says that when we updated the submodule, the version number in our
460`src/tools/rustfmt/Cargo.toml` changed. The new version is different from
461the version in `Cargo.lock`, so the build can no longer continue.
462
463To resolve this, we need to update `Cargo.lock`. Luckily, cargo provides a
464command to do this easily.
465
466First, go into the `src/` directory since that is where `Cargo.toml` is in
467the rust repository. Then run, `cargo update -p rustfmt-nightly` to solve
468the problem.
469
470```
471$ cd src
472$ cargo update -p rustfmt-nightly
473```
474
475This should change the version listed in `src/Cargo.lock` to the new version you updated
476the submodule to. Running `./x.py build` should work now.
ea8adc8c 477
85aaf69f 478## Writing Documentation
ea8adc8c 479[writing-documentation]: #writing-documentation
85aaf69f
SL
480
481Documentation improvements are very welcome. The source of `doc.rust-lang.org`
482is located in `src/doc` in the tree, and standard API documentation is generated
483from the source code itself.
484
c1a9b12d
SL
485Documentation pull requests function in the same way as other pull requests,
486though you may see a slightly different form of `r+`:
85aaf69f
SL
487
488 @bors: r+ 38fe8d2 rollup
489
490That additional `rollup` tells @bors that this change is eligible for a 'rollup'.
491To save @bors some work, and to get small changes through more quickly, when
492@bors attempts to merge a commit that's rollup-eligible, it will also merge
493the other rollup-eligible patches too, and they'll get tested and merged at
494the same time.
495
cc61c64b 496To find documentation-related issues, sort by the [T-doc label][tdoc].
62682a34 497
cc61c64b
XL
498[tdoc]: https://github.com/rust-lang/rust/issues?q=is%3Aopen%20is%3Aissue%20label%3AT-doc
499
500You can find documentation style guidelines in [RFC 1574][rfc1574].
501
502[rfc1574]: https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text
62682a34 503
8bb4bdeb 504In many cases, you don't need a full `./x.py doc`. You can use `rustdoc` directly
b039eaaf
SL
505to check small fixes. For example, `rustdoc src/doc/reference.md` will render
506reference to `doc/reference.html`. The CSS might be messed up, but you can
9e0c209e 507verify that the HTML is right.
b039eaaf 508
85aaf69f 509## Issue Triage
ea8adc8c 510[issue-triage]: #issue-triage
85aaf69f
SL
511
512Sometimes, an issue will stay open, even though the bug has been fixed. And
513sometimes, the original bug may go stale because something has changed in the
514meantime.
515
516It can be helpful to go through older bug reports and make sure that they are
517still valid. Load up an older issue, double check that it's still true, and
62682a34
SL
518leave a comment letting us know if it is or is not. The [least recently
519updated sort][lru] is good for finding issues like this.
520
521Contributors with sufficient permissions on the Rust repo can help by adding
522labels to triage issues:
523
524* Yellow, **A**-prefixed labels state which **area** of the project an issue
b039eaaf 525 relates to.
62682a34 526
9cc50fc6 527* Magenta, **B**-prefixed labels identify bugs which are **blockers**.
62682a34 528
ea8adc8c
XL
529* Dark blue, **beta-** labels track changes which need to be backported into
530 the beta branches.
531
532* Light purple, **C**-prefixed labels represent the **category** of an issue.
533
62682a34
SL
534* Green, **E**-prefixed labels explain the level of **experience** necessary
535 to fix the issue.
536
ea8adc8c
XL
537* The dark blue **final-comment-period** label marks bugs that are using the
538 RFC signoff functionality of [rfcbot][rfcbot] and are currenty in the final
539 comment period.
540
62682a34
SL
541* Red, **I**-prefixed labels indicate the **importance** of the issue. The
542 [I-nominated][inom] label indicates that an issue has been nominated for
b039eaaf 543 prioritizing at the next triage meeting.
62682a34 544
ea8adc8c
XL
545* The purple **metabug** label marks lists of bugs collected by other
546 categories.
547
548* Purple gray, **O**-prefixed labels are the **operating system** or platform
549 that this issue is specific to.
550
62682a34
SL
551* Orange, **P**-prefixed labels indicate a bug's **priority**. These labels
552 are only assigned during triage meetings, and replace the [I-nominated][inom]
b039eaaf 553 label.
62682a34 554
ea8adc8c
XL
555* The gray **proposed-final-comment-period** label marks bugs that are using
556 the RFC signoff functionality of [rfcbot][rfcbot] and are currently awaiting
557 signoff of all team members in order to enter the final comment period.
62682a34 558
ea8adc8c
XL
559* Pink, **regression**-prefixed labels track regressions from stable to the
560 release channels.
b039eaaf 561
ea8adc8c
XL
562* The light orange **relnotes** label marks issues that should be documented in
563 the release notes of the next release.
564
565* Gray, **S**-prefixed labels are used for tracking the **status** of pull
566 requests.
567
568* Blue, **T**-prefixed bugs denote which **team** the issue belongs to.
62682a34 569
b039eaaf 570If you're looking for somewhere to start, check out the [E-easy][eeasy] tag.
85aaf69f 571
62682a34
SL
572[inom]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AI-nominated
573[eeasy]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy
85aaf69f 574[lru]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc
ea8adc8c 575[rfcbot]: https://github.com/dikaiosune/rust-dashboard/blob/master/RFCBOT.md
85aaf69f
SL
576
577## Out-of-tree Contributions
ea8adc8c 578[out-of-tree-contributions]: #out-of-tree-contributions
85aaf69f
SL
579
580There are a number of other ways to contribute to Rust that don't deal with
581this repository.
582
583Answer questions in [#rust][pound-rust], or on [users.rust-lang.org][users],
584or on [StackOverflow][so].
585
586Participate in the [RFC process](https://github.com/rust-lang/rfcs).
587
588Find a [requested community library][community-library], build it, and publish
589it to [Crates.io](http://crates.io). Easier said than done, but very, very
590valuable!
1a4d82fc 591
85aaf69f 592[pound-rust]: http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust
e9174d1e 593[users]: https://users.rust-lang.org/
85aaf69f
SL
594[so]: http://stackoverflow.com/questions/tagged/rust
595[community-library]: https://github.com/rust-lang/rfcs/labels/A-community-library
e9174d1e
SL
596
597## Helpful Links and Information
ea8adc8c 598[helpful-info]: #helpful-info
e9174d1e
SL
599
600For people new to Rust, and just starting to contribute, or even for
601more seasoned developers, some useful places to look for information
602are:
603
ea8adc8c 604* [Rust Forge][rustforge] contains additional documentation, including write-ups of how to achieve common tasks
e9174d1e
SL
605* The [Rust Internals forum][rif], a place to ask questions and
606 discuss Rust's internals
607* The [generated documentation for rust's compiler][gdfrustc]
b039eaaf 608* The [rust reference][rr], even though it doesn't specifically talk about Rust's internals, it's a great resource nonetheless
e9174d1e
SL
609* Although out of date, [Tom Lee's great blog article][tlgba] is very helpful
610* [rustaceans.org][ro] is helpful, but mostly dedicated to IRC
611* The [Rust Compiler Testing Docs][rctd]
b039eaaf
SL
612* For @bors, [this cheat sheet][cheatsheet] is helpful (Remember to replace `@homu` with `@bors` in the commands that you use.)
613* **Google!** ([search only in Rust Documentation][gsearchdocs] to find types, traits, etc. quickly)
e9174d1e
SL
614* Don't be afraid to ask! The Rust community is friendly and helpful.
615
616[gdfrustc]: http://manishearth.github.io/rust-internals-docs/rustc/
9cc50fc6 617[gsearchdocs]: https://www.google.com/search?q=site:doc.rust-lang.org+your+query+here
e9174d1e
SL
618[rif]: http://internals.rust-lang.org
619[rr]: https://doc.rust-lang.org/book/README.html
ea8adc8c 620[rustforge]: https://forge.rust-lang.org/
a7813a04 621[tlgba]: http://tomlee.co/2014/04/a-more-detailed-tour-of-the-rust-compiler/
e9174d1e 622[ro]: http://www.rustaceans.org/
8bb4bdeb 623[rctd]: ./src/test/COMPILER_TESTS.md
3b2f2976 624[cheatsheet]: https://buildbot2.rust-lang.org/homu/