[INFO] cloning repository https://github.com/andreachiara/chip8-interpreter [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/andreachiara/chip8-interpreter" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fandreachiara%2Fchip8-interpreter", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fandreachiara%2Fchip8-interpreter'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] f4aa48a6fe22a7187161986ff0c3029f1e81d6b0 [INFO] linting andreachiara/chip8-interpreter against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fandreachiara%2Fchip8-interpreter" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/andreachiara/chip8-interpreter [INFO] finished tweaking git repo https://github.com/andreachiara/chip8-interpreter [INFO] tweaked toml for git repo https://github.com/andreachiara/chip8-interpreter written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/andreachiara/chip8-interpreter 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 git repo https://github.com/andreachiara/chip8-interpreter 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] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded beep v0.3.0 [INFO] [stderr] Downloaded cc v1.1.25 [INFO] [stderr] Downloaded nix v0.20.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 827aa134360e31e6e2d98aef34b3f734853c372b69ff8d51a61a3ab1916ee34b [INFO] running `Command { std: "docker" "start" "-a" "827aa134360e31e6e2d98aef34b3f734853c372b69ff8d51a61a3ab1916ee34b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "827aa134360e31e6e2d98aef34b3f734853c372b69ff8d51a61a3ab1916ee34b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "827aa134360e31e6e2d98aef34b3f734853c372b69ff8d51a61a3ab1916ee34b", kill_on_drop: false }` [INFO] [stdout] 827aa134360e31e6e2d98aef34b3f734853c372b69ff8d51a61a3ab1916ee34b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] d090a93dd14e6e9aba4d69a28ae6808677c5867a7b8df95a36d92c83f5ff5aec [INFO] running `Command { std: "docker" "start" "-a" "d090a93dd14e6e9aba4d69a28ae6808677c5867a7b8df95a36d92c83f5ff5aec", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.159 [INFO] [stderr] Compiling memoffset v0.6.5 [INFO] [stderr] Compiling signal-hook v0.3.17 [INFO] [stderr] Compiling rustix v0.38.37 [INFO] [stderr] Compiling proc-macro2 v1.0.86 [INFO] [stderr] Compiling quote v1.0.37 [INFO] [stderr] Compiling syn v2.0.79 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Checking mio v1.0.2 [INFO] [stderr] Checking nix v0.20.2 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Compiling zerocopy-derive v0.7.35 [INFO] [stderr] Checking zerocopy v0.7.35 [INFO] [stderr] Checking ppv-lite86 v0.2.20 [INFO] [stderr] Checking beep v0.3.0 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking chip8-interpreter v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::ops::BitXorAssign` [INFO] [stdout] --> src/main.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::ops::BitXorAssign; [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 import: `SystemTime` [INFO] [stdout] --> src/main.rs:2:27 [INFO] [stdout] | [INFO] [stdout] 2 | use std::time::{Duration, SystemTime}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::os::unix` [INFO] [stdout] --> src/main.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::os::unix; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `KeyEvent` and `KeyModifiers` [INFO] [stdout] --> src/main.rs:16:24 [INFO] [stdout] | [INFO] [stdout] 16 | use crossterm::event::{KeyEvent, KeyModifiers}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SeedableRng` and `random` [INFO] [stdout] --> src/main.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | use rand::{random, SeedableRng}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Command`, `DisableMouseCapture`, `EnableMouseCapture`, `Event`, and `QueueableCommand` [INFO] [stdout] --> src/main.rs:21:24 [INFO] [stdout] | [INFO] [stdout] 21 | ExecutableCommand, QueueableCommand, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 22 | terminal, cursor, style::{self, Stylize}, [INFO] [stdout] 23 | Command, event::{poll, read, DisableMouseCapture, EnableMouseCapture, [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 24 | Event, Event::Key, KeyCode, KeyboardEnhancementFlags, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/main.rs:304:27 [INFO] [stdout] | [INFO] [stdout] 304 | let sumu16: u16 = (self.gpreg.v[vreg_x] as u16 + (self.gpreg.v[vreg_y] as u16)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 304 - let sumu16: u16 = (self.gpreg.v[vreg_x] as u16 + (self.gpreg.v[vreg_y] as u16)); [INFO] [stdout] 304 + let sumu16: u16 = self.gpreg.v[vreg_x] as u16 + (self.gpreg.v[vreg_y] as u16) ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/main.rs:388:12 [INFO] [stdout] | [INFO] [stdout] 388 | if ((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 388 - if ((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0) { [INFO] [stdout] 388 + if (self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::BitXorAssign` [INFO] [stdout] --> src/main.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::ops::BitXorAssign; [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 import: `SystemTime` [INFO] [stdout] --> src/main.rs:2:27 [INFO] [stdout] | [INFO] [stdout] 2 | use std::time::{Duration, SystemTime}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::os::unix` [INFO] [stdout] --> src/main.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::os::unix; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `KeyEvent` and `KeyModifiers` [INFO] [stdout] --> src/main.rs:16:24 [INFO] [stdout] | [INFO] [stdout] 16 | use crossterm::event::{KeyEvent, KeyModifiers}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SeedableRng` and `random` [INFO] [stdout] --> src/main.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | use rand::{random, SeedableRng}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Command`, `DisableMouseCapture`, `EnableMouseCapture`, `Event`, and `QueueableCommand` [INFO] [stdout] --> src/main.rs:21:24 [INFO] [stdout] | [INFO] [stdout] 21 | ExecutableCommand, QueueableCommand, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 22 | terminal, cursor, style::{self, Stylize}, [INFO] [stdout] 23 | Command, event::{poll, read, DisableMouseCapture, EnableMouseCapture, [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 24 | Event, Event::Key, KeyCode, KeyboardEnhancementFlags, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/main.rs:304:27 [INFO] [stdout] | [INFO] [stdout] 304 | let sumu16: u16 = (self.gpreg.v[vreg_x] as u16 + (self.gpreg.v[vreg_y] as u16)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 304 - let sumu16: u16 = (self.gpreg.v[vreg_x] as u16 + (self.gpreg.v[vreg_y] as u16)); [INFO] [stdout] 304 + let sumu16: u16 = self.gpreg.v[vreg_x] as u16 + (self.gpreg.v[vreg_y] as u16) ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/main.rs:388:12 [INFO] [stdout] | [INFO] [stdout] 388 | if ((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 388 - if ((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0) { [INFO] [stdout] 388 + if (self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut scr: String = "".to_string(); [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/main.rs:108:17 [INFO] [stdout] | [INFO] [stdout] 108 | let mut line: String = "".to_string(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `scr` [INFO] [stdout] --> src/main.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut scr: String = "".to_string(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scr` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `line` [INFO] [stdout] --> src/main.rs:108:17 [INFO] [stdout] | [INFO] [stdout] 108 | let mut line: String = "".to_string(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_line` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/main.rs:442:17 [INFO] [stdout] | [INFO] [stdout] 442 | for i in 0..16 { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `print_display` and `diff_draw` are never used [INFO] [stdout] --> src/main.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 58 | impl DisplayData { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] 59 | fn print_display(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 101 | fn diff_draw(&self, other: &DisplayData) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `inst_ldk_basic` and `inst_ldk_overcomplex` are never used [INFO] [stdout] --> src/main.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 247 | impl Cpu { [INFO] [stdout] | -------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 420 | fn inst_ldk_basic(&mut self, vreg_x: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 432 | fn inst_ldk_overcomplex(&mut self, vreg_x: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/main.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/main.rs:93:13 [INFO] [stdout] | [INFO] [stdout] 93 | scr.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `scr.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:150:7 [INFO] [stdout] | [INFO] [stdout] 150 | return Ok(self.pointer); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 150 - return Ok(self.pointer); [INFO] [stdout] 150 + Ok(self.pointer) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/main.rs:342:9 [INFO] [stdout] | [INFO] [stdout] 342 | self.gpreg.v[vreg_x] = self.gpreg.v[vreg_x] >> 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.gpreg.v[vreg_x] >>= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/main.rs:347:9 [INFO] [stdout] | [INFO] [stdout] 347 | self.gpreg.v[vreg_x] = self.gpreg.v[vreg_x] << 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.gpreg.v[vreg_x] <<= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:393:12 [INFO] [stdout] | [INFO] [stdout] 393 | if !((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 <= 0)` [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] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut scr: String = "".to_string(); [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/main.rs:108:17 [INFO] [stdout] | [INFO] [stdout] 108 | let mut line: String = "".to_string(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `scr` [INFO] [stdout] --> src/main.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut scr: String = "".to_string(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scr` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `line` [INFO] [stdout] --> src/main.rs:108:17 [INFO] [stdout] | [INFO] [stdout] 108 | let mut line: String = "".to_string(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_line` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:524:17 [INFO] [stdout] | [INFO] [stdout] 524 | / if opcode_digits_hex[3] == 0 { [INFO] [stdout] 525 | | self.inst_se_reg(vreg_x, vreg_y); [INFO] [stdout] 526 | | } [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] 523 ~ 0x5 [INFO] [stdout] 524 ~ if opcode_digits_hex[3] == 0 => { [INFO] [stdout] 525 | self.inst_se_reg(vreg_x, vreg_y); [INFO] [stdout] 526 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:569:17 [INFO] [stdout] | [INFO] [stdout] 569 | / if opcode_digits_hex[3] == 0 { [INFO] [stdout] 570 | | self.inst_sne_reg(vreg_x, vreg_y); [INFO] [stdout] 571 | | } [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] 568 ~ 0x9 [INFO] [stdout] 569 ~ if opcode_digits_hex[3] == 0 => { [INFO] [stdout] 570 | self.inst_sne_reg(vreg_x, vreg_y); [INFO] [stdout] 571 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `rom` [INFO] [stdout] --> src/main.rs:638:18 [INFO] [stdout] | [INFO] [stdout] 638 | for i in 0..rom.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] 638 - for i in 0..rom.len() { [INFO] [stdout] 638 + for (i, ) in rom.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/main.rs:442:17 [INFO] [stdout] | [INFO] [stdout] 442 | for i in 0..16 { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:801:9 [INFO] [stdout] | [INFO] [stdout] 801 | return Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 801 - return Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")); [INFO] [stdout] 801 + Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:665:13 [INFO] [stdout] | [INFO] [stdout] 665 | / match read()? { [INFO] [stdout] 666 | | Key(evt) => { [INFO] [stdout] 667 | | //println!("code{} release? {}", evt.code, evt.kind == KeyEventKind::Release); [INFO] [stdout] 668 | | match evt.code { [INFO] [stdout] ... | [INFO] [stdout] 794 | | _ => {} [INFO] [stdout] 795 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 665 ~ if let Key(evt) = read()? { [INFO] [stdout] 666 + //println!("code{} release? {}", evt.code, evt.kind == KeyEventKind::Release); [INFO] [stdout] 667 + match evt.code { [INFO] [stdout] 668 + KeyCode::Char('1') => { [INFO] [stdout] 669 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 670 + self.kpad.keys |= 1 << 0x1; [INFO] [stdout] 671 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 672 + self.kpad.keys &= !(1 << 0x1); [INFO] [stdout] 673 + } [INFO] [stdout] 674 + }, [INFO] [stdout] 675 + KeyCode::Char('2') => { [INFO] [stdout] 676 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 677 + self.kpad.keys |= 1 << 0x2; [INFO] [stdout] 678 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 679 + self.kpad.keys &= !(1 << 0x2); [INFO] [stdout] 680 + } [INFO] [stdout] 681 + }, [INFO] [stdout] 682 + KeyCode::Char('3') => { [INFO] [stdout] 683 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 684 + self.kpad.keys |= 1 << 0x3; [INFO] [stdout] 685 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 686 + self.kpad.keys &= !(1 << 0x3); [INFO] [stdout] 687 + } [INFO] [stdout] 688 + }, [INFO] [stdout] 689 + KeyCode::Char('4') => { [INFO] [stdout] 690 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 691 + self.kpad.keys |= 1 << 0xC; [INFO] [stdout] 692 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 693 + self.kpad.keys &= !(1 << 0xC); [INFO] [stdout] 694 + } [INFO] [stdout] 695 + }, [INFO] [stdout] 696 + KeyCode::Char('q') => { [INFO] [stdout] 697 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 698 + self.kpad.keys |= 1 << 0x4; [INFO] [stdout] 699 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 700 + self.kpad.keys &= !(1 << 0x4); [INFO] [stdout] 701 + } [INFO] [stdout] 702 + }, [INFO] [stdout] 703 + KeyCode::Char('w') => { [INFO] [stdout] 704 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 705 + self.kpad.keys |= 1 << 0x5; [INFO] [stdout] 706 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 707 + self.kpad.keys &= !(1 << 0x5); [INFO] [stdout] 708 + } [INFO] [stdout] 709 + }, [INFO] [stdout] 710 + KeyCode::Char('e') => { [INFO] [stdout] 711 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 712 + self.kpad.keys |= 1 << 0x6; [INFO] [stdout] 713 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 714 + self.kpad.keys &= !(1 << 0x6); [INFO] [stdout] 715 + } [INFO] [stdout] 716 + }, [INFO] [stdout] 717 + KeyCode::Char('r') => { [INFO] [stdout] 718 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 719 + self.kpad.keys |= 1 << 0xD; [INFO] [stdout] 720 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 721 + self.kpad.keys &= !(1 << 0xD); [INFO] [stdout] 722 + } [INFO] [stdout] 723 + }, [INFO] [stdout] 724 + KeyCode::Char('a') => { [INFO] [stdout] 725 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 726 + self.kpad.keys |= 1 << 0x7; [INFO] [stdout] 727 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 728 + self.kpad.keys &= !(1 << 0x7); [INFO] [stdout] 729 + } [INFO] [stdout] 730 + }, [INFO] [stdout] 731 + KeyCode::Char('s') => { [INFO] [stdout] 732 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 733 + self.kpad.keys |= 1 << 0x8; [INFO] [stdout] 734 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 735 + self.kpad.keys &= !(1 << 0x8); [INFO] [stdout] 736 + } [INFO] [stdout] 737 + }, [INFO] [stdout] 738 + KeyCode::Char('d') => { [INFO] [stdout] 739 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 740 + self.kpad.keys |= 1 << 0x9; [INFO] [stdout] 741 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 742 + self.kpad.keys &= !(1 << 0x9); [INFO] [stdout] 743 + } [INFO] [stdout] 744 + }, [INFO] [stdout] 745 + KeyCode::Char('f') => { [INFO] [stdout] 746 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 747 + self.kpad.keys |= 1 << 0xE; [INFO] [stdout] 748 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 749 + self.kpad.keys &= !(1 << 0xE); [INFO] [stdout] 750 + } [INFO] [stdout] 751 + }, [INFO] [stdout] 752 + KeyCode::Char('z') => { [INFO] [stdout] 753 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 754 + self.kpad.keys |= 1 << 0xA; [INFO] [stdout] 755 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 756 + self.kpad.keys &= !(1 << 0xA); [INFO] [stdout] 757 + } [INFO] [stdout] 758 + }, [INFO] [stdout] 759 + KeyCode::Char('x') => { [INFO] [stdout] 760 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 761 + self.kpad.keys |= 1 << 0x0; [INFO] [stdout] 762 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 763 + self.kpad.keys &= !(1 << 0x0); [INFO] [stdout] 764 + } [INFO] [stdout] 765 + }, [INFO] [stdout] 766 + KeyCode::Char('c') => { [INFO] [stdout] 767 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 768 + self.kpad.keys |= 1 << 0xB; [INFO] [stdout] 769 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 770 + self.kpad.keys &= !(1 << 0xB); [INFO] [stdout] 771 + } [INFO] [stdout] 772 + }, [INFO] [stdout] 773 + KeyCode::Char('v') => { [INFO] [stdout] 774 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 775 + self.kpad.keys |= 1 << 0xF; [INFO] [stdout] 776 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 777 + self.kpad.keys &= !(1 << 0xF); [INFO] [stdout] 778 + } [INFO] [stdout] 779 + }, [INFO] [stdout] 780 + KeyCode::Esc => { [INFO] [stdout] 781 + while disable_raw_mode().is_err() {} [INFO] [stdout] 782 + while execute!(stdout(), PopKeyboardEnhancementFlags).is_err() {} [INFO] [stdout] 783 + process::exit(0x00); [INFO] [stdout] 784 + }, [INFO] [stdout] 785 + _ => { [INFO] [stdout] 786 + while disable_raw_mode().is_err() {} [INFO] [stdout] 787 + return Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")); [INFO] [stdout] 788 + } [INFO] [stdout] 789 + } [INFO] [stdout] 790 + while disable_raw_mode().is_err() {} [INFO] [stdout] 791 + return Ok(KeyPad {keys: self.kpad.keys}); [INFO] [stdout] 792 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `print_display` and `diff_draw` are never used [INFO] [stdout] --> src/main.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 58 | impl DisplayData { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] 59 | fn print_display(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 101 | fn diff_draw(&self, other: &DisplayData) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `inst_ldk_basic` and `inst_ldk_overcomplex` are never used [INFO] [stdout] --> src/main.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 247 | impl Cpu { [INFO] [stdout] | -------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 420 | fn inst_ldk_basic(&mut self, vreg_x: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 432 | fn inst_ldk_overcomplex(&mut self, vreg_x: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:831:5 [INFO] [stdout] | [INFO] [stdout] 831 | return Vec::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 831 - return Vec::new(); [INFO] [stdout] 831 + Vec::new() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/main.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/main.rs:93:13 [INFO] [stdout] | [INFO] [stdout] 93 | scr.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `scr.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:150:7 [INFO] [stdout] | [INFO] [stdout] 150 | return Ok(self.pointer); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 150 - return Ok(self.pointer); [INFO] [stdout] 150 + Ok(self.pointer) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | stdout.execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 96 | let _ = stdout.execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:97:9 [INFO] [stdout] | [INFO] [stdout] 97 | queue!(stdout, cursor::MoveTo(0, 0), style::PrintStyledContent(scr.blue())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 97 | let _ = queue!(stdout, cursor::MoveTo(0, 0), style::PrintStyledContent(scr.blue()));; [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:98:9 [INFO] [stdout] | [INFO] [stdout] 98 | stdout.flush(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 98 | let _ = stdout.flush(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:113:25 [INFO] [stdout] | [INFO] [stdout] 113 | queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent("██".blue())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 113 | let _ = queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent("██".blue()));; [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:116:25 [INFO] [stdout] | [INFO] [stdout] 116 | queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent(" ".blue())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 116 | let _ = queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent(" ".blue()));; [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | stdout.flush(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 121 | let _ = stdout.flush(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:850:5 [INFO] [stdout] | [INFO] [stdout] 850 | stdout().execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 850 | let _ = stdout().execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:859:5 [INFO] [stdout] | [INFO] [stdout] 859 | / execute!( [INFO] [stdout] 860 | | stdout(), [INFO] [stdout] 861 | | PushKeyboardEnhancementFlags( [INFO] [stdout] 862 | | KeyboardEnhancementFlags::REPORT_EVENT_TYPES [INFO] [stdout] 863 | | ) [INFO] [stdout] 864 | | ); [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 859 ~ let _ = execute!( [INFO] [stdout] 860 | stdout(), [INFO] [stdout] ... [INFO] [stdout] 863 | ) [INFO] [stdout] 864 ~ );; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/main.rs:342:9 [INFO] [stdout] | [INFO] [stdout] 342 | self.gpreg.v[vreg_x] = self.gpreg.v[vreg_x] >> 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.gpreg.v[vreg_x] >>= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/main.rs:347:9 [INFO] [stdout] | [INFO] [stdout] 347 | self.gpreg.v[vreg_x] = self.gpreg.v[vreg_x] << 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.gpreg.v[vreg_x] <<= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:393:12 [INFO] [stdout] | [INFO] [stdout] 393 | if !((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 > 0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `((self.kpad.keys >> self.gpreg.v[vreg_x]) & 0b1 <= 0)` [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] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:524:17 [INFO] [stdout] | [INFO] [stdout] 524 | / if opcode_digits_hex[3] == 0 { [INFO] [stdout] 525 | | self.inst_se_reg(vreg_x, vreg_y); [INFO] [stdout] 526 | | } [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] 523 ~ 0x5 [INFO] [stdout] 524 ~ if opcode_digits_hex[3] == 0 => { [INFO] [stdout] 525 | self.inst_se_reg(vreg_x, vreg_y); [INFO] [stdout] 526 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:569:17 [INFO] [stdout] | [INFO] [stdout] 569 | / if opcode_digits_hex[3] == 0 { [INFO] [stdout] 570 | | self.inst_sne_reg(vreg_x, vreg_y); [INFO] [stdout] 571 | | } [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] 568 ~ 0x9 [INFO] [stdout] 569 ~ if opcode_digits_hex[3] == 0 => { [INFO] [stdout] 570 | self.inst_sne_reg(vreg_x, vreg_y); [INFO] [stdout] 571 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `rom` [INFO] [stdout] --> src/main.rs:638:18 [INFO] [stdout] | [INFO] [stdout] 638 | for i in 0..rom.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] 638 - for i in 0..rom.len() { [INFO] [stdout] 638 + for (i, ) in rom.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:801:9 [INFO] [stdout] | [INFO] [stdout] 801 | return Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 801 - return Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")); [INFO] [stdout] 801 + Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:665:13 [INFO] [stdout] | [INFO] [stdout] 665 | / match read()? { [INFO] [stdout] 666 | | Key(evt) => { [INFO] [stdout] 667 | | //println!("code{} release? {}", evt.code, evt.kind == KeyEventKind::Release); [INFO] [stdout] 668 | | match evt.code { [INFO] [stdout] ... | [INFO] [stdout] 794 | | _ => {} [INFO] [stdout] 795 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 665 ~ if let Key(evt) = read()? { [INFO] [stdout] 666 + //println!("code{} release? {}", evt.code, evt.kind == KeyEventKind::Release); [INFO] [stdout] 667 + match evt.code { [INFO] [stdout] 668 + KeyCode::Char('1') => { [INFO] [stdout] 669 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 670 + self.kpad.keys |= 1 << 0x1; [INFO] [stdout] 671 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 672 + self.kpad.keys &= !(1 << 0x1); [INFO] [stdout] 673 + } [INFO] [stdout] 674 + }, [INFO] [stdout] 675 + KeyCode::Char('2') => { [INFO] [stdout] 676 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 677 + self.kpad.keys |= 1 << 0x2; [INFO] [stdout] 678 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 679 + self.kpad.keys &= !(1 << 0x2); [INFO] [stdout] 680 + } [INFO] [stdout] 681 + }, [INFO] [stdout] 682 + KeyCode::Char('3') => { [INFO] [stdout] 683 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 684 + self.kpad.keys |= 1 << 0x3; [INFO] [stdout] 685 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 686 + self.kpad.keys &= !(1 << 0x3); [INFO] [stdout] 687 + } [INFO] [stdout] 688 + }, [INFO] [stdout] 689 + KeyCode::Char('4') => { [INFO] [stdout] 690 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 691 + self.kpad.keys |= 1 << 0xC; [INFO] [stdout] 692 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 693 + self.kpad.keys &= !(1 << 0xC); [INFO] [stdout] 694 + } [INFO] [stdout] 695 + }, [INFO] [stdout] 696 + KeyCode::Char('q') => { [INFO] [stdout] 697 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 698 + self.kpad.keys |= 1 << 0x4; [INFO] [stdout] 699 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 700 + self.kpad.keys &= !(1 << 0x4); [INFO] [stdout] 701 + } [INFO] [stdout] 702 + }, [INFO] [stdout] 703 + KeyCode::Char('w') => { [INFO] [stdout] 704 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 705 + self.kpad.keys |= 1 << 0x5; [INFO] [stdout] 706 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 707 + self.kpad.keys &= !(1 << 0x5); [INFO] [stdout] 708 + } [INFO] [stdout] 709 + }, [INFO] [stdout] 710 + KeyCode::Char('e') => { [INFO] [stdout] 711 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 712 + self.kpad.keys |= 1 << 0x6; [INFO] [stdout] 713 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 714 + self.kpad.keys &= !(1 << 0x6); [INFO] [stdout] 715 + } [INFO] [stdout] 716 + }, [INFO] [stdout] 717 + KeyCode::Char('r') => { [INFO] [stdout] 718 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 719 + self.kpad.keys |= 1 << 0xD; [INFO] [stdout] 720 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 721 + self.kpad.keys &= !(1 << 0xD); [INFO] [stdout] 722 + } [INFO] [stdout] 723 + }, [INFO] [stdout] 724 + KeyCode::Char('a') => { [INFO] [stdout] 725 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 726 + self.kpad.keys |= 1 << 0x7; [INFO] [stdout] 727 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 728 + self.kpad.keys &= !(1 << 0x7); [INFO] [stdout] 729 + } [INFO] [stdout] 730 + }, [INFO] [stdout] 731 + KeyCode::Char('s') => { [INFO] [stdout] 732 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 733 + self.kpad.keys |= 1 << 0x8; [INFO] [stdout] 734 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 735 + self.kpad.keys &= !(1 << 0x8); [INFO] [stdout] 736 + } [INFO] [stdout] 737 + }, [INFO] [stdout] 738 + KeyCode::Char('d') => { [INFO] [stdout] 739 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 740 + self.kpad.keys |= 1 << 0x9; [INFO] [stdout] 741 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 742 + self.kpad.keys &= !(1 << 0x9); [INFO] [stdout] 743 + } [INFO] [stdout] 744 + }, [INFO] [stdout] 745 + KeyCode::Char('f') => { [INFO] [stdout] 746 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 747 + self.kpad.keys |= 1 << 0xE; [INFO] [stdout] 748 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 749 + self.kpad.keys &= !(1 << 0xE); [INFO] [stdout] 750 + } [INFO] [stdout] 751 + }, [INFO] [stdout] 752 + KeyCode::Char('z') => { [INFO] [stdout] 753 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 754 + self.kpad.keys |= 1 << 0xA; [INFO] [stdout] 755 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 756 + self.kpad.keys &= !(1 << 0xA); [INFO] [stdout] 757 + } [INFO] [stdout] 758 + }, [INFO] [stdout] 759 + KeyCode::Char('x') => { [INFO] [stdout] 760 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 761 + self.kpad.keys |= 1 << 0x0; [INFO] [stdout] 762 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 763 + self.kpad.keys &= !(1 << 0x0); [INFO] [stdout] 764 + } [INFO] [stdout] 765 + }, [INFO] [stdout] 766 + KeyCode::Char('c') => { [INFO] [stdout] 767 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 768 + self.kpad.keys |= 1 << 0xB; [INFO] [stdout] 769 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 770 + self.kpad.keys &= !(1 << 0xB); [INFO] [stdout] 771 + } [INFO] [stdout] 772 + }, [INFO] [stdout] 773 + KeyCode::Char('v') => { [INFO] [stdout] 774 + if evt.kind == KeyEventKind::Press { [INFO] [stdout] 775 + self.kpad.keys |= 1 << 0xF; [INFO] [stdout] 776 + } else if evt.kind == KeyEventKind::Release { [INFO] [stdout] 777 + self.kpad.keys &= !(1 << 0xF); [INFO] [stdout] 778 + } [INFO] [stdout] 779 + }, [INFO] [stdout] 780 + KeyCode::Esc => { [INFO] [stdout] 781 + while disable_raw_mode().is_err() {} [INFO] [stdout] 782 + while execute!(stdout(), PopKeyboardEnhancementFlags).is_err() {} [INFO] [stdout] 783 + process::exit(0x00); [INFO] [stdout] 784 + }, [INFO] [stdout] 785 + _ => { [INFO] [stdout] 786 + while disable_raw_mode().is_err() {} [INFO] [stdout] 787 + return Err(std::io::Error::new(io::ErrorKind::InvalidInput, "")); [INFO] [stdout] 788 + } [INFO] [stdout] 789 + } [INFO] [stdout] 790 + while disable_raw_mode().is_err() {} [INFO] [stdout] 791 + return Ok(KeyPad {keys: self.kpad.keys}); [INFO] [stdout] 792 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:831:5 [INFO] [stdout] | [INFO] [stdout] 831 | return Vec::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 831 - return Vec::new(); [INFO] [stdout] 831 + Vec::new() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | stdout.execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 96 | let _ = stdout.execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:97:9 [INFO] [stdout] | [INFO] [stdout] 97 | queue!(stdout, cursor::MoveTo(0, 0), style::PrintStyledContent(scr.blue())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 97 | let _ = queue!(stdout, cursor::MoveTo(0, 0), style::PrintStyledContent(scr.blue()));; [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:98:9 [INFO] [stdout] | [INFO] [stdout] 98 | stdout.flush(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 98 | let _ = stdout.flush(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:113:25 [INFO] [stdout] | [INFO] [stdout] 113 | queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent("██".blue())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 113 | let _ = queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent("██".blue()));; [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:116:25 [INFO] [stdout] | [INFO] [stdout] 116 | queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent(" ".blue())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 116 | let _ = queue!(stdout, cursor::MoveTo(x as u16, y as u16), style::PrintStyledContent(" ".blue()));; [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | stdout.flush(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 121 | let _ = stdout.flush(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:850:5 [INFO] [stdout] | [INFO] [stdout] 850 | stdout().execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 850 | let _ = stdout().execute(terminal::Clear(terminal::ClearType::All)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:859:5 [INFO] [stdout] | [INFO] [stdout] 859 | / execute!( [INFO] [stdout] 860 | | stdout(), [INFO] [stdout] 861 | | PushKeyboardEnhancementFlags( [INFO] [stdout] 862 | | KeyboardEnhancementFlags::REPORT_EVENT_TYPES [INFO] [stdout] 863 | | ) [INFO] [stdout] 864 | | ); [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 859 ~ let _ = execute!( [INFO] [stdout] 860 | stdout(), [INFO] [stdout] ... [INFO] [stdout] 863 | ) [INFO] [stdout] 864 ~ );; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.32s [INFO] running `Command { std: "docker" "inspect" "d090a93dd14e6e9aba4d69a28ae6808677c5867a7b8df95a36d92c83f5ff5aec", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d090a93dd14e6e9aba4d69a28ae6808677c5867a7b8df95a36d92c83f5ff5aec", kill_on_drop: false }` [INFO] [stdout] d090a93dd14e6e9aba4d69a28ae6808677c5867a7b8df95a36d92c83f5ff5aec