[INFO] updating cached repository benbrunton/rust_cards [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/benbrunton/rust_cards [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/benbrunton/rust_cards" "work/ex/clippy-test-run/sources/stable/gh/benbrunton/rust_cards"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/benbrunton/rust_cards'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/benbrunton/rust_cards" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/benbrunton/rust_cards"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/benbrunton/rust_cards'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 78c66dafee8e50e21ae42cf5f1c5282db805dfd1 [INFO] sha for GitHub repo benbrunton/rust_cards: 78c66dafee8e50e21ae42cf5f1c5282db805dfd1 [INFO] validating manifest of benbrunton/rust_cards 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 benbrunton/rust_cards 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 benbrunton/rust_cards [INFO] finished frobbing benbrunton/rust_cards [INFO] frobbed toml for benbrunton/rust_cards written to work/ex/clippy-test-run/sources/stable/gh/benbrunton/rust_cards/Cargo.toml [INFO] started frobbing benbrunton/rust_cards [INFO] finished frobbing benbrunton/rust_cards [INFO] frobbed toml for benbrunton/rust_cards written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/benbrunton/rust_cards/Cargo.toml [INFO] crate benbrunton/rust_cards 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 benbrunton/rust_cards against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/benbrunton/rust_cards:/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] 83d4cff3ffba4209d9e2c5d7a2b060003183c1e2ce74b0b2182c1644fd8b1a39 [INFO] running `"docker" "start" "-a" "83d4cff3ffba4209d9e2c5d7a2b060003183c1e2ce74b0b2182c1644fd8b1a39"` [INFO] [stderr] Checking libc v0.2.8 [INFO] [stderr] Checking regex-syntax v0.3.0 [INFO] [stderr] Checking lazy_static v0.1.15 [INFO] [stderr] Checking colored v1.1.0 [INFO] [stderr] Checking memchr v0.1.10 [INFO] [stderr] Checking rand v0.3.14 [INFO] [stderr] Checking aho-corasick v0.5.1 [INFO] [stderr] Checking regex v0.1.58 [INFO] [stderr] Checking solitaire v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/card.rs:73:14 [INFO] [stderr] | [INFO] [stderr] 73 | Card{suit: suit, rank: rank, colour: colour} [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `suit` [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/card.rs:73:26 [INFO] [stderr] | [INFO] [stderr] 73 | Card{suit: suit, rank: rank, colour: colour} [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rank` [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/card.rs:73:38 [INFO] [stderr] | [INFO] [stderr] 73 | Card{suit: suit, rank: rank, colour: colour} [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `colour` [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/game.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | deck: deck, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `deck` [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/game.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | tableau: tableau, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tableau` [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/game.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | open_tableau: open_tableau, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `open_tableau` [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/game.rs:30:13 [INFO] [stderr] | [INFO] [stderr] 30 | target: target, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `target` [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/card.rs:73:14 [INFO] [stderr] | [INFO] [stderr] 73 | Card{suit: suit, rank: rank, colour: colour} [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `suit` [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/card.rs:73:26 [INFO] [stderr] | [INFO] [stderr] 73 | Card{suit: suit, rank: rank, colour: colour} [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `rank` [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/card.rs:73:38 [INFO] [stderr] | [INFO] [stderr] 73 | Card{suit: suit, rank: rank, colour: colour} [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `colour` [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/game.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | deck: deck, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `deck` [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/game.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | tableau: tableau, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tableau` [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/game.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | open_tableau: open_tableau, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `open_tableau` [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/game.rs:30:13 [INFO] [stderr] | [INFO] [stderr] 30 | target: target, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `target` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/card.rs:16:20 [INFO] [stderr] | [INFO] [stderr] 16 | let icon = match self { [INFO] [stderr] | ____________________^ [INFO] [stderr] 17 | | &Suit::Diamonds => "♦", [INFO] [stderr] 18 | | &Suit::Clubs => "♣", [INFO] [stderr] 19 | | &Suit::Hearts => "♥", [INFO] [stderr] 20 | | &Suit::Spades => "♠" [INFO] [stderr] 21 | | }; [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 16 | let icon = match *self { [INFO] [stderr] 17 | Suit::Diamonds => "♦", [INFO] [stderr] 18 | Suit::Clubs => "♣", [INFO] [stderr] 19 | Suit::Hearts => "♥", [INFO] [stderr] 20 | Suit::Spades => "♠" [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/card.rs:76:26 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn previous_rank(&self) -> Option{ [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/card.rs:80:22 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn next_rank(&self) -> Option{ [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/card.rs:84:29 [INFO] [stderr] | [INFO] [stderr] 84 | pub fn alternate_colour(&self) -> Colour{ [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/card.rs:115:39 [INFO] [stderr] | [INFO] [stderr] 115 | cards.push( Card::new(rank.clone(), suit.clone()) ); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*rank` [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/card.rs:115:53 [INFO] [stderr] | [INFO] [stderr] 115 | cards.push( Card::new(rank.clone(), suit.clone()) ); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*suit` [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/card.rs:148:25 [INFO] [stderr] | [INFO] [stderr] 148 | self.0.push(card.clone()); [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/card.rs:185:18 [INFO] [stderr] | [INFO] [stderr] 185 | Some(self.0[n].clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.0[n]` [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/card.rs:206:23 [INFO] [stderr] | [INFO] [stderr] 206 | fn previous_rank(rank:&Rank) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Rank` [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/card.rs:224:19 [INFO] [stderr] | [INFO] [stderr] 224 | fn next_rank(rank:&Rank) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Rank` [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: an inclusive range would be more readable [INFO] [stderr] --> src/game.rs:47:22 [INFO] [stderr] | [INFO] [stderr] 47 | for n in 1..(stacks_to_deal + 1){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `1..=stacks_to_deal` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | stacks_to_deal = stacks_to_deal - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stacks_to_deal -= 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | stack_iter = stack_iter + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stack_iter += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | self.round = self.round + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.round += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/game.rs:220:87 [INFO] [stderr] | [INFO] [stderr] 220 | let source_card = source_stack.show(source_stack.count() - 1).unwrap_or(Card::new(Rank::King, Suit::Spades)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Card::new(Rank::King, Suit::Spades))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:256:29 [INFO] [stderr] | [INFO] [stderr] 256 | n = n + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `n += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/game.rs:269:91 [INFO] [stderr] | [INFO] [stderr] 269 | let source_card = source_stack.show(source_stack.count() - n).unwrap_or(Card::new(Rank::Ace, Suit::Spades)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Card::new(Rank::Ace, Suit::Spades))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:277:29 [INFO] [stderr] | [INFO] [stderr] 277 | n = n + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `n += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:321:13 [INFO] [stderr] | [INFO] [stderr] 321 | self.round = self.round + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.round += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [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/game.rs:328:9 [INFO] [stderr] | [INFO] [stderr] 328 | / match self.get_source_stack(source) { [INFO] [stderr] 329 | | Some(source_stack) => { [INFO] [stderr] 330 | | let mut stack = source_stack.clone(); [INFO] [stderr] 331 | | if stack.count() == 0 { [INFO] [stderr] ... | [INFO] [stderr] 350 | | None => () [INFO] [stderr] 351 | | } [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] 328 | if let Some(source_stack) = self.get_source_stack(source) { [INFO] [stderr] 329 | let mut stack = source_stack.clone(); [INFO] [stderr] 330 | if stack.count() == 0 { [INFO] [stderr] 331 | let mut deck = self.get_source_deck(source).unwrap(); [INFO] [stderr] 332 | if deck.count() > 0 { [INFO] [stderr] 333 | let card = deck.take(1); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/card.rs:16:20 [INFO] [stderr] | [INFO] [stderr] 16 | let icon = match self { [INFO] [stderr] | ____________________^ [INFO] [stderr] 17 | | &Suit::Diamonds => "♦", [INFO] [stderr] 18 | | &Suit::Clubs => "♣", [INFO] [stderr] 19 | | &Suit::Hearts => "♥", [INFO] [stderr] 20 | | &Suit::Spades => "♠" [INFO] [stderr] 21 | | }; [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 16 | let icon = match *self { [INFO] [stderr] 17 | Suit::Diamonds => "♦", [INFO] [stderr] 18 | Suit::Clubs => "♣", [INFO] [stderr] 19 | Suit::Hearts => "♥", [INFO] [stderr] 20 | Suit::Spades => "♠" [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/card.rs:76:26 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn previous_rank(&self) -> Option{ [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 argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/card.rs:80:22 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn next_rank(&self) -> Option{ [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/card.rs:84:29 [INFO] [stderr] | [INFO] [stderr] 84 | pub fn alternate_colour(&self) -> Colour{ [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/card.rs:115:39 [INFO] [stderr] | [INFO] [stderr] 115 | cards.push( Card::new(rank.clone(), suit.clone()) ); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*rank` [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/card.rs:115:53 [INFO] [stderr] | [INFO] [stderr] 115 | cards.push( Card::new(rank.clone(), suit.clone()) ); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*suit` [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/card.rs:148:25 [INFO] [stderr] | [INFO] [stderr] 148 | self.0.push(card.clone()); [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/card.rs:185:18 [INFO] [stderr] | [INFO] [stderr] 185 | Some(self.0[n].clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.0[n]` [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/card.rs:206:23 [INFO] [stderr] | [INFO] [stderr] 206 | fn previous_rank(rank:&Rank) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Rank` [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/card.rs:224:19 [INFO] [stderr] | [INFO] [stderr] 224 | fn next_rank(rank:&Rank) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Rank` [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: an inclusive range would be more readable [INFO] [stderr] --> src/game.rs:47:22 [INFO] [stderr] | [INFO] [stderr] 47 | for n in 1..(stacks_to_deal + 1){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `1..=stacks_to_deal` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | stacks_to_deal = stacks_to_deal - 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stacks_to_deal -= 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | stack_iter = stack_iter + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stack_iter += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | self.round = self.round + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.round += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/game.rs:220:87 [INFO] [stderr] | [INFO] [stderr] 220 | let source_card = source_stack.show(source_stack.count() - 1).unwrap_or(Card::new(Rank::King, Suit::Spades)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Card::new(Rank::King, Suit::Spades))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:256:29 [INFO] [stderr] | [INFO] [stderr] 256 | n = n + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `n += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/game.rs:269:91 [INFO] [stderr] | [INFO] [stderr] 269 | let source_card = source_stack.show(source_stack.count() - n).unwrap_or(Card::new(Rank::Ace, Suit::Spades)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| Card::new(Rank::Ace, Suit::Spades))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:277:29 [INFO] [stderr] | [INFO] [stderr] 277 | n = n + 1; [INFO] [stderr] | ^^^^^^^^^ help: replace it with: `n += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/game.rs:321:13 [INFO] [stderr] | [INFO] [stderr] 321 | self.round = self.round + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.round += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [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/game.rs:328:9 [INFO] [stderr] | [INFO] [stderr] 328 | / match self.get_source_stack(source) { [INFO] [stderr] 329 | | Some(source_stack) => { [INFO] [stderr] 330 | | let mut stack = source_stack.clone(); [INFO] [stderr] 331 | | if stack.count() == 0 { [INFO] [stderr] ... | [INFO] [stderr] 350 | | None => () [INFO] [stderr] 351 | | } [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] 328 | if let Some(source_stack) = self.get_source_stack(source) { [INFO] [stderr] 329 | let mut stack = source_stack.clone(); [INFO] [stderr] 330 | if stack.count() == 0 { [INFO] [stderr] 331 | let mut deck = self.get_source_deck(source).unwrap(); [INFO] [stderr] 332 | if deck.count() > 0 { [INFO] [stderr] 333 | let card = deck.take(1); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 6.83s [INFO] running `"docker" "inspect" "83d4cff3ffba4209d9e2c5d7a2b060003183c1e2ce74b0b2182c1644fd8b1a39"` [INFO] running `"docker" "rm" "-f" "83d4cff3ffba4209d9e2c5d7a2b060003183c1e2ce74b0b2182c1644fd8b1a39"` [INFO] [stdout] 83d4cff3ffba4209d9e2c5d7a2b060003183c1e2ce74b0b2182c1644fd8b1a39