[INFO] fetching crate tic-tac-go 0.1.0... [INFO] linting tic-tac-go-0.1.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate tic-tac-go 0.1.0 into /workspace/builds/worker-7-tc1/source [INFO] started tweaking crates.io crate tic-tac-go 0.1.0 [INFO] finished tweaking crates.io crate tic-tac-go 0.1.0 [INFO] tweaked toml for crates.io crate tic-tac-go 0.1.0 written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate tic-tac-go 0.1.0 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate tic-tac-go 0.1.0 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded ratatui v0.20.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 9da4fa8168d3c7e766796525de453fb73e4262d62d2c5040ad9c19d25aac6b6d [INFO] running `Command { std: "docker" "start" "-a" "9da4fa8168d3c7e766796525de453fb73e4262d62d2c5040ad9c19d25aac6b6d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "9da4fa8168d3c7e766796525de453fb73e4262d62d2c5040ad9c19d25aac6b6d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9da4fa8168d3c7e766796525de453fb73e4262d62d2c5040ad9c19d25aac6b6d", kill_on_drop: false }` [INFO] [stdout] 9da4fa8168d3c7e766796525de453fb73e4262d62d2c5040ad9c19d25aac6b6d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c83de0d1a8a40fe5e3f5c75e39e123e38452bb6e08e6d0c4d80b834b6ca6847a [INFO] running `Command { std: "docker" "start" "-a" "c83de0d1a8a40fe5e3f5c75e39e123e38452bb6e08e6d0c4d80b834b6ca6847a", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.115 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Checking tokio v1.49.0 [INFO] [stderr] Checking ring v0.17.14 [INFO] [stderr] Checking futures-util v0.3.32 [INFO] [stderr] Compiling rustls v0.21.12 [INFO] [stderr] Checking http-body v0.4.6 [INFO] [stderr] Checking socket2 v0.5.10 [INFO] [stderr] Checking signal-hook v0.3.18 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking mio v0.8.11 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking crossterm v0.26.1 [INFO] [stderr] Checking ratatui v0.20.1 [INFO] [stderr] Checking rustls-webpki v0.101.7 [INFO] [stderr] Checking sct v0.7.1 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Checking tokio-rustls v0.24.1 [INFO] [stderr] Checking h2 v0.3.27 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking hyper v0.14.32 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking hyper-rustls v0.24.2 [INFO] [stderr] Checking hyper-tls v0.5.0 [INFO] [stderr] Checking reqwest v0.11.27 [INFO] [stderr] Checking tic-tac-go v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `download` and `list_puzzles` [INFO] [stdout] --> src/browser.rs:13:46 [INFO] [stdout] | [INFO] [stdout] 13 | use crate::{board::Board, database::{upload, download, list_puzzles}}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `download` and `list_puzzles` [INFO] [stdout] --> src/browser.rs:13:46 [INFO] [stdout] | [INFO] [stdout] 13 | use crate::{board::Board, database::{upload, download, list_puzzles}}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/board.rs:51:26 [INFO] [stdout] | [INFO] [stdout] 51 | let to_rc = |mut idx: usize| -> (usize, usize) { [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/browser.rs:85:21 [INFO] [stdout] | [INFO] [stdout] 85 | let mut it = nums.chunks(2); [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `from_flat` [INFO] [stdout] --> src/game.rs:618:9 [INFO] [stdout] | [INFO] [stdout] 618 | let from_flat = |idx: usize| board.from_flat(idx); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_from_flat` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Step` is never used [INFO] [stdout] --> src/solver.rs:3:6 [INFO] [stdout] | [INFO] [stdout] 3 | enum Step { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `solve_puzzle` is never used [INFO] [stdout] --> src/solver.rs:10:8 [INFO] [stdout] | [INFO] [stdout] 10 | pub fn solve_puzzle(puzzle: Board) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `from_*` usually take no `self` [INFO] [stdout] --> src/board.rs:214:22 [INFO] [stdout] | [INFO] [stdout] 214 | pub fn from_flat(&self, idx: usize) -> (usize, usize) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | / if i > start { [INFO] [stdout] 37 | | if let Ok(n) = s[start..i].parse::() { [INFO] [stdout] 38 | | return Some(n); [INFO] [stdout] 39 | | } [INFO] [stdout] 40 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 36 ~ if i > start [INFO] [stdout] 37 ~ && let Ok(n) = s[start..i].parse::() { [INFO] [stdout] 38 | return Some(n); [INFO] [stdout] 39 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `bytes` [INFO] [stdout] --> src/browser.rs:54:22 [INFO] [stdout] | [INFO] [stdout] 54 | for i in start..bytes.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 54 - for i in start..bytes.len() { [INFO] [stdout] 54 + for (i, ) in bytes.iter().enumerate().skip(start) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | / if let Some(pos) = s.find(key) { [INFO] [stdout] 99 | | if let Some(rel) = s[pos..].find('[') { [INFO] [stdout] 100 | | let start = pos + rel; [INFO] [stdout] 101 | | let bytes = s.as_bytes(); [INFO] [stdout] ... | [INFO] [stdout] 124 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 98 ~ if let Some(pos) = s.find(key) [INFO] [stdout] 99 ~ && let Some(rel) = s[pos..].find('[') { [INFO] [stdout] 100 | let start = pos + rel; [INFO] [stdout] ... [INFO] [stdout] 122 | } [INFO] [stdout] 123 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `bytes` [INFO] [stdout] --> src/browser.rs:104:22 [INFO] [stdout] | [INFO] [stdout] 104 | for i in start..bytes.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 104 - for i in start..bytes.len() { [INFO] [stdout] 104 + for in bytes.iter().skip(start) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/browser.rs:167:6 [INFO] [stdout] | [INFO] [stdout] 167 | ) -> Result< [INFO] [stdout] | ______^ [INFO] [stdout] 168 | | ( [INFO] [stdout] 169 | | Board, [INFO] [stdout] 170 | | Vec<(usize, usize)>, [INFO] [stdout] ... | [INFO] [stdout] 176 | | Box, [INFO] [stdout] 177 | | > { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/browser.rs:368:37 [INFO] [stdout] | [INFO] [stdout] 368 | ... None => format!("{}", p.0), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `p.0.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/browser.rs:398:17 [INFO] [stdout] | [INFO] [stdout] 398 | / let mut modal_lines: Vec = Vec::new(); [INFO] [stdout] 399 | | modal_lines.push(Spans::from(Span::styled( [INFO] [stdout] 400 | | " Rename puzzle ", [INFO] [stdout] 401 | | Style::default().add_modifier(Modifier::BOLD), [INFO] [stdout] ... | [INFO] [stdout] 405 | | modal_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 406 | | modal_lines.push(Spans::from(Span::raw("Enter = confirm, Esc = cancel"))); [INFO] [stdout] | |__________________________________________________________________________________________^ help: consider using the `vec![]` macro: `let modal_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] = note: `#[warn(clippy::vec_init_then_push)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:470:9 [INFO] [stdout] | [INFO] [stdout] 470 | / if event::poll(Duration::from_millis(150))? { [INFO] [stdout] 471 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 472 | | // Prioritize rename confirm -> rename input -> error popup -> normal handlers [INFO] [stdout] 473 | | if rename_confirm_prompt.is_some() { [INFO] [stdout] ... | [INFO] [stdout] 791 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 470 ~ if event::poll(Duration::from_millis(150))? [INFO] [stdout] 471 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 472 | // Prioritize rename confirm -> rename input -> error popup -> normal handlers [INFO] [stdout] ... [INFO] [stdout] 789 | } [INFO] [stdout] 790 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:479:33 [INFO] [stdout] | [INFO] [stdout] 479 | / ... if new_path.exists() { [INFO] [stdout] 480 | | ... if let Err(e) = fs::remove_file(&new_path) { [INFO] [stdout] 481 | | ... error_popup = Some(format!("Failed to remove existing {}: {}", desired_name, e)); [INFO] [stdout] 482 | | ... continue; [INFO] [stdout] 483 | | ... } [INFO] [stdout] 484 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 479 ~ if new_path.exists() [INFO] [stdout] 480 ~ && let Err(e) = fs::remove_file(&new_path) { [INFO] [stdout] 481 | error_popup = Some(format!("Failed to remove existing {}: {}", desired_name, e)); [INFO] [stdout] 482 | continue; [INFO] [stdout] 483 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/browser.rs:609:29 [INFO] [stdout] | [INFO] [stdout] 609 | / ... if remote_mode { [INFO] [stdout] 610 | | ... fetching_remote = true; [INFO] [stdout] 611 | | ... let tx = list_tx.clone(); [INFO] [stdout] 612 | | ... thread::spawn(move || { [INFO] [stdout] ... | [INFO] [stdout] 618 | | ... status_msg = Some("Refreshing remote list".to_string()); [INFO] [stdout] 619 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 608 ~ KeyCode::Char('g') [INFO] [stdout] 609 ~ if remote_mode => { [INFO] [stdout] 610 | fetching_remote = true; [INFO] [stdout] ... [INFO] [stdout] 618 | status_msg = Some("Refreshing remote list".to_string()); [INFO] [stdout] 619 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/browser.rs:668:29 [INFO] [stdout] | [INFO] [stdout] 668 | / ... if !puzzles.is_empty() { [INFO] [stdout] 669 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 670 | | ... rename_mode = true; [INFO] [stdout] 671 | | ... rename_input = p.file_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 675 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 667 ~ KeyCode::Char('r') if !remote_mode [INFO] [stdout] 668 ~ && !puzzles.is_empty() => { [INFO] [stdout] 669 | if let Some(p) = puzzles.get(selected) { [INFO] [stdout] ... [INFO] [stdout] 674 | } [INFO] [stdout] 675 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/browser.rs:678:29 [INFO] [stdout] | [INFO] [stdout] 678 | / ... if !puzzles.is_empty() { [INFO] [stdout] 679 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 680 | | ... let file_name = p.file_name.clone(); [INFO] [stdout] 681 | | ... let path = p.path.clone(); [INFO] [stdout] ... | [INFO] [stdout] 697 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 677 ~ KeyCode::Char('d') if !remote_mode [INFO] [stdout] 678 ~ && !puzzles.is_empty() => { [INFO] [stdout] 679 | if let Some(p) = puzzles.get(selected) { [INFO] [stdout] ... [INFO] [stdout] 696 | } [INFO] [stdout] 697 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/browser.rs:640:77 [INFO] [stdout] | [INFO] [stdout] 640 | ... let _ = std::fs::create_dir_all(&dir); [INFO] [stdout] | ^^^^ help: change this to: `dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:668:29 [INFO] [stdout] | [INFO] [stdout] 668 | / ... if !puzzles.is_empty() { [INFO] [stdout] 669 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 670 | | ... rename_mode = true; [INFO] [stdout] 671 | | ... rename_input = p.file_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 675 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 668 ~ if !puzzles.is_empty() [INFO] [stdout] 669 ~ && let Some(p) = puzzles.get(selected) { [INFO] [stdout] 670 | rename_mode = true; [INFO] [stdout] ... [INFO] [stdout] 673 | status_msg = Some("Rename: edit name and press Enter to confirm".to_string()); [INFO] [stdout] 674 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:678:29 [INFO] [stdout] | [INFO] [stdout] 678 | / ... if !puzzles.is_empty() { [INFO] [stdout] 679 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 680 | | ... let file_name = p.file_name.clone(); [INFO] [stdout] 681 | | ... let path = p.path.clone(); [INFO] [stdout] ... | [INFO] [stdout] 697 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 678 ~ if !puzzles.is_empty() [INFO] [stdout] 679 ~ && let Some(p) = puzzles.get(selected) { [INFO] [stdout] 680 | let file_name = p.file_name.clone(); [INFO] [stdout] ... [INFO] [stdout] 695 | } [INFO] [stdout] 696 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/browser.rs:701:33 [INFO] [stdout] | [INFO] [stdout] 701 | / ... if selected_remote > 0 { [INFO] [stdout] 702 | | ... selected_remote -= 1; [INFO] [stdout] 703 | | ... } [INFO] [stdout] | |_______________________^ help: try: `selected_remote = selected_remote.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/browser.rs:705:33 [INFO] [stdout] | [INFO] [stdout] 705 | / ... if selected > 0 { [INFO] [stdout] 706 | | ... selected -= 1; [INFO] [stdout] 707 | | ... } [INFO] [stdout] | |_______________________^ help: try: `selected = selected.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:722:29 [INFO] [stdout] | [INFO] [stdout] 722 | / ... if !puzzles.is_empty() { [INFO] [stdout] 723 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 724 | | ... match load_puzzle_board(&p.path) { [INFO] [stdout] 725 | | ... Ok(( [INFO] [stdout] ... | [INFO] [stdout] 753 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 722 ~ if !puzzles.is_empty() [INFO] [stdout] 723 ~ && let Some(p) = puzzles.get(selected) { [INFO] [stdout] 724 | match load_puzzle_board(&p.path) { [INFO] [stdout] ... [INFO] [stdout] 751 | } [INFO] [stdout] 752 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/browser.rs:740:72 [INFO] [stdout] | [INFO] [stdout] 740 | ... if !circles.is_empty() { 0usize } else { 0usize } [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/browser.rs:740:88 [INFO] [stdout] | [INFO] [stdout] 740 | ... if !circles.is_empty() { 0usize } else { 0usize } [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | / if let Some(k) = option_env!("SUPABASE_ANON_KEY") { [INFO] [stdout] 20 | | if !k.is_empty() { [INFO] [stdout] 21 | | return Some(k.to_string()); [INFO] [stdout] 22 | | } [INFO] [stdout] 23 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 19 ~ if let Some(k) = option_env!("SUPABASE_ANON_KEY") [INFO] [stdout] 20 ~ && !k.is_empty() { [INFO] [stdout] 21 | return Some(k.to_string()); [INFO] [stdout] 22 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | / if let Some(k) = option_env!("SUPABASE_URL") { [INFO] [stdout] 33 | | if !k.is_empty() { [INFO] [stdout] 34 | | return Some(k.to_string()); [INFO] [stdout] 35 | | } [INFO] [stdout] 36 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 32 ~ if let Some(k) = option_env!("SUPABASE_URL") [INFO] [stdout] 33 ~ && !k.is_empty() { [INFO] [stdout] 34 | return Some(k.to_string()); [INFO] [stdout] 35 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:83:9 [INFO] [stdout] | [INFO] [stdout] 83 | / if let Some(first) = arr.get(0) { [INFO] [stdout] 84 | | if let Some(id) = first.get("id") { [INFO] [stdout] 85 | | return Ok(id.to_string()); [INFO] [stdout] 86 | | } [INFO] [stdout] 87 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 83 ~ if let Some(first) = arr.get(0) [INFO] [stdout] 84 ~ && let Some(id) = first.get("id") { [INFO] [stdout] 85 | return Ok(id.to_string()); [INFO] [stdout] 86 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/database.rs:95:26 [INFO] [stdout] | [INFO] [stdout] 95 | pub fn list_puzzles() -> Result)>, Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:172:13 [INFO] [stdout] | [INFO] [stdout] 172 | / if let Some(first) = arr.get(0) { [INFO] [stdout] 173 | | if let Some(content) = first.get("content") { [INFO] [stdout] 174 | | return Ok(content.to_string()); [INFO] [stdout] 175 | | } [INFO] [stdout] 176 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 172 ~ if let Some(first) = arr.get(0) [INFO] [stdout] 173 ~ && let Some(content) = first.get("content") { [INFO] [stdout] 174 | return Ok(content.to_string()); [INFO] [stdout] 175 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `options` [INFO] [stdout] --> src/game.rs:50:22 [INFO] [stdout] | [INFO] [stdout] 50 | for i in 0..options.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 50 - for i in 0..options.len() { [INFO] [stdout] 50 + for (i, ) in options.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/game.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | / if event::poll(Duration::from_millis(150))? { [INFO] [stdout] 81 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 82 | | match key.code { [INFO] [stdout] 83 | | KeyCode::Char('q') | KeyCode::Esc => return Err("user quit".into()), [INFO] [stdout] ... | [INFO] [stdout] 120 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 80 ~ if event::poll(Duration::from_millis(150))? [INFO] [stdout] 81 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 82 | match key.code { [INFO] [stdout] ... [INFO] [stdout] 118 | } [INFO] [stdout] 119 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:85:25 [INFO] [stdout] | [INFO] [stdout] 85 | / if selection > 0 { [INFO] [stdout] 86 | | selection -= 1; [INFO] [stdout] 87 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 84 ~ KeyCode::Up [INFO] [stdout] 85 ~ if selection > 0 => { [INFO] [stdout] 86 | selection -= 1; [INFO] [stdout] 87 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:90:25 [INFO] [stdout] | [INFO] [stdout] 90 | / if selection < options.len() - 1 { [INFO] [stdout] 91 | | selection += 1; [INFO] [stdout] 92 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 89 ~ KeyCode::Down [INFO] [stdout] 90 ~ if selection < options.len() - 1 => { [INFO] [stdout] 91 | selection += 1; [INFO] [stdout] 92 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:95:25 [INFO] [stdout] | [INFO] [stdout] 95 | / if selection > 0 { [INFO] [stdout] 96 | | selection -= 1; [INFO] [stdout] 97 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 94 ~ KeyCode::Char('w') [INFO] [stdout] 95 ~ if selection > 0 => { [INFO] [stdout] 96 | selection -= 1; [INFO] [stdout] 97 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:100:25 [INFO] [stdout] | [INFO] [stdout] 100 | / if selection < options.len() - 1 { [INFO] [stdout] 101 | | selection += 1; [INFO] [stdout] 102 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 99 ~ KeyCode::Char('s') [INFO] [stdout] 100 ~ if selection < options.len() - 1 => { [INFO] [stdout] 101 | selection += 1; [INFO] [stdout] 102 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:85:25 [INFO] [stdout] | [INFO] [stdout] 85 | / if selection > 0 { [INFO] [stdout] 86 | | selection -= 1; [INFO] [stdout] 87 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:95:25 [INFO] [stdout] | [INFO] [stdout] 95 | / if selection > 0 { [INFO] [stdout] 96 | | selection -= 1; [INFO] [stdout] 97 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/game.rs:180:9 [INFO] [stdout] | [INFO] [stdout] 180 | / if event::poll(Duration::from_millis(150))? { [INFO] [stdout] 181 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 182 | | match key.code { [INFO] [stdout] 183 | | KeyCode::Char('q') | KeyCode::Esc => return Err("user quit".into()), [INFO] [stdout] ... | [INFO] [stdout] 211 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 180 ~ if event::poll(Duration::from_millis(150))? [INFO] [stdout] 181 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 182 | match key.code { [INFO] [stdout] ... [INFO] [stdout] 209 | } [INFO] [stdout] 210 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:185:25 [INFO] [stdout] | [INFO] [stdout] 185 | / if selection > 0 { [INFO] [stdout] 186 | | selection -= 1; [INFO] [stdout] 187 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 184 ~ KeyCode::Up [INFO] [stdout] 185 ~ if selection > 0 => { [INFO] [stdout] 186 | selection -= 1; [INFO] [stdout] 187 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:190:25 [INFO] [stdout] | [INFO] [stdout] 190 | / if selection < 2 { [INFO] [stdout] 191 | | selection += 1; [INFO] [stdout] 192 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 189 ~ KeyCode::Down [INFO] [stdout] 190 ~ if selection < 2 => { [INFO] [stdout] 191 | selection += 1; [INFO] [stdout] 192 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:195:25 [INFO] [stdout] | [INFO] [stdout] 195 | / if selection > 0 { [INFO] [stdout] 196 | | selection -= 1; [INFO] [stdout] 197 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 194 ~ KeyCode::Char('w') [INFO] [stdout] 195 ~ if selection > 0 => { [INFO] [stdout] 196 | selection -= 1; [INFO] [stdout] 197 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:200:25 [INFO] [stdout] | [INFO] [stdout] 200 | / if selection < 2 { [INFO] [stdout] 201 | | selection += 1; [INFO] [stdout] 202 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 199 ~ KeyCode::Char('s') [INFO] [stdout] 200 ~ if selection < 2 => { [INFO] [stdout] 201 | selection += 1; [INFO] [stdout] 202 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:185:25 [INFO] [stdout] | [INFO] [stdout] 185 | / if selection > 0 { [INFO] [stdout] 186 | | selection -= 1; [INFO] [stdout] 187 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:195:25 [INFO] [stdout] | [INFO] [stdout] 195 | / if selection > 0 { [INFO] [stdout] 196 | | selection -= 1; [INFO] [stdout] 197 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `r` is used to index `row_widths` [INFO] [stdout] --> src/game.rs:252:26 [INFO] [stdout] | [INFO] [stdout] 252 | 'outer: for r in 0..rows { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 252 - 'outer: for r in 0..rows { [INFO] [stdout] 252 + 'outer: for (r, ) in row_widths.iter().enumerate().take(rows) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/game.rs:344:28 [INFO] [stdout] | [INFO] [stdout] 344 | if let Some(_) = crosses.iter().position(|&(rr, cc)| rr == row && cc == col) { [INFO] [stdout] | -------^^^^^^^-------------------------------------------------------------- help: try: `if crosses.iter().position(|&(rr, cc)| rr == row && cc == col).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:414:17 [INFO] [stdout] | [INFO] [stdout] 414 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 415 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 416 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 417 | | " YOU WON! ", [INFO] [stdout] ... | [INFO] [stdout] 426 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 427 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:454:17 [INFO] [stdout] | [INFO] [stdout] 454 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 455 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 456 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 457 | | " YOU LOST! three crosses aligned ", [INFO] [stdout] ... | [INFO] [stdout] 466 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 467 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:544:25 [INFO] [stdout] | [INFO] [stdout] 544 | / if !won && !lost { [INFO] [stdout] 545 | | movement::attempt_move_runtime( [INFO] [stdout] 546 | | &mut circles, [INFO] [stdout] 547 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 553 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 543 ~ KeyCode::Up [INFO] [stdout] 544 ~ if !won && !lost => { [INFO] [stdout] 545 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 552 | ) [INFO] [stdout] 553 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:556:25 [INFO] [stdout] | [INFO] [stdout] 556 | / if !won && !lost { [INFO] [stdout] 557 | | movement::attempt_move_runtime( [INFO] [stdout] 558 | | &mut circles, [INFO] [stdout] 559 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 565 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 555 ~ KeyCode::Left [INFO] [stdout] 556 ~ if !won && !lost => { [INFO] [stdout] 557 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 564 | ) [INFO] [stdout] 565 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:568:25 [INFO] [stdout] | [INFO] [stdout] 568 | / if !won && !lost { [INFO] [stdout] 569 | | movement::attempt_move_runtime( [INFO] [stdout] 570 | | &mut circles, [INFO] [stdout] 571 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 577 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 567 ~ KeyCode::Down [INFO] [stdout] 568 ~ if !won && !lost => { [INFO] [stdout] 569 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 576 | ) [INFO] [stdout] 577 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:580:25 [INFO] [stdout] | [INFO] [stdout] 580 | / if !won && !lost { [INFO] [stdout] 581 | | movement::attempt_move_runtime( [INFO] [stdout] 582 | | &mut circles, [INFO] [stdout] 583 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 589 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 579 ~ KeyCode::Right [INFO] [stdout] 580 ~ if !won && !lost => { [INFO] [stdout] 581 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 588 | ) [INFO] [stdout] 589 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:494:29 [INFO] [stdout] | [INFO] [stdout] 494 | / ... if !won && !lost { [INFO] [stdout] 495 | | ... movement::attempt_move_runtime( [INFO] [stdout] 496 | | ... &mut circles, [INFO] [stdout] 497 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 503 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 493 ~ 'w' [INFO] [stdout] 494 ~ if !won && !lost => { [INFO] [stdout] 495 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 502 | ) [INFO] [stdout] 503 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:506:29 [INFO] [stdout] | [INFO] [stdout] 506 | / ... if !won && !lost { [INFO] [stdout] 507 | | ... movement::attempt_move_runtime( [INFO] [stdout] 508 | | ... &mut circles, [INFO] [stdout] 509 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 515 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 505 ~ 'a' [INFO] [stdout] 506 ~ if !won && !lost => { [INFO] [stdout] 507 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 514 | ) [INFO] [stdout] 515 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:518:29 [INFO] [stdout] | [INFO] [stdout] 518 | / ... if !won && !lost { [INFO] [stdout] 519 | | ... movement::attempt_move_runtime( [INFO] [stdout] 520 | | ... &mut circles, [INFO] [stdout] 521 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 527 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 517 ~ 's' [INFO] [stdout] 518 ~ if !won && !lost => { [INFO] [stdout] 519 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 526 | ) [INFO] [stdout] 527 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:530:29 [INFO] [stdout] | [INFO] [stdout] 530 | / ... if !won && !lost { [INFO] [stdout] 531 | | ... movement::attempt_move_runtime( [INFO] [stdout] 532 | | ... &mut circles, [INFO] [stdout] 533 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 539 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 529 ~ 'd' [INFO] [stdout] 530 ~ if !won && !lost => { [INFO] [stdout] 531 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 538 | ) [INFO] [stdout] 539 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/game.rs:703:28 [INFO] [stdout] | [INFO] [stdout] 703 | if let Some(_) = crosses.iter().position(|&(rr, cc)| rr == row && cc == col) { [INFO] [stdout] | -------^^^^^^^-------------------------------------------------------------- help: try: `if crosses.iter().position(|&(rr, cc)| rr == row && cc == col).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:758:17 [INFO] [stdout] | [INFO] [stdout] 758 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 759 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 760 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 761 | | " YOU WON! ", [INFO] [stdout] ... | [INFO] [stdout] 770 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 771 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:798:17 [INFO] [stdout] | [INFO] [stdout] 798 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 799 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 800 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 801 | | " YOU LOST! three crosses aligned ", [INFO] [stdout] ... | [INFO] [stdout] 810 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 811 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:888:25 [INFO] [stdout] | [INFO] [stdout] 888 | / if !won && !lost { [INFO] [stdout] 889 | | movement::attempt_move_runtime( [INFO] [stdout] 890 | | &mut circles, [INFO] [stdout] 891 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 897 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 887 ~ KeyCode::Up [INFO] [stdout] 888 ~ if !won && !lost => { [INFO] [stdout] 889 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 896 | ) [INFO] [stdout] 897 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:900:25 [INFO] [stdout] | [INFO] [stdout] 900 | / if !won && !lost { [INFO] [stdout] 901 | | movement::attempt_move_runtime( [INFO] [stdout] 902 | | &mut circles, [INFO] [stdout] 903 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 909 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 899 ~ KeyCode::Left [INFO] [stdout] 900 ~ if !won && !lost => { [INFO] [stdout] 901 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 908 | ) [INFO] [stdout] 909 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:912:25 [INFO] [stdout] | [INFO] [stdout] 912 | / if !won && !lost { [INFO] [stdout] 913 | | movement::attempt_move_runtime( [INFO] [stdout] 914 | | &mut circles, [INFO] [stdout] 915 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 921 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 911 ~ KeyCode::Down [INFO] [stdout] 912 ~ if !won && !lost => { [INFO] [stdout] 913 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 920 | ) [INFO] [stdout] 921 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:924:25 [INFO] [stdout] | [INFO] [stdout] 924 | / if !won && !lost { [INFO] [stdout] 925 | | movement::attempt_move_runtime( [INFO] [stdout] 926 | | &mut circles, [INFO] [stdout] 927 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 933 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 923 ~ KeyCode::Right [INFO] [stdout] 924 ~ if !won && !lost => { [INFO] [stdout] 925 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 932 | ) [INFO] [stdout] 933 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:838:29 [INFO] [stdout] | [INFO] [stdout] 838 | / ... if !won && !lost { [INFO] [stdout] 839 | | ... movement::attempt_move_runtime( [INFO] [stdout] 840 | | ... &mut circles, [INFO] [stdout] 841 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 847 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 837 ~ 'w' [INFO] [stdout] 838 ~ if !won && !lost => { [INFO] [stdout] 839 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 846 | ) [INFO] [stdout] 847 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:850:29 [INFO] [stdout] | [INFO] [stdout] 850 | / ... if !won && !lost { [INFO] [stdout] 851 | | ... movement::attempt_move_runtime( [INFO] [stdout] 852 | | ... &mut circles, [INFO] [stdout] 853 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 859 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 849 ~ 'a' [INFO] [stdout] 850 ~ if !won && !lost => { [INFO] [stdout] 851 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 858 | ) [INFO] [stdout] 859 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:862:29 [INFO] [stdout] | [INFO] [stdout] 862 | / ... if !won && !lost { [INFO] [stdout] 863 | | ... movement::attempt_move_runtime( [INFO] [stdout] 864 | | ... &mut circles, [INFO] [stdout] 865 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 871 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 861 ~ 's' [INFO] [stdout] 862 ~ if !won && !lost => { [INFO] [stdout] 863 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 870 | ) [INFO] [stdout] 871 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:874:29 [INFO] [stdout] | [INFO] [stdout] 874 | / ... if !won && !lost { [INFO] [stdout] 875 | | ... movement::attempt_move_runtime( [INFO] [stdout] 876 | | ... &mut circles, [INFO] [stdout] 877 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 883 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 873 ~ 'd' [INFO] [stdout] 874 ~ if !won && !lost => { [INFO] [stdout] 875 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 882 | ) [INFO] [stdout] 883 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/generator.rs:151:6 [INFO] [stdout] | [INFO] [stdout] 151 | ) -> (Vec<(usize, usize)>, Vec<(usize, usize)>, usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/generator.rs:159:20 [INFO] [stdout] | [INFO] [stdout] 159 | let mut queue: VecDeque<(Vec<(usize, usize)>, Vec<(usize, usize)>, usize)> = VecDeque::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/generator.rs:166:30 [INFO] [stdout] | [INFO] [stdout] 166 | let mut best_candidates: Vec<(Vec<(usize, usize)>, Vec<(usize, usize)>, usize)> = Vec::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/puzzle_editor.rs:146:17 [INFO] [stdout] | [INFO] [stdout] 146 | / let mut err_lines: Vec = Vec::new(); [INFO] [stdout] 147 | | err_lines.push(Spans::from(Span::styled( [INFO] [stdout] 148 | | " Error ", [INFO] [stdout] 149 | | Style::default().fg(Color::Red).add_modifier(Modifier::BOLD), [INFO] [stdout] ... | [INFO] [stdout] 153 | | err_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 154 | | err_lines.push(Spans::from(Span::raw("Press any key to continue"))); [INFO] [stdout] | |____________________________________________________________________________________^ help: consider using the `vec![]` macro: `let err_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/puzzle_editor.rs:169:17 [INFO] [stdout] | [INFO] [stdout] 169 | / let mut ok_lines: Vec = Vec::new(); [INFO] [stdout] 170 | | ok_lines.push(Spans::from(Span::styled( [INFO] [stdout] 171 | | " Saved ", [INFO] [stdout] 172 | | Style::default().fg(Color::Green).add_modifier(Modifier::BOLD), [INFO] [stdout] ... | [INFO] [stdout] 176 | | ok_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 177 | | ok_lines.push(Spans::from(Span::raw("Press any key to return to home screen"))); [INFO] [stdout] | |________________________________________________________________________________________________^ help: consider using the `vec![]` macro: `let ok_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/puzzle_editor.rs:220:25 [INFO] [stdout] | [INFO] [stdout] 220 | / if let Some(&pos) = cursor.get(0) { [INFO] [stdout] 221 | | if let Some(idx) = removed.iter().position(|&p| p == pos) { [INFO] [stdout] 222 | | removed.remove(idx); [INFO] [stdout] 223 | | } [INFO] [stdout] 224 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 220 ~ if let Some(&pos) = cursor.get(0) [INFO] [stdout] 221 ~ && let Some(idx) = removed.iter().position(|&p| p == pos) { [INFO] [stdout] 222 | removed.remove(idx); [INFO] [stdout] 223 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cursor.get(0)` [INFO] [stdout] --> src/puzzle_editor.rs:220:45 [INFO] [stdout] | [INFO] [stdout] 220 | if let Some(&pos) = cursor.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `cursor.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/puzzle_editor.rs:574:5 [INFO] [stdout] | [INFO] [stdout] 574 | / if let Some((r, c)) = *player { [INFO] [stdout] 575 | | if r >= rows || c >= cols { [INFO] [stdout] 576 | | *player = None; [INFO] [stdout] 577 | | } [INFO] [stdout] 578 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 574 ~ if let Some((r, c)) = *player [INFO] [stdout] 575 ~ && (r >= rows || c >= cols) { [INFO] [stdout] 576 | *player = None; [INFO] [stdout] 577 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:116:12 [INFO] [stdout] | [INFO] [stdout] 116 | if (up_missing && left_missing) [INFO] [stdout] | ____________^ [INFO] [stdout] 117 | | || (up_missing && right_missing) [INFO] [stdout] 118 | | || (down_missing && left_missing) [INFO] [stdout] 119 | | || (down_missing && right_missing) [INFO] [stdout] | |______________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 118 - || (down_missing && left_missing) [INFO] [stdout] 119 - || (down_missing && right_missing) [INFO] [stdout] 116 + if !(!left_missing && !right_missing || !up_missing && !down_missing) [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 118 - || (down_missing && left_missing) [INFO] [stdout] 119 - || (down_missing && right_missing) [INFO] [stdout] 116 + if (down_missing || up_missing) && (right_missing || left_missing) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:116:12 [INFO] [stdout] | [INFO] [stdout] 116 | if (up_missing && left_missing) [INFO] [stdout] | ____________^ [INFO] [stdout] 117 | | || (up_missing && right_missing) [INFO] [stdout] | |____________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 116 + if !(!up_missing || !left_missing && !right_missing) [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 116 + if (right_missing || left_missing) && up_missing [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 130 | if (up_blocked && left_blocked) [INFO] [stdout] | ____________^ [INFO] [stdout] 131 | | || (up_blocked && right_blocked) [INFO] [stdout] 132 | | || (down_blocked && left_blocked) [INFO] [stdout] 133 | | || (down_blocked && right_blocked) [INFO] [stdout] | |______________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 132 - || (down_blocked && left_blocked) [INFO] [stdout] 133 - || (down_blocked && right_blocked) [INFO] [stdout] 130 + if !(!left_blocked && !right_blocked || !up_blocked && !down_blocked) [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 132 - || (down_blocked && left_blocked) [INFO] [stdout] 133 - || (down_blocked && right_blocked) [INFO] [stdout] 130 + if (down_blocked || up_blocked) && (right_blocked || left_blocked) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 130 | if (up_blocked && left_blocked) [INFO] [stdout] | ____________^ [INFO] [stdout] 131 | | || (up_blocked && right_blocked) [INFO] [stdout] | |____________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 130 + if !(!up_blocked || !left_blocked && !right_blocked) [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 130 + if (right_blocked || left_blocked) && up_blocked [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/board.rs:51:26 [INFO] [stdout] | [INFO] [stdout] 51 | let to_rc = |mut idx: usize| -> (usize, usize) { [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/browser.rs:85:21 [INFO] [stdout] | [INFO] [stdout] 85 | let mut it = nums.chunks(2); [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `from_flat` [INFO] [stdout] --> src/game.rs:618:9 [INFO] [stdout] | [INFO] [stdout] 618 | let from_flat = |idx: usize| board.from_flat(idx); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_from_flat` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Step` is never used [INFO] [stdout] --> src/solver.rs:3:6 [INFO] [stdout] | [INFO] [stdout] 3 | enum Step { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `solve_puzzle` is never used [INFO] [stdout] --> src/solver.rs:10:8 [INFO] [stdout] | [INFO] [stdout] 10 | pub fn solve_puzzle(puzzle: Board) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `from_*` usually take no `self` [INFO] [stdout] --> src/board.rs:214:22 [INFO] [stdout] | [INFO] [stdout] 214 | pub fn from_flat(&self, idx: usize) -> (usize, usize) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | / if i > start { [INFO] [stdout] 37 | | if let Ok(n) = s[start..i].parse::() { [INFO] [stdout] 38 | | return Some(n); [INFO] [stdout] 39 | | } [INFO] [stdout] 40 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 36 ~ if i > start [INFO] [stdout] 37 ~ && let Ok(n) = s[start..i].parse::() { [INFO] [stdout] 38 | return Some(n); [INFO] [stdout] 39 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `bytes` [INFO] [stdout] --> src/browser.rs:54:22 [INFO] [stdout] | [INFO] [stdout] 54 | for i in start..bytes.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 54 - for i in start..bytes.len() { [INFO] [stdout] 54 + for (i, ) in bytes.iter().enumerate().skip(start) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | / if let Some(pos) = s.find(key) { [INFO] [stdout] 99 | | if let Some(rel) = s[pos..].find('[') { [INFO] [stdout] 100 | | let start = pos + rel; [INFO] [stdout] 101 | | let bytes = s.as_bytes(); [INFO] [stdout] ... | [INFO] [stdout] 124 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 98 ~ if let Some(pos) = s.find(key) [INFO] [stdout] 99 ~ && let Some(rel) = s[pos..].find('[') { [INFO] [stdout] 100 | let start = pos + rel; [INFO] [stdout] ... [INFO] [stdout] 122 | } [INFO] [stdout] 123 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `bytes` [INFO] [stdout] --> src/browser.rs:104:22 [INFO] [stdout] | [INFO] [stdout] 104 | for i in start..bytes.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 104 - for i in start..bytes.len() { [INFO] [stdout] 104 + for in bytes.iter().skip(start) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/browser.rs:167:6 [INFO] [stdout] | [INFO] [stdout] 167 | ) -> Result< [INFO] [stdout] | ______^ [INFO] [stdout] 168 | | ( [INFO] [stdout] 169 | | Board, [INFO] [stdout] 170 | | Vec<(usize, usize)>, [INFO] [stdout] ... | [INFO] [stdout] 176 | | Box, [INFO] [stdout] 177 | | > { [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/browser.rs:368:37 [INFO] [stdout] | [INFO] [stdout] 368 | ... None => format!("{}", p.0), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `p.0.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/browser.rs:398:17 [INFO] [stdout] | [INFO] [stdout] 398 | / let mut modal_lines: Vec = Vec::new(); [INFO] [stdout] 399 | | modal_lines.push(Spans::from(Span::styled( [INFO] [stdout] 400 | | " Rename puzzle ", [INFO] [stdout] 401 | | Style::default().add_modifier(Modifier::BOLD), [INFO] [stdout] ... | [INFO] [stdout] 405 | | modal_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 406 | | modal_lines.push(Spans::from(Span::raw("Enter = confirm, Esc = cancel"))); [INFO] [stdout] | |__________________________________________________________________________________________^ help: consider using the `vec![]` macro: `let modal_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] = note: `#[warn(clippy::vec_init_then_push)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:470:9 [INFO] [stdout] | [INFO] [stdout] 470 | / if event::poll(Duration::from_millis(150))? { [INFO] [stdout] 471 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 472 | | // Prioritize rename confirm -> rename input -> error popup -> normal handlers [INFO] [stdout] 473 | | if rename_confirm_prompt.is_some() { [INFO] [stdout] ... | [INFO] [stdout] 791 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 470 ~ if event::poll(Duration::from_millis(150))? [INFO] [stdout] 471 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 472 | // Prioritize rename confirm -> rename input -> error popup -> normal handlers [INFO] [stdout] ... [INFO] [stdout] 789 | } [INFO] [stdout] 790 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:479:33 [INFO] [stdout] | [INFO] [stdout] 479 | / ... if new_path.exists() { [INFO] [stdout] 480 | | ... if let Err(e) = fs::remove_file(&new_path) { [INFO] [stdout] 481 | | ... error_popup = Some(format!("Failed to remove existing {}: {}", desired_name, e)); [INFO] [stdout] 482 | | ... continue; [INFO] [stdout] 483 | | ... } [INFO] [stdout] 484 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 479 ~ if new_path.exists() [INFO] [stdout] 480 ~ && let Err(e) = fs::remove_file(&new_path) { [INFO] [stdout] 481 | error_popup = Some(format!("Failed to remove existing {}: {}", desired_name, e)); [INFO] [stdout] 482 | continue; [INFO] [stdout] 483 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/browser.rs:609:29 [INFO] [stdout] | [INFO] [stdout] 609 | / ... if remote_mode { [INFO] [stdout] 610 | | ... fetching_remote = true; [INFO] [stdout] 611 | | ... let tx = list_tx.clone(); [INFO] [stdout] 612 | | ... thread::spawn(move || { [INFO] [stdout] ... | [INFO] [stdout] 618 | | ... status_msg = Some("Refreshing remote list".to_string()); [INFO] [stdout] 619 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 608 ~ KeyCode::Char('g') [INFO] [stdout] 609 ~ if remote_mode => { [INFO] [stdout] 610 | fetching_remote = true; [INFO] [stdout] ... [INFO] [stdout] 618 | status_msg = Some("Refreshing remote list".to_string()); [INFO] [stdout] 619 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/browser.rs:668:29 [INFO] [stdout] | [INFO] [stdout] 668 | / ... if !puzzles.is_empty() { [INFO] [stdout] 669 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 670 | | ... rename_mode = true; [INFO] [stdout] 671 | | ... rename_input = p.file_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 675 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 667 ~ KeyCode::Char('r') if !remote_mode [INFO] [stdout] 668 ~ && !puzzles.is_empty() => { [INFO] [stdout] 669 | if let Some(p) = puzzles.get(selected) { [INFO] [stdout] ... [INFO] [stdout] 674 | } [INFO] [stdout] 675 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/browser.rs:678:29 [INFO] [stdout] | [INFO] [stdout] 678 | / ... if !puzzles.is_empty() { [INFO] [stdout] 679 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 680 | | ... let file_name = p.file_name.clone(); [INFO] [stdout] 681 | | ... let path = p.path.clone(); [INFO] [stdout] ... | [INFO] [stdout] 697 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 677 ~ KeyCode::Char('d') if !remote_mode [INFO] [stdout] 678 ~ && !puzzles.is_empty() => { [INFO] [stdout] 679 | if let Some(p) = puzzles.get(selected) { [INFO] [stdout] ... [INFO] [stdout] 696 | } [INFO] [stdout] 697 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/browser.rs:640:77 [INFO] [stdout] | [INFO] [stdout] 640 | ... let _ = std::fs::create_dir_all(&dir); [INFO] [stdout] | ^^^^ help: change this to: `dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:668:29 [INFO] [stdout] | [INFO] [stdout] 668 | / ... if !puzzles.is_empty() { [INFO] [stdout] 669 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 670 | | ... rename_mode = true; [INFO] [stdout] 671 | | ... rename_input = p.file_name.clone(); [INFO] [stdout] ... | [INFO] [stdout] 675 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 668 ~ if !puzzles.is_empty() [INFO] [stdout] 669 ~ && let Some(p) = puzzles.get(selected) { [INFO] [stdout] 670 | rename_mode = true; [INFO] [stdout] ... [INFO] [stdout] 673 | status_msg = Some("Rename: edit name and press Enter to confirm".to_string()); [INFO] [stdout] 674 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:678:29 [INFO] [stdout] | [INFO] [stdout] 678 | / ... if !puzzles.is_empty() { [INFO] [stdout] 679 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 680 | | ... let file_name = p.file_name.clone(); [INFO] [stdout] 681 | | ... let path = p.path.clone(); [INFO] [stdout] ... | [INFO] [stdout] 697 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 678 ~ if !puzzles.is_empty() [INFO] [stdout] 679 ~ && let Some(p) = puzzles.get(selected) { [INFO] [stdout] 680 | let file_name = p.file_name.clone(); [INFO] [stdout] ... [INFO] [stdout] 695 | } [INFO] [stdout] 696 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/browser.rs:701:33 [INFO] [stdout] | [INFO] [stdout] 701 | / ... if selected_remote > 0 { [INFO] [stdout] 702 | | ... selected_remote -= 1; [INFO] [stdout] 703 | | ... } [INFO] [stdout] | |_______________________^ help: try: `selected_remote = selected_remote.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/browser.rs:705:33 [INFO] [stdout] | [INFO] [stdout] 705 | / ... if selected > 0 { [INFO] [stdout] 706 | | ... selected -= 1; [INFO] [stdout] 707 | | ... } [INFO] [stdout] | |_______________________^ help: try: `selected = selected.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser.rs:722:29 [INFO] [stdout] | [INFO] [stdout] 722 | / ... if !puzzles.is_empty() { [INFO] [stdout] 723 | | ... if let Some(p) = puzzles.get(selected) { [INFO] [stdout] 724 | | ... match load_puzzle_board(&p.path) { [INFO] [stdout] 725 | | ... Ok(( [INFO] [stdout] ... | [INFO] [stdout] 753 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 722 ~ if !puzzles.is_empty() [INFO] [stdout] 723 ~ && let Some(p) = puzzles.get(selected) { [INFO] [stdout] 724 | match load_puzzle_board(&p.path) { [INFO] [stdout] ... [INFO] [stdout] 751 | } [INFO] [stdout] 752 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/browser.rs:740:72 [INFO] [stdout] | [INFO] [stdout] 740 | ... if !circles.is_empty() { 0usize } else { 0usize } [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/browser.rs:740:88 [INFO] [stdout] | [INFO] [stdout] 740 | ... if !circles.is_empty() { 0usize } else { 0usize } [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | / if let Some(k) = option_env!("SUPABASE_ANON_KEY") { [INFO] [stdout] 20 | | if !k.is_empty() { [INFO] [stdout] 21 | | return Some(k.to_string()); [INFO] [stdout] 22 | | } [INFO] [stdout] 23 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 19 ~ if let Some(k) = option_env!("SUPABASE_ANON_KEY") [INFO] [stdout] 20 ~ && !k.is_empty() { [INFO] [stdout] 21 | return Some(k.to_string()); [INFO] [stdout] 22 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | / if let Some(k) = option_env!("SUPABASE_URL") { [INFO] [stdout] 33 | | if !k.is_empty() { [INFO] [stdout] 34 | | return Some(k.to_string()); [INFO] [stdout] 35 | | } [INFO] [stdout] 36 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 32 ~ if let Some(k) = option_env!("SUPABASE_URL") [INFO] [stdout] 33 ~ && !k.is_empty() { [INFO] [stdout] 34 | return Some(k.to_string()); [INFO] [stdout] 35 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:83:9 [INFO] [stdout] | [INFO] [stdout] 83 | / if let Some(first) = arr.get(0) { [INFO] [stdout] 84 | | if let Some(id) = first.get("id") { [INFO] [stdout] 85 | | return Ok(id.to_string()); [INFO] [stdout] 86 | | } [INFO] [stdout] 87 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 83 ~ if let Some(first) = arr.get(0) [INFO] [stdout] 84 ~ && let Some(id) = first.get("id") { [INFO] [stdout] 85 | return Ok(id.to_string()); [INFO] [stdout] 86 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/database.rs:95:26 [INFO] [stdout] | [INFO] [stdout] 95 | pub fn list_puzzles() -> Result)>, Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/database.rs:172:13 [INFO] [stdout] | [INFO] [stdout] 172 | / if let Some(first) = arr.get(0) { [INFO] [stdout] 173 | | if let Some(content) = first.get("content") { [INFO] [stdout] 174 | | return Ok(content.to_string()); [INFO] [stdout] 175 | | } [INFO] [stdout] 176 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 172 ~ if let Some(first) = arr.get(0) [INFO] [stdout] 173 ~ && let Some(content) = first.get("content") { [INFO] [stdout] 174 | return Ok(content.to_string()); [INFO] [stdout] 175 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `options` [INFO] [stdout] --> src/game.rs:50:22 [INFO] [stdout] | [INFO] [stdout] 50 | for i in 0..options.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 50 - for i in 0..options.len() { [INFO] [stdout] 50 + for (i, ) in options.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/game.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | / if event::poll(Duration::from_millis(150))? { [INFO] [stdout] 81 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 82 | | match key.code { [INFO] [stdout] 83 | | KeyCode::Char('q') | KeyCode::Esc => return Err("user quit".into()), [INFO] [stdout] ... | [INFO] [stdout] 120 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 80 ~ if event::poll(Duration::from_millis(150))? [INFO] [stdout] 81 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 82 | match key.code { [INFO] [stdout] ... [INFO] [stdout] 118 | } [INFO] [stdout] 119 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:85:25 [INFO] [stdout] | [INFO] [stdout] 85 | / if selection > 0 { [INFO] [stdout] 86 | | selection -= 1; [INFO] [stdout] 87 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 84 ~ KeyCode::Up [INFO] [stdout] 85 ~ if selection > 0 => { [INFO] [stdout] 86 | selection -= 1; [INFO] [stdout] 87 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:90:25 [INFO] [stdout] | [INFO] [stdout] 90 | / if selection < options.len() - 1 { [INFO] [stdout] 91 | | selection += 1; [INFO] [stdout] 92 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 89 ~ KeyCode::Down [INFO] [stdout] 90 ~ if selection < options.len() - 1 => { [INFO] [stdout] 91 | selection += 1; [INFO] [stdout] 92 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:95:25 [INFO] [stdout] | [INFO] [stdout] 95 | / if selection > 0 { [INFO] [stdout] 96 | | selection -= 1; [INFO] [stdout] 97 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 94 ~ KeyCode::Char('w') [INFO] [stdout] 95 ~ if selection > 0 => { [INFO] [stdout] 96 | selection -= 1; [INFO] [stdout] 97 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:100:25 [INFO] [stdout] | [INFO] [stdout] 100 | / if selection < options.len() - 1 { [INFO] [stdout] 101 | | selection += 1; [INFO] [stdout] 102 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 99 ~ KeyCode::Char('s') [INFO] [stdout] 100 ~ if selection < options.len() - 1 => { [INFO] [stdout] 101 | selection += 1; [INFO] [stdout] 102 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:85:25 [INFO] [stdout] | [INFO] [stdout] 85 | / if selection > 0 { [INFO] [stdout] 86 | | selection -= 1; [INFO] [stdout] 87 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:95:25 [INFO] [stdout] | [INFO] [stdout] 95 | / if selection > 0 { [INFO] [stdout] 96 | | selection -= 1; [INFO] [stdout] 97 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/game.rs:180:9 [INFO] [stdout] | [INFO] [stdout] 180 | / if event::poll(Duration::from_millis(150))? { [INFO] [stdout] 181 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 182 | | match key.code { [INFO] [stdout] 183 | | KeyCode::Char('q') | KeyCode::Esc => return Err("user quit".into()), [INFO] [stdout] ... | [INFO] [stdout] 211 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 180 ~ if event::poll(Duration::from_millis(150))? [INFO] [stdout] 181 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 182 | match key.code { [INFO] [stdout] ... [INFO] [stdout] 209 | } [INFO] [stdout] 210 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:185:25 [INFO] [stdout] | [INFO] [stdout] 185 | / if selection > 0 { [INFO] [stdout] 186 | | selection -= 1; [INFO] [stdout] 187 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 184 ~ KeyCode::Up [INFO] [stdout] 185 ~ if selection > 0 => { [INFO] [stdout] 186 | selection -= 1; [INFO] [stdout] 187 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:190:25 [INFO] [stdout] | [INFO] [stdout] 190 | / if selection < 2 { [INFO] [stdout] 191 | | selection += 1; [INFO] [stdout] 192 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 189 ~ KeyCode::Down [INFO] [stdout] 190 ~ if selection < 2 => { [INFO] [stdout] 191 | selection += 1; [INFO] [stdout] 192 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:195:25 [INFO] [stdout] | [INFO] [stdout] 195 | / if selection > 0 { [INFO] [stdout] 196 | | selection -= 1; [INFO] [stdout] 197 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 194 ~ KeyCode::Char('w') [INFO] [stdout] 195 ~ if selection > 0 => { [INFO] [stdout] 196 | selection -= 1; [INFO] [stdout] 197 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:200:25 [INFO] [stdout] | [INFO] [stdout] 200 | / if selection < 2 { [INFO] [stdout] 201 | | selection += 1; [INFO] [stdout] 202 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 199 ~ KeyCode::Char('s') [INFO] [stdout] 200 ~ if selection < 2 => { [INFO] [stdout] 201 | selection += 1; [INFO] [stdout] 202 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:185:25 [INFO] [stdout] | [INFO] [stdout] 185 | / if selection > 0 { [INFO] [stdout] 186 | | selection -= 1; [INFO] [stdout] 187 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implicitly performing saturating subtraction [INFO] [stdout] --> src/game.rs:195:25 [INFO] [stdout] | [INFO] [stdout] 195 | / if selection > 0 { [INFO] [stdout] 196 | | selection -= 1; [INFO] [stdout] 197 | | } [INFO] [stdout] | |_________________________^ help: try: `selection = selection.saturating_sub(1);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `r` is used to index `row_widths` [INFO] [stdout] --> src/game.rs:252:26 [INFO] [stdout] | [INFO] [stdout] 252 | 'outer: for r in 0..rows { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 252 - 'outer: for r in 0..rows { [INFO] [stdout] 252 + 'outer: for (r, ) in row_widths.iter().enumerate().take(rows) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/game.rs:344:28 [INFO] [stdout] | [INFO] [stdout] 344 | if let Some(_) = crosses.iter().position(|&(rr, cc)| rr == row && cc == col) { [INFO] [stdout] | -------^^^^^^^-------------------------------------------------------------- help: try: `if crosses.iter().position(|&(rr, cc)| rr == row && cc == col).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:414:17 [INFO] [stdout] | [INFO] [stdout] 414 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 415 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 416 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 417 | | " YOU WON! ", [INFO] [stdout] ... | [INFO] [stdout] 426 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 427 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:454:17 [INFO] [stdout] | [INFO] [stdout] 454 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 455 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 456 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 457 | | " YOU LOST! three crosses aligned ", [INFO] [stdout] ... | [INFO] [stdout] 466 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 467 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:544:25 [INFO] [stdout] | [INFO] [stdout] 544 | / if !won && !lost { [INFO] [stdout] 545 | | movement::attempt_move_runtime( [INFO] [stdout] 546 | | &mut circles, [INFO] [stdout] 547 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 553 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 543 ~ KeyCode::Up [INFO] [stdout] 544 ~ if !won && !lost => { [INFO] [stdout] 545 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 552 | ) [INFO] [stdout] 553 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:556:25 [INFO] [stdout] | [INFO] [stdout] 556 | / if !won && !lost { [INFO] [stdout] 557 | | movement::attempt_move_runtime( [INFO] [stdout] 558 | | &mut circles, [INFO] [stdout] 559 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 565 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 555 ~ KeyCode::Left [INFO] [stdout] 556 ~ if !won && !lost => { [INFO] [stdout] 557 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 564 | ) [INFO] [stdout] 565 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:568:25 [INFO] [stdout] | [INFO] [stdout] 568 | / if !won && !lost { [INFO] [stdout] 569 | | movement::attempt_move_runtime( [INFO] [stdout] 570 | | &mut circles, [INFO] [stdout] 571 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 577 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 567 ~ KeyCode::Down [INFO] [stdout] 568 ~ if !won && !lost => { [INFO] [stdout] 569 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 576 | ) [INFO] [stdout] 577 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:580:25 [INFO] [stdout] | [INFO] [stdout] 580 | / if !won && !lost { [INFO] [stdout] 581 | | movement::attempt_move_runtime( [INFO] [stdout] 582 | | &mut circles, [INFO] [stdout] 583 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 589 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 579 ~ KeyCode::Right [INFO] [stdout] 580 ~ if !won && !lost => { [INFO] [stdout] 581 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 588 | ) [INFO] [stdout] 589 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:494:29 [INFO] [stdout] | [INFO] [stdout] 494 | / ... if !won && !lost { [INFO] [stdout] 495 | | ... movement::attempt_move_runtime( [INFO] [stdout] 496 | | ... &mut circles, [INFO] [stdout] 497 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 503 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 493 ~ 'w' [INFO] [stdout] 494 ~ if !won && !lost => { [INFO] [stdout] 495 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 502 | ) [INFO] [stdout] 503 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:506:29 [INFO] [stdout] | [INFO] [stdout] 506 | / ... if !won && !lost { [INFO] [stdout] 507 | | ... movement::attempt_move_runtime( [INFO] [stdout] 508 | | ... &mut circles, [INFO] [stdout] 509 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 515 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 505 ~ 'a' [INFO] [stdout] 506 ~ if !won && !lost => { [INFO] [stdout] 507 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 514 | ) [INFO] [stdout] 515 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:518:29 [INFO] [stdout] | [INFO] [stdout] 518 | / ... if !won && !lost { [INFO] [stdout] 519 | | ... movement::attempt_move_runtime( [INFO] [stdout] 520 | | ... &mut circles, [INFO] [stdout] 521 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 527 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 517 ~ 's' [INFO] [stdout] 518 ~ if !won && !lost => { [INFO] [stdout] 519 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 526 | ) [INFO] [stdout] 527 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:530:29 [INFO] [stdout] | [INFO] [stdout] 530 | / ... if !won && !lost { [INFO] [stdout] 531 | | ... movement::attempt_move_runtime( [INFO] [stdout] 532 | | ... &mut circles, [INFO] [stdout] 533 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 539 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 529 ~ 'd' [INFO] [stdout] 530 ~ if !won && !lost => { [INFO] [stdout] 531 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 538 | ) [INFO] [stdout] 539 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/game.rs:703:28 [INFO] [stdout] | [INFO] [stdout] 703 | if let Some(_) = crosses.iter().position(|&(rr, cc)| rr == row && cc == col) { [INFO] [stdout] | -------^^^^^^^-------------------------------------------------------------- help: try: `if crosses.iter().position(|&(rr, cc)| rr == row && cc == col).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:758:17 [INFO] [stdout] | [INFO] [stdout] 758 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 759 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 760 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 761 | | " YOU WON! ", [INFO] [stdout] ... | [INFO] [stdout] 770 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 771 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/game.rs:798:17 [INFO] [stdout] | [INFO] [stdout] 798 | / let mut msg_lines: Vec = Vec::new(); [INFO] [stdout] 799 | | msg_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 800 | | msg_lines.push(Spans::from(Span::styled( [INFO] [stdout] 801 | | " YOU LOST! three crosses aligned ", [INFO] [stdout] ... | [INFO] [stdout] 810 | | Style::default().fg(Color::White).bg(Color::Black), [INFO] [stdout] 811 | | ))); [INFO] [stdout] | |____________________^ help: consider using the `vec![]` macro: `let msg_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:888:25 [INFO] [stdout] | [INFO] [stdout] 888 | / if !won && !lost { [INFO] [stdout] 889 | | movement::attempt_move_runtime( [INFO] [stdout] 890 | | &mut circles, [INFO] [stdout] 891 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 897 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 887 ~ KeyCode::Up [INFO] [stdout] 888 ~ if !won && !lost => { [INFO] [stdout] 889 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 896 | ) [INFO] [stdout] 897 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:900:25 [INFO] [stdout] | [INFO] [stdout] 900 | / if !won && !lost { [INFO] [stdout] 901 | | movement::attempt_move_runtime( [INFO] [stdout] 902 | | &mut circles, [INFO] [stdout] 903 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 909 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 899 ~ KeyCode::Left [INFO] [stdout] 900 ~ if !won && !lost => { [INFO] [stdout] 901 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 908 | ) [INFO] [stdout] 909 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:912:25 [INFO] [stdout] | [INFO] [stdout] 912 | / if !won && !lost { [INFO] [stdout] 913 | | movement::attempt_move_runtime( [INFO] [stdout] 914 | | &mut circles, [INFO] [stdout] 915 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 921 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 911 ~ KeyCode::Down [INFO] [stdout] 912 ~ if !won && !lost => { [INFO] [stdout] 913 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 920 | ) [INFO] [stdout] 921 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:924:25 [INFO] [stdout] | [INFO] [stdout] 924 | / if !won && !lost { [INFO] [stdout] 925 | | movement::attempt_move_runtime( [INFO] [stdout] 926 | | &mut circles, [INFO] [stdout] 927 | | &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 933 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 923 ~ KeyCode::Right [INFO] [stdout] 924 ~ if !won && !lost => { [INFO] [stdout] 925 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 932 | ) [INFO] [stdout] 933 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:838:29 [INFO] [stdout] | [INFO] [stdout] 838 | / ... if !won && !lost { [INFO] [stdout] 839 | | ... movement::attempt_move_runtime( [INFO] [stdout] 840 | | ... &mut circles, [INFO] [stdout] 841 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 847 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 837 ~ 'w' [INFO] [stdout] 838 ~ if !won && !lost => { [INFO] [stdout] 839 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 846 | ) [INFO] [stdout] 847 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:850:29 [INFO] [stdout] | [INFO] [stdout] 850 | / ... if !won && !lost { [INFO] [stdout] 851 | | ... movement::attempt_move_runtime( [INFO] [stdout] 852 | | ... &mut circles, [INFO] [stdout] 853 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 859 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 849 ~ 'a' [INFO] [stdout] 850 ~ if !won && !lost => { [INFO] [stdout] 851 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 858 | ) [INFO] [stdout] 859 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:862:29 [INFO] [stdout] | [INFO] [stdout] 862 | / ... if !won && !lost { [INFO] [stdout] 863 | | ... movement::attempt_move_runtime( [INFO] [stdout] 864 | | ... &mut circles, [INFO] [stdout] 865 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 871 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 861 ~ 's' [INFO] [stdout] 862 ~ if !won && !lost => { [INFO] [stdout] 863 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 870 | ) [INFO] [stdout] 871 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/game.rs:874:29 [INFO] [stdout] | [INFO] [stdout] 874 | / ... if !won && !lost { [INFO] [stdout] 875 | | ... movement::attempt_move_runtime( [INFO] [stdout] 876 | | ... &mut circles, [INFO] [stdout] 877 | | ... &mut crosses, [INFO] [stdout] ... | [INFO] [stdout] 883 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 873 ~ 'd' [INFO] [stdout] 874 ~ if !won && !lost => { [INFO] [stdout] 875 | movement::attempt_move_runtime( [INFO] [stdout] ... [INFO] [stdout] 882 | ) [INFO] [stdout] 883 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/generator.rs:151:6 [INFO] [stdout] | [INFO] [stdout] 151 | ) -> (Vec<(usize, usize)>, Vec<(usize, usize)>, usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/generator.rs:159:20 [INFO] [stdout] | [INFO] [stdout] 159 | let mut queue: VecDeque<(Vec<(usize, usize)>, Vec<(usize, usize)>, usize)> = VecDeque::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/generator.rs:166:30 [INFO] [stdout] | [INFO] [stdout] 166 | let mut best_candidates: Vec<(Vec<(usize, usize)>, Vec<(usize, usize)>, usize)> = Vec::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/puzzle_editor.rs:146:17 [INFO] [stdout] | [INFO] [stdout] 146 | / let mut err_lines: Vec = Vec::new(); [INFO] [stdout] 147 | | err_lines.push(Spans::from(Span::styled( [INFO] [stdout] 148 | | " Error ", [INFO] [stdout] 149 | | Style::default().fg(Color::Red).add_modifier(Modifier::BOLD), [INFO] [stdout] ... | [INFO] [stdout] 153 | | err_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 154 | | err_lines.push(Spans::from(Span::raw("Press any key to continue"))); [INFO] [stdout] | |____________________________________________________________________________________^ help: consider using the `vec![]` macro: `let err_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/puzzle_editor.rs:169:17 [INFO] [stdout] | [INFO] [stdout] 169 | / let mut ok_lines: Vec = Vec::new(); [INFO] [stdout] 170 | | ok_lines.push(Spans::from(Span::styled( [INFO] [stdout] 171 | | " Saved ", [INFO] [stdout] 172 | | Style::default().fg(Color::Green).add_modifier(Modifier::BOLD), [INFO] [stdout] ... | [INFO] [stdout] 176 | | ok_lines.push(Spans::from(Span::raw(""))); [INFO] [stdout] 177 | | ok_lines.push(Spans::from(Span::raw("Press any key to return to home screen"))); [INFO] [stdout] | |________________________________________________________________________________________________^ help: consider using the `vec![]` macro: `let ok_lines: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/puzzle_editor.rs:220:25 [INFO] [stdout] | [INFO] [stdout] 220 | / if let Some(&pos) = cursor.get(0) { [INFO] [stdout] 221 | | if let Some(idx) = removed.iter().position(|&p| p == pos) { [INFO] [stdout] 222 | | removed.remove(idx); [INFO] [stdout] 223 | | } [INFO] [stdout] 224 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 220 ~ if let Some(&pos) = cursor.get(0) [INFO] [stdout] 221 ~ && let Some(idx) = removed.iter().position(|&p| p == pos) { [INFO] [stdout] 222 | removed.remove(idx); [INFO] [stdout] 223 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cursor.get(0)` [INFO] [stdout] --> src/puzzle_editor.rs:220:45 [INFO] [stdout] | [INFO] [stdout] 220 | if let Some(&pos) = cursor.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `cursor.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/puzzle_editor.rs:574:5 [INFO] [stdout] | [INFO] [stdout] 574 | / if let Some((r, c)) = *player { [INFO] [stdout] 575 | | if r >= rows || c >= cols { [INFO] [stdout] 576 | | *player = None; [INFO] [stdout] 577 | | } [INFO] [stdout] 578 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 574 ~ if let Some((r, c)) = *player [INFO] [stdout] 575 ~ && (r >= rows || c >= cols) { [INFO] [stdout] 576 | *player = None; [INFO] [stdout] 577 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:116:12 [INFO] [stdout] | [INFO] [stdout] 116 | if (up_missing && left_missing) [INFO] [stdout] | ____________^ [INFO] [stdout] 117 | | || (up_missing && right_missing) [INFO] [stdout] 118 | | || (down_missing && left_missing) [INFO] [stdout] 119 | | || (down_missing && right_missing) [INFO] [stdout] | |______________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 118 - || (down_missing && left_missing) [INFO] [stdout] 119 - || (down_missing && right_missing) [INFO] [stdout] 116 + if !(!left_missing && !right_missing || !up_missing && !down_missing) [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 118 - || (down_missing && left_missing) [INFO] [stdout] 119 - || (down_missing && right_missing) [INFO] [stdout] 116 + if (down_missing || up_missing) && (right_missing || left_missing) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:116:12 [INFO] [stdout] | [INFO] [stdout] 116 | if (up_missing && left_missing) [INFO] [stdout] | ____________^ [INFO] [stdout] 117 | | || (up_missing && right_missing) [INFO] [stdout] | |____________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 116 + if !(!up_missing || !left_missing && !right_missing) [INFO] [stdout] | [INFO] [stdout] 116 - if (up_missing && left_missing) [INFO] [stdout] 117 - || (up_missing && right_missing) [INFO] [stdout] 116 + if (right_missing || left_missing) && up_missing [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 130 | if (up_blocked && left_blocked) [INFO] [stdout] | ____________^ [INFO] [stdout] 131 | | || (up_blocked && right_blocked) [INFO] [stdout] 132 | | || (down_blocked && left_blocked) [INFO] [stdout] 133 | | || (down_blocked && right_blocked) [INFO] [stdout] | |______________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 132 - || (down_blocked && left_blocked) [INFO] [stdout] 133 - || (down_blocked && right_blocked) [INFO] [stdout] 130 + if !(!left_blocked && !right_blocked || !up_blocked && !down_blocked) [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 132 - || (down_blocked && left_blocked) [INFO] [stdout] 133 - || (down_blocked && right_blocked) [INFO] [stdout] 130 + if (down_blocked || up_blocked) && (right_blocked || left_blocked) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rules.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 130 | if (up_blocked && left_blocked) [INFO] [stdout] | ____________^ [INFO] [stdout] 131 | | || (up_blocked && right_blocked) [INFO] [stdout] | |____________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 130 + if !(!up_blocked || !left_blocked && !right_blocked) [INFO] [stdout] | [INFO] [stdout] 130 - if (up_blocked && left_blocked) [INFO] [stdout] 131 - || (up_blocked && right_blocked) [INFO] [stdout] 130 + if (right_blocked || left_blocked) && up_blocked [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 46.61s [INFO] running `Command { std: "docker" "inspect" "c83de0d1a8a40fe5e3f5c75e39e123e38452bb6e08e6d0c4d80b834b6ca6847a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c83de0d1a8a40fe5e3f5c75e39e123e38452bb6e08e6d0c4d80b834b6ca6847a", kill_on_drop: false }` [INFO] [stdout] c83de0d1a8a40fe5e3f5c75e39e123e38452bb6e08e6d0c4d80b834b6ca6847a