From 779988303a252d6d55de9ca45b281ebe1c091aa3 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Mon, 3 Sep 2018 00:19:59 -0700 Subject: [PATCH] iter conservation efforts: save the endangered .iter() and .into_iter() Make explicit_iter_loop and explicit_into_iter_loop allow-by-default, so that people can turn them on if they want to enforce that style; avoid presenting them as *the* idiomatic Rust style, rather than just *a* style. --- clippy_lints/src/lib.rs | 6 ++---- clippy_lints/src/loops.rs | 8 ++++---- tests/ui/for_loop.stderr | 26 +++++++++++++------------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/clippy_lints/src/lib.rs b/clippy_lints/src/lib.rs index d0e8def2786..c49a70afa6f 100644 --- a/clippy_lints/src/lib.rs +++ b/clippy_lints/src/lib.rs @@ -449,6 +449,8 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { if_not_else::IF_NOT_ELSE, infinite_iter::MAYBE_INFINITE_ITER, items_after_statements::ITEMS_AFTER_STATEMENTS, + loops::EXPLICIT_INTO_ITER_LOOP, + loops::EXPLICIT_ITER_LOOP, matches::SINGLE_MATCH_ELSE, methods::FILTER_MAP, methods::OPTION_MAP_UNWRAP_OR, @@ -546,8 +548,6 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { literal_representation::UNREADABLE_LITERAL, loops::EMPTY_LOOP, loops::EXPLICIT_COUNTER_LOOP, - loops::EXPLICIT_INTO_ITER_LOOP, - loops::EXPLICIT_ITER_LOOP, loops::FOR_KV_MAP, loops::FOR_LOOP_OVER_OPTION, loops::FOR_LOOP_OVER_RESULT, @@ -718,8 +718,6 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { literal_representation::LARGE_DIGIT_GROUPS, literal_representation::UNREADABLE_LITERAL, loops::EMPTY_LOOP, - loops::EXPLICIT_INTO_ITER_LOOP, - loops::EXPLICIT_ITER_LOOP, loops::FOR_KV_MAP, loops::NEEDLESS_RANGE_LOOP, loops::WHILE_LET_ON_ITERATOR, diff --git a/clippy_lints/src/loops.rs b/clippy_lints/src/loops.rs index 51e6327e728..d12b2619c62 100644 --- a/clippy_lints/src/loops.rs +++ b/clippy_lints/src/loops.rs @@ -85,7 +85,7 @@ declare_clippy_lint! { /// ``` declare_clippy_lint! { pub EXPLICIT_ITER_LOOP, - style, + pedantic, "for-looping over `_.iter()` or `_.iter_mut()` when `&_` or `&mut _` would do" } @@ -107,7 +107,7 @@ declare_clippy_lint! { /// ``` declare_clippy_lint! { pub EXPLICIT_INTO_ITER_LOOP, - style, + pedantic, "for-looping over `_.into_iter()` when `_` would do" } @@ -1209,7 +1209,7 @@ fn lint_iter_method(cx: &LateContext<'_, '_>, args: &[Expr], arg: &Expr, method_ cx, EXPLICIT_ITER_LOOP, arg.span, - "it is more idiomatic to loop over references to containers instead of using explicit \ + "it is more concise to loop over references to containers instead of using explicit \ iteration methods", "to write this more concisely, try", format!("&{}{}", muta, object), @@ -1247,7 +1247,7 @@ fn check_for_loop_arg(cx: &LateContext<'_, '_>, pat: &Pat, arg: &Expr, expr: &Ex cx, EXPLICIT_INTO_ITER_LOOP, arg.span, - "it is more idiomatic to loop over containers instead of using explicit \ + "it is more concise to loop over containers instead of using explicit \ iteration methods`", "to write this more concisely, try", object.to_string(), diff --git a/tests/ui/for_loop.stderr b/tests/ui/for_loop.stderr index 732dc2ab448..bab7bdc77a4 100644 --- a/tests/ui/for_loop.stderr +++ b/tests/ui/for_loop.stderr @@ -264,7 +264,7 @@ error: this range is empty so this for loop will never run 193 | for i in (5 + 2)..(8 - 1) { | ^^^^^^^^^^^^^^^^ -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:215:15 | 215 | for _v in vec.iter() {} @@ -272,13 +272,13 @@ error: it is more idiomatic to loop over references to containers instead of usi | = note: `-D clippy::explicit-iter-loop` implied by `-D warnings` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:217:15 | 217 | for _v in vec.iter_mut() {} | ^^^^^^^^^^^^^^ help: to write this more concisely, try: `&mut vec` -error: it is more idiomatic to loop over containers instead of using explicit iteration methods` +error: it is more concise to loop over containers instead of using explicit iteration methods` --> $DIR/for_loop.rs:220:15 | 220 | for _v in out_vec.into_iter() {} @@ -286,61 +286,61 @@ error: it is more idiomatic to loop over containers instead of using explicit it | = note: `-D clippy::explicit-into-iter-loop` implied by `-D warnings` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:223:15 | 223 | for _v in array.into_iter() {} | ^^^^^^^^^^^^^^^^^ help: to write this more concisely, try: `&array` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:228:15 | 228 | for _v in [1, 2, 3].iter() {} | ^^^^^^^^^^^^^^^^ help: to write this more concisely, try: `&[1, 2, 3]` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:232:15 | 232 | for _v in [0; 32].iter() {} | ^^^^^^^^^^^^^^ help: to write this more concisely, try: `&[0; 32]` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:237:15 | 237 | for _v in ll.iter() {} | ^^^^^^^^^ help: to write this more concisely, try: `&ll` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:240:15 | 240 | for _v in vd.iter() {} | ^^^^^^^^^ help: to write this more concisely, try: `&vd` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:243:15 | 243 | for _v in bh.iter() {} | ^^^^^^^^^ help: to write this more concisely, try: `&bh` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:246:15 | 246 | for _v in hm.iter() {} | ^^^^^^^^^ help: to write this more concisely, try: `&hm` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:249:15 | 249 | for _v in bt.iter() {} | ^^^^^^^^^ help: to write this more concisely, try: `&bt` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:252:15 | 252 | for _v in hs.iter() {} | ^^^^^^^^^ help: to write this more concisely, try: `&hs` -error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods +error: it is more concise to loop over references to containers instead of using explicit iteration methods --> $DIR/for_loop.rs:255:15 | 255 | for _v in bs.iter() {}