[INFO] updating cached repository 0xbsec/duprule [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/0xbsec/duprule [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/0xbsec/duprule" "work/ex/clippy-test-run/sources/stable/gh/0xbsec/duprule"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/0xbsec/duprule'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/0xbsec/duprule" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/0xbsec/duprule"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/0xbsec/duprule'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] dd6a8937972f5d9f280b7cad0e827bb278f22bec [INFO] sha for GitHub repo 0xbsec/duprule: dd6a8937972f5d9f280b7cad0e827bb278f22bec [INFO] validating manifest of 0xbsec/duprule on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of 0xbsec/duprule on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing 0xbsec/duprule [INFO] finished frobbing 0xbsec/duprule [INFO] frobbed toml for 0xbsec/duprule written to work/ex/clippy-test-run/sources/stable/gh/0xbsec/duprule/Cargo.toml [INFO] started frobbing 0xbsec/duprule [INFO] finished frobbing 0xbsec/duprule [INFO] frobbed toml for 0xbsec/duprule written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/0xbsec/duprule/Cargo.toml [INFO] crate 0xbsec/duprule has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting 0xbsec/duprule against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/0xbsec/duprule:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] d8a618de9df9e2fc1d22ba2162bbfc7a661c522c4f66d2fff69b06db1d6df650 [INFO] running `"docker" "start" "-a" "d8a618de9df9e2fc1d22ba2162bbfc7a661c522c4f66d2fff69b06db1d6df650"` [INFO] [stderr] Checking duprule v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/slots_map.rs:163:33 [INFO] [stderr] | [INFO] [stderr] 163 | case: case, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `case` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/rule.rs:198:17 [INFO] [stderr] | [INFO] [stderr] 198 | ast: ast, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ast` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/slots_map.rs:163:33 [INFO] [stderr] | [INFO] [stderr] 163 | case: case, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `case` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/rule.rs:198:17 [INFO] [stderr] | [INFO] [stderr] 198 | ast: ast, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ast` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/char_case.rs:5:17 [INFO] [stderr] | [INFO] [stderr] 5 | #[derive(Debug, Hash, Clone)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/char_case.rs:54:1 [INFO] [stderr] | [INFO] [stderr] 54| / impl PartialEq for CharCaseT { [INFO] [stderr] 55| | fn eq(&self, other: &CharCaseT) -> bool { [INFO] [stderr] 56| | match (self, other) { [INFO] [stderr] 57| | (&ANY, _) | [INFO] [stderr] ... | [INFO] [stderr] 65| | } [INFO] [stderr] 66| | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/value.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | / impl Hash for Value { [INFO] [stderr] 21 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 22 | | match *self { [INFO] [stderr] 23 | | Unknown {ref case, ref id} => { [INFO] [stderr] ... | [INFO] [stderr] 29 | | } [INFO] [stderr] 30 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/value.rs:8:17 [INFO] [stderr] | [INFO] [stderr] 8 | #[derive(Debug, PartialEq, Eq, Clone)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/slots_map.rs:15:19 [INFO] [stderr] | [INFO] [stderr] 15 | for id in 1..(len + 1) { [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `1..=len` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:81:21 [INFO] [stderr] | [INFO] [stderr] 81 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:205:21 [INFO] [stderr] | [INFO] [stderr] 205 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/slots_map.rs:207:40 [INFO] [stderr] | [INFO] [stderr] 207 | self.slots.insert(idx * 2, slots.get(idx).unwrap().clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `slots[idx]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:279:21 [INFO] [stderr] | [INFO] [stderr] 279 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `slots` [INFO] [stderr] --> src/slots_map.rs:280:20 [INFO] [stderr] | [INFO] [stderr] 280 | for idx in 0..pos { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 280 | for (idx, ) in slots.iter().enumerate().take(pos) { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:293:21 [INFO] [stderr] | [INFO] [stderr] 293 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `slots` [INFO] [stderr] --> src/slots_map.rs:294:20 [INFO] [stderr] | [INFO] [stderr] 294 | for idx in (len - pos)..len { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 294 | for (idx, ) in slots.iter().enumerate().take(len).skip((len - pos)) { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/rule.rs:269:19 [INFO] [stderr] | [INFO] [stderr] 269 | for id in 1..(RULE_MAX + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: use: `1..=RULE_MAX` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/duprule.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | / pub fn new(lines: std::io::Lines) { [INFO] [stderr] 23 | | let mut checked: HashMap = HashMap::new(); [INFO] [stderr] 24 | | [INFO] [stderr] 25 | | let stdout = stdout(); [INFO] [stderr] ... | [INFO] [stderr] 43 | | } [INFO] [stderr] 44 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_ret_no_self)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/duprule.rs:37:21 [INFO] [stderr] | [INFO] [stderr] 37 | / if !checked.contains_key(&key) { [INFO] [stderr] 38 | | write!(stream, "{}", raw_rule).unwrap(); [INFO] [stderr] 39 | | checked.insert(key, ()); [INFO] [stderr] 40 | | } [INFO] [stderr] | |_____________________^ help: consider using: `checked.entry(key)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/duprule.rs:61:21 [INFO] [stderr] | [INFO] [stderr] 61 | / if checked.contains_key(&key) { [INFO] [stderr] 62 | | let dups = checked.get_mut(&key).unwrap(); [INFO] [stderr] 63 | | dups.1.push(raw_rule); [INFO] [stderr] 64 | | } else { [INFO] [stderr] 65 | | write!(stream, "{}", raw_rule).unwrap(); [INFO] [stderr] 66 | | checked.insert(key, (raw_rule, Vec::new())); [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____________________^ help: consider using: `checked.entry(key)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `duprule`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/char_case.rs:5:17 [INFO] [stderr] | [INFO] [stderr] 5 | #[derive(Debug, Hash, Clone)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/char_case.rs:54:1 [INFO] [stderr] | [INFO] [stderr] 54| / impl PartialEq for CharCaseT { [INFO] [stderr] 55| | fn eq(&self, other: &CharCaseT) -> bool { [INFO] [stderr] 56| | match (self, other) { [INFO] [stderr] 57| | (&ANY, _) | [INFO] [stderr] ... | [INFO] [stderr] 65| | } [INFO] [stderr] 66| | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/value.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | / impl Hash for Value { [INFO] [stderr] 21 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 22 | | match *self { [INFO] [stderr] 23 | | Unknown {ref case, ref id} => { [INFO] [stderr] ... | [INFO] [stderr] 29 | | } [INFO] [stderr] 30 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/value.rs:8:17 [INFO] [stderr] | [INFO] [stderr] 8 | #[derive(Debug, PartialEq, Eq, Clone)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/slots_map.rs:15:19 [INFO] [stderr] | [INFO] [stderr] 15 | for id in 1..(len + 1) { [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `1..=len` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:81:21 [INFO] [stderr] | [INFO] [stderr] 81 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:205:21 [INFO] [stderr] | [INFO] [stderr] 205 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/slots_map.rs:207:40 [INFO] [stderr] | [INFO] [stderr] 207 | self.slots.insert(idx * 2, slots.get(idx).unwrap().clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `slots[idx]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:279:21 [INFO] [stderr] | [INFO] [stderr] 279 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `slots` [INFO] [stderr] --> src/slots_map.rs:280:20 [INFO] [stderr] | [INFO] [stderr] 280 | for idx in 0..pos { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 280 | for (idx, ) in slots.iter().enumerate().take(pos) { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/slots_map.rs:293:21 [INFO] [stderr] | [INFO] [stderr] 293 | let slots = self.slots.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `slots` [INFO] [stderr] --> src/slots_map.rs:294:20 [INFO] [stderr] | [INFO] [stderr] 294 | for idx in (len - pos)..len { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 294 | for (idx, ) in slots.iter().enumerate().take(len).skip((len - pos)) { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/rule.rs:269:19 [INFO] [stderr] | [INFO] [stderr] 269 | for id in 1..(RULE_MAX + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: use: `1..=RULE_MAX` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/rule.rs:423:5 [INFO] [stderr] | [INFO] [stderr] 423 | / fn test_replace_should_take_case_into_account() { [INFO] [stderr] 424 | | same!("lsAb", "l", "lsAB"); [INFO] [stderr] 425 | | same!("usaB", "u", "usab"); [INFO] [stderr] 426 | | same!("saBl", "sabl"); [INFO] [stderr] ... | [INFO] [stderr] 437 | | diff!("saA", "saa", "sAa"); [INFO] [stderr] 438 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 36 [INFO] [stderr] --> src/rule.rs:498:5 [INFO] [stderr] | [INFO] [stderr] 498 | / fn test_toggle_at() { [INFO] [stderr] 499 | | same!("T1T1T2T0T0", ":T2"); [INFO] [stderr] 500 | | same!("T1T0T2l", "l"); [INFO] [stderr] 501 | | same!("T1T0T2u", "u"); [INFO] [stderr] ... | [INFO] [stderr] 510 | | diff!("c sl1 T2", "c T2 sl1", "c so0 T3", "c T3 so0"); [INFO] [stderr] 511 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/rule.rs:514:5 [INFO] [stderr] | [INFO] [stderr] 514 | / fn test_reverse() { [INFO] [stderr] 515 | | same!("rr", ":"); [INFO] [stderr] 516 | | same!("r", "rrr"); [INFO] [stderr] 517 | | same!("crt", "cccrrrttt"); [INFO] [stderr] ... | [INFO] [stderr] 520 | | diff!("sa!r", "s2*r", "sdXr", "r", "sw-r", "s1wr", "s9_r"); [INFO] [stderr] 521 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/rule.rs:572:5 [INFO] [stderr] | [INFO] [stderr] 572 | / fn test_rotate() { [INFO] [stderr] 573 | | same!("{}", "{{}}", "{{{}}}", ":"); [INFO] [stderr] 574 | | same!("{sab", "sab{"); [INFO] [stderr] 575 | | same!("}sab", "sab}"); [INFO] [stderr] ... | [INFO] [stderr] 593 | | diff!("}sab", "sab{", "sab"); [INFO] [stderr] 594 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 32 [INFO] [stderr] --> src/rule.rs:814:5 [INFO] [stderr] | [INFO] [stderr] 814 | / fn test_truncate_at() { [INFO] [stderr] 815 | | same!("$a'0", "^a'0", "sab'0", "sAb'0", ":'0", "s12'0s32", "u'0l"); [INFO] [stderr] 816 | | same!("'0i0a", "'0$a", "'0^a"); [INFO] [stderr] 817 | | same!("'0i0at", "'0i0A"); [INFO] [stderr] ... | [INFO] [stderr] 826 | | diff!("'3", "'4", "'0"); [INFO] [stderr] 827 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/rule.rs:830:5 [INFO] [stderr] | [INFO] [stderr] 830 | / fn test_omit() { [INFO] [stderr] 831 | | same!("O00", ":"); [INFO] [stderr] 832 | | same!("O12sab", "sabO12"); [INFO] [stderr] 833 | | same!("O12 @a", "@a O12"); [INFO] [stderr] ... | [INFO] [stderr] 851 | | diff!("O31", "D2"); [INFO] [stderr] 852 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: methods called `new` usually return `Self` [INFO] [stderr] --> src/duprule.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | / pub fn new(lines: std::io::Lines) { [INFO] [stderr] 23 | | let mut checked: HashMap = HashMap::new(); [INFO] [stderr] 24 | | [INFO] [stderr] 25 | | let stdout = stdout(); [INFO] [stderr] ... | [INFO] [stderr] 43 | | } [INFO] [stderr] 44 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_ret_no_self)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_ret_no_self [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/duprule.rs:37:21 [INFO] [stderr] | [INFO] [stderr] 37 | / if !checked.contains_key(&key) { [INFO] [stderr] 38 | | write!(stream, "{}", raw_rule).unwrap(); [INFO] [stderr] 39 | | checked.insert(key, ()); [INFO] [stderr] 40 | | } [INFO] [stderr] | |_____________________^ help: consider using: `checked.entry(key)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/duprule.rs:61:21 [INFO] [stderr] | [INFO] [stderr] 61 | / if checked.contains_key(&key) { [INFO] [stderr] 62 | | let dups = checked.get_mut(&key).unwrap(); [INFO] [stderr] 63 | | dups.1.push(raw_rule); [INFO] [stderr] 64 | | } else { [INFO] [stderr] 65 | | write!(stream, "{}", raw_rule).unwrap(); [INFO] [stderr] 66 | | checked.insert(key, (raw_rule, Vec::new())); [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____________________^ help: consider using: `checked.entry(key)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `duprule`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "d8a618de9df9e2fc1d22ba2162bbfc7a661c522c4f66d2fff69b06db1d6df650"` [INFO] running `"docker" "rm" "-f" "d8a618de9df9e2fc1d22ba2162bbfc7a661c522c4f66d2fff69b06db1d6df650"` [INFO] [stdout] d8a618de9df9e2fc1d22ba2162bbfc7a661c522c4f66d2fff69b06db1d6df650