[INFO] updating cached repository jonhoo/hanabot [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/jonhoo/hanabot [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/jonhoo/hanabot" "work/ex/clippy-test-run/sources/stable/gh/jonhoo/hanabot"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/jonhoo/hanabot'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/jonhoo/hanabot" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/jonhoo/hanabot"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/jonhoo/hanabot'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 05fdf6acd2ac452bda7f04f3f88f4e36581bc248 [INFO] sha for GitHub repo jonhoo/hanabot: 05fdf6acd2ac452bda7f04f3f88f4e36581bc248 [INFO] validating manifest of jonhoo/hanabot 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 jonhoo/hanabot 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 jonhoo/hanabot [INFO] finished frobbing jonhoo/hanabot [INFO] frobbed toml for jonhoo/hanabot written to work/ex/clippy-test-run/sources/stable/gh/jonhoo/hanabot/Cargo.toml [INFO] started frobbing jonhoo/hanabot [INFO] finished frobbing jonhoo/hanabot [INFO] frobbed toml for jonhoo/hanabot written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/jonhoo/hanabot/Cargo.toml [INFO] crate jonhoo/hanabot 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 jonhoo/hanabot 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/jonhoo/hanabot:/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] 04e48415e143ba062459a7ed49b6e11313e672399919b845da6a08f08948469d [INFO] running `"docker" "start" "-a" "04e48415e143ba062459a7ed49b6e11313e672399919b845da6a08f08948469d"` [INFO] [stderr] Checking input_buffer v0.2.0 [INFO] [stderr] Checking ctrlc v3.1.1 [INFO] [stderr] Checking tokio-reactor v0.1.6 [INFO] [stderr] Checking tungstenite v0.6.1 [INFO] [stderr] Checking tokio-tcp v0.1.2 [INFO] [stderr] Checking tokio-udp v0.1.2 [INFO] [stderr] Checking tokio-uds v0.2.3 [INFO] [stderr] Checking tokio v0.1.11 [INFO] [stderr] Checking hyper v0.12.14 [INFO] [stderr] Checking hyper-tls v0.3.1 [INFO] [stderr] Checking reqwest v0.9.5 [INFO] [stderr] Checking slack_api v0.21.0 [INFO] [stderr] Checking slack v0.22.0 [INFO] [stderr] Checking hanabot v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/main.rs:342:13 [INFO] [stderr] | [INFO] [stderr] 342 | cli: cli, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `cli` [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/main.rs:342:13 [INFO] [stderr] | [INFO] [stderr] 342 | cli: cli, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `cli` [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: unneeded unit expression [INFO] [stderr] --> src/main.rs:62:17 [INFO] [stderr] | [INFO] [stderr] 62 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/main.rs:62:17 [INFO] [stderr] | [INFO] [stderr] 62 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hanabi/components.rs:70:28 [INFO] [stderr] | [INFO] [stderr] 70 | pub(super) fn as_usize(&self) -> usize { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/hanabi/components.rs:143:31 [INFO] [stderr] | [INFO] [stderr] 143 | (false, false) => format!(":rainbow: :keycap_star:"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `":rainbow: :keycap_star:".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hanabi/components.rs:70:28 [INFO] [stderr] | [INFO] [stderr] 70 | pub(super) fn as_usize(&self) -> usize { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/hanabi/mod.rs:91:14 [INFO] [stderr] | [INFO] [stderr] 91 | .into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/hanabi/mod.rs:154:71 [INFO] [stderr] | [INFO] [stderr] 154 | let hand = if let Some(h) = self.hands.iter_mut().find(|hand| &hand.player == to) { [INFO] [stderr] | ------------^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `hand.player` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/hanabi/components.rs:143:31 [INFO] [stderr] | [INFO] [stderr] 143 | (false, false) => format!(":rainbow: :keycap_star:"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `":rainbow: :keycap_star:".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:190:29 [INFO] [stderr] | [INFO] [stderr] 190 | if let Some(card) = self.hands.get_mut(hand).unwrap().remove(card) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [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 `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | self.hands.get_mut(hand).unwrap().draw(&mut self.deck); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [INFO] [stderr] | [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 `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:277:29 [INFO] [stderr] | [INFO] [stderr] 277 | if let Some(card) = self.hands.get_mut(hand).unwrap().remove(card) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [INFO] [stderr] | [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 `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:278:13 [INFO] [stderr] | [INFO] [stderr] 278 | self.hands.get_mut(hand).unwrap().draw(&mut self.deck); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/hanabi/mod.rs:319:30 [INFO] [stderr] | [INFO] [stderr] 319 | .position(|hand| &hand.player == user) [INFO] [stderr] | ------------^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `hand.player` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/hanabi/mod.rs:424:27 [INFO] [stderr] | [INFO] [stderr] 424 | for (_, cards) in &self.discard { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 424 | for cards in self.discard.values() { [INFO] [stderr] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/hanabi/mod.rs:91:14 [INFO] [stderr] | [INFO] [stderr] 91 | .into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/hanabi/mod.rs:154:71 [INFO] [stderr] | [INFO] [stderr] 154 | let hand = if let Some(h) = self.hands.iter_mut().find(|hand| &hand.player == to) { [INFO] [stderr] | ------------^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `hand.player` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:190:29 [INFO] [stderr] | [INFO] [stderr] 190 | if let Some(card) = self.hands.get_mut(hand).unwrap().remove(card) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [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 `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | self.hands.get_mut(hand).unwrap().draw(&mut self.deck); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:173:9 [INFO] [stderr] | [INFO] [stderr] 173 | / match event { [INFO] [stderr] 174 | | Event::Message(m) => { [INFO] [stderr] 175 | | if let Message::Standard(m) = *m { [INFO] [stderr] 176 | | if m.user.is_none() || m.text.is_none() || m.channel.is_none() { [INFO] [stderr] ... | [INFO] [stderr] 323 | | _ => {} [INFO] [stderr] 324 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Event::Message(m) = event { [INFO] [stderr] 174 | if let Message::Standard(m) = *m { [INFO] [stderr] 175 | if m.user.is_none() || m.text.is_none() || m.channel.is_none() { [INFO] [stderr] 176 | return; [INFO] [stderr] 177 | } [INFO] [stderr] 178 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:277:29 [INFO] [stderr] | [INFO] [stderr] 277 | if let Some(card) = self.hands.get_mut(hand).unwrap().remove(card) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [INFO] [stderr] | [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 `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hanabi/mod.rs:278:13 [INFO] [stderr] | [INFO] [stderr] 278 | self.hands.get_mut(hand).unwrap().draw(&mut self.deck); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.hands[hand]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/hanabi/mod.rs:319:30 [INFO] [stderr] | [INFO] [stderr] 319 | .position(|hand| &hand.player == user) [INFO] [stderr] | ------------^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `hand.player` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/hanabi/mod.rs:424:27 [INFO] [stderr] | [INFO] [stderr] 424 | for (_, cards) in &self.discard { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 424 | for cards in self.discard.values() { [INFO] [stderr] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:173:9 [INFO] [stderr] | [INFO] [stderr] 173 | / match event { [INFO] [stderr] 174 | | Event::Message(m) => { [INFO] [stderr] 175 | | if let Message::Standard(m) = *m { [INFO] [stderr] 176 | | if m.user.is_none() || m.text.is_none() || m.channel.is_none() { [INFO] [stderr] ... | [INFO] [stderr] 323 | | _ => {} [INFO] [stderr] 324 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Event::Message(m) = event { [INFO] [stderr] 174 | if let Message::Standard(m) = *m { [INFO] [stderr] 175 | if m.user.is_none() || m.text.is_none() || m.channel.is_none() { [INFO] [stderr] 176 | return; [INFO] [stderr] 177 | } [INFO] [stderr] 178 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/main.rs:561:65 [INFO] [stderr] | [INFO] [stderr] 561 | Some(cmd) if cmd.starts_with("<@") && cmd.ends_with(">") => Some("clue"), [INFO] [stderr] | ^^^ help: try using a char instead: `'>'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/main.rs:561:65 [INFO] [stderr] | [INFO] [stderr] 561 | Some(cmd) if cmd.starts_with("<@") && cmd.ends_with(">") => Some("clue"), [INFO] [stderr] | ^^^ help: try using a char instead: `'>'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 02s [INFO] running `"docker" "inspect" "04e48415e143ba062459a7ed49b6e11313e672399919b845da6a08f08948469d"` [INFO] running `"docker" "rm" "-f" "04e48415e143ba062459a7ed49b6e11313e672399919b845da6a08f08948469d"` [INFO] [stdout] 04e48415e143ba062459a7ed49b6e11313e672399919b845da6a08f08948469d