Skip to content

Update Conventions chapters, add chapter on dependencies #273

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 2 commits into from
Mar 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
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 @@ -19,6 +19,7 @@
- [Profiling the compiler](./profiling.md)
- [with the linux perf tool](./profiling/with_perf.md)
- [Coding conventions](./conventions.md)
- [crates.io Dependencies](./crates-io.md)

---

Expand Down
28 changes: 22 additions & 6 deletions src/conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ rustc is slowly moving towards the [Rust standard coding style][fmt];
at the moment, however, it follows a rather more *chaotic* style. We
do have some mandatory formatting conventions, which are automatically
enforced by a script we affectionately call the "tidy" script. The
tidy script runs automatically when you do `./x.py test` and can be run
tidy script runs automatically when you do `./x.py test` and can be run
in isolation with `./x.py test src/tools/tidy`.

[fmt]: https://github.com/rust-lang-nursery/fmt-rfcs
Expand All @@ -20,11 +20,12 @@ in isolation with `./x.py test src/tools/tidy`.

### Copyright notice

Some existing files begin with a copyright and license notice. Please omit this
notice for new files licensed under the standard terms (dual MIT/Apache-2.0).
For existing files, the year at the top is not meaningful: copyright
protections are in fact automatic from the moment of authorship. We do not
typically edit the years on existing files.
In the past, files begin with a copyright and license notice. Please **omit**
this notice for new files licensed under the standard terms (dual
MIT/Apache-2.0).

All of the copyright notices should be gone by now, but if you come across one
in the rust-lang/rust repo, feel free to open a PR to remove it.

## Line length

Expand Down Expand Up @@ -132,3 +133,18 @@ require that every intermediate commit successfully builds – we only
expect to be able to bisect at a PR level. However, if you *can* make
individual commits build, that is always helpful.

# Naming conventions

Apart from normal Rust style/naming conventions, there are also some specific
to the compiler.

- `cx` tends to be short for "context" and is often used as a suffix. For
example, `tcx` is a common name for the [Typing Context][tcx].

- [`'tcx` and `'gcx`][tcx] are used as the lifetime names for the Typing
Context.

- Because `crate` is a keyword, if you need a variable to represent something
crate-related, often the spelling is changed to `krate`.

[tcx]: ./ty.md
23 changes: 23 additions & 0 deletions src/crates-io.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# crates.io Dependencies

The rust compiler supports building with some dependencies from `crates.io`.
For example, `log` and `env_logger` come from `crates.io`.

In general, you should avoid adding dependencies to the compiler for several
reasons:

- The dependency may not be high quality or well-maintained, whereas we want
the compiler to be high-quality.
- The dependency may not be using a compatible license.
- The dependency may have transitive dependencies that have one of the above
problems.

TODO: what is the vetting process?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good question for the meta WG to address, I guess. It seems like a quick FCP might make sense.


## Whitelist

The `tidy` tool has a [whitelist] of crates that are allowed. To add a
dependency that is not already in the compiler, you will need to add it to this
whitelist.

[whitelist]: https://github.com/rust-lang/rust/blob/659994627234ce7d95a1a52ad8756ce661059adf/src/tools/tidy/src/deps.rs#L56