clean "Coding conventions" chapter

- use correct code block markers
- add missing title
- rustfmt can now use edition setting in its config
  ... and this is set in Rust repo
- reduce visual noise
- needless repetition
- convention is to start sentence with upper case
- sembr
- whitespace
- semi-heading not adding much value
- fix grammar
This commit is contained in:
Tshepang Mbambo 2025-04-14 08:41:22 +02:00
parent a4f63f36fc
commit 07d3c69637
1 changed files with 33 additions and 32 deletions

View File

@ -1,3 +1,5 @@
# Coding conventions
This file offers some tips on the coding conventions for rustc. This This file offers some tips on the coding conventions for rustc. This
chapter covers [formatting](#formatting), [coding for correctness](#cc), chapter covers [formatting](#formatting), [coding for correctness](#cc),
[using crates from crates.io](#cio), and some tips on [using crates from crates.io](#cio), and some tips on
@ -5,7 +7,7 @@ chapter covers [formatting](#formatting), [coding for correctness](#cc),
<a id="formatting"></a> <a id="formatting"></a>
# Formatting and the tidy script ## Formatting and the tidy script
rustc is moving towards the [Rust standard coding style][fmt]. rustc is moving towards the [Rust standard coding style][fmt].
@ -20,44 +22,42 @@ Formatting is checked by the `tidy` script. It runs automatically when you do
`./x test` and can be run in isolation with `./x fmt --check`. `./x test` and can be run in isolation with `./x fmt --check`.
If you want to use format-on-save in your editor, the pinned version of If you want to use format-on-save in your editor, the pinned version of
`rustfmt` is built under `build/<target>/stage0/bin/rustfmt`. You'll have to `rustfmt` is built under `build/<target>/stage0/bin/rustfmt`.
pass the <!-- date-check: nov 2022 --> `--edition=2021` argument yourself when calling
`rustfmt` directly.
[fmt]: https://github.com/rust-dev-tools/fmt-rfcs [fmt]: https://github.com/rust-dev-tools/fmt-rfcs
[`rustfmt`]:https://github.com/rust-lang/rustfmt [`rustfmt`]:https://github.com/rust-lang/rustfmt
## Formatting C++ code ### Formatting C++ code
The compiler contains some C++ code for interfacing with parts of LLVM that The compiler contains some C++ code for interfacing with parts of LLVM that
don't have a stable C API. don't have a stable C API.
When modifying that code, use this command to format it: When modifying that code, use this command to format it:
```sh ```console
./x test tidy --extra-checks=cpp:fmt --bless ./x test tidy --extra-checks cpp:fmt --bless
``` ```
This uses a pinned version of `clang-format`, to avoid relying on the local This uses a pinned version of `clang-format`, to avoid relying on the local
environment. environment.
## Formatting and linting Python code ### Formatting and linting Python code
The Rust repository contains quite a lot of Python code. We try to keep The Rust repository contains quite a lot of Python code. We try to keep
it both linted and formatted by the [ruff][ruff] tool. it both linted and formatted by the [ruff] tool.
When modifying Python code, use this command to format it: When modifying Python code, use this command to format it:
```sh
./x test tidy --extra-checks=py:fmt --bless ```console
./x test tidy --extra-checks py:fmt --bless
``` ```
and the following command to run lints: And, the following command to run lints:
```sh
./x test tidy --extra-checks=py:lint ```console
./x test tidy --extra-checks py:lint
``` ```
This uses a pinned version of `ruff`, to avoid relying on the local These use a pinned version of `ruff`, to avoid relying on the local environment.
environment.
[ruff]: https://github.com/astral-sh/ruff [ruff]: https://github.com/astral-sh/ruff
@ -65,7 +65,7 @@ environment.
<!-- REUSE-IgnoreStart --> <!-- REUSE-IgnoreStart -->
<!-- Prevent REUSE from interpreting the heading as a copyright notice --> <!-- Prevent REUSE from interpreting the heading as a copyright notice -->
## Copyright notice ### Copyright notice
<!-- REUSE-IgnoreEnd --> <!-- REUSE-IgnoreEnd -->
In the past, files began with a copyright and license notice. Please **omit** In the past, files began with a copyright and license notice. Please **omit**
@ -75,41 +75,42 @@ MIT/Apache-2.0).
All of the copyright notices should be gone by now, but if you come across one 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. in the rust-lang/rust repo, feel free to open a PR to remove it.
## Line length ### Line length
Lines should be at most 100 characters. It's even better if you can Lines should be at most 100 characters. It's even better if you can
keep things to 80. keep things to 80.
**Ignoring the line length limit.** Sometimes in particular for Sometimes, and particularly for tests, it can be necessary to exempt yourself from this limit.
tests it can be necessary to exempt yourself from this limit. In In that case, you can add a comment towards the top of the file like so:
that case, you can add a comment towards the top of the file like so:
```rust ```rust
// ignore-tidy-linelength // ignore-tidy-linelength
``` ```
## Tabs vs spaces ### Tabs vs spaces
Prefer 4-space indent. Prefer 4-space indents.
<a id="cc"></a> <a id="cc"></a>
# Coding for correctness ## Coding for correctness
Beyond formatting, there are a few other tips that are worth Beyond formatting, there are a few other tips that are worth
following. following.
## Prefer exhaustive matches ### Prefer exhaustive matches
Using `_` in a match is convenient, but it means that when new Using `_` in a match is convenient, but it means that when new
variants are added to the enum, they may not get handled correctly. variants are added to the enum, they may not get handled correctly.
Ask yourself: if a new variant were added to this enum, what's the Ask yourself: if a new variant were added to this enum, what's the
chance that it would want to use the `_` code, versus having some chance that it would want to use the `_` code, versus having some
other treatment? Unless the answer is "low", then prefer an other treatment? Unless the answer is "low", then prefer an
exhaustive match. (The same advice applies to `if let` and `while exhaustive match.
let`, which are effectively tests for a single variant.)
## Use "TODO" comments for things you don't want to forget The same advice applies to `if let` and `while let`,
which are effectively tests for a single variant.
### Use "TODO" comments for things you don't want to forget
As a useful tool to yourself, you can insert a `// TODO` comment As a useful tool to yourself, you can insert a `// TODO` comment
for something that you want to get back to before you land your PR: for something that you want to get back to before you land your PR:
@ -136,13 +137,13 @@ if foo {
<a id="cio"></a> <a id="cio"></a>
# Using crates from crates.io ## Using crates from crates.io
See the [crates.io dependencies][crates] section. See the [crates.io dependencies][crates] section.
<a id="er"></a> <a id="er"></a>
# How to structure your PR ## How to structure your PR
How you prepare the commits in your PR can make a big difference for the How you prepare the commits in your PR can make a big difference for the
reviewer. Here are some tips. reviewer. Here are some tips.
@ -172,7 +173,7 @@ require that every intermediate commit successfully builds we only
expect to be able to bisect at a PR level. However, if you *can* make expect to be able to bisect at a PR level. However, if you *can* make
individual commits build, that is always helpful. individual commits build, that is always helpful.
# Naming conventions ## Naming conventions
Apart from normal Rust style/naming conventions, there are also some specific Apart from normal Rust style/naming conventions, there are also some specific
to the compiler. to the compiler.