]> git.lizzy.rs Git - rust.git/commitdiff
Add comparisons guideline to style
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 7 Oct 2020 10:57:49 +0000 (12:57 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 7 Oct 2020 10:57:49 +0000 (12:57 +0200)
docs/dev/style.md

index 17626f3fdc5e7a7f8757fe4548cd34c3d180c28a..cc06d41221e8d9c0c0236c1db4792d01a35ffd0a 100644 (file)
@@ -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.