diff options
Diffstat (limited to 'docs/dev')
| -rw-r--r-- | docs/dev/style.md | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/docs/dev/style.md b/docs/dev/style.md index 17626f3fdc5..cc06d41221e 100644 --- a/docs/dev/style.md +++ b/docs/dev/style.md @@ -144,6 +144,20 @@ fn foo() { In the "Not as good" version, the precondition that `1` is a valid char boundary is checked in `is_string_literal` and used in `foo`. In the "Good" version, the precondition check and usage are checked in the same block, and then encoded in the types. +When checking a boolean precondition, prefer `if !invariant` to `if negated_invariant`: + +```rust +// Good +if !(idx < len) { + return None; +} + +// Not as good +if idx >= len { + return None; +} +``` + ## Getters & Setters If a field can have any value without breaking invariants, make the field public. @@ -382,6 +396,19 @@ fn foo() -> Option<Bar> { } ``` +## Comparisons + +Use `<`/`<=`, avoid `>`/`>=`. +Less-then comparisons are more intuitive, they correspond spatially to [real line](https://en.wikipedia.org/wiki/Real_line) + +```rs +// Good +assert!(lo <= x && x <= hi); + +// Not as good +assert!(x >= lo && x <= hi>); +``` + ## Documentation For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines. |
