diff options
Diffstat (limited to 'src/tools/clippy/src/docs/unnecessary_join.txt')
-rw-r--r-- | src/tools/clippy/src/docs/unnecessary_join.txt | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/tools/clippy/src/docs/unnecessary_join.txt b/src/tools/clippy/src/docs/unnecessary_join.txt new file mode 100644 index 000000000..ee4e78601 --- /dev/null +++ b/src/tools/clippy/src/docs/unnecessary_join.txt @@ -0,0 +1,25 @@ +### What it does +Checks for use of `.collect::<Vec<String>>().join("")` on iterators. + +### Why is this bad? +`.collect::<String>()` is more concise and might be more performant + +### Example +``` +let vector = vec!["hello", "world"]; +let output = vector.iter().map(|item| item.to_uppercase()).collect::<Vec<String>>().join(""); +println!("{}", output); +``` +The correct use would be: +``` +let vector = vec!["hello", "world"]; +let output = vector.iter().map(|item| item.to_uppercase()).collect::<String>(); +println!("{}", output); +``` +### Known problems +While `.collect::<String>()` is sometimes more performant, there are cases where +using `.collect::<String>()` over `.collect::<Vec<String>>().join("")` +will prevent loop unrolling and will result in a negative performance impact. + +Additionally, differences have been observed between aarch64 and x86_64 assembly output, +with aarch64 tending to producing faster assembly in more cases when using `.collect::<String>()`
\ No newline at end of file |