|
| 1 | +# Command-line Arguments |
| 2 | + |
| 3 | +Command-line flags are documented in the [rustc book][cli-docs]. All *stable* |
| 4 | +flags should be documented there. Unstable flags should be documented in the |
| 5 | +[unstable book]. |
| 6 | + |
| 7 | +## Guidelines |
| 8 | + |
| 9 | +- Flags should be orthogonal to each other. For example, if we'd have a |
| 10 | + json-emitting variant of multiple actions `foo` and `bar`, an additional |
| 11 | + `--json` flag is better than adding `--foo-json` and `--bar-json`. |
| 12 | +- Avoid flags with the `no-` prefix. Instead, use the [`parse_bool`] function, |
| 13 | + such as `-C embed-bitcode=no`. |
| 14 | +- Consider the behavior if the flag is passed multiple times. In some |
| 15 | + situations, the values should be accumulated (in order!). In other |
| 16 | + situations, subsequence flags should override previous flags (for example, |
| 17 | + the lint-level flags). And some flags (like `-o`) should generate an error |
| 18 | + if it is too ambiguous what multiple flags would mean. |
| 19 | +- Always give options a long descriptive name, if only for more understandable |
| 20 | + compiler scripts. |
| 21 | +- The `--verbose` flag is for adding verbose information to `rustc` output |
| 22 | + when not compiling a program. For example, using it with the `--version` |
| 23 | + flag gives information about the hashes of the code. |
| 24 | +- Experimental flags and options must be guarded behind the `-Z |
| 25 | + unstable-options` flag. |
| 26 | + |
| 27 | +[cli-docs]: https://doc.rust-lang.org/rustc/command-line-arguments.html |
| 28 | +[unstable book]: https://doc.rust-lang.org/nightly/unstable-book/ |
| 29 | +[`parse_bool`]: https://github.com/rust-lang/rust/blob/e5335592e78354e33d798d20c04bcd677c1df62d/src/librustc_session/options.rs#L307-L313 |
0 commit comments