about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-09-16 08:44:58 +0000
committerbors <bors@rust-lang.org>2022-09-16 08:44:58 +0000
commit481dc2e81cf6e5b68095a6baa5d005a2edf59e01 (patch)
tree03a5c5e82c663d9998492a5d4dd5103ca6ecd0f7 /src
parent56a8ef4dbe13a537e18ad6cdb0e1dabd25a1250a (diff)
parentc6219b2ece469a17e3c6d7e28e0acbd6ce5c9d44 (diff)
downloadrust-481dc2e81cf6e5b68095a6baa5d005a2edf59e01.tar.gz
rust-481dc2e81cf6e5b68095a6baa5d005a2edf59e01.zip
Auto merge of #9409 - DesmondWillowbrook:iter_kv_map, r=xFrednet
Add `iter_kv_map` lint

fixes #9376

| before | after |
| -------------- | ------------------------- |
| `hmap.iter().map(\|(key, _)\| key)` | `hmap.keys()` |
| `hmap.iter().map(\|(_, v)\| v + 2)` | `hmap.values().map(\|v\| v + 2)` |
| `hmap.into_iter().map(\|(key, _)\| key)` | `hmap.into_keys()` |

Is `MachineApplicable`

changelog: [`iter_kv_map`]: added lint
Diffstat (limited to 'src')
-rw-r--r--src/docs.rs1
-rw-r--r--src/docs/iter_kv_map.txt22
2 files changed, 23 insertions, 0 deletions
diff --git a/src/docs.rs b/src/docs.rs
index 9f6f1fb4727..6c89b4dde37 100644
--- a/src/docs.rs
+++ b/src/docs.rs
@@ -221,6 +221,7 @@ docs! {
     "items_after_statements",
     "iter_cloned_collect",
     "iter_count",
+    "iter_kv_map",
     "iter_next_loop",
     "iter_next_slice",
     "iter_not_returning_iterator",
diff --git a/src/docs/iter_kv_map.txt b/src/docs/iter_kv_map.txt
new file mode 100644
index 00000000000..a063c8195ef
--- /dev/null
+++ b/src/docs/iter_kv_map.txt
@@ -0,0 +1,22 @@
+### What it does
+
+Checks for iterating a map (`HashMap` or `BTreeMap`) and
+ignoring either the keys or values.
+
+### Why is this bad?
+
+Readability. There are `keys` and `values` methods that
+can be used to express that we only need the keys or the values.
+
+### Example
+
+```
+let map: HashMap<u32, u32> = HashMap::new();
+let values = map.iter().map(|(_, value)| value).collect::<Vec<_>>();
+```
+
+Use instead:
+```
+let map: HashMap<u32, u32> = HashMap::new();
+let values = map.values().collect::<Vec<_>>();
+```
\ No newline at end of file