Skip to content

Commit 636c3c4

Browse files
committed
internal: document style for helper functions and variables
1 parent a0b3eb7 commit 636c3c4

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

docs/dev/style.md

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,9 +806,48 @@ if let Some(expected_type) = ctx.expected_type.as_ref() {
806806
}
807807
```
808808

809-
**Rational:** `match` is almost always more compact.
809+
**Rationale:** `match` is almost always more compact.
810810
The `else` branch can get a more precise pattern: `None` or `Err(_)` instead of `_`.
811811

812+
## Helper Functions
813+
814+
Avoid creating singe-use helper functions:
815+
816+
```rust
817+
// GOOD
818+
let buf = {
819+
let mut buf = get_empty_buf(&mut arena);
820+
buf.add_item(item);
821+
buf
822+
};
823+
824+
// BAD
825+
826+
let buf = prepare_buf(&mut arena, item);
827+
828+
...
829+
830+
fn prepare_buf(arena: &mut Arena, item: Item) -> ItemBuf {
831+
let mut res = get_empty_buf(&mut arena);
832+
res.add_item(item);
833+
res
834+
}
835+
```
836+
837+
Exception: if you want to make use of `return` or `?`.
838+
839+
**Rationale:** single-use functions change frequently, adding or removing parameters adds churn.
840+
A block serves just as well to delineate a bit of logic, but has access to all the context.
841+
Re-using originally single-purpose function often leads to bad coupling.
842+
843+
## Helper Variables
844+
845+
Introduce helper variables freely, especially for multiline conditions.
846+
847+
**Rationale:** like blocks, single-use variables are a cognitively cheap abstraction, as they have access to all the context.
848+
Extra variables help during debugging, they make it easy to print/view important intermediate results.
849+
Giving a name to a condition in `if` expression often improves clarity and leads to a nicer formatted code.
850+
812851
## Token names
813852

814853
Use `T![foo]` instead of `SyntaxKind::FOO_KW`.

0 commit comments

Comments
 (0)