[INFO] updating cached repository masonium/card-engine [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/masonium/card-engine [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/masonium/card-engine" "work/ex/clippy-test-run/sources/stable/gh/masonium/card-engine"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/masonium/card-engine'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/masonium/card-engine" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/masonium/card-engine"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/masonium/card-engine'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 82041c99c5a84b4425e2c3ffb656a591da7e0775 [INFO] sha for GitHub repo masonium/card-engine: 82041c99c5a84b4425e2c3ffb656a591da7e0775 [INFO] validating manifest of masonium/card-engine 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 masonium/card-engine 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 masonium/card-engine [INFO] finished frobbing masonium/card-engine [INFO] frobbed toml for masonium/card-engine written to work/ex/clippy-test-run/sources/stable/gh/masonium/card-engine/Cargo.toml [INFO] started frobbing masonium/card-engine [INFO] finished frobbing masonium/card-engine [INFO] frobbed toml for masonium/card-engine written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/masonium/card-engine/Cargo.toml [INFO] crate masonium/card-engine 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 masonium/card-engine against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/masonium/card-engine:/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] b3213201d31bf97d0c6c4ddb587fe527b5384f7cab0dd97b449ddf98e4dc967e [INFO] running `"docker" "start" "-a" "b3213201d31bf97d0c6c4ddb587fe527b5384f7cab0dd97b449ddf98e4dc967e"` [INFO] [stderr] Compiling matrixmultiply v0.1.13 [INFO] [stderr] Checking num-complex v0.1.37 [INFO] [stderr] Checking termion v1.3.0 [INFO] [stderr] Checking ndarray v0.9.1 [INFO] [stderr] Checking ndarray-rand v0.5.0 [INFO] [stderr] Checking card-engine v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/germanwhist/engine.rs:79:24 [INFO] [stderr] | [INFO] [stderr] 79 | Round { state, phase: phase, rules } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `phase` [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/germanwhist/engine.rs:79:24 [INFO] [stderr] | [INFO] [stderr] 79 | Round { state, phase: phase, rules } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `phase` [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: using `writeln!(fmt, "")` [INFO] [stderr] --> src/cards.rs:375:9 [INFO] [stderr] | [INFO] [stderr] 375 | writeln!(fmt, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(fmt)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/cards.rs:393:9 [INFO] [stderr] | [INFO] [stderr] warning: using `writeln!(fmt, "")` [INFO] [stderr] --> src/cards.rs:375:9 [INFO] [stderr] | [INFO] [stderr] 375 | writeln!(fmt, "")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `writeln!(fmt)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::writeln_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stderr] [INFO] [stderr] 393 | println!(""); [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/cards.rs:393:9 [INFO] [stderr] | [INFO] [stderr] 393 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/hand_belief.rs:94:22 [INFO] [stderr] | [INFO] [stderr] 94 | HandBelief { probs: probs } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `probs` [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/hand_belief.rs:94:22 [INFO] [stderr] | [INFO] [stderr] 94 | HandBelief { probs: probs } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `probs` [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: doc comment not used by rustdoc [INFO] [stderr] --> src/germanwhist/phase.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | /// this is the first card played [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_doc_comments)] on by default [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/germanwhist/phase.rs:58:17 [INFO] [stderr] | [INFO] [stderr] 58 | / if player.has_suit(&leading_card.suit) { [INFO] [stderr] 59 | | if action.card.suit != leading_card.suit { [INFO] [stderr] 60 | | return Err(ActionError::NotFollowingSuit); [INFO] [stderr] 61 | | } [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 58 | if player.has_suit(&leading_card.suit) && action.card.suit != leading_card.suit { [INFO] [stderr] 59 | return Err(ActionError::NotFollowingSuit); [INFO] [stderr] 60 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: doc comment not used by rustdoc [INFO] [stderr] --> src/germanwhist/phase.rs:90:17 [INFO] [stderr] | [INFO] [stderr] 90 | /// Give players their new cards [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/learning/neural_net.rs:378:13 [INFO] [stderr] | [INFO] [stderr] 378 | y }) [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/learning/neural_net.rs:377:21 [INFO] [stderr] | [INFO] [stderr] 377 | let y = layer.evaluate(&x); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: doc comment not used by rustdoc [INFO] [stderr] --> src/learning/training.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | /// epsilon-greedy state-choosing [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: doc comment not used by rustdoc [INFO] [stderr] --> src/germanwhist/phase.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | /// this is the first card played [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_doc_comments)] on by default [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/germanwhist/phase.rs:58:17 [INFO] [stderr] | [INFO] [stderr] 58 | / if player.has_suit(&leading_card.suit) { [INFO] [stderr] 59 | | if action.card.suit != leading_card.suit { [INFO] [stderr] 60 | | return Err(ActionError::NotFollowingSuit); [INFO] [stderr] 61 | | } [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 58 | if player.has_suit(&leading_card.suit) && action.card.suit != leading_card.suit { [INFO] [stderr] 59 | return Err(ActionError::NotFollowingSuit); [INFO] [stderr] 60 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: doc comment not used by rustdoc [INFO] [stderr] --> src/germanwhist/phase.rs:90:17 [INFO] [stderr] | [INFO] [stderr] 90 | /// Give players their new cards [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/learning/neural_net.rs:378:13 [INFO] [stderr] | [INFO] [stderr] 378 | y }) [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/learning/neural_net.rs:377:21 [INFO] [stderr] | [INFO] [stderr] 377 | let y = layer.evaluate(&x); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: doc comment not used by rustdoc [INFO] [stderr] --> src/learning/training.rs:48:9 [INFO] [stderr] | [INFO] [stderr] 48 | /// epsilon-greedy state-choosing [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/germanwhist/player.rs:189:23 [INFO] [stderr] | [INFO] [stderr] 189 | fn card_to_vector(mut x: &mut ArrayViewMut, card: &Option, suit_order: &[Suit]) { [INFO] [stderr] | ----^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `dump` [INFO] [stderr] --> src/learning/neural_net.rs:283:5 [INFO] [stderr] | [INFO] [stderr] 283 | fn dump(&self) { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [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/germanwhist/engine.rs:87:41 [INFO] [stderr] | [INFO] [stderr] 87 | let p0 = StartRoundEvent{ hand: self.state.hands[0].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/germanwhist/engine.rs:91:41 [INFO] [stderr] | [INFO] [stderr] 91 | let p1 = StartRoundEvent{ hand: self.state.hands[1].iter().cloned().collect(), ..p0 }; [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:46:46 [INFO] [stderr] | [INFO] [stderr] 46 | events[0].push(GameEvent::Action(action.clone())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `action` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:47:46 [INFO] [stderr] | [INFO] [stderr] 47 | events[1].push(GameEvent::Action(action.clone())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `action` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:67:47 [INFO] [stderr] | [INFO] [stderr] 67 | let action_ev = GameEvent::Action(action.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `action` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:81:37 [INFO] [stderr] | [INFO] [stderr] 81 | let mut cards_played = [leading_card.clone(), action.card.clone()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `leading_card` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:81:59 [INFO] [stderr] | [INFO] [stderr] 81 | let mut cards_played = [leading_card.clone(), action.card.clone()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `action.card` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:93:57 [INFO] [stderr] | [INFO] [stderr] 93 | gs.player_view_mut(winner).add_card(r.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `r` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:96:89 [INFO] [stderr] | [INFO] [stderr] 96 | let rec_ev = GameEvent::Card(CardEvent { player: winner, card: Some(r.clone()) }); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `r` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:105:56 [INFO] [stderr] | [INFO] [stderr] 105 | gs.player_view_mut(loser).add_card(draw.clone()); [INFO] [stderr] | ^^^^^^^^^^^^ help: try removing the `clone` call: `draw` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:109:94 [INFO] [stderr] | [INFO] [stderr] 109 | events[loser].push(GameEvent::Card(CardEvent { player: loser, card: Some(draw.clone()) })); [INFO] [stderr] | ^^^^^^^^^^^^ help: try removing the `clone` call: `draw` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/germanwhist/phase.rs:148:17 [INFO] [stderr] | [INFO] [stderr] 148 | format!("End of Phase.") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"End of Phase.".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: useless use of `format!` [INFO] [stderr] --> src/germanwhist/phase.rs:183:9 [INFO] [stderr] | [INFO] [stderr] 183 | format!("Game Over.") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Game Over.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/germanwhist/state.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | / pub fn player_view_mut<'a>(&'a mut self, player: usize) -> PlayerViewMut<'a> { [INFO] [stderr] 55 | | PlayerViewMut { hand: &mut self.hands[player] } [INFO] [stderr] 56 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/germanwhist/state.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / pub fn player_view<'a>(&'a self, player: usize) -> PlayerView<'a> { [INFO] [stderr] 60 | | PlayerView::from_state(player, &self) [INFO] [stderr] 61 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:65:39 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn score_hand(&self, leading: &BasicCard, following: &BasicCard) -> Option { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:65:62 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn score_hand(&self, leading: &BasicCard, following: &BasicCard) -> Option { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:96:37 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn display_order(&self, c1: &BasicCard, c2: &BasicCard) -> Ordering { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:96:53 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn display_order(&self, c1: &BasicCard, c2: &BasicCard) -> Ordering { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:112:31 [INFO] [stderr] | [INFO] [stderr] 112 | pub fn has_suit(&self, s: &Suit) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Suit` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:122:38 [INFO] [stderr] | [INFO] [stderr] 122 | pub fn remove_card(&mut self, c: &BasicCard) -> Result<(), ActionError> { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/state.rs:155:32 [INFO] [stderr] | [INFO] [stderr] 155 | revealed: gs.revealed.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.revealed` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/state.rs:156:36 [INFO] [stderr] | [INFO] [stderr] 156 | leading_card: gs.played.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.played` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/state.rs:158:29 [INFO] [stderr] | [INFO] [stderr] 158 | score: gs.score.clone() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.score` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/germanwhist/state.rs:165:9 [INFO] [stderr] | [INFO] [stderr] 165 | / match &self.leading_card { [INFO] [stderr] 166 | | // Second player must follow suit, if possible. [INFO] [stderr] 167 | | &Some(ref c) if self.has_suit(&c.suit) => [INFO] [stderr] 168 | | self.hand.iter().filter(|x| x.suit == c.suit) [INFO] [stderr] ... | [INFO] [stderr] 172 | | _ => self.hand.iter().cloned().collect() [INFO] [stderr] 173 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 165 | match self.leading_card { [INFO] [stderr] 166 | // Second player must follow suit, if possible. [INFO] [stderr] 167 | Some(ref c) if self.has_suit(&c.suit) => [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/germanwhist/state.rs:172:18 [INFO] [stderr] | [INFO] [stderr] 172 | _ => self.hand.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:180:31 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn has_suit(&self, s: &Suit) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Suit` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:191:41 [INFO] [stderr] | [INFO] [stderr] 191 | pub fn wins_against(&self, leading: &BasicCard, follow: &BasicCard) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:191:61 [INFO] [stderr] | [INFO] [stderr] 191 | pub fn wins_against(&self, leading: &BasicCard, follow: &BasicCard) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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/germanwhist/util.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | format!("{}", &format_state(round.get_state())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&format_state(round.get_state()).to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/germanwhist/player.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | / match ev { [INFO] [stderr] 66 | | &Start(ref start) => { [INFO] [stderr] 67 | | self.hand = start.hand.iter().cloned().collect(); [INFO] [stderr] 68 | | self.trump = start.trump; [INFO] [stderr] ... | [INFO] [stderr] 126 | | } [INFO] [stderr] 127 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 65 | match *ev { [INFO] [stderr] 66 | Start(ref start) => { [INFO] [stderr] 67 | self.hand = start.hand.iter().cloned().collect(); [INFO] [stderr] 68 | self.trump = start.trump; [INFO] [stderr] 69 | self.active = start.starting_player; [INFO] [stderr] 70 | self.revealed = Some(start.revealed); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/player.rs:184:25 [INFO] [stderr] | [INFO] [stderr] 184 | fn card_index(card: &BasicCard, suit_order: &[Suit]) -> usize { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/player.rs:189:65 [INFO] [stderr] | [INFO] [stderr] 189 | fn card_to_vector(mut x: &mut ArrayViewMut, card: &Option, suit_order: &[Suit]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `Option` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/germanwhist/player.rs:192:9 [INFO] [stderr] | [INFO] [stderr] 192 | / if let &Some(ref c) = card { [INFO] [stderr] 193 | | x[Self::card_index(c, suit_order)] = 1.0; [INFO] [stderr] 194 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 192 | if let Some(ref c) = *card { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/cards.rs:40:19 [INFO] [stderr] | [INFO] [stderr] 40 | ALL_SUITS.into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:43:18 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn color(&self) -> Color { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:50:16 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn ord(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/cards.rs:144:19 [INFO] [stderr] | [INFO] [stderr] 144 | ALL_RANKS.into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:147:25 [INFO] [stderr] | [INFO] [stderr] 147 | pub fn ord_ace_high(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:152:24 [INFO] [stderr] | [INFO] [stderr] 152 | pub fn ord_ace_low(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cards.rs:281:9 [INFO] [stderr] | [INFO] [stderr] 281 | / match self { [INFO] [stderr] 282 | | &BigJoker => write!(f, "JJ"), [INFO] [stderr] 283 | | &SmallJoker => write!(f, "jj"), [INFO] [stderr] 284 | | &Card::Basic(ref basic) => write!(f, "{}", basic) [INFO] [stderr] 285 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 281 | match *self { [INFO] [stderr] 282 | BigJoker => write!(f, "JJ"), [INFO] [stderr] 283 | SmallJoker => write!(f, "jj"), [INFO] [stderr] 284 | Card::Basic(ref basic) => write!(f, "{}", basic) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cards::BasicDeck` [INFO] [stderr] --> src/cards.rs:299:5 [INFO] [stderr] | [INFO] [stderr] 299 | / pub fn new() -> BasicDeck { [INFO] [stderr] 300 | | BasicDeck { cards: BasicCard::all() } [INFO] [stderr] 301 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 294 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/cards.rs:363:47 [INFO] [stderr] | [INFO] [stderr] 363 | pub fn format_card_map(map: &HashMap, fmt: &mut fmt::Formatter) -> fmt::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 363 | pub fn format_card_map(map: &HashMap, fmt: &mut fmt::Formatter) -> fmt::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/cards.rs:381:46 [INFO] [stderr] | [INFO] [stderr] 381 | pub fn print_card_map(map: &HashMap) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 381 | pub fn print_card_map(map: &HashMap) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/learning/neural_net.rs:54:15 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn af(&self) -> (fn(f32) -> f32) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/learning/neural_net.rs:65:16 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn agf(&self) -> (fn(f32, f32) -> f32) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: the loop variable `i` is used to index `ev` [INFO] [stderr] --> src/learning/training.rs:124:18 [INFO] [stderr] | [INFO] [stderr] 124 | for i in 0..2 { [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] 124 | for (i, ) in ev.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `evs` [INFO] [stderr] --> src/learning/training.rs:170:22 [INFO] [stderr] | [INFO] [stderr] 170 | for i in 0..2 { [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] 170 | for (i, ) in evs.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:30:14 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn p(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &CardState::Played => 0.0, [INFO] [stderr] 33 | | &CardState::Void => 0.0, [INFO] [stderr] 34 | | &CardState::Owns => 1.0, [INFO] [stderr] 35 | | &CardState::Prob(ref p) => *p [INFO] [stderr] 36 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 31 | match *self { [INFO] [stderr] 32 | CardState::Played => 0.0, [INFO] [stderr] 33 | CardState::Void => 0.0, [INFO] [stderr] 34 | CardState::Owns => 1.0, [INFO] [stderr] 35 | CardState::Prob(ref p) => *p [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:50:20 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn is_prob(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | / match self { [INFO] [stderr] 52 | | &CardState::Prob(_) => true, [INFO] [stderr] 53 | | _ => false [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 51 | match *self { [INFO] [stderr] 52 | CardState::Prob(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `hand_belief::HandBelief` [INFO] [stderr] --> src/hand_belief.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / pub fn new() -> HandBelief { [INFO] [stderr] 89 | | let mut probs = HashMap::new(); [INFO] [stderr] 90 | | for card in BasicCard::all() { [INFO] [stderr] 91 | | probs.insert(card.clone(), CardState::Void); [INFO] [stderr] ... | [INFO] [stderr] 94 | | HandBelief { probs: probs } [INFO] [stderr] 95 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 83 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/hand_belief.rs:91:26 [INFO] [stderr] | [INFO] [stderr] 91 | probs.insert(card.clone(), CardState::Void); [INFO] [stderr] | ^^^^^^^^^^^^ help: try removing the `clone` call: `card` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:110:27 [INFO] [stderr] | [INFO] [stderr] 110 | pub fn p(&self, card: &BasicCard) -> f32 { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:130:13 [INFO] [stderr] | [INFO] [stderr] 130 | / if let &mut CardState::Prob(ref mut p) = v { [INFO] [stderr] 131 | | *p += ec / nc; [INFO] [stderr] 132 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 130 | if let CardState::Prob(ref mut p) = *v { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | / if let &mut CardState::Prob(ref mut pp) = p { [INFO] [stderr] 149 | | if pred(*card) { [INFO] [stderr] 150 | | *pp += p_inc; [INFO] [stderr] 151 | | } else { [INFO] [stderr] 152 | | *pp = 0.0; [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 148 | if let CardState::Prob(ref mut pp) = *p { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:181:17 [INFO] [stderr] | [INFO] [stderr] 181 | / if let &mut CardState::Prob(_) = v { [INFO] [stderr] 182 | | *v = CardState::Void; [INFO] [stderr] 183 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 181 | if let CardState::Prob(_) = *v { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:189:40 [INFO] [stderr] | [INFO] [stderr] 189 | pub fn card_drawn(&mut self, card: &BasicCard) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:198:41 [INFO] [stderr] | [INFO] [stderr] 198 | pub fn card_played(&mut self, card: &BasicCard) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hand_belief.rs:199:12 [INFO] [stderr] | [INFO] [stderr] 199 | if self.probs.get(card).unwrap().is_prob() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.probs[card]` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:213:39 [INFO] [stderr] | [INFO] [stderr] 213 | pub fn card_seen(&mut self, card: &BasicCard) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `card-engine`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/germanwhist/player.rs:189:23 [INFO] [stderr] | [INFO] [stderr] 189 | fn card_to_vector(mut x: &mut ArrayViewMut, card: &Option, suit_order: &[Suit]) { [INFO] [stderr] | ----^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `dump` [INFO] [stderr] --> src/learning/neural_net.rs:283:5 [INFO] [stderr] | [INFO] [stderr] 283 | fn dump(&self) { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [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/germanwhist/engine.rs:87:41 [INFO] [stderr] | [INFO] [stderr] 87 | let p0 = StartRoundEvent{ hand: self.state.hands[0].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/germanwhist/engine.rs:91:41 [INFO] [stderr] | [INFO] [stderr] 91 | let p1 = StartRoundEvent{ hand: self.state.hands[1].iter().cloned().collect(), ..p0 }; [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:46:46 [INFO] [stderr] | [INFO] [stderr] 46 | events[0].push(GameEvent::Action(action.clone())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `action` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:47:46 [INFO] [stderr] | [INFO] [stderr] 47 | events[1].push(GameEvent::Action(action.clone())); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `action` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:67:47 [INFO] [stderr] | [INFO] [stderr] 67 | let action_ev = GameEvent::Action(action.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `action` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:81:37 [INFO] [stderr] | [INFO] [stderr] 81 | let mut cards_played = [leading_card.clone(), action.card.clone()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `leading_card` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:81:59 [INFO] [stderr] | [INFO] [stderr] 81 | let mut cards_played = [leading_card.clone(), action.card.clone()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `action.card` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:93:57 [INFO] [stderr] | [INFO] [stderr] 93 | gs.player_view_mut(winner).add_card(r.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `r` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:96:89 [INFO] [stderr] | [INFO] [stderr] 96 | let rec_ev = GameEvent::Card(CardEvent { player: winner, card: Some(r.clone()) }); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `r` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:105:56 [INFO] [stderr] | [INFO] [stderr] 105 | gs.player_view_mut(loser).add_card(draw.clone()); [INFO] [stderr] | ^^^^^^^^^^^^ help: try removing the `clone` call: `draw` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/phase.rs:109:94 [INFO] [stderr] | [INFO] [stderr] 109 | events[loser].push(GameEvent::Card(CardEvent { player: loser, card: Some(draw.clone()) })); [INFO] [stderr] | ^^^^^^^^^^^^ help: try removing the `clone` call: `draw` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/germanwhist/phase.rs:148:17 [INFO] [stderr] | [INFO] [stderr] 148 | format!("End of Phase.") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"End of Phase.".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: useless use of `format!` [INFO] [stderr] --> src/germanwhist/phase.rs:183:9 [INFO] [stderr] | [INFO] [stderr] 183 | format!("Game Over.") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Game Over.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/germanwhist/state.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | / pub fn player_view_mut<'a>(&'a mut self, player: usize) -> PlayerViewMut<'a> { [INFO] [stderr] 55 | | PlayerViewMut { hand: &mut self.hands[player] } [INFO] [stderr] 56 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/germanwhist/state.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / pub fn player_view<'a>(&'a self, player: usize) -> PlayerView<'a> { [INFO] [stderr] 60 | | PlayerView::from_state(player, &self) [INFO] [stderr] 61 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:65:39 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn score_hand(&self, leading: &BasicCard, following: &BasicCard) -> Option { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:65:62 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn score_hand(&self, leading: &BasicCard, following: &BasicCard) -> Option { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:96:37 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn display_order(&self, c1: &BasicCard, c2: &BasicCard) -> Ordering { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:96:53 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn display_order(&self, c1: &BasicCard, c2: &BasicCard) -> Ordering { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:112:31 [INFO] [stderr] | [INFO] [stderr] 112 | pub fn has_suit(&self, s: &Suit) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Suit` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:122:38 [INFO] [stderr] | [INFO] [stderr] 122 | pub fn remove_card(&mut self, c: &BasicCard) -> Result<(), ActionError> { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/state.rs:155:32 [INFO] [stderr] | [INFO] [stderr] 155 | revealed: gs.revealed.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.revealed` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/state.rs:156:36 [INFO] [stderr] | [INFO] [stderr] 156 | leading_card: gs.played.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.played` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/germanwhist/state.rs:158:29 [INFO] [stderr] | [INFO] [stderr] 158 | score: gs.score.clone() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.score` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/germanwhist/state.rs:165:9 [INFO] [stderr] | [INFO] [stderr] 165 | / match &self.leading_card { [INFO] [stderr] 166 | | // Second player must follow suit, if possible. [INFO] [stderr] 167 | | &Some(ref c) if self.has_suit(&c.suit) => [INFO] [stderr] 168 | | self.hand.iter().filter(|x| x.suit == c.suit) [INFO] [stderr] ... | [INFO] [stderr] 172 | | _ => self.hand.iter().cloned().collect() [INFO] [stderr] 173 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 165 | match self.leading_card { [INFO] [stderr] 166 | // Second player must follow suit, if possible. [INFO] [stderr] 167 | Some(ref c) if self.has_suit(&c.suit) => [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/germanwhist/state.rs:172:18 [INFO] [stderr] | [INFO] [stderr] 172 | _ => self.hand.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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:180:31 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn has_suit(&self, s: &Suit) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Suit` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:191:41 [INFO] [stderr] | [INFO] [stderr] 191 | pub fn wins_against(&self, leading: &BasicCard, follow: &BasicCard) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/state.rs:191:61 [INFO] [stderr] | [INFO] [stderr] 191 | pub fn wins_against(&self, leading: &BasicCard, follow: &BasicCard) -> bool { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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/germanwhist/util.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | format!("{}", &format_state(round.get_state())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&format_state(round.get_state()).to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/germanwhist/player.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | / match ev { [INFO] [stderr] 66 | | &Start(ref start) => { [INFO] [stderr] 67 | | self.hand = start.hand.iter().cloned().collect(); [INFO] [stderr] 68 | | self.trump = start.trump; [INFO] [stderr] ... | [INFO] [stderr] 126 | | } [INFO] [stderr] 127 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 65 | match *ev { [INFO] [stderr] 66 | Start(ref start) => { [INFO] [stderr] 67 | self.hand = start.hand.iter().cloned().collect(); [INFO] [stderr] 68 | self.trump = start.trump; [INFO] [stderr] 69 | self.active = start.starting_player; [INFO] [stderr] 70 | self.revealed = Some(start.revealed); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/player.rs:184:25 [INFO] [stderr] | [INFO] [stderr] 184 | fn card_index(card: &BasicCard, suit_order: &[Suit]) -> usize { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/germanwhist/player.rs:189:65 [INFO] [stderr] | [INFO] [stderr] 189 | fn card_to_vector(mut x: &mut ArrayViewMut, card: &Option, suit_order: &[Suit]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `Option` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/germanwhist/player.rs:192:9 [INFO] [stderr] | [INFO] [stderr] 192 | / if let &Some(ref c) = card { [INFO] [stderr] 193 | | x[Self::card_index(c, suit_order)] = 1.0; [INFO] [stderr] 194 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 192 | if let Some(ref c) = *card { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/cards.rs:40:19 [INFO] [stderr] | [INFO] [stderr] 40 | ALL_SUITS.into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:43:18 [INFO] [stderr] | [INFO] [stderr] 43 | pub fn color(&self) -> Color { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:50:16 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn ord(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/cards.rs:144:19 [INFO] [stderr] | [INFO] [stderr] 144 | ALL_RANKS.into_iter() [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:147:25 [INFO] [stderr] | [INFO] [stderr] 147 | pub fn ord_ace_high(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cards.rs:152:24 [INFO] [stderr] | [INFO] [stderr] 152 | pub fn ord_ace_low(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cards.rs:281:9 [INFO] [stderr] | [INFO] [stderr] 281 | / match self { [INFO] [stderr] 282 | | &BigJoker => write!(f, "JJ"), [INFO] [stderr] 283 | | &SmallJoker => write!(f, "jj"), [INFO] [stderr] 284 | | &Card::Basic(ref basic) => write!(f, "{}", basic) [INFO] [stderr] 285 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 281 | match *self { [INFO] [stderr] 282 | BigJoker => write!(f, "JJ"), [INFO] [stderr] 283 | SmallJoker => write!(f, "jj"), [INFO] [stderr] 284 | Card::Basic(ref basic) => write!(f, "{}", basic) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cards::BasicDeck` [INFO] [stderr] --> src/cards.rs:299:5 [INFO] [stderr] | [INFO] [stderr] 299 | / pub fn new() -> BasicDeck { [INFO] [stderr] 300 | | BasicDeck { cards: BasicCard::all() } [INFO] [stderr] 301 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 294 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/cards.rs:363:47 [INFO] [stderr] | [INFO] [stderr] 363 | pub fn format_card_map(map: &HashMap, fmt: &mut fmt::Formatter) -> fmt::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 363 | pub fn format_card_map(map: &HashMap, fmt: &mut fmt::Formatter) -> fmt::Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/cards.rs:381:46 [INFO] [stderr] | [INFO] [stderr] 381 | pub fn print_card_map(map: &HashMap) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 381 | pub fn print_card_map(map: &HashMap) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/learning/neural_net.rs:54:15 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn af(&self) -> (fn(f32) -> f32) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/learning/neural_net.rs:65:16 [INFO] [stderr] | [INFO] [stderr] 65 | pub fn agf(&self) -> (fn(f32, f32) -> f32) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: the loop variable `i` is used to index `ev` [INFO] [stderr] --> src/learning/training.rs:124:18 [INFO] [stderr] | [INFO] [stderr] 124 | for i in 0..2 { [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] 124 | for (i, ) in ev.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `evs` [INFO] [stderr] --> src/learning/training.rs:170:22 [INFO] [stderr] | [INFO] [stderr] 170 | for i in 0..2 { [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] 170 | for (i, ) in evs.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:30:14 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn p(&self) -> f32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &CardState::Played => 0.0, [INFO] [stderr] 33 | | &CardState::Void => 0.0, [INFO] [stderr] 34 | | &CardState::Owns => 1.0, [INFO] [stderr] 35 | | &CardState::Prob(ref p) => *p [INFO] [stderr] 36 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 31 | match *self { [INFO] [stderr] 32 | CardState::Played => 0.0, [INFO] [stderr] 33 | CardState::Void => 0.0, [INFO] [stderr] 34 | CardState::Owns => 1.0, [INFO] [stderr] 35 | CardState::Prob(ref p) => *p [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:50:20 [INFO] [stderr] | [INFO] [stderr] 50 | pub fn is_prob(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | / match self { [INFO] [stderr] 52 | | &CardState::Prob(_) => true, [INFO] [stderr] 53 | | _ => false [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 51 | match *self { [INFO] [stderr] 52 | CardState::Prob(_) => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `hand_belief::HandBelief` [INFO] [stderr] --> src/hand_belief.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / pub fn new() -> HandBelief { [INFO] [stderr] 89 | | let mut probs = HashMap::new(); [INFO] [stderr] 90 | | for card in BasicCard::all() { [INFO] [stderr] 91 | | probs.insert(card.clone(), CardState::Void); [INFO] [stderr] ... | [INFO] [stderr] 94 | | HandBelief { probs: probs } [INFO] [stderr] 95 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 83 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/hand_belief.rs:91:26 [INFO] [stderr] | [INFO] [stderr] 91 | probs.insert(card.clone(), CardState::Void); [INFO] [stderr] | ^^^^^^^^^^^^ help: try removing the `clone` call: `card` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:110:27 [INFO] [stderr] | [INFO] [stderr] 110 | pub fn p(&self, card: &BasicCard) -> f32 { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:130:13 [INFO] [stderr] | [INFO] [stderr] 130 | / if let &mut CardState::Prob(ref mut p) = v { [INFO] [stderr] 131 | | *p += ec / nc; [INFO] [stderr] 132 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 130 | if let CardState::Prob(ref mut p) = *v { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | / if let &mut CardState::Prob(ref mut pp) = p { [INFO] [stderr] 149 | | if pred(*card) { [INFO] [stderr] 150 | | *pp += p_inc; [INFO] [stderr] 151 | | } else { [INFO] [stderr] 152 | | *pp = 0.0; [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 148 | if let CardState::Prob(ref mut pp) = *p { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/hand_belief.rs:181:17 [INFO] [stderr] | [INFO] [stderr] 181 | / if let &mut CardState::Prob(_) = v { [INFO] [stderr] 182 | | *v = CardState::Void; [INFO] [stderr] 183 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 181 | if let CardState::Prob(_) = *v { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:189:40 [INFO] [stderr] | [INFO] [stderr] 189 | pub fn card_drawn(&mut self, card: &BasicCard) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:198:41 [INFO] [stderr] | [INFO] [stderr] 198 | pub fn card_played(&mut self, card: &BasicCard) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/hand_belief.rs:199:12 [INFO] [stderr] | [INFO] [stderr] 199 | if self.probs.get(card).unwrap().is_prob() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.probs[card]` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/hand_belief.rs:213:39 [INFO] [stderr] | [INFO] [stderr] 213 | pub fn card_seen(&mut self, card: &BasicCard) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `BasicCard` [INFO] [stderr] | [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] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `card-engine`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "b3213201d31bf97d0c6c4ddb587fe527b5384f7cab0dd97b449ddf98e4dc967e"` [INFO] running `"docker" "rm" "-f" "b3213201d31bf97d0c6c4ddb587fe527b5384f7cab0dd97b449ddf98e4dc967e"` [INFO] [stdout] b3213201d31bf97d0c6c4ddb587fe527b5384f7cab0dd97b449ddf98e4dc967e