[INFO] updating cached repository WuTheFWasThat/hanabi.rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/WuTheFWasThat/hanabi.rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/WuTheFWasThat/hanabi.rs" "work/ex/clippy-test-run/sources/stable/gh/WuTheFWasThat/hanabi.rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/WuTheFWasThat/hanabi.rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/WuTheFWasThat/hanabi.rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WuTheFWasThat/hanabi.rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WuTheFWasThat/hanabi.rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 737085948eb1f42bd7c447efb0d2c1145cd4b08e [INFO] sha for GitHub repo WuTheFWasThat/hanabi.rs: 737085948eb1f42bd7c447efb0d2c1145cd4b08e [INFO] validating manifest of WuTheFWasThat/hanabi.rs 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 WuTheFWasThat/hanabi.rs 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 WuTheFWasThat/hanabi.rs [INFO] finished frobbing WuTheFWasThat/hanabi.rs [INFO] frobbed toml for WuTheFWasThat/hanabi.rs written to work/ex/clippy-test-run/sources/stable/gh/WuTheFWasThat/hanabi.rs/Cargo.toml [INFO] started frobbing WuTheFWasThat/hanabi.rs [INFO] finished frobbing WuTheFWasThat/hanabi.rs [INFO] frobbed toml for WuTheFWasThat/hanabi.rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/WuTheFWasThat/hanabi.rs/Cargo.toml [INFO] crate WuTheFWasThat/hanabi.rs 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 WuTheFWasThat/hanabi.rs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/WuTheFWasThat/hanabi.rs:/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] 21802c10d906f126c48a8112c2c6859c1d6d491f25b5e8ebe055b51d658dfe22 [INFO] running `"docker" "start" "-a" "21802c10d906f126c48a8112c2c6859c1d6d491f25b5e8ebe055b51d658dfe22"` [INFO] [stderr] Checking libc v0.2.7 [INFO] [stderr] Checking crossbeam v0.2.8 [INFO] [stderr] Checking log v0.3.5 [INFO] [stderr] Checking rand v0.3.14 [INFO] [stderr] Checking rust_hanabi v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/helpers.rs:331:13 [INFO] [stderr] | [INFO] [stderr] 331 | possible: possible, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `possible` [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/helpers.rs:380:13 [INFO] [stderr] | [INFO] [stderr] 380 | hand_info: hand_info, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `hand_info` [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:33:16 [INFO] [stderr] | [INFO] [stderr] 33 | Card { color: color, value: value } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `color` [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:33:30 [INFO] [stderr] | [INFO] [stderr] 33 | Card { color: color, value: value } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | counts: counts, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `counts` [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:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | color: color, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `color` [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:277:13 [INFO] [stderr] | [INFO] [stderr] 277 | deck_size: deck_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `deck_size` [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:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | fireworks: fireworks, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `fireworks` [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:521:13 [INFO] [stderr] | [INFO] [stderr] 521 | other_hands: other_hands, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `other_hands` [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:586:13 [INFO] [stderr] | [INFO] [stderr] 586 | hands: hands, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `hands` [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:587:13 [INFO] [stderr] | [INFO] [stderr] 587 | board: board, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `board` [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:588:13 [INFO] [stderr] | [INFO] [stderr] 588 | 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:613:13 [INFO] [stderr] | [INFO] [stderr] 613 | player: player, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `player` [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:615:13 [INFO] [stderr] | [INFO] [stderr] 615 | other_hands: other_hands, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `other_hands` [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:706:13 [INFO] [stderr] | [INFO] [stderr] 706 | choice: choice, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `choice` [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/strategies/examples.rs:58:21 [INFO] [stderr] | [INFO] [stderr] 58 | hinted: hinted, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `hinted` [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/strategies/information.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | modulus: modulus, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `modulus` [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/strategies/information.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | value: value, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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/strategies/information.rs:177:13 [INFO] [stderr] | [INFO] [stderr] 177 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [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/strategies/information.rs:178:13 [INFO] [stderr] | [INFO] [stderr] 178 | n_partitions: n_partitions, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `n_partitions` [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/strategies/information.rs:179:13 [INFO] [stderr] | [INFO] [stderr] 179 | partition: partition, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `partition` [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/strategies/information.rs:235:13 [INFO] [stderr] | [INFO] [stderr] 235 | public_info: public_info, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `public_info` [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/strategies/information.rs:776:13 [INFO] [stderr] | [INFO] [stderr] 776 | hinted: hinted, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `hinted` [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/main.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | hand_size: hand_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `hand_size` [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/helpers.rs:331:13 [INFO] [stderr] | [INFO] [stderr] 331 | possible: possible, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `possible` [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/helpers.rs:380:13 [INFO] [stderr] | [INFO] [stderr] 380 | hand_info: hand_info, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `hand_info` [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:33:16 [INFO] [stderr] | [INFO] [stderr] 33 | Card { color: color, value: value } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `color` [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:33:30 [INFO] [stderr] | [INFO] [stderr] 33 | Card { color: color, value: value } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | counts: counts, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `counts` [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:148:13 [INFO] [stderr] | [INFO] [stderr] 148 | color: color, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `color` [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:277:13 [INFO] [stderr] | [INFO] [stderr] 277 | deck_size: deck_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `deck_size` [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:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | fireworks: fireworks, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `fireworks` [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:521:13 [INFO] [stderr] | [INFO] [stderr] 521 | other_hands: other_hands, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `other_hands` [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:586:13 [INFO] [stderr] | [INFO] [stderr] 586 | hands: hands, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `hands` [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:587:13 [INFO] [stderr] | [INFO] [stderr] 587 | board: board, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `board` [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:588:13 [INFO] [stderr] | [INFO] [stderr] 588 | 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:613:13 [INFO] [stderr] | [INFO] [stderr] 613 | player: player, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `player` [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:615:13 [INFO] [stderr] | [INFO] [stderr] 615 | other_hands: other_hands, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `other_hands` [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:706:13 [INFO] [stderr] | [INFO] [stderr] 706 | choice: choice, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `choice` [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/strategies/examples.rs:58:21 [INFO] [stderr] | [INFO] [stderr] 58 | hinted: hinted, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `hinted` [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/strategies/information.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | modulus: modulus, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `modulus` [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/strategies/information.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | value: value, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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/strategies/information.rs:177:13 [INFO] [stderr] | [INFO] [stderr] 177 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [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/strategies/information.rs:178:13 [INFO] [stderr] | [INFO] [stderr] 178 | n_partitions: n_partitions, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `n_partitions` [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/strategies/information.rs:179:13 [INFO] [stderr] | [INFO] [stderr] 179 | partition: partition, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `partition` [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/strategies/information.rs:235:13 [INFO] [stderr] | [INFO] [stderr] 235 | public_info: public_info, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `public_info` [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/strategies/information.rs:776:13 [INFO] [stderr] | [INFO] [stderr] 776 | hinted: hinted, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `hinted` [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/main.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | hand_size: hand_size, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `hand_size` [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: unneeded return statement [INFO] [stderr] --> src/game.rs:335:9 [INFO] [stderr] | [INFO] [stderr] 335 | return FINAL_VALUE; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `FINAL_VALUE` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/game.rs:362:20 [INFO] [stderr] | [INFO] [stderr] 362 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 363 | | if card.value > self.highest_attainable(card.color) { [INFO] [stderr] 364 | | true [INFO] [stderr] 365 | | } else { [INFO] [stderr] 366 | | self.discard.remaining(&card) != 1 [INFO] [stderr] 367 | | } [INFO] [stderr] 368 | | } [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] 362 | } else if card.value > self.highest_attainable(card.color) { [INFO] [stderr] 363 | true [INFO] [stderr] 364 | } else { [INFO] [stderr] 365 | self.discard.remaining(&card) != 1 [INFO] [stderr] 366 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/cheating.rs:107:13 [INFO] [stderr] | [INFO] [stderr] 107 | / if player != self.me { [INFO] [stderr] 108 | | if view.has_card(&player, card) { [INFO] [stderr] 109 | | let their_hand_value = self.hand_play_value(view, hands.get(&player).unwrap()); [INFO] [stderr] 110 | | // they can play this card, and have less urgent plays than i do [INFO] [stderr] ... | [INFO] [stderr] 114 | | } [INFO] [stderr] 115 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 107 | if player != self.me && view.has_card(&player, card) { [INFO] [stderr] 108 | let their_hand_value = self.hand_play_value(view, hands.get(&player).unwrap()); [INFO] [stderr] 109 | // they can play this card, and have less urgent plays than i do [INFO] [stderr] 110 | if their_hand_value < my_hand_value { [INFO] [stderr] 111 | return 10 - (card.value as i32) [INFO] [stderr] 112 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/cheating.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | return None [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/cheating.rs:181:9 [INFO] [stderr] | [INFO] [stderr] 181 | / if view.board.hints_remaining > 0 { [INFO] [stderr] 182 | | if view.someone_else_can_play() { [INFO] [stderr] 183 | | return self.throwaway_hint(view); [INFO] [stderr] 184 | | } [INFO] [stderr] 185 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 181 | if view.board.hints_remaining > 0 && view.someone_else_can_play() { [INFO] [stderr] 182 | return self.throwaway_hint(view); [INFO] [stderr] 183 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:118:20 [INFO] [stderr] | [INFO] [stderr] 118 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 119 | | if answer == 1 { card_table.mark_false(card); } [INFO] [stderr] 120 | | } [INFO] [stderr] | |_____________^ help: try: `if answer == 1 { card_table.mark_false(card); }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:334:9 [INFO] [stderr] | [INFO] [stderr] 334 | return questions [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `questions` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/information.rs:441:17 [INFO] [stderr] | [INFO] [stderr] 441 | / if player != self.me { [INFO] [stderr] 442 | | if view.has_card(&player, card) { [INFO] [stderr] 443 | | num_with += 1; [INFO] [stderr] 444 | | } [INFO] [stderr] 445 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 441 | if player != self.me && view.has_card(&player, card) { [INFO] [stderr] 442 | num_with += 1; [INFO] [stderr] 443 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:472:9 [INFO] [stderr] | [INFO] [stderr] 472 | return useless_vec; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `useless_vec` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:458:20 [INFO] [stderr] | [INFO] [stderr] 458 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 459 | | if let Some(card) = card_table.get_card() { [INFO] [stderr] 460 | | if seen.contains_key(&card) { [INFO] [stderr] 461 | | // found a duplicate card [INFO] [stderr] ... | [INFO] [stderr] 467 | | } [INFO] [stderr] 468 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 458 | } else if let Some(card) = card_table.get_card() { [INFO] [stderr] 459 | if seen.contains_key(&card) { [INFO] [stderr] 460 | // found a duplicate card [INFO] [stderr] 461 | useless.insert(i); [INFO] [stderr] 462 | useless.insert(*seen.get(&card).unwrap()); [INFO] [stderr] 463 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:565:9 [INFO] [stderr] | [INFO] [stderr] 565 | return score; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `score` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:640:9 [INFO] [stderr] | [INFO] [stderr] 640 | return if !may_be_all_one_color && !may_be_all_one_number { 4 } else { 3 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `if !may_be_all_one_color && !may_be_all_one_number { 4 } else { 3 }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:667:16 [INFO] [stderr] | [INFO] [stderr] 667 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 668 | | if hint_options.len() > 1 { [INFO] [stderr] 669 | | debug!("Choosing amongst hint options: {:?}", hint_options); [INFO] [stderr] 670 | | } [INFO] [stderr] 671 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 667 | } else if hint_options.len() > 1 { [INFO] [stderr] 668 | debug!("Choosing amongst hint options: {:?}", hint_options); [INFO] [stderr] 669 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:806:20 [INFO] [stderr] | [INFO] [stderr] 806 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 807 | | if result[card_index] { [INFO] [stderr] 808 | | match hint.hinted { [INFO] [stderr] 809 | | Hinted::Value(_) => 0, [INFO] [stderr] ... | [INFO] [stderr] 817 | | } [INFO] [stderr] 818 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 806 | } else if result[card_index] { [INFO] [stderr] 807 | match hint.hinted { [INFO] [stderr] 808 | Hinted::Value(_) => 0, [INFO] [stderr] 809 | Hinted::Color(_) => 1, [INFO] [stderr] 810 | } [INFO] [stderr] 811 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/information.rs:917:9 [INFO] [stderr] | [INFO] [stderr] 917 | / if view.board.hints_remaining > 0 { [INFO] [stderr] 918 | | if view.someone_else_can_play() { [INFO] [stderr] 919 | | return self.get_hint(); [INFO] [stderr] 920 | | } [INFO] [stderr] 921 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 917 | if view.board.hints_remaining > 0 && view.someone_else_can_play() { [INFO] [stderr] 918 | return self.get_hint(); [INFO] [stderr] 919 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/game.rs:335:9 [INFO] [stderr] | [INFO] [stderr] 335 | return FINAL_VALUE; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `FINAL_VALUE` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/game.rs:362:20 [INFO] [stderr] | [INFO] [stderr] 362 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 363 | | if card.value > self.highest_attainable(card.color) { [INFO] [stderr] 364 | | true [INFO] [stderr] 365 | | } else { [INFO] [stderr] 366 | | self.discard.remaining(&card) != 1 [INFO] [stderr] 367 | | } [INFO] [stderr] 368 | | } [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] 362 | } else if card.value > self.highest_attainable(card.color) { [INFO] [stderr] 363 | true [INFO] [stderr] 364 | } else { [INFO] [stderr] 365 | self.discard.remaining(&card) != 1 [INFO] [stderr] 366 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/cheating.rs:107:13 [INFO] [stderr] | [INFO] [stderr] 107 | / if player != self.me { [INFO] [stderr] 108 | | if view.has_card(&player, card) { [INFO] [stderr] 109 | | let their_hand_value = self.hand_play_value(view, hands.get(&player).unwrap()); [INFO] [stderr] 110 | | // they can play this card, and have less urgent plays than i do [INFO] [stderr] ... | [INFO] [stderr] 114 | | } [INFO] [stderr] 115 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 107 | if player != self.me && view.has_card(&player, card) { [INFO] [stderr] 108 | let their_hand_value = self.hand_play_value(view, hands.get(&player).unwrap()); [INFO] [stderr] 109 | // they can play this card, and have less urgent plays than i do [INFO] [stderr] 110 | if their_hand_value < my_hand_value { [INFO] [stderr] 111 | return 10 - (card.value as i32) [INFO] [stderr] 112 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/cheating.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | return None [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/cheating.rs:181:9 [INFO] [stderr] | [INFO] [stderr] 181 | / if view.board.hints_remaining > 0 { [INFO] [stderr] 182 | | if view.someone_else_can_play() { [INFO] [stderr] 183 | | return self.throwaway_hint(view); [INFO] [stderr] 184 | | } [INFO] [stderr] 185 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 181 | if view.board.hints_remaining > 0 && view.someone_else_can_play() { [INFO] [stderr] 182 | return self.throwaway_hint(view); [INFO] [stderr] 183 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:118:20 [INFO] [stderr] | [INFO] [stderr] 118 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 119 | | if answer == 1 { card_table.mark_false(card); } [INFO] [stderr] 120 | | } [INFO] [stderr] | |_____________^ help: try: `if answer == 1 { card_table.mark_false(card); }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:334:9 [INFO] [stderr] | [INFO] [stderr] 334 | return questions [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `questions` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/information.rs:441:17 [INFO] [stderr] | [INFO] [stderr] 441 | / if player != self.me { [INFO] [stderr] 442 | | if view.has_card(&player, card) { [INFO] [stderr] 443 | | num_with += 1; [INFO] [stderr] 444 | | } [INFO] [stderr] 445 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 441 | if player != self.me && view.has_card(&player, card) { [INFO] [stderr] 442 | num_with += 1; [INFO] [stderr] 443 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:472:9 [INFO] [stderr] | [INFO] [stderr] 472 | return useless_vec; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `useless_vec` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:458:20 [INFO] [stderr] | [INFO] [stderr] 458 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 459 | | if let Some(card) = card_table.get_card() { [INFO] [stderr] 460 | | if seen.contains_key(&card) { [INFO] [stderr] 461 | | // found a duplicate card [INFO] [stderr] ... | [INFO] [stderr] 467 | | } [INFO] [stderr] 468 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 458 | } else if let Some(card) = card_table.get_card() { [INFO] [stderr] 459 | if seen.contains_key(&card) { [INFO] [stderr] 460 | // found a duplicate card [INFO] [stderr] 461 | useless.insert(i); [INFO] [stderr] 462 | useless.insert(*seen.get(&card).unwrap()); [INFO] [stderr] 463 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:565:9 [INFO] [stderr] | [INFO] [stderr] 565 | return score; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `score` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/strategies/information.rs:640:9 [INFO] [stderr] | [INFO] [stderr] 640 | return if !may_be_all_one_color && !may_be_all_one_number { 4 } else { 3 } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `if !may_be_all_one_color && !may_be_all_one_number { 4 } else { 3 }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:667:16 [INFO] [stderr] | [INFO] [stderr] 667 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 668 | | if hint_options.len() > 1 { [INFO] [stderr] 669 | | debug!("Choosing amongst hint options: {:?}", hint_options); [INFO] [stderr] 670 | | } [INFO] [stderr] 671 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 667 | } else if hint_options.len() > 1 { [INFO] [stderr] 668 | debug!("Choosing amongst hint options: {:?}", hint_options); [INFO] [stderr] 669 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategies/information.rs:806:20 [INFO] [stderr] | [INFO] [stderr] 806 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 807 | | if result[card_index] { [INFO] [stderr] 808 | | match hint.hinted { [INFO] [stderr] 809 | | Hinted::Value(_) => 0, [INFO] [stderr] ... | [INFO] [stderr] 817 | | } [INFO] [stderr] 818 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 806 | } else if result[card_index] { [INFO] [stderr] 807 | match hint.hinted { [INFO] [stderr] 808 | Hinted::Value(_) => 0, [INFO] [stderr] 809 | Hinted::Color(_) => 1, [INFO] [stderr] 810 | } [INFO] [stderr] 811 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategies/information.rs:917:9 [INFO] [stderr] | [INFO] [stderr] 917 | / if view.board.hints_remaining > 0 { [INFO] [stderr] 918 | | if view.someone_else_can_play() { [INFO] [stderr] 919 | | return self.get_hint(); [INFO] [stderr] 920 | | } [INFO] [stderr] 921 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 917 | if view.board.hints_remaining > 0 && view.someone_else_can_play() { [INFO] [stderr] 918 | return self.get_hint(); [INFO] [stderr] 919 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/helpers.rs:140:9 [INFO] [stderr] | [INFO] [stderr] 140 | self.get_possibility_set().iter().map(|t| t.clone()).collect::>() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.get_possibility_set().iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/helpers.rs:140:51 [INFO] [stderr] | [INFO] [stderr] 140 | self.get_possibility_set().iter().map(|t| t.clone()).collect::>() [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*t` [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/helpers.rs:148:9 [INFO] [stderr] | [INFO] [stderr] 148 | / Self::get_all_possibilities().iter() [INFO] [stderr] 149 | | .map(|val| val.clone()).collect::>() [INFO] [stderr] | |___________________________________^ help: Consider calling the dedicated `cloned` method: `Self::get_all_possibilities().iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/helpers.rs:149:24 [INFO] [stderr] | [INFO] [stderr] 149 | .map(|val| val.clone()).collect::>() [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*val` [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/helpers.rs:155:25 [INFO] [stderr] | [INFO] [stderr] 155 | possible.insert(value.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `value` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/helpers.rs:274:22 [INFO] [stderr] | [INFO] [stderr] 274 | .expect(&format!("Decrementing weight for impossible card: {}", card)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Decrementing weight for impossible card: {}", card))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/helpers.rs:344:25 [INFO] [stderr] | [INFO] [stderr] 344 | let mut cards = self.possible.keys().map(|card| {card.clone() }).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.possible.keys().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/helpers.rs:385:65 [INFO] [stderr] | [INFO] [stderr] 385 | pub fn update_for_hint(&mut self, hinted: &Hinted, matches: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[bool]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/helpers.rs:386:9 [INFO] [stderr] | [INFO] [stderr] 386 | / match hinted { [INFO] [stderr] 387 | | &Hinted::Color(color) => { [INFO] [stderr] 388 | | for (card_info, &matched) in self.hand_info.iter_mut().zip(matches.iter()) { [INFO] [stderr] 389 | | card_info.mark_color(color, matched); [INFO] [stderr] ... | [INFO] [stderr] 396 | | } [INFO] [stderr] 397 | | } [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] 386 | match *hinted { [INFO] [stderr] 387 | Hinted::Color(color) => { [INFO] [stderr] 388 | for (card_info, &matched) in self.hand_info.iter_mut().zip(matches.iter()) { [INFO] [stderr] 389 | card_info.mark_color(color, matched); [INFO] [stderr] 390 | } [INFO] [stderr] 391 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:65:10 [INFO] [stderr] | [INFO] [stderr] 65 | *self.counts.get(card).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.counts[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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/game.rs:194:9 [INFO] [stderr] | [INFO] [stderr] 194 | / match self { [INFO] [stderr] 195 | | &Hinted::Color(color) => { write!(f, "{}", color) } [INFO] [stderr] 196 | | &Hinted::Value(value) => { write!(f, "{}", value) } [INFO] [stderr] 197 | | } [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] 194 | match *self { [INFO] [stderr] 195 | Hinted::Color(color) => { write!(f, "{}", color) } [INFO] [stderr] 196 | Hinted::Value(value) => { write!(f, "{}", value) } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:303:9 [INFO] [stderr] | [INFO] [stderr] 303 | self.fireworks.get(&color).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:318:24 [INFO] [stderr] | [INFO] [stderr] 318 | let firework = self.fireworks.get(&color).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:340:24 [INFO] [stderr] | [INFO] [stderr] 340 | let firework = self.fireworks.get(&card.color).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&card.color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:355:24 [INFO] [stderr] | [INFO] [stderr] 355 | let firework = self.fireworks.get(&card.color).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&card.color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/game.rs:377:68 [INFO] [stderr] | [INFO] [stderr] 377 | self.fireworks.iter().map(|(_, firework)| firework.score()).fold(0, |a, b| a + b) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/game.rs:384:42 [INFO] [stderr] | [INFO] [stderr] 384 | pub fn player_to_left(&self, player: &Player) -> Player { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/game.rs:387:43 [INFO] [stderr] | [INFO] [stderr] 387 | pub fn player_to_right(&self, player: &Player) -> Player { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/game.rs:440:33 [INFO] [stderr] | [INFO] [stderr] 440 | fn hand_size(&self, player: &Player) -> usize { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/game.rs:448:32 [INFO] [stderr] | [INFO] [stderr] 448 | fn has_card(&self, player: &Player, card: &Card) -> bool { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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 `is_some()` after searching an `Iterator` with position. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/game.rs:449:9 [INFO] [stderr] | [INFO] [stderr] 449 | / self.get_hand(player).iter().position(|other_card| { [INFO] [stderr] 450 | | card == other_card [INFO] [stderr] 451 | | }).is_some() [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:493:9 [INFO] [stderr] | [INFO] [stderr] 493 | self.other_hands.get(player).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.other_hands[player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/game.rs:519:21 [INFO] [stderr] | [INFO] [stderr] 519 | player: borrowed_view.player.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `borrowed_view.player` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:535:9 [INFO] [stderr] | [INFO] [stderr] 535 | self.other_hands.get(player).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.other_hands[player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:556:25 [INFO] [stderr] | [INFO] [stderr] 556 | let hand = &self.hands.get(&player).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.hands[&player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/helpers.rs:140:9 [INFO] [stderr] | [INFO] [stderr] 140 | self.get_possibility_set().iter().map(|t| t.clone()).collect::>() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.get_possibility_set().iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/helpers.rs:140:51 [INFO] [stderr] | [INFO] [stderr] 140 | self.get_possibility_set().iter().map(|t| t.clone()).collect::>() [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*t` [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/helpers.rs:148:9 [INFO] [stderr] | [INFO] [stderr] 148 | / Self::get_all_possibilities().iter() [INFO] [stderr] 149 | | .map(|val| val.clone()).collect::>() [INFO] [stderr] | |___________________________________^ help: Consider calling the dedicated `cloned` method: `Self::get_all_possibilities().iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/helpers.rs:149:24 [INFO] [stderr] | [INFO] [stderr] 149 | .map(|val| val.clone()).collect::>() [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*val` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:614:24 [INFO] [stderr] | [INFO] [stderr] 614 | hand_size: self.hands.get(&player).unwrap().len(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.hands[&player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/game.rs:622:13 [INFO] [stderr] | [INFO] [stderr] 622 | let ref mut hand = self.hands.get_mut(&self.board.player).unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^^--------------------------------------------------- help: try: `let hand = &mut self.hands.get_mut(&self.board.player).unwrap();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/game.rs:627:13 [INFO] [stderr] | [INFO] [stderr] 627 | let ref mut hand = self.hands.get_mut(&self.board.player).unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^^--------------------------------------------------- help: try: `let hand = &mut self.hands.get_mut(&self.board.player).unwrap();` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/helpers.rs:155:25 [INFO] [stderr] | [INFO] [stderr] 155 | possible.insert(value.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `value` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:649:32 [INFO] [stderr] | [INFO] [stderr] 649 | let hand = self.hands.get(&hint.player).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.hands[&hint.player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/game.rs:704:21 [INFO] [stderr] | [INFO] [stderr] 704 | player: self.board.player.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.board.player` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/simulator.rs:31:25 [INFO] [stderr] | [INFO] [stderr] 31 | let seed = seed_opt.unwrap_or(rand::thread_rng().next_u32()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| rand::thread_rng().next_u32())` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/simulator.rs:93:34 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn get_count(&self, val: &Score) -> u32 { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Score` [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/simulator.rs:96:40 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn percentage_with(&self, val: &Score) -> f32 { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Score` [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: use of `expect` followed by a function call [INFO] [stderr] --> src/helpers.rs:274:22 [INFO] [stderr] | [INFO] [stderr] 274 | .expect(&format!("Decrementing weight for impossible card: {}", card)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Decrementing weight for impossible card: {}", card))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/simulator.rs:130:37 [INFO] [stderr] | [INFO] [stderr] 130 | let first_seed = first_seed_opt.unwrap_or(rand::thread_rng().next_u32()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| rand::thread_rng().next_u32())` [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: length comparison to zero [INFO] [stderr] --> src/simulator.rs:184:12 [INFO] [stderr] | [INFO] [stderr] 184 | if non_perfect_seeds.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!non_perfect_seeds.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/simulator.rs:186:19 [INFO] [stderr] | [INFO] [stderr] 186 | non_perfect_seeds.get(0).unwrap().1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&non_perfect_seeds[0]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/cheating.rs:66:27 [INFO] [stderr] | [INFO] [stderr] 66 | let their_hand = *view.other_hands.get(&next).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&view.other_hands[&next]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/helpers.rs:344:25 [INFO] [stderr] | [INFO] [stderr] 344 | let mut cards = self.possible.keys().map(|card| {card.clone() }).collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.possible.keys().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/cheating.rs:95:62 [INFO] [stderr] | [INFO] [stderr] 95 | fn hand_play_value(&self, view: &BorrowedGameView, hand: &Cards) -> u32 { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/cheating.rs:96:65 [INFO] [stderr] | [INFO] [stderr] 96 | hand.iter().map(|card| self.card_play_value(view, card)).fold(0, |a,b| a+b) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/cheating.rs:122:64 [INFO] [stderr] | [INFO] [stderr] 122 | fn find_useless_card(&self, view: &BorrowedGameView, hand: &Cards) -> Option { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/cheating.rs:148:12 [INFO] [stderr] | [INFO] [stderr] 148 | if playable_cards.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!playable_cards.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/strategies/information.rs:33:9 [INFO] [stderr] | [INFO] [stderr] 33 | self.modulus = self.modulus * other.modulus; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.modulus *= other.modulus` [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/strategies/information.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | self.modulus = self.modulus / modulus; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.modulus /= modulus` [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/strategies/information.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | self.value = self.value - value * self.modulus; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.value -= value * self.modulus` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:75:22 [INFO] [stderr] | [INFO] [stderr] 75 | fn answer(&self, &Cards, &OwnedGameView) -> u32; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:81:33 [INFO] [stderr] | [INFO] [stderr] 81 | fn answer_info(&self, hand: &Cards, view: &OwnedGameView) -> ModulusInformation { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | let ref card = hand[self.index]; [INFO] [stderr] | ----^^^^^^^^-------------------- help: try: `let card = &hand[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:113:13 [INFO] [stderr] | [INFO] [stderr] 113 | let ref mut card_table = hand_info[self.index]; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^------------------------- help: try: `let card_table = &mut hand_info[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/helpers.rs:385:65 [INFO] [stderr] | [INFO] [stderr] 385 | pub fn update_for_hint(&mut self, hinted: &Hinted, matches: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[bool]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:186:13 [INFO] [stderr] | [INFO] [stderr] 186 | let ref card = hand[self.index]; [INFO] [stderr] | ----^^^^^^^^-------------------- help: try: `let card = &hand[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/information.rs:187:10 [INFO] [stderr] | [INFO] [stderr] 187 | *self.partition.get(&card).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.partition[&card]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:195:13 [INFO] [stderr] | [INFO] [stderr] 195 | let ref mut card_table = hand_info[self.index]; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^------------------------- help: try: `let card_table = &mut hand_info[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/information.rs:198:17 [INFO] [stderr] | [INFO] [stderr] 198 | if *self.partition.get(card).unwrap() != answer { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.partition[card]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/helpers.rs:386:9 [INFO] [stderr] | [INFO] [stderr] 386 | / match hinted { [INFO] [stderr] 387 | | &Hinted::Color(color) => { [INFO] [stderr] 388 | | for (card_info, &matched) in self.hand_info.iter_mut().zip(matches.iter()) { [INFO] [stderr] 389 | | card_info.mark_color(color, matched); [INFO] [stderr] ... | [INFO] [stderr] 396 | | } [INFO] [stderr] 397 | | } [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] 386 | match *hinted { [INFO] [stderr] 387 | Hinted::Color(color) => { [INFO] [stderr] 388 | for (card_info, &matched) in self.hand_info.iter_mut().zip(matches.iter()) { [INFO] [stderr] 389 | card_info.mark_color(color, matched); [INFO] [stderr] 390 | } [INFO] [stderr] 391 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/strategies/information.rs:262:13 [INFO] [stderr] | [INFO] [stderr] 262 | *info_remaining = *info_remaining / question.info_amount(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `*info_remaining /= question.info_amount()` [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: avoid using `collect()` when not needed [INFO] [stderr] --> src/strategies/information.rs:280:11 [INFO] [stderr] | [INFO] [stderr] 280 | }).collect::>().len(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `.count()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_collect [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | p_play == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_play - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | p_play == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:286:24 [INFO] [stderr] | [INFO] [stderr] 286 | if p_dead == 1.0 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_dead - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:286:24 [INFO] [stderr] | [INFO] [stderr] 286 | if p_dead == 1.0 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:287:24 [INFO] [stderr] | [INFO] [stderr] 287 | if p_play == 1.0 || p_play < 0.2 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_play - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:287:24 [INFO] [stderr] | [INFO] [stderr] 287 | if p_play == 1.0 || p_play < 0.2 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:313:20 [INFO] [stderr] | [INFO] [stderr] 313 | if p_dead == 1.0 { return false } [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_dead - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:313:20 [INFO] [stderr] | [INFO] [stderr] 313 | if p_dead == 1.0 { return false } [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:338:20 [INFO] [stderr] | [INFO] [stderr] 338 | questions: &Vec>, hand: &Cards, view: &OwnedGameView [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Box]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:338:47 [INFO] [stderr] | [INFO] [stderr] 338 | questions: &Vec>, hand: &Cards, view: &OwnedGameView [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:351:24 [INFO] [stderr] | [INFO] [stderr] 351 | &self, player: &Player, total_info: u32, view: &OwnedGameView [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/strategies/information.rs:382:18 [INFO] [stderr] | [INFO] [stderr] 382 | let me = self.me.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.me` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:65:10 [INFO] [stderr] | [INFO] [stderr] 65 | *self.counts.get(card).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.counts[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: The function/method `::get_questions` doesn't need a mutable reference [INFO] [stderr] --> src/strategies/information.rs:415:77 [INFO] [stderr] | [INFO] [stderr] 415 | let questions = Self::get_questions(hint.modulus, view, &mut hand_info); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:456:16 [INFO] [stderr] | [INFO] [stderr] 456 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(view.get_board()) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:456:16 [INFO] [stderr] | [INFO] [stderr] 456 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/strategies/information.rs:460:21 [INFO] [stderr] | [INFO] [stderr] 460 | / if seen.contains_key(&card) { [INFO] [stderr] 461 | | // found a duplicate card [INFO] [stderr] 462 | | useless.insert(i); [INFO] [stderr] 463 | | useless.insert(*seen.get(&card).unwrap()); [INFO] [stderr] 464 | | } else { [INFO] [stderr] 465 | | seen.insert(card, i); [INFO] [stderr] 466 | | } [INFO] [stderr] | |_____________________^ help: consider using: `seen.entry(card)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/information.rs:463:41 [INFO] [stderr] | [INFO] [stderr] 463 | useless.insert(*seen.get(&card).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&seen[&card]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:475:44 [INFO] [stderr] | [INFO] [stderr] 475 | fn take_public_info(&mut self, player: &Player) -> HandInfo { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/strategies/information.rs:479:46 [INFO] [stderr] | [INFO] [stderr] 479 | fn return_public_info(&mut self, player: &Player, card_info: HandInfo) { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/strategies/information.rs:493:9 [INFO] [stderr] | [INFO] [stderr] 493 | self.public_info.get(player).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.public_info[player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:500:69 [INFO] [stderr] | [INFO] [stderr] 500 | fn update_public_info_for_hint(&mut self, hint: &Hint, matches: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[bool]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:508:17 [INFO] [stderr] | [INFO] [stderr] 508 | player: &Player, [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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 seem to want to iterate on a map's values [INFO] [stderr] --> src/strategies/information.rs:541:30 [INFO] [stderr] | [INFO] [stderr] 541 | for (_, hand) in &view.other_hands { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 541 | for hand in view.other_hands.values() { [INFO] [stderr] | ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:551:12 [INFO] [stderr] | [INFO] [stderr] 551 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(view.get_board()) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:551:12 [INFO] [stderr] | [INFO] [stderr] 551 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:578:59 [INFO] [stderr] | [INFO] [stderr] 578 | fn hint_goodness(&self, hinted: &Hinted, hint_player: &Player, view: &OwnedGameView) -> f32 { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/game.rs:194:9 [INFO] [stderr] | [INFO] [stderr] 194 | / match self { [INFO] [stderr] 195 | | &Hinted::Color(color) => { write!(f, "{}", color) } [INFO] [stderr] 196 | | &Hinted::Value(value) => { write!(f, "{}", value) } [INFO] [stderr] 197 | | } [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] 194 | match *self { [INFO] [stderr] 195 | Hinted::Color(color) => { write!(f, "{}", color) } [INFO] [stderr] 196 | Hinted::Value(value) => { write!(f, "{}", value) } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:593:16 [INFO] [stderr] | [INFO] [stderr] 593 | if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(&view.board) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:593:16 [INFO] [stderr] | [INFO] [stderr] 593 | if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/strategies/information.rs:613:78 [INFO] [stderr] | [INFO] [stderr] 613 | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ______________________________________________________________________________^ [INFO] [stderr] 614 | | 2 [INFO] [stderr] 615 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/strategies/information.rs:611:47 [INFO] [stderr] | [INFO] [stderr] 611 | if card_table.is_determined() { [INFO] [stderr] | _______________________________________________^ [INFO] [stderr] 612 | | 2 [INFO] [stderr] 613 | | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:613:27 [INFO] [stderr] | [INFO] [stderr] 613 | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(&view.board) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:613:27 [INFO] [stderr] | [INFO] [stderr] 613 | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/strategies/information.rs:650:9 [INFO] [stderr] | [INFO] [stderr] 650 | (0 .. n - 1).into_iter().map(|i| { (player + 1 + i) % n }).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0 .. n - 1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:665:12 [INFO] [stderr] | [INFO] [stderr] 665 | if hint_options.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `hint_options.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/information.rs:694:48 [INFO] [stderr] | [INFO] [stderr] 694 | let total_info = info_per_player.iter().fold(0, |a, b| a + b); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:780:56 [INFO] [stderr] | [INFO] [stderr] 780 | fn infer_from_hint(&mut self, hint: &Hint, result: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[bool]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/information.rs:786:48 [INFO] [stderr] | [INFO] [stderr] 786 | let total_info = info_per_player.iter().fold(0, |a, b| a + b); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:303:9 [INFO] [stderr] | [INFO] [stderr] 303 | self.fireworks.get(&color).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/information.rs:792:85 [INFO] [stderr] | [INFO] [stderr] 792 | let amt_from_prev_players = info_per_player.iter().take(player_amt as usize).fold(0, |a, b| a + b); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:318:24 [INFO] [stderr] | [INFO] [stderr] 318 | let firework = self.fireworks.get(&color).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:340:24 [INFO] [stderr] | [INFO] [stderr] 340 | let firework = self.fireworks.get(&card.color).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&card.color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:355:24 [INFO] [stderr] | [INFO] [stderr] 355 | let firework = self.fireworks.get(&card.color).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fireworks[&card.color]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/game.rs:377:68 [INFO] [stderr] | [INFO] [stderr] 377 | self.fireworks.iter().map(|(_, firework)| firework.score()).fold(0, |a, b| a + b) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/game.rs:384:42 [INFO] [stderr] | [INFO] [stderr] 384 | pub fn player_to_left(&self, player: &Player) -> Player { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/game.rs:387:43 [INFO] [stderr] | [INFO] [stderr] 387 | pub fn player_to_right(&self, player: &Player) -> Player { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:848:13 [INFO] [stderr] | [INFO] [stderr] 848 | card_table.probability_is_playable(&view.board) == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_playable(&view.board) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:848:13 [INFO] [stderr] | [INFO] [stderr] 848 | card_table.probability_is_playable(&view.board) == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:851:12 [INFO] [stderr] | [INFO] [stderr] 851 | if playable_cards.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!playable_cards.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:880:17 [INFO] [stderr] | [INFO] [stderr] 880 | / card_table.probability_of_predicate(&|card| { [INFO] [stderr] 881 | | view.board.is_playable(card) || view.board.is_dead(card) [INFO] [stderr] 882 | | }) == 1.0 [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:880:17 [INFO] [stderr] | [INFO] [stderr] 880 | / card_table.probability_of_predicate(&|card| { [INFO] [stderr] 881 | | view.board.is_playable(card) || view.board.is_dead(card) [INFO] [stderr] 882 | | }) == 1.0 [INFO] [stderr] | |_________________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] help: consider comparing them within some error [INFO] [stderr] | [INFO] [stderr] 880 | (card_table.probability_of_predicate(&|card| { [INFO] [stderr] 881 | view.board.is_playable(card) || view.board.is_dead(card) [INFO] [stderr] 882 | }) - 1.0).abs() < error [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:888:16 [INFO] [stderr] | [INFO] [stderr] 888 | if risky_playable_cards.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!risky_playable_cards.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:908:23 [INFO] [stderr] | [INFO] [stderr] 908 | } else if useless_indices.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!useless_indices.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:927:19 [INFO] [stderr] | [INFO] [stderr] 927 | } else if useless_indices.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!useless_indices.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/strategies/information.rs:958:17 [INFO] [stderr] | [INFO] [stderr] 958 | / if let &TurnResult::Hint(ref matches) = &turn_record.result { [INFO] [stderr] 959 | | self.infer_from_hint(hint, matches); [INFO] [stderr] 960 | | self.update_public_info_for_hint(hint, matches); [INFO] [stderr] 961 | | } else { [INFO] [stderr] 962 | | panic!("Got turn choice {:?}, but turn result {:?}", [INFO] [stderr] 963 | | turn_record.choice, turn_record.result); [INFO] [stderr] 964 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 958 | if let TurnResult::Hint(ref matches) = turn_record.result { [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/game.rs:440:33 [INFO] [stderr] | [INFO] [stderr] 440 | fn hand_size(&self, player: &Player) -> usize { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/game.rs:448:32 [INFO] [stderr] | [INFO] [stderr] 448 | fn has_card(&self, player: &Player, card: &Card) -> bool { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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 both the expression and the patterns [INFO] [stderr] --> src/strategies/information.rs:980:17 [INFO] [stderr] | [INFO] [stderr] 980 | / if let &TurnResult::Discard(ref card) = &turn_record.result { [INFO] [stderr] 981 | | self.update_public_info_for_discard_or_play(view, &turn_record.player, index, card); [INFO] [stderr] 982 | | } else { [INFO] [stderr] 983 | | panic!("Got turn choice {:?}, but turn result {:?}", [INFO] [stderr] 984 | | turn_record.choice, turn_record.result); [INFO] [stderr] 985 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 980 | if let TurnResult::Discard(ref card) = turn_record.result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `is_some()` after searching an `Iterator` with position. This is more succinctly expressed by calling `any()`. [INFO] [stderr] --> src/game.rs:449:9 [INFO] [stderr] | [INFO] [stderr] 449 | / self.get_hand(player).iter().position(|other_card| { [INFO] [stderr] 450 | | card == other_card [INFO] [stderr] 451 | | }).is_some() [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::search_is_some)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#search_is_some [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/strategies/information.rs:988:17 [INFO] [stderr] | [INFO] [stderr] 988 | / if let &TurnResult::Play(ref card, _) = &turn_record.result { [INFO] [stderr] 989 | | self.update_public_info_for_discard_or_play(view, &turn_record.player, index, card); [INFO] [stderr] 990 | | } else { [INFO] [stderr] 991 | | panic!("Got turn choice {:?}, but turn result {:?}", [INFO] [stderr] 992 | | turn_record.choice, turn_record.result); [INFO] [stderr] 993 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 988 | if let TurnResult::Play(ref card, _) = turn_record.result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:493:9 [INFO] [stderr] | [INFO] [stderr] 493 | self.other_hands.get(player).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.other_hands[player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/game.rs:519:21 [INFO] [stderr] | [INFO] [stderr] 519 | player: borrowed_view.player.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `borrowed_view.player` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:535:9 [INFO] [stderr] | [INFO] [stderr] 535 | self.other_hands.get(player).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.other_hands[player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:556:25 [INFO] [stderr] | [INFO] [stderr] 556 | let hand = &self.hands.get(&player).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.hands[&player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:81:54 [INFO] [stderr] | [INFO] [stderr] 81 | let log_level_str : &str = &matches.opt_str("l").unwrap_or("info".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "info".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:99:49 [INFO] [stderr] | [INFO] [stderr] 99 | let n = u32::from_str(&matches.opt_str("n").unwrap_or("1".to_string())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "1".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:105:57 [INFO] [stderr] | [INFO] [stderr] 105 | let n_threads = u32::from_str(&matches.opt_str("t").unwrap_or("1".to_string())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "1".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:107:57 [INFO] [stderr] | [INFO] [stderr] 107 | let n_players = u32::from_str(&matches.opt_str("p").unwrap_or("4".to_string())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "4".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:125:53 [INFO] [stderr] | [INFO] [stderr] 125 | let strategy_str : &str = &matches.opt_str("g").unwrap_or("cheat".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "cheat".to_string())` [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] error: aborting due to 11 previous errors [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:614:24 [INFO] [stderr] | [INFO] [stderr] 614 | hand_size: self.hands.get(&player).unwrap().len(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.hands[&player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/game.rs:622:13 [INFO] [stderr] | [INFO] [stderr] 622 | let ref mut hand = self.hands.get_mut(&self.board.player).unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^^--------------------------------------------------- help: try: `let hand = &mut self.hands.get_mut(&self.board.player).unwrap();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/game.rs:627:13 [INFO] [stderr] | [INFO] [stderr] 627 | let ref mut hand = self.hands.get_mut(&self.board.player).unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^^--------------------------------------------------- help: try: `let hand = &mut self.hands.get_mut(&self.board.player).unwrap();` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] error: Could not compile `rust_hanabi`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/game.rs:649:32 [INFO] [stderr] | [INFO] [stderr] 649 | let hand = self.hands.get(&hint.player).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.hands[&hint.player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/game.rs:704:21 [INFO] [stderr] | [INFO] [stderr] 704 | player: self.board.player.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.board.player` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/simulator.rs:31:25 [INFO] [stderr] | [INFO] [stderr] 31 | let seed = seed_opt.unwrap_or(rand::thread_rng().next_u32()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| rand::thread_rng().next_u32())` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/simulator.rs:93:34 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn get_count(&self, val: &Score) -> u32 { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Score` [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/simulator.rs:96:40 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn percentage_with(&self, val: &Score) -> f32 { [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `Score` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/simulator.rs:130:37 [INFO] [stderr] | [INFO] [stderr] 130 | let first_seed = first_seed_opt.unwrap_or(rand::thread_rng().next_u32()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| rand::thread_rng().next_u32())` [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: length comparison to zero [INFO] [stderr] --> src/simulator.rs:184:12 [INFO] [stderr] | [INFO] [stderr] 184 | if non_perfect_seeds.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!non_perfect_seeds.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/simulator.rs:186:19 [INFO] [stderr] | [INFO] [stderr] 186 | non_perfect_seeds.get(0).unwrap().1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&non_perfect_seeds[0]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/cheating.rs:66:27 [INFO] [stderr] | [INFO] [stderr] 66 | let their_hand = *view.other_hands.get(&next).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&view.other_hands[&next]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/cheating.rs:95:62 [INFO] [stderr] | [INFO] [stderr] 95 | fn hand_play_value(&self, view: &BorrowedGameView, hand: &Cards) -> u32 { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/cheating.rs:96:65 [INFO] [stderr] | [INFO] [stderr] 96 | hand.iter().map(|card| self.card_play_value(view, card)).fold(0, |a,b| a+b) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/cheating.rs:122:64 [INFO] [stderr] | [INFO] [stderr] 122 | fn find_useless_card(&self, view: &BorrowedGameView, hand: &Cards) -> Option { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/cheating.rs:148:12 [INFO] [stderr] | [INFO] [stderr] 148 | if playable_cards.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!playable_cards.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/strategies/information.rs:33:9 [INFO] [stderr] | [INFO] [stderr] 33 | self.modulus = self.modulus * other.modulus; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.modulus *= other.modulus` [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/strategies/information.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | self.modulus = self.modulus / modulus; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.modulus /= modulus` [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/strategies/information.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | self.value = self.value - value * self.modulus; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.value -= value * self.modulus` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:75:22 [INFO] [stderr] | [INFO] [stderr] 75 | fn answer(&self, &Cards, &OwnedGameView) -> u32; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:81:33 [INFO] [stderr] | [INFO] [stderr] 81 | fn answer_info(&self, hand: &Cards, view: &OwnedGameView) -> ModulusInformation { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | let ref card = hand[self.index]; [INFO] [stderr] | ----^^^^^^^^-------------------- help: try: `let card = &hand[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:113:13 [INFO] [stderr] | [INFO] [stderr] 113 | let ref mut card_table = hand_info[self.index]; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^------------------------- help: try: `let card_table = &mut hand_info[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:186:13 [INFO] [stderr] | [INFO] [stderr] 186 | let ref card = hand[self.index]; [INFO] [stderr] | ----^^^^^^^^-------------------- help: try: `let card = &hand[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/information.rs:187:10 [INFO] [stderr] | [INFO] [stderr] 187 | *self.partition.get(&card).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.partition[&card]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/strategies/information.rs:195:13 [INFO] [stderr] | [INFO] [stderr] 195 | let ref mut card_table = hand_info[self.index]; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^------------------------- help: try: `let card_table = &mut hand_info[self.index];` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/information.rs:198:17 [INFO] [stderr] | [INFO] [stderr] 198 | if *self.partition.get(card).unwrap() != answer { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.partition[card]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/strategies/information.rs:262:13 [INFO] [stderr] | [INFO] [stderr] 262 | *info_remaining = *info_remaining / question.info_amount(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `*info_remaining /= question.info_amount()` [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: avoid using `collect()` when not needed [INFO] [stderr] --> src/strategies/information.rs:280:11 [INFO] [stderr] | [INFO] [stderr] 280 | }).collect::>().len(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `.count()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_collect [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | p_play == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_play - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:279:13 [INFO] [stderr] | [INFO] [stderr] 279 | p_play == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:286:24 [INFO] [stderr] | [INFO] [stderr] 286 | if p_dead == 1.0 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_dead - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:286:24 [INFO] [stderr] | [INFO] [stderr] 286 | if p_dead == 1.0 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:287:24 [INFO] [stderr] | [INFO] [stderr] 287 | if p_play == 1.0 || p_play < 0.2 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_play - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:287:24 [INFO] [stderr] | [INFO] [stderr] 287 | if p_play == 1.0 || p_play < 0.2 { return false; } [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:313:20 [INFO] [stderr] | [INFO] [stderr] 313 | if p_dead == 1.0 { return false } [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider comparing them within some error: `(p_dead - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:313:20 [INFO] [stderr] | [INFO] [stderr] 313 | if p_dead == 1.0 { return false } [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:338:20 [INFO] [stderr] | [INFO] [stderr] 338 | questions: &Vec>, hand: &Cards, view: &OwnedGameView [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `&[Box]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:338:47 [INFO] [stderr] | [INFO] [stderr] 338 | questions: &Vec>, hand: &Cards, view: &OwnedGameView [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:351:24 [INFO] [stderr] | [INFO] [stderr] 351 | &self, player: &Player, total_info: u32, view: &OwnedGameView [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/strategies/information.rs:382:18 [INFO] [stderr] | [INFO] [stderr] 382 | let me = self.me.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.me` [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: The function/method `::get_questions` doesn't need a mutable reference [INFO] [stderr] --> src/strategies/information.rs:415:77 [INFO] [stderr] | [INFO] [stderr] 415 | let questions = Self::get_questions(hint.modulus, view, &mut hand_info); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:456:16 [INFO] [stderr] | [INFO] [stderr] 456 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(view.get_board()) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:456:16 [INFO] [stderr] | [INFO] [stderr] 456 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/strategies/information.rs:460:21 [INFO] [stderr] | [INFO] [stderr] 460 | / if seen.contains_key(&card) { [INFO] [stderr] 461 | | // found a duplicate card [INFO] [stderr] 462 | | useless.insert(i); [INFO] [stderr] 463 | | useless.insert(*seen.get(&card).unwrap()); [INFO] [stderr] 464 | | } else { [INFO] [stderr] 465 | | seen.insert(card, i); [INFO] [stderr] 466 | | } [INFO] [stderr] | |_____________________^ help: consider using: `seen.entry(card)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/strategies/information.rs:463:41 [INFO] [stderr] | [INFO] [stderr] 463 | useless.insert(*seen.get(&card).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&seen[&card]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:475:44 [INFO] [stderr] | [INFO] [stderr] 475 | fn take_public_info(&mut self, player: &Player) -> HandInfo { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/strategies/information.rs:479:46 [INFO] [stderr] | [INFO] [stderr] 479 | fn return_public_info(&mut self, player: &Player, card_info: HandInfo) { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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/strategies/information.rs:493:9 [INFO] [stderr] | [INFO] [stderr] 493 | self.public_info.get(player).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.public_info[player]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:500:69 [INFO] [stderr] | [INFO] [stderr] 500 | fn update_public_info_for_hint(&mut self, hint: &Hint, matches: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[bool]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:508:17 [INFO] [stderr] | [INFO] [stderr] 508 | player: &Player, [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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 seem to want to iterate on a map's values [INFO] [stderr] --> src/strategies/information.rs:541:30 [INFO] [stderr] | [INFO] [stderr] 541 | for (_, hand) in &view.other_hands { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 541 | for hand in view.other_hands.values() { [INFO] [stderr] | ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:551:12 [INFO] [stderr] | [INFO] [stderr] 551 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(view.get_board()) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:551:12 [INFO] [stderr] | [INFO] [stderr] 551 | if card_table.probability_is_dead(view.get_board()) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/strategies/information.rs:578:59 [INFO] [stderr] | [INFO] [stderr] 578 | fn hint_goodness(&self, hinted: &Hinted, hint_player: &Player, view: &OwnedGameView) -> f32 { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `Player` [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: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:593:16 [INFO] [stderr] | [INFO] [stderr] 593 | if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(&view.board) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:593:16 [INFO] [stderr] | [INFO] [stderr] 593 | if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/strategies/information.rs:613:78 [INFO] [stderr] | [INFO] [stderr] 613 | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ______________________________________________________________________________^ [INFO] [stderr] 614 | | 2 [INFO] [stderr] 615 | | } else { [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/strategies/information.rs:611:47 [INFO] [stderr] | [INFO] [stderr] 611 | if card_table.is_determined() { [INFO] [stderr] | _______________________________________________^ [INFO] [stderr] 612 | | 2 [INFO] [stderr] 613 | | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | |_________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:613:27 [INFO] [stderr] | [INFO] [stderr] 613 | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_dead(&view.board) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:613:27 [INFO] [stderr] | [INFO] [stderr] 613 | } else if card_table.probability_is_dead(&view.board) == 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/strategies/information.rs:650:9 [INFO] [stderr] | [INFO] [stderr] 650 | (0 .. n - 1).into_iter().map(|i| { (player + 1 + i) % n }).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `(0 .. n - 1)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:665:12 [INFO] [stderr] | [INFO] [stderr] 665 | if hint_options.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `hint_options.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/information.rs:694:48 [INFO] [stderr] | [INFO] [stderr] 694 | let total_info = info_per_player.iter().fold(0, |a, b| a + b); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/strategies/information.rs:780:56 [INFO] [stderr] | [INFO] [stderr] 780 | fn infer_from_hint(&mut self, hint: &Hint, result: &Vec) { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[bool]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/information.rs:786:48 [INFO] [stderr] | [INFO] [stderr] 786 | let total_info = info_per_player.iter().fold(0, |a, b| a + b); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/strategies/information.rs:792:85 [INFO] [stderr] | [INFO] [stderr] 792 | let amt_from_prev_players = info_per_player.iter().take(player_amt as usize).fold(0, |a, b| a + b); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:848:13 [INFO] [stderr] | [INFO] [stderr] 848 | card_table.probability_is_playable(&view.board) == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(card_table.probability_is_playable(&view.board) - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:848:13 [INFO] [stderr] | [INFO] [stderr] 848 | card_table.probability_is_playable(&view.board) == 1.0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:851:12 [INFO] [stderr] | [INFO] [stderr] 851 | if playable_cards.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!playable_cards.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/strategies/information.rs:880:17 [INFO] [stderr] | [INFO] [stderr] 880 | / card_table.probability_of_predicate(&|card| { [INFO] [stderr] 881 | | view.board.is_playable(card) || view.board.is_dead(card) [INFO] [stderr] 882 | | }) == 1.0 [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/strategies/information.rs:880:17 [INFO] [stderr] | [INFO] [stderr] 880 | / card_table.probability_of_predicate(&|card| { [INFO] [stderr] 881 | | view.board.is_playable(card) || view.board.is_dead(card) [INFO] [stderr] 882 | | }) == 1.0 [INFO] [stderr] | |_________________________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] help: consider comparing them within some error [INFO] [stderr] | [INFO] [stderr] 880 | (card_table.probability_of_predicate(&|card| { [INFO] [stderr] 881 | view.board.is_playable(card) || view.board.is_dead(card) [INFO] [stderr] 882 | }) - 1.0).abs() < error [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:888:16 [INFO] [stderr] | [INFO] [stderr] 888 | if risky_playable_cards.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!risky_playable_cards.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:908:23 [INFO] [stderr] | [INFO] [stderr] 908 | } else if useless_indices.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!useless_indices.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategies/information.rs:927:19 [INFO] [stderr] | [INFO] [stderr] 927 | } else if useless_indices.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!useless_indices.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/strategies/information.rs:958:17 [INFO] [stderr] | [INFO] [stderr] 958 | / if let &TurnResult::Hint(ref matches) = &turn_record.result { [INFO] [stderr] 959 | | self.infer_from_hint(hint, matches); [INFO] [stderr] 960 | | self.update_public_info_for_hint(hint, matches); [INFO] [stderr] 961 | | } else { [INFO] [stderr] 962 | | panic!("Got turn choice {:?}, but turn result {:?}", [INFO] [stderr] 963 | | turn_record.choice, turn_record.result); [INFO] [stderr] 964 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 958 | if let TurnResult::Hint(ref matches) = turn_record.result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/strategies/information.rs:980:17 [INFO] [stderr] | [INFO] [stderr] 980 | / if let &TurnResult::Discard(ref card) = &turn_record.result { [INFO] [stderr] 981 | | self.update_public_info_for_discard_or_play(view, &turn_record.player, index, card); [INFO] [stderr] 982 | | } else { [INFO] [stderr] 983 | | panic!("Got turn choice {:?}, but turn result {:?}", [INFO] [stderr] 984 | | turn_record.choice, turn_record.result); [INFO] [stderr] 985 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 980 | if let TurnResult::Discard(ref card) = turn_record.result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/strategies/information.rs:988:17 [INFO] [stderr] | [INFO] [stderr] 988 | / if let &TurnResult::Play(ref card, _) = &turn_record.result { [INFO] [stderr] 989 | | self.update_public_info_for_discard_or_play(view, &turn_record.player, index, card); [INFO] [stderr] 990 | | } else { [INFO] [stderr] 991 | | panic!("Got turn choice {:?}, but turn result {:?}", [INFO] [stderr] 992 | | turn_record.choice, turn_record.result); [INFO] [stderr] 993 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 988 | if let TurnResult::Play(ref card, _) = turn_record.result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:81:54 [INFO] [stderr] | [INFO] [stderr] 81 | let log_level_str : &str = &matches.opt_str("l").unwrap_or("info".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "info".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:99:49 [INFO] [stderr] | [INFO] [stderr] 99 | let n = u32::from_str(&matches.opt_str("n").unwrap_or("1".to_string())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "1".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:105:57 [INFO] [stderr] | [INFO] [stderr] 105 | let n_threads = u32::from_str(&matches.opt_str("t").unwrap_or("1".to_string())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "1".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:107:57 [INFO] [stderr] | [INFO] [stderr] 107 | let n_players = u32::from_str(&matches.opt_str("p").unwrap_or("4".to_string())).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "4".to_string())` [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:125:53 [INFO] [stderr] | [INFO] [stderr] 125 | let strategy_str : &str = &matches.opt_str("g").unwrap_or("cheat".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "cheat".to_string())` [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] error: aborting due to 11 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rust_hanabi`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "21802c10d906f126c48a8112c2c6859c1d6d491f25b5e8ebe055b51d658dfe22"` [INFO] running `"docker" "rm" "-f" "21802c10d906f126c48a8112c2c6859c1d6d491f25b5e8ebe055b51d658dfe22"` [INFO] [stdout] 21802c10d906f126c48a8112c2c6859c1d6d491f25b5e8ebe055b51d658dfe22