|
| 1 | +--- |
| 2 | +layout: default |
| 3 | +title: How To Contribute |
| 4 | +--- |
| 5 | + |
| 6 | +# Contributing to Rust |
| 7 | + |
| 8 | +If you're learning Rust, you've no doubt been amazed at how awesome |
| 9 | +the language is and will be keen to write more Rust code. Hopefully, |
| 10 | +you'll also want to make a meaningful contribution to the community. |
| 11 | +If you're not sure how best to do that, then hopefully this page will |
| 12 | +help. Most of this page is filled with links to lists of issues to |
| 13 | +help you find something to work on. There are issues on the Rust |
| 14 | +project itself, a number of supporting projects, and some projects |
| 15 | +which are large users of Rust. |
| 16 | + |
| 17 | +Writing code isn't the only way to make a meaningful contribution. |
| 18 | +Writing tests and documentation is how many people get started and is |
| 19 | +really useful. There are links to these kind of issues too. Likewise |
| 20 | +finding bugs and filing issues in any of the projects linked here is |
| 21 | +very much appreciated. As a reminder, all contributors are expected to |
| 22 | +follow our [Code of Conduct][coc]. |
| 23 | + |
| 24 | +[coc]: https://www.rust-lang.org/conduct.html |
| 25 | + |
| 26 | +## Finding Something to Work On |
| 27 | + |
| 28 | +#### Issues |
| 29 | + |
| 30 | +If you're looking for [issues][rust_issues] on the Rust repo |
| 31 | +and want something easy-ish to start with, look for the [E-easy][e_easy_issues] |
| 32 | +or [E-mentor][e_mentor_issues] labels. |
| 33 | + |
| 34 | +Contributors with sufficient permissions on the Rust repo can help by |
| 35 | +adding labels to triage issues: |
| 36 | + |
| 37 | +- **Yellow A-prefixed** labels state which area of the project an |
| 38 | + issue relates to. |
| 39 | +- **Magenta B-prefixed** labels identify bugs which belong elsewhere. |
| 40 | +- **Green E-prefixed** labels explain the level of experience |
| 41 | + necessary to fix the issue. |
| 42 | +- **Red I-prefixed** labels indicate the importance of the issue. The |
| 43 | + I-nominated label indicates that an issue has been nominated for |
| 44 | +prioritizing at the next triage meeting. |
| 45 | +- **Orange P-prefixed** labels indicate a bug's priority. These labels |
| 46 | + are only assigned during triage meetings, and replace the |
| 47 | +I-nominated label. |
| 48 | +- **Blue T-prefixed** bugs denote which team the issue belongs to. |
| 49 | +- **Dark blue beta-** labels track changes which need to be backported |
| 50 | + into the beta branches. |
| 51 | +- **Purple** metabug labels mark lists of bugs collected by other |
| 52 | + categories. |
| 53 | + |
| 54 | +[rust_issues]: https://github.com/rust-lang/rust/issues |
| 55 | +[e_easy_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy |
| 56 | +[e_mentor_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy+label%3AE-mentor |
| 57 | + |
| 58 | +#### The Rust compiler |
| 59 | + |
| 60 | +The compiler is part of the [main repo][main_repo], which also |
| 61 | +includes the standard library crates and a whole bunch of supporting |
| 62 | +code. For questions about the compiler, there is the |
| 63 | +[#rustc][rustc_irc] IRC channel. Compiler errors (ICE for 'internal |
| 64 | +compiler errors') can be searched for in issues using the |
| 65 | +[I-ICE][i_ice_issues] label. These are usually good bugs to start with |
| 66 | +because it's easy to know when you've fixed them, and they're often |
| 67 | +relatively self-contained. If you're interested in parsing, macros, |
| 68 | +syntactic stuff, the [parsing][parsing_issues] label and the |
| 69 | +[macro][macro_issues] label are a good places to start. |
| 70 | + |
| 71 | +[main_repo]: https://github.com/rust-lang |
| 72 | +[rust_irc]: irc://moznet/rustc |
| 73 | +[i_ice_issues]: https://github.com/rust-lang/rust/labels/I-ICE |
| 74 | +[parsing_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AA-parser |
| 75 | +[macro_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AA-parser+label%3AA-macros |
| 76 | + |
| 77 | +#### Standard Libraries |
| 78 | + |
| 79 | +[Libstd][libstd], [libcollections][libcollections], |
| 80 | +[liballoc][liballoc] and [libcore][libcore] are the main library |
| 81 | +crates. These all appear to users as if they are part of libstd, the |
| 82 | +standard library. These tend to be very fundamental libraries - |
| 83 | +built-in types, low level IO and concurrency, allocation, essential |
| 84 | +collections, and so forth. You should join [#rust-libs][libs_irc] if |
| 85 | +you are interested in contributing to the Rust libraries. |
| 86 | + |
| 87 | +[libstd]: https://github.com/rust-lang/rust/tree/master/src/libstd |
| 88 | +[libcollections]: https://github.com/rust-lang/rust/tree/master/src/libcollections |
| 89 | +[liballoc]: https://github.com/rust-lang/rust/tree/master/src/liballoc |
| 90 | +[libcore]: https://github.com/rust-lang/rust/tree/master/src/libcore |
| 91 | +[libs_irc]: irc://moznet/rust-libs |
| 92 | + |
| 93 | +#### Cargo |
| 94 | + |
| 95 | +[Cargo][cargo_issues] is Rust's package manager. |
| 96 | + |
| 97 | +[cargo_issues]: https://github.com/rust-lang/cargo/issues |
| 98 | + |
| 99 | +#### Tests |
| 100 | + |
| 101 | +Contributing tests is extremely valuable to the Rust project. For the |
| 102 | +compiler and standard libraries, there are unit tests (usually) |
| 103 | +embedded in the source code and regression tests in the |
| 104 | +[src/tests][tests] directory. There is a list of issues which have |
| 105 | +(probably) been fixed, but still need a test. Nearly any other project |
| 106 | +will be extremely welcoming of new tests too. Writing test cases is a |
| 107 | +great way to begin to understand a new project and get started |
| 108 | +contributing. |
| 109 | + |
| 110 | +[test]: https://github.com/rust-lang/rust/tree/master/src/test |
| 111 | + |
| 112 | +#### Checking Older Bugs |
| 113 | + |
| 114 | +Sometimes, an issue will stay open, even though the bug has been |
| 115 | +fixed. And sometimes, the original bug may go stale because something |
| 116 | +has changed in the meantime. It can be helpful to go through older bug |
| 117 | +reports and make sure that they are still valid. Load up an older |
| 118 | +issue, double check that it's still true, and leave a comment letting |
| 119 | +us know if it is or is not. The [least recently updated][lru_issues] |
| 120 | +sort is good for finding issues like this. |
| 121 | + |
| 122 | +[lru_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc |
| 123 | + |
| 124 | +#### Documentation |
| 125 | + |
| 126 | +Documentation is never good enough and there's never enough of it. |
| 127 | +Writing docs is a really valuable way to contribute to open source |
| 128 | +projects. Many aspects of the docs don't require super-deep knowledge, |
| 129 | +especially if they're aimed at newcomers. It's also a great way to |
| 130 | +learn more about the language or specific libraries. |
| 131 | + |
| 132 | +- [The Book][rustbook_issues] The main guide to learning Rust. |
| 133 | +- [Rust Documentation][rustdoc_issues] |
| 134 | +- [Rust by Example][rust_by_example_issues] |
| 135 | +- [Rust for C++ Programmers][rust_for_cpp_issues] A tutorial aimed |
| 136 | +at experienced C++ programmers coming to Rust. |
| 137 | + |
| 138 | +[rustbook_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AA-book |
| 139 | +[rustdoc_issues]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AA-docs |
| 140 | +[rust_by_example_issues]: https://github.com/rust-lang/rust-by-example/issues |
| 141 | +[rust_for_cpp_issues]: https://github.com/nrc/r4cppp/issues |
| 142 | + |
| 143 | +#### Tools |
| 144 | + |
| 145 | +Tools play a huge part in the success of a language. Rust has some |
| 146 | +great tool support, in particular with debugging and package |
| 147 | +management, but we need much more. |
| 148 | + |
| 149 | +- [cargo](https://github.com/rust-lang/cargo/issues) Rust's package manager and build system. |
| 150 | +- [rustdoc](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AA-rustdoc) |
| 151 | + Produces documentation for the official libraries and user projects. |
| 152 | +- [racer](https://github.com/phildawes/racer) Code completion. |
| 153 | +- [rustfmt](https://github.com/nrc/rustfmt) Code formatting. |
| 154 | +- [multirust](https://github.com/brson/multirust/issues) For managing |
| 155 | + multiple installations of the Rust toolchain. |
| 156 | +- [homu](https://github.com/barosl/homu/issues) Acts as a gatekeeper for commits. |
| 157 | + |
| 158 | +#### Other Contributions |
| 159 | + |
| 160 | +Try [Github Trending][trending] for currently active Rust projects. |
| 161 | +There are a number of other ways to contribute to Rust that don't deal |
| 162 | +directly with the Rust repository. |
| 163 | + |
| 164 | +- Answer questions in [#rust][rust_irc], on the [Rust Forum][forum] or |
| 165 | + on [Stack Overflow][stack_overflow]. |
| 166 | +- Participate in the [RFC process][rfcs]. |
| 167 | +- Find a [requested community library][requested], build it, and |
| 168 | + publish it to [Crates.io][crates]. Easier said than done, |
| 169 | +but very, very valuable! |
| 170 | + |
| 171 | +[trending]: https://github.com/trending?l=rust |
| 172 | +[rust_irc]: irc://moznet/rust |
| 173 | +[forum]: https://users.rust-lang.org/ |
| 174 | +[stack_overflow]: http://stackoverflow.com/questions/tagged/rust |
| 175 | +[rfcs]: https://github.com/rust-lang/rfcs |
| 176 | +[requested]: https://github.com/rust-lang/rfcs/labels/A-community-library |
| 177 | +[crates]: http://crates.io |
0 commit comments