summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/src/docs/format_push_string.txt
blob: ca409ebc7ec2634e5befc04cdda49e710dd6c8dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
### What it does
Detects cases where the result of a `format!` call is
appended to an existing `String`.

### Why is this bad?
Introduces an extra, avoidable heap allocation.

### Known problems
`format!` returns a `String` but `write!` returns a `Result`.
Thus you are forced to ignore the `Err` variant to achieve the same API.

While using `write!` in the suggested way should never fail, this isn't necessarily clear to the programmer.

### Example
```
let mut s = String::new();
s += &format!("0x{:X}", 1024);
s.push_str(&format!("0x{:X}", 1024));
```
Use instead:
```
use std::fmt::Write as _; // import without risk of name clashing

let mut s = String::new();
let _ = write!(s, "0x{:X}", 1024);
```