[INFO] cloning repository https://github.com/mattbruv/Gameboy-Crust [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mattbruv/Gameboy-Crust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmattbruv%2FGameboy-Crust", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmattbruv%2FGameboy-Crust'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d936de9b941c7f0144949df8f3ab0f6f02d58468 [INFO] linting mattbruv/Gameboy-Crust against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmattbruv%2FGameboy-Crust" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/mattbruv/Gameboy-Crust [INFO] finished tweaking git repo https://github.com/mattbruv/Gameboy-Crust [INFO] tweaked toml for git repo https://github.com/mattbruv/Gameboy-Crust written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/mattbruv/Gameboy-Crust 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/mattbruv/Gameboy-Crust 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] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded sdl2-sys v0.30.0 [INFO] [stderr] Downloaded kernel32-sys v0.1.4 [INFO] [stderr] Downloaded gcc v0.3.54 [INFO] [stderr] Downloaded minifb v0.10.3 [INFO] [stderr] Downloaded x11-dl v2.14.0 [INFO] [stderr] Downloaded sdl2 v0.30.0 [INFO] [stderr] Downloaded orbclient v0.3.12 [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] 136e64868e4ff76fcff8568ad00a6c4a84850174096db188dbbca0eb198fab54 [INFO] running `Command { std: "docker" "start" "-a" "136e64868e4ff76fcff8568ad00a6c4a84850174096db188dbbca0eb198fab54", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "136e64868e4ff76fcff8568ad00a6c4a84850174096db188dbbca0eb198fab54", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "136e64868e4ff76fcff8568ad00a6c4a84850174096db188dbbca0eb198fab54", kill_on_drop: false }` [INFO] [stdout] 136e64868e4ff76fcff8568ad00a6c4a84850174096db188dbbca0eb198fab54 [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] fb59e52f0435b9c5aa7dc56eb9adf306563c5dd5ae4d2be4daa21a32f2f03dbe [INFO] running `Command { std: "docker" "start" "-a" "fb59e52f0435b9c5aa7dc56eb9adf306563c5dd5ae4d2be4daa21a32f2f03dbe", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Compiling pkg-config v0.3.9 [INFO] [stderr] Checking libc v0.2.32 [INFO] [stderr] Compiling gcc v0.3.54 [INFO] [stderr] Checking lazy_static v0.2.9 [INFO] [stderr] Checking time v0.1.38 [INFO] [stderr] Compiling x11-dl v2.14.0 [INFO] [stderr] Compiling minifb v0.10.3 [INFO] [stderr] Checking gameboy-crust v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::io::*` [INFO] [stdout] --> src/core/helper.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::*; [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 macro definition: `hex` [INFO] [stdout] --> src/core/helper.rs:100:14 [INFO] [stdout] | [INFO] [stdout] 100 | macro_rules! hex { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:46:15 [INFO] [stdout] | [INFO] [stdout] 46 | ROM_START ... ROM_BANK_END => self.rom.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(ellipsis_inclusive_range_patterns)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:47:15 [INFO] [stdout] | [INFO] [stdout] 47 | VRAM_START ... VRAM_END => self.gpu.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:48:15 [INFO] [stdout] | [INFO] [stdout] 48 | ERAM_START ... ERAM_END => self.rom.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:49:15 [INFO] [stdout] | [INFO] [stdout] 49 | WRAM_START ... WRAM_END => self.wram.read(address - WRAM_START), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:50:15 [INFO] [stdout] | [INFO] [stdout] 50 | ECHO_START ... ECHO_END => self.wram.read(address - ECHO_START), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:51:15 [INFO] [stdout] | [INFO] [stdout] 51 | OAM_START ... OAM_END => self.gpu.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:52:15 [INFO] [stdout] | [INFO] [stdout] 52 | HRAM_START ... HRAM_END => self.hram.read(address - HRAM_START), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:63:15 [INFO] [stdout] | [INFO] [stdout] 63 | ROM_START ... ROM_BANK_END => self.rom.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:64:15 [INFO] [stdout] | [INFO] [stdout] 64 | VRAM_START ... VRAM_END => self.gpu.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:65:15 [INFO] [stdout] | [INFO] [stdout] 65 | ERAM_START ... ERAM_END => self.rom.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:66:15 [INFO] [stdout] | [INFO] [stdout] 66 | WRAM_START ... WRAM_END => self.wram.write(address - WRAM_START, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:67:15 [INFO] [stdout] | [INFO] [stdout] 67 | ECHO_START ... ECHO_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:72:15 [INFO] [stdout] | [INFO] [stdout] 72 | OAM_START ... OAM_END => self.gpu.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:73:15 [INFO] [stdout] | [INFO] [stdout] 73 | HRAM_START ... HRAM_END => self.hram.write(address - HRAM_START, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `core::helper::*` [INFO] [stdout] --> src/core/register.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use core::helper::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:127:10 [INFO] [stdout] | [INFO] [stdout] 127 | match (self.f & Flag::Zero as u8) [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] 127 - match (self.f & Flag::Zero as u8) [INFO] [stdout] 127 + match self.f & Flag::Zero as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:132:10 [INFO] [stdout] | [INFO] [stdout] 132 | match (self.f & Flag::Sub as u8) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 132 - match (self.f & Flag::Sub as u8) [INFO] [stdout] 132 + match self.f & Flag::Sub as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:137:10 [INFO] [stdout] | [INFO] [stdout] 137 | match (self.f & Flag::HalfCarry as u8) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 137 - match (self.f & Flag::HalfCarry as u8) [INFO] [stdout] 137 + match self.f & Flag::HalfCarry as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:142:10 [INFO] [stdout] | [INFO] [stdout] 142 | match (self.f & Flag::Carry as u8) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 142 - match (self.f & Flag::Carry as u8) [INFO] [stdout] 142 + match self.f & Flag::Carry as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/rom.rs:25:10 [INFO] [stdout] | [INFO] [stdout] 25 | 0x01 ... 0x03 => Box::new(mbc1::MBC1::new()), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/rom.rs:26:10 [INFO] [stdout] | [INFO] [stdout] 26 | 0x05 ... 0x06 => Box::new(mbc2::MBC2::new()), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/rom.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 27 | 0x0F ... 0x13 => Box::new(mbc3::MBC3::new()), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `core::disassembler::*` [INFO] [stdout] --> src/core/cpu.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use core::disassembler::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:770:34 [INFO] [stdout] | [INFO] [stdout] 770 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 770 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 770 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:783:34 [INFO] [stdout] | [INFO] [stdout] 783 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 783 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 783 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:792:34 [INFO] [stdout] | [INFO] [stdout] 792 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 792 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 792 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:801:34 [INFO] [stdout] | [INFO] [stdout] 801 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 801 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 801 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:810:34 [INFO] [stdout] | [INFO] [stdout] 810 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 810 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 810 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:826:34 [INFO] [stdout] | [INFO] [stdout] 826 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 826 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 826 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:835:34 [INFO] [stdout] | [INFO] [stdout] 835 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 835 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 835 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:855:35 [INFO] [stdout] | [INFO] [stdout] 855 | self.regs.set_flag(Flag::Carry, (bit7 == 1)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 855 - self.regs.set_flag(Flag::Carry, (bit7 == 1)); [INFO] [stdout] 855 + self.regs.set_flag(Flag::Carry, bit7 == 1 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:858:34 [INFO] [stdout] | [INFO] [stdout] 858 | self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 858 - self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] 858 + self.regs.set_flag(Flag::Zero, result == 0 && update_zero ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:870:35 [INFO] [stdout] | [INFO] [stdout] 870 | self.regs.set_flag(Flag::Carry, (bit1 == 1)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 870 - self.regs.set_flag(Flag::Carry, (bit1 == 1)); [INFO] [stdout] 870 + self.regs.set_flag(Flag::Carry, bit1 == 1 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:873:34 [INFO] [stdout] | [INFO] [stdout] 873 | self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 873 - self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] 873 + self.regs.set_flag(Flag::Zero, result == 0 && update_zero ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/core/cpu.rs:921:3 [INFO] [stdout] | [INFO] [stdout] 921 | (!(bit as u8) & n) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 921 - (!(bit as u8) & n) [INFO] [stdout] 921 + !(bit as u8) & n [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:253:7 [INFO] [stdout] | [INFO] [stdout] 253 | 0 ... OAM_PERIOD => { // OAM [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:259:16 [INFO] [stdout] | [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:267:21 [INFO] [stdout] | [INFO] [stdout] 267 | TRANSFER_PERIOD ... HBLANK_PERIOD => { // H-Blank [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/core/gpu.rs:337:13 [INFO] [stdout] | [INFO] [stdout] 337 | let row = (y / 8); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 337 - let row = (y / 8); [INFO] [stdout] 337 + let row = y / 8 ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/core/gpu.rs:342:17 [INFO] [stdout] | [INFO] [stdout] 342 | let column = (x / 8); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 342 - let column = (x / 8); [INFO] [stdout] 342 + let column = x / 8 ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/core/gpu.rs:404:18 [INFO] [stdout] | [INFO] [stdout] 404 | debug_color |= (debug_line_color as u32); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 404 - debug_color |= (debug_line_color as u32); [INFO] [stdout] 404 + debug_color |= debug_line_color as u32 ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/core/gpu.rs:473:9 [INFO] [stdout] | [INFO] [stdout] 473 | if (scanline_y.wrapping_sub(sprite_y) < 8) { // top half [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 473 - if (scanline_y.wrapping_sub(sprite_y) < 8) { // top half [INFO] [stdout] 473 + if scanline_y.wrapping_sub(sprite_y) < 8 { // top half [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:566:15 [INFO] [stdout] | [INFO] [stdout] 566 | VRAM_START ... VRAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:575:15 [INFO] [stdout] | [INFO] [stdout] 575 | OAM_START ... OAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:608:15 [INFO] [stdout] | [INFO] [stdout] 608 | VRAM_START ... VRAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:622:14 [INFO] [stdout] | [INFO] [stdout] 622 | OAM_START ... OAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:45:14 [INFO] [stdout] | [INFO] [stdout] 45 | ROM_START ... ROM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:48:19 [INFO] [stdout] | [INFO] [stdout] 48 | ROM_BANK_START ... ROM_BANK_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:53:15 [INFO] [stdout] | [INFO] [stdout] 53 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:66:11 [INFO] [stdout] | [INFO] [stdout] 66 | 0x0000 ... 0x1FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:74:11 [INFO] [stdout] | [INFO] [stdout] 74 | 0x2000 ... 0x3FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:81:11 [INFO] [stdout] | [INFO] [stdout] 81 | 0x4000 ... 0x5FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:96:11 [INFO] [stdout] | [INFO] [stdout] 96 | 0x6000 ... 0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:103:15 [INFO] [stdout] | [INFO] [stdout] 103 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:33:23 [INFO] [stdout] | [INFO] [stdout] 33 | ROM_START ... ROM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:36:28 [INFO] [stdout] | [INFO] [stdout] 36 | ROM_BANK_START ... ROM_BANK_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:42:24 [INFO] [stdout] | [INFO] [stdout] 42 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:56:20 [INFO] [stdout] | [INFO] [stdout] 56 | 0x0000 ... 0x1FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:63:20 [INFO] [stdout] | [INFO] [stdout] 63 | 0x2000 ... 0x3FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:69:20 [INFO] [stdout] | [INFO] [stdout] 69 | 0x4000 ... 0x5FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:81:20 [INFO] [stdout] | [INFO] [stdout] 81 | 0x6000 ... 0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:84:24 [INFO] [stdout] | [INFO] [stdout] 84 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `interconnect::*` [INFO] [stdout] --> src/core/dma.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use interconnect::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/core/dma.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | if (self.cycles - adjusted_cycles < 0) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 36 - if (self.cycles - adjusted_cycles < 0) { [INFO] [stdout] 36 + if self.cycles - adjusted_cycles < 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/core/timer.rs:55:20 [INFO] [stdout] | [INFO] [stdout] 55 | if (timer_value == 255) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 55 - if (timer_value == 255) { [INFO] [stdout] 55 + if timer_value == 255 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/core/rom.rs:10:18 [INFO] [stdout] | [INFO] [stdout] 10 | controller: Box [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 10 | controller: Box [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/interconnect.rs:53:4 [INFO] [stdout] | [INFO] [stdout] 53 | _ => panic!("Invalid Read") [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/interconnect.rs:53:4 [INFO] [stdout] | [INFO] [stdout] 46 | ROM_START ... ROM_BANK_END => self.rom.read(address), [INFO] [stdout] | --------------------------- matches some of the same values [INFO] [stdout] 47 | VRAM_START ... VRAM_END => self.gpu.read(address), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 48 | ERAM_START ... ERAM_END => self.rom.read(address), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 49 | WRAM_START ... WRAM_END => self.wram.read(address - WRAM_START), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 53 | _ => panic!("Invalid Read") [INFO] [stdout] | ^ ...and 3 other patterns collectively make this unreachable [INFO] [stdout] = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/interconnect.rs:74:4 [INFO] [stdout] | [INFO] [stdout] 74 | _ => panic!("Invalid Write") [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/interconnect.rs:74:4 [INFO] [stdout] | [INFO] [stdout] 63 | ROM_START ... ROM_BANK_END => self.rom.write(address, data), [INFO] [stdout] | --------------------------- matches some of the same values [INFO] [stdout] 64 | VRAM_START ... VRAM_END => self.gpu.write(address, data), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 65 | ERAM_START ... ERAM_END => self.rom.write(address, data), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 66 | WRAM_START ... WRAM_END => self.wram.write(address - WRAM_START, data), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 74 | _ => panic!("Invalid Write") [INFO] [stdout] | ^ ...and 3 other patterns collectively make this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n2` [INFO] [stdout] --> src/core/disassembler.rs:7:6 [INFO] [stdout] | [INFO] [stdout] 7 | let n2 = mem.read(reg.pc + 1); // opcode + 2 [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_n2` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n3` [INFO] [stdout] --> src/core/disassembler.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | let n3 = mem.read(reg.pc + 2); // opcode + 3 [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_n3` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:430:4 [INFO] [stdout] | [INFO] [stdout] 363 | 0xC3 => { let nn = self.next_pointer(memory); self.jump(nn); 4 }, [INFO] [stdout] | ---- matches all the relevant values [INFO] [stdout] ... [INFO] [stdout] 430 | 0xC3 => { self.regs.pc = self.next_pointer(memory); 4 }, [INFO] [stdout] | ^^^^ no value can reach this [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::*` [INFO] [stdout] --> src/core/helper.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::*; [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 macro definition: `hex` [INFO] [stdout] --> src/core/helper.rs:100:14 [INFO] [stdout] | [INFO] [stdout] 100 | macro_rules! hex { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:46:15 [INFO] [stdout] | [INFO] [stdout] 46 | ROM_START ... ROM_BANK_END => self.rom.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(ellipsis_inclusive_range_patterns)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:47:15 [INFO] [stdout] | [INFO] [stdout] 47 | VRAM_START ... VRAM_END => self.gpu.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:48:15 [INFO] [stdout] | [INFO] [stdout] 48 | ERAM_START ... ERAM_END => self.rom.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:49:15 [INFO] [stdout] | [INFO] [stdout] 49 | WRAM_START ... WRAM_END => self.wram.read(address - WRAM_START), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:50:15 [INFO] [stdout] | [INFO] [stdout] 50 | ECHO_START ... ECHO_END => self.wram.read(address - ECHO_START), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:51:15 [INFO] [stdout] | [INFO] [stdout] 51 | OAM_START ... OAM_END => self.gpu.read(address), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:52:15 [INFO] [stdout] | [INFO] [stdout] 52 | HRAM_START ... HRAM_END => self.hram.read(address - HRAM_START), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:63:15 [INFO] [stdout] | [INFO] [stdout] 63 | ROM_START ... ROM_BANK_END => self.rom.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:64:15 [INFO] [stdout] | [INFO] [stdout] 64 | VRAM_START ... VRAM_END => self.gpu.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:65:15 [INFO] [stdout] | [INFO] [stdout] 65 | ERAM_START ... ERAM_END => self.rom.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:66:15 [INFO] [stdout] | [INFO] [stdout] 66 | WRAM_START ... WRAM_END => self.wram.write(address - WRAM_START, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:67:15 [INFO] [stdout] | [INFO] [stdout] 67 | ECHO_START ... ECHO_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:72:15 [INFO] [stdout] | [INFO] [stdout] 72 | OAM_START ... OAM_END => self.gpu.write(address, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/interconnect.rs:73:15 [INFO] [stdout] | [INFO] [stdout] 73 | HRAM_START ... HRAM_END => self.hram.write(address - HRAM_START, data), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `core::helper::*` [INFO] [stdout] --> src/core/register.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use core::helper::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:738:4 [INFO] [stdout] | [INFO] [stdout] 738 | _ => panic!("Unknown Sub-Op: ${:02X} @ ${:04X} dec: {}", opcode, pc, opcode) [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:738:4 [INFO] [stdout] | [INFO] [stdout] 443 | 0x07 => { self.regs.a = self.rotate_left(regs.a, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 444 | 0x00 => { self.regs.b = self.rotate_left(regs.b, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 445 | 0x01 => { self.regs.c = self.rotate_left(regs.c, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 446 | 0x02 => { self.regs.d = self.rotate_left(regs.d, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 738 | _ => panic!("Unknown Sub-Op: ${:02X} @ ${:04X} dec: {}", opcode, pc, opcode) [INFO] [stdout] | ^ ...and 252 other patterns collectively make this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:127:10 [INFO] [stdout] | [INFO] [stdout] 127 | match (self.f & Flag::Zero as u8) [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] 127 - match (self.f & Flag::Zero as u8) [INFO] [stdout] 127 + match self.f & Flag::Zero as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:132:10 [INFO] [stdout] | [INFO] [stdout] 132 | match (self.f & Flag::Sub as u8) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 132 - match (self.f & Flag::Sub as u8) [INFO] [stdout] 132 + match self.f & Flag::Sub as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:137:10 [INFO] [stdout] | [INFO] [stdout] 137 | match (self.f & Flag::HalfCarry as u8) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 137 - match (self.f & Flag::HalfCarry as u8) [INFO] [stdout] 137 + match self.f & Flag::HalfCarry as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `match` scrutinee expression [INFO] [stdout] --> src/core/register.rs:142:10 [INFO] [stdout] | [INFO] [stdout] 142 | match (self.f & Flag::Carry as u8) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 142 - match (self.f & Flag::Carry as u8) [INFO] [stdout] 142 + match self.f & Flag::Carry as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/rom.rs:25:10 [INFO] [stdout] | [INFO] [stdout] 25 | 0x01 ... 0x03 => Box::new(mbc1::MBC1::new()), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/rom.rs:26:10 [INFO] [stdout] | [INFO] [stdout] 26 | 0x05 ... 0x06 => Box::new(mbc2::MBC2::new()), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/rom.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 27 | 0x0F ... 0x13 => Box::new(mbc3::MBC3::new()), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `core::disassembler::*` [INFO] [stdout] --> src/core/cpu.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use core::disassembler::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:1007:7 [INFO] [stdout] | [INFO] [stdout] 1007 | }, _ => unreachable!() [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:1007:7 [INFO] [stdout] | [INFO] [stdout] 996 | Condition::NotZero => { // JP NZ [INFO] [stdout] | ------------------ matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 999 | Condition::Zero => { // JP Z [INFO] [stdout] | --------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1002 | Condition::NotCarry => { // JP NC [INFO] [stdout] | ------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1005 | Condition::Carry => { // JP C [INFO] [stdout] | ---------------- matches some of the same values [INFO] [stdout] 1006 | if self.regs.is_flag_set(Flag::Carry) { self.jump(source); 4 } else { 3 } [INFO] [stdout] 1007 | }, _ => unreachable!() [INFO] [stdout] | ^ collectively making this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:1037:7 [INFO] [stdout] | [INFO] [stdout] 1037 | }, _ => unreachable!() [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:1037:7 [INFO] [stdout] | [INFO] [stdout] 1026 | Condition::NotZero => { // CALL NZ [INFO] [stdout] | ------------------ matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1029 | Condition::Zero => { // CALL Z [INFO] [stdout] | --------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1032 | Condition::NotCarry => { // CALL NC [INFO] [stdout] | ------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1035 | Condition::Carry => { // CALL C [INFO] [stdout] | ---------------- matches some of the same values [INFO] [stdout] 1036 | if self.regs.is_flag_set(Flag::Carry) { self.call(memory, source); 6 } else { 3 } [INFO] [stdout] 1037 | }, _ => unreachable!() [INFO] [stdout] | ^ collectively making this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:1060:7 [INFO] [stdout] | [INFO] [stdout] 1060 | }, _ => unreachable!() [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:1060:7 [INFO] [stdout] | [INFO] [stdout] 1049 | Condition::NotZero => { // CALL NZ [INFO] [stdout] | ------------------ matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1052 | Condition::Zero => { // CALL Z [INFO] [stdout] | --------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1055 | Condition::NotCarry => { // CALL NC [INFO] [stdout] | ------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1058 | Condition::Carry => { // CALL C [INFO] [stdout] | ---------------- matches some of the same values [INFO] [stdout] 1059 | if self.regs.is_flag_set(Flag::Carry) { self.ret(memory); 5 } else { 2 } [INFO] [stdout] 1060 | }, _ => unreachable!() [INFO] [stdout] | ^ collectively making this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:770:34 [INFO] [stdout] | [INFO] [stdout] 770 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 770 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 770 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:783:34 [INFO] [stdout] | [INFO] [stdout] 783 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 783 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 783 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:792:34 [INFO] [stdout] | [INFO] [stdout] 792 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 792 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 792 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:801:34 [INFO] [stdout] | [INFO] [stdout] 801 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 801 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 801 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:810:34 [INFO] [stdout] | [INFO] [stdout] 810 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 810 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 810 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:826:34 [INFO] [stdout] | [INFO] [stdout] 826 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 826 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 826 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:835:34 [INFO] [stdout] | [INFO] [stdout] 835 | self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 835 - self.regs.set_flag(Flag::Zero, (result == 0)); [INFO] [stdout] 835 + self.regs.set_flag(Flag::Zero, result == 0 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:855:35 [INFO] [stdout] | [INFO] [stdout] 855 | self.regs.set_flag(Flag::Carry, (bit7 == 1)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 855 - self.regs.set_flag(Flag::Carry, (bit7 == 1)); [INFO] [stdout] 855 + self.regs.set_flag(Flag::Carry, bit7 == 1 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:858:34 [INFO] [stdout] | [INFO] [stdout] 858 | self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 858 - self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] 858 + self.regs.set_flag(Flag::Zero, result == 0 && update_zero ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:870:35 [INFO] [stdout] | [INFO] [stdout] 870 | self.regs.set_flag(Flag::Carry, (bit1 == 1)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 870 - self.regs.set_flag(Flag::Carry, (bit1 == 1)); [INFO] [stdout] 870 + self.regs.set_flag(Flag::Carry, bit1 == 1 ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around method argument [INFO] [stdout] --> src/core/cpu.rs:873:34 [INFO] [stdout] | [INFO] [stdout] 873 | self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 873 - self.regs.set_flag(Flag::Zero, (result == 0 && update_zero)); [INFO] [stdout] 873 + self.regs.set_flag(Flag::Zero, result == 0 && update_zero ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/core/cpu.rs:921:3 [INFO] [stdout] | [INFO] [stdout] 921 | (!(bit as u8) & n) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 921 - (!(bit as u8) & n) [INFO] [stdout] 921 + !(bit as u8) & n [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:253:7 [INFO] [stdout] | [INFO] [stdout] 253 | 0 ... OAM_PERIOD => { // OAM [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:259:16 [INFO] [stdout] | [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:267:21 [INFO] [stdout] | [INFO] [stdout] 267 | TRANSFER_PERIOD ... HBLANK_PERIOD => { // H-Blank [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple patterns overlap on their endpoints [INFO] [stdout] --> src/core/gpu.rs:259:5 [INFO] [stdout] | [INFO] [stdout] 253 | 0 ... OAM_PERIOD => { // OAM [INFO] [stdout] | ---------------- this range overlaps on `80_usize`... [INFO] [stdout] ... [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... with this range [INFO] [stdout] | [INFO] [stdout] = note: you likely meant to write mutually exclusive ranges [INFO] [stdout] = note: `#[warn(overlapping_range_endpoints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple patterns overlap on their endpoints [INFO] [stdout] --> src/core/gpu.rs:267:5 [INFO] [stdout] | [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ------------------------------ this range overlaps on `252_usize`... [INFO] [stdout] ... [INFO] [stdout] 267 | TRANSFER_PERIOD ... HBLANK_PERIOD => { // H-Blank [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... with this range [INFO] [stdout] | [INFO] [stdout] = note: you likely meant to write mutually exclusive ranges [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `new_mode` [INFO] [stdout] --> src/core/gpu.rs:221:7 [INFO] [stdout] | [INFO] [stdout] 221 | let mut new_mode: StatusMode; [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_mode` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `debug_color` is assigned to, but never used [INFO] [stdout] --> src/core/gpu.rs:402:7 [INFO] [stdout] | [INFO] [stdout] 402 | let mut debug_color: u32 = (debug_line_color as u32) << 16; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_debug_color` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `display_x` [INFO] [stdout] --> src/core/gpu.rs:407:8 [INFO] [stdout] | [INFO] [stdout] 407 | let display_x = (i as u8).wrapping_add(window_x); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_x` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/core/gpu.rs:337:13 [INFO] [stdout] | [INFO] [stdout] 337 | let row = (y / 8); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 337 - let row = (y / 8); [INFO] [stdout] 337 + let row = y / 8 ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `debug_color` is never read [INFO] [stdout] --> src/core/gpu.rs:404:3 [INFO] [stdout] | [INFO] [stdout] 404 | debug_color |= (debug_line_color as u32); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/core/gpu.rs:342:17 [INFO] [stdout] | [INFO] [stdout] 342 | let column = (x / 8); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 342 - let column = (x / 8); [INFO] [stdout] 342 + let column = x / 8 ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/core/gpu.rs:404:18 [INFO] [stdout] | [INFO] [stdout] 404 | debug_color |= (debug_line_color as u32); [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 404 - debug_color |= (debug_line_color as u32); [INFO] [stdout] 404 + debug_color |= debug_line_color as u32 ; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/core/gpu.rs:473:9 [INFO] [stdout] | [INFO] [stdout] 473 | if (scanline_y.wrapping_sub(sprite_y) < 8) { // top half [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 473 - if (scanline_y.wrapping_sub(sprite_y) < 8) { // top half [INFO] [stdout] 473 + if scanline_y.wrapping_sub(sprite_y) < 8 { // top half [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:566:15 [INFO] [stdout] | [INFO] [stdout] 566 | VRAM_START ... VRAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/core/gpu.rs:454:7 [INFO] [stdout] | [INFO] [stdout] 454 | let mut iter = self.sprite_table.clone().into_iter().filter(|sprite| { [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: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:575:15 [INFO] [stdout] | [INFO] [stdout] 575 | OAM_START ... OAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:608:15 [INFO] [stdout] | [INFO] [stdout] 608 | VRAM_START ... VRAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/gpu.rs:622:14 [INFO] [stdout] | [INFO] [stdout] 622 | OAM_START ... OAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `stat` [INFO] [stdout] --> src/core/gpu.rs:589:7 [INFO] [stdout] | [INFO] [stdout] 589 | let stat = self.LCDC.get(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_stat` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:45:14 [INFO] [stdout] | [INFO] [stdout] 45 | ROM_START ... ROM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:48:19 [INFO] [stdout] | [INFO] [stdout] 48 | ROM_BANK_START ... ROM_BANK_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:53:15 [INFO] [stdout] | [INFO] [stdout] 53 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:66:11 [INFO] [stdout] | [INFO] [stdout] 66 | 0x0000 ... 0x1FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:74:11 [INFO] [stdout] | [INFO] [stdout] 74 | 0x2000 ... 0x3FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:81:11 [INFO] [stdout] | [INFO] [stdout] 81 | 0x4000 ... 0x5FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:96:11 [INFO] [stdout] | [INFO] [stdout] 96 | 0x6000 ... 0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `address` [INFO] [stdout] --> src/core/mbc/mbc0.rs:9:22 [INFO] [stdout] | [INFO] [stdout] 9 | fn write(&mut self, address: u16, data: u8) {} [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_address` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `data` [INFO] [stdout] --> src/core/mbc/mbc0.rs:9:36 [INFO] [stdout] | [INFO] [stdout] 9 | fn write(&mut self, address: u16, data: u8) {} [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_data` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc1.rs:103:15 [INFO] [stdout] | [INFO] [stdout] 103 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `name` [INFO] [stdout] --> src/core/mbc/mbc0.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | fn set_title(&mut self, name: String) {} [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:33:23 [INFO] [stdout] | [INFO] [stdout] 33 | ROM_START ... ROM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:36:28 [INFO] [stdout] | [INFO] [stdout] 36 | ROM_BANK_START ... ROM_BANK_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:42:24 [INFO] [stdout] | [INFO] [stdout] 42 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:56:20 [INFO] [stdout] | [INFO] [stdout] 56 | 0x0000 ... 0x1FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:63:20 [INFO] [stdout] | [INFO] [stdout] 63 | 0x2000 ... 0x3FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:69:20 [INFO] [stdout] | [INFO] [stdout] 69 | 0x4000 ... 0x5FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:81:20 [INFO] [stdout] | [INFO] [stdout] 81 | 0x6000 ... 0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `address` [INFO] [stdout] --> src/core/mbc/mbc2.rs:19:22 [INFO] [stdout] | [INFO] [stdout] 19 | fn write(&mut self, address: u16, data: u8) { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_address` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/core/mbc/mbc3.rs:84:24 [INFO] [stdout] | [INFO] [stdout] 84 | ERAM_START ... ERAM_END => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `data` [INFO] [stdout] --> src/core/mbc/mbc2.rs:19:36 [INFO] [stdout] | [INFO] [stdout] 19 | fn write(&mut self, address: u16, data: u8) { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_data` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `name` [INFO] [stdout] --> src/core/mbc/mbc2.rs:22:29 [INFO] [stdout] | [INFO] [stdout] 22 | fn set_title(&mut self, name: String) { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `interconnect::*` [INFO] [stdout] --> src/core/dma.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use interconnect::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/core/dma.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | if (self.cycles - adjusted_cycles < 0) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 36 - if (self.cycles - adjusted_cycles < 0) { [INFO] [stdout] 36 + if self.cycles - adjusted_cycles < 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/core/timer.rs:55:20 [INFO] [stdout] | [INFO] [stdout] 55 | if (timer_value == 255) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 55 - if (timer_value == 255) { [INFO] [stdout] 55 + if timer_value == 255 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/core/joypad.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | let mut result = self.register.get() & 0x30; [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `data` [INFO] [stdout] --> src/core/timer.rs:101:33 [INFO] [stdout] | [INFO] [stdout] 101 | pub fn write_div(&mut self, data: u8) { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_data` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/emu/emulator.rs:36:7 [INFO] [stdout] | [INFO] [stdout] 36 | let mut multiplier = 100; [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `sub` is never used [INFO] [stdout] --> src/core/helper.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 38 | impl MemoryRegister { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 73 | pub fn sub(&mut self, data: u8) { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Serial` is never constructed [INFO] [stdout] --> src/core/interrupt.rs:8:2 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum InterruptFlag { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 8 | Serial = 0b00001000, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `counter` is never read [INFO] [stdout] --> src/core/interrupt.rs:23:2 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct InterruptHandler { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 22 | [INFO] [stdout] 23 | counter: u32, // counts the number of opcodes since interrupt status changed [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `read` is never used [INFO] [stdout] --> src/core/interrupt.rs:48:9 [INFO] [stdout] | [INFO] [stdout] 30 | impl InterruptHandler { [INFO] [stdout] | --------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 48 | pub fn read(&mut self, address: u16) -> u8 { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `disassemble` is never used [INFO] [stdout] --> src/core/disassembler.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn disassemble(reg: &Registers, mem: &Interconnect, opcode: u8) -> String { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SB` is never used [INFO] [stdout] --> src/core/memory_map.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | pub const SB: u16 = 0xFF01; // Serial transfer data [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SC` is never used [INFO] [stdout] --> src/core/memory_map.rs:4:11 [INFO] [stdout] | [INFO] [stdout] 4 | pub const SC: u16 = 0xFF02; // SIO Control [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR10` is never used [INFO] [stdout] --> src/core/memory_map.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const NR10: u16 = 0xFF10; // Sound Mode 1 sweep [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR11` is never used [INFO] [stdout] --> src/core/memory_map.rs:11:11 [INFO] [stdout] | [INFO] [stdout] 11 | pub const NR11: u16 = 0xFF11; // Sound Mode 1 wave pattern [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR12` is never used [INFO] [stdout] --> src/core/memory_map.rs:12:11 [INFO] [stdout] | [INFO] [stdout] 12 | pub const NR12: u16 = 0xFF12; // Sound Mode 1 envelope [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR13` is never used [INFO] [stdout] --> src/core/memory_map.rs:13:11 [INFO] [stdout] | [INFO] [stdout] 13 | pub const NR13: u16 = 0xFF13; // Sound Mode 1 frequency low [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR14` is never used [INFO] [stdout] --> src/core/memory_map.rs:14:11 [INFO] [stdout] | [INFO] [stdout] 14 | pub const NR14: u16 = 0xFF14; // Sound Mode 1 frequency high [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR21` is never used [INFO] [stdout] --> src/core/memory_map.rs:15:11 [INFO] [stdout] | [INFO] [stdout] 15 | pub const NR21: u16 = 0xFF16; // Sound Mode 2 wave pattern [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR22` is never used [INFO] [stdout] --> src/core/memory_map.rs:16:11 [INFO] [stdout] | [INFO] [stdout] 16 | pub const NR22: u16 = 0xFF17; // Sound Mode 2 envelope [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR23` is never used [INFO] [stdout] --> src/core/memory_map.rs:17:11 [INFO] [stdout] | [INFO] [stdout] 17 | pub const NR23: u16 = 0xFF18; // Sound Mode 2 frequency low [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR24` is never used [INFO] [stdout] --> src/core/memory_map.rs:18:11 [INFO] [stdout] | [INFO] [stdout] 18 | pub const NR24: u16 = 0xFF19; // Sound Mode 2 frequency high [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR30` is never used [INFO] [stdout] --> src/core/memory_map.rs:19:11 [INFO] [stdout] | [INFO] [stdout] 19 | pub const NR30: u16 = 0xFF1A; // Sound Mode 3 sound on/off [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR31` is never used [INFO] [stdout] --> src/core/memory_map.rs:20:11 [INFO] [stdout] | [INFO] [stdout] 20 | pub const NR31: u16 = 0xFF1B; // Sound Mode 3 sound length [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR32` is never used [INFO] [stdout] --> src/core/memory_map.rs:21:11 [INFO] [stdout] | [INFO] [stdout] 21 | pub const NR32: u16 = 0xFF1C; // Sound Mode 3 output level [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR33` is never used [INFO] [stdout] --> src/core/memory_map.rs:22:11 [INFO] [stdout] | [INFO] [stdout] 22 | pub const NR33: u16 = 0xFF1D; // Sound Mode 3 frequency low [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR34` is never used [INFO] [stdout] --> src/core/memory_map.rs:23:11 [INFO] [stdout] | [INFO] [stdout] 23 | pub const NR34: u16 = 0xFF1E; // Sound Mode 3 frequency high [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR41` is never used [INFO] [stdout] --> src/core/memory_map.rs:24:11 [INFO] [stdout] | [INFO] [stdout] 24 | pub const NR41: u16 = 0xFF20; // Sound Mode 4 sound length [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR42` is never used [INFO] [stdout] --> src/core/memory_map.rs:25:11 [INFO] [stdout] | [INFO] [stdout] 25 | pub const NR42: u16 = 0xFF21; // Sound Mode 4 envelope [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR43` is never used [INFO] [stdout] --> src/core/memory_map.rs:26:11 [INFO] [stdout] | [INFO] [stdout] 26 | pub const NR43: u16 = 0xFF22; // Sound Mode 4 polynomial counter [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR44` is never used [INFO] [stdout] --> src/core/memory_map.rs:27:11 [INFO] [stdout] | [INFO] [stdout] 27 | pub const NR44: u16 = 0xFF23; // Sound Mode 4 counter/consecutive [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR50` is never used [INFO] [stdout] --> src/core/memory_map.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub const NR50: u16 = 0xFF24; // Channel Control/Volume [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR51` is never used [INFO] [stdout] --> src/core/memory_map.rs:29:11 [INFO] [stdout] | [INFO] [stdout] 29 | pub const NR51: u16 = 0xFF25; // Sound output terminal [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR52` is never used [INFO] [stdout] --> src/core/memory_map.rs:30:11 [INFO] [stdout] | [INFO] [stdout] 30 | pub const NR52: u16 = 0xFF26; // Sound on/off [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `size` is never used [INFO] [stdout] --> src/core/rom.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 13 | impl Rom { [INFO] [stdout] | -------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `StatusInterrupt` is never used [INFO] [stdout] --> src/core/gpu.rs:33:6 [INFO] [stdout] | [INFO] [stdout] 33 | enum StatusInterrupt { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_stat` is never used [INFO] [stdout] --> src/core/gpu.rs:550:5 [INFO] [stdout] | [INFO] [stdout] 108 | impl Gpu { [INFO] [stdout] | -------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 550 | fn set_stat(&mut self, mode: StatusInterrupt) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `size` is never used [INFO] [stdout] --> src/core/wram.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 8 | impl Wram { [INFO] [stdout] | --------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 15 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/core/rom.rs:10:18 [INFO] [stdout] | [INFO] [stdout] 10 | controller: Box [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 10 | controller: Box [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `size` is never used [INFO] [stdout] --> src/core/hram.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 8 | impl Hram { [INFO] [stdout] | --------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 15 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rom_bank` is never read [INFO] [stdout] --> src/core/mbc/mbc2.rs:4:2 [INFO] [stdout] | [INFO] [stdout] 3 | pub struct MBC2 { [INFO] [stdout] | ---- field in this struct [INFO] [stdout] 4 | rom_bank: u8 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `rtc_register` and `select_ram_bank` are never read [INFO] [stdout] --> src/core/mbc/mbc3.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct MBC3 { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 9 | rtc_register: u8, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 10 | ram_timer_enable: bool, [INFO] [stdout] 11 | select_ram_bank: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/helper.rs:16:32 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn dump(name: &str, bytes: &Vec) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 16 - pub fn dump(name: &str, bytes: &Vec) { [INFO] [stdout] 16 + pub fn dump(name: &str, bytes: &[u8]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/helper.rs:58:3 [INFO] [stdout] | [INFO] [stdout] 58 | self.value = self.value | b as u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.value |= b as u8` [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/core/helper.rs:62:3 [INFO] [stdout] | [INFO] [stdout] 62 | self.value = self.value & !(b as u8); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.value &= !(b as u8)` [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 `if` statement can be collapsed [INFO] [stdout] --> src/core/interrupt.rs:72:5 [INFO] [stdout] | [INFO] [stdout] 72 | / if interrupt_enable & bit > 0 { [INFO] [stdout] 73 | | if interrupt_flag & bit > 0 { [INFO] [stdout] 74 | | self.IF.set(interrupt_flag & !bit); [INFO] [stdout] 75 | | address = match bit { [INFO] [stdout] ... | [INFO] [stdout] 85 | | } [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] 72 ~ if interrupt_enable & bit > 0 [INFO] [stdout] 73 ~ && interrupt_flag & bit > 0 { [INFO] [stdout] 74 | self.IF.set(interrupt_flag & !bit); [INFO] [stdout] ... [INFO] [stdout] 83 | break; [INFO] [stdout] 84 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u16` is unnecessary [INFO] [stdout] --> src/core/disassembler.rs:93:15 [INFO] [stdout] | [INFO] [stdout] 93 | mem.read((0xFF00 as u16).wrapping_add(reg.c as u16)), [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `0xFF00_u16` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/core/register.rs:103:3 [INFO] [stdout] | [INFO] [stdout] 103 | / match self.f & flag as u8 { [INFO] [stdout] 104 | | 0 => false, [INFO] [stdout] 105 | | _ => true [INFO] [stdout] 106 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 103 - match self.f & flag as u8 { [INFO] [stdout] 104 - 0 => false, [INFO] [stdout] 105 - _ => true [INFO] [stdout] 106 - } [INFO] [stdout] 103 + !matches!(self.f & flag as u8, 0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `CPU` contains a capitalized acronym [INFO] [stdout] --> src/core/cpu.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct CPU { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Cpu` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: some ranges overlap [INFO] [stdout] --> src/core/cpu.rs:363:4 [INFO] [stdout] | [INFO] [stdout] 363 | 0xC3 => { let nn = self.next_pointer(memory); self.jump(nn); 4 }, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] note: overlaps with this [INFO] [stdout] --> src/core/cpu.rs:430:4 [INFO] [stdout] | [INFO] [stdout] 430 | 0xC3 => { self.regs.pc = self.next_pointer(memory); 4 }, [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stdout] = note: `#[warn(clippy::match_overlapping_arm)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/interconnect.rs:53:4 [INFO] [stdout] | [INFO] [stdout] 53 | _ => panic!("Invalid Read") [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/interconnect.rs:53:4 [INFO] [stdout] | [INFO] [stdout] 46 | ROM_START ... ROM_BANK_END => self.rom.read(address), [INFO] [stdout] | --------------------------- matches some of the same values [INFO] [stdout] 47 | VRAM_START ... VRAM_END => self.gpu.read(address), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 48 | ERAM_START ... ERAM_END => self.rom.read(address), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 49 | WRAM_START ... WRAM_END => self.wram.read(address - WRAM_START), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 53 | _ => panic!("Invalid Read") [INFO] [stdout] | ^ ...and 3 other patterns collectively make this unreachable [INFO] [stdout] = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/interconnect.rs:74:4 [INFO] [stdout] | [INFO] [stdout] 74 | _ => panic!("Invalid Write") [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/interconnect.rs:74:4 [INFO] [stdout] | [INFO] [stdout] 63 | ROM_START ... ROM_BANK_END => self.rom.write(address, data), [INFO] [stdout] | --------------------------- matches some of the same values [INFO] [stdout] 64 | VRAM_START ... VRAM_END => self.gpu.write(address, data), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 65 | ERAM_START ... ERAM_END => self.rom.write(address, data), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] 66 | WRAM_START ... WRAM_END => self.wram.write(address - WRAM_START, data), [INFO] [stdout] | ----------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 74 | _ => panic!("Invalid Write") [INFO] [stdout] | ^ ...and 3 other patterns collectively make this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n2` [INFO] [stdout] --> src/core/disassembler.rs:7:6 [INFO] [stdout] | [INFO] [stdout] 7 | let n2 = mem.read(reg.pc + 1); // opcode + 2 [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_n2` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n3` [INFO] [stdout] --> src/core/disassembler.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | let n3 = mem.read(reg.pc + 2); // opcode + 3 [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_n3` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:430:4 [INFO] [stdout] | [INFO] [stdout] 363 | 0xC3 => { let nn = self.next_pointer(memory); self.jump(nn); 4 }, [INFO] [stdout] | ---- matches all the relevant values [INFO] [stdout] ... [INFO] [stdout] 430 | 0xC3 => { self.regs.pc = self.next_pointer(memory); 4 }, [INFO] [stdout] | ^^^^ no value can reach this [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:738:4 [INFO] [stdout] | [INFO] [stdout] 738 | _ => panic!("Unknown Sub-Op: ${:02X} @ ${:04X} dec: {}", opcode, pc, opcode) [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:738:4 [INFO] [stdout] | [INFO] [stdout] 443 | 0x07 => { self.regs.a = self.rotate_left(regs.a, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 444 | 0x00 => { self.regs.b = self.rotate_left(regs.b, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 445 | 0x01 => { self.regs.c = self.rotate_left(regs.c, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 446 | 0x02 => { self.regs.d = self.rotate_left(regs.d, false, true); 2 }, [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 738 | _ => panic!("Unknown Sub-Op: ${:02X} @ ${:04X} dec: {}", opcode, pc, opcode) [INFO] [stdout] | ^ ...and 252 other patterns collectively make this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/core/gpu.rs:197:18 [INFO] [stdout] | [INFO] [stdout] 197 | let x_flip = (x - 7) * -1; [INFO] [stdout] | ^^^^^^^^^^^^ help: consider using: `-(x - 7)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] = note: `#[warn(clippy::neg_multiply)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/core/gpu.rs:254:6 [INFO] [stdout] | [INFO] [stdout] 254 | / if old_mode != StatusMode::Oam { [INFO] [stdout] 255 | | self.set_mode(StatusMode::Oam); [INFO] [stdout] 256 | | request_interrupt = self.STAT.is_set(Bit::Bit5); [INFO] [stdout] 257 | | } [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] 253 ~ 0 ... OAM_PERIOD // OAM [INFO] [stdout] 254 ~ if old_mode != StatusMode::Oam => { [INFO] [stdout] 255 | self.set_mode(StatusMode::Oam); [INFO] [stdout] 256 | request_interrupt = self.STAT.is_set(Bit::Bit5); [INFO] [stdout] 257 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/core/gpu.rs:260:6 [INFO] [stdout] | [INFO] [stdout] 260 | / if old_mode != StatusMode::Transfer { [INFO] [stdout] 261 | | self.set_mode(StatusMode::Transfer); [INFO] [stdout] ... | [INFO] [stdout] 265 | | } [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] 259 ~ OAM_PERIOD ... TRANSFER_PERIOD // Transfer [INFO] [stdout] 260 ~ if old_mode != StatusMode::Transfer => { [INFO] [stdout] 261 | self.set_mode(StatusMode::Transfer); [INFO] [stdout] ... [INFO] [stdout] 264 | self.update_scanline(); [INFO] [stdout] 265 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:1007:7 [INFO] [stdout] | [INFO] [stdout] 1007 | }, _ => unreachable!() [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:1007:7 [INFO] [stdout] | [INFO] [stdout] 996 | Condition::NotZero => { // JP NZ [INFO] [stdout] | ------------------ matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 999 | Condition::Zero => { // JP Z [INFO] [stdout] | --------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1002 | Condition::NotCarry => { // JP NC [INFO] [stdout] | ------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1005 | Condition::Carry => { // JP C [INFO] [stdout] | ---------------- matches some of the same values [INFO] [stdout] 1006 | if self.regs.is_flag_set(Flag::Carry) { self.jump(source); 4 } else { 3 } [INFO] [stdout] 1007 | }, _ => unreachable!() [INFO] [stdout] | ^ collectively making this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:1037:7 [INFO] [stdout] | [INFO] [stdout] 1037 | }, _ => unreachable!() [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:1037:7 [INFO] [stdout] | [INFO] [stdout] 1026 | Condition::NotZero => { // CALL NZ [INFO] [stdout] | ------------------ matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1029 | Condition::Zero => { // CALL Z [INFO] [stdout] | --------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1032 | Condition::NotCarry => { // CALL NC [INFO] [stdout] | ------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1035 | Condition::Carry => { // CALL C [INFO] [stdout] | ---------------- matches some of the same values [INFO] [stdout] 1036 | if self.regs.is_flag_set(Flag::Carry) { self.call(memory, source); 6 } else { 3 } [INFO] [stdout] 1037 | }, _ => unreachable!() [INFO] [stdout] | ^ collectively making this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/core/gpu.rs:269:6 [INFO] [stdout] | [INFO] [stdout] 269 | / if old_mode != StatusMode::HBlank { [INFO] [stdout] 270 | | self.set_mode(StatusMode::HBlank); [INFO] [stdout] 271 | | request_interrupt = self.STAT.is_set(Bit::Bit3); [INFO] [stdout] 272 | | } [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] 267 ~ TRANSFER_PERIOD ... HBLANK_PERIOD // H-Blank [INFO] [stdout] 268 | // We have just entered H-Blank [INFO] [stdout] 269 ~ if old_mode != StatusMode::HBlank => { [INFO] [stdout] 270 | self.set_mode(StatusMode::HBlank); [INFO] [stdout] 271 | request_interrupt = self.STAT.is_set(Bit::Bit3); [INFO] [stdout] 272 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: some ranges overlap [INFO] [stdout] --> src/core/gpu.rs:253:5 [INFO] [stdout] | [INFO] [stdout] 253 | 0 ... OAM_PERIOD => { // OAM [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: overlaps with this [INFO] [stdout] --> src/core/gpu.rs:259:5 [INFO] [stdout] | [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/gpu.rs:322:45 [INFO] [stdout] | [INFO] [stdout] 322 | fn draw_background(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 322 - fn draw_background(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] 322 + fn draw_background(&mut self, bg_priority: &mut [bool]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `bg_priority` [INFO] [stdout] --> src/core/gpu.rs:340:12 [INFO] [stdout] | [INFO] [stdout] 340 | for i in 0..FRAME_WIDTH { [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] 340 - for i in 0..FRAME_WIDTH { [INFO] [stdout] 340 + for (i, ) in bg_priority.iter_mut().enumerate().take(FRAME_WIDTH) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/core/cpu.rs:1060:7 [INFO] [stdout] | [INFO] [stdout] 1060 | }, _ => unreachable!() [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/core/cpu.rs:1060:7 [INFO] [stdout] | [INFO] [stdout] 1049 | Condition::NotZero => { // CALL NZ [INFO] [stdout] | ------------------ matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1052 | Condition::Zero => { // CALL Z [INFO] [stdout] | --------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1055 | Condition::NotCarry => { // CALL NC [INFO] [stdout] | ------------------- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 1058 | Condition::Carry => { // CALL C [INFO] [stdout] | ---------------- matches some of the same values [INFO] [stdout] 1059 | if self.regs.is_flag_set(Flag::Carry) { self.ret(memory); 5 } else { 2 } [INFO] [stdout] 1060 | }, _ => unreachable!() [INFO] [stdout] | ^ collectively making this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple patterns overlap on their endpoints [INFO] [stdout] --> src/core/gpu.rs:259:5 [INFO] [stdout] | [INFO] [stdout] 253 | 0 ... OAM_PERIOD => { // OAM [INFO] [stdout] | ---------------- this range overlaps on `80_usize`... [INFO] [stdout] ... [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... with this range [INFO] [stdout] | [INFO] [stdout] = note: you likely meant to write mutually exclusive ranges [INFO] [stdout] = note: `#[warn(overlapping_range_endpoints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple patterns overlap on their endpoints [INFO] [stdout] --> src/core/gpu.rs:267:5 [INFO] [stdout] | [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ------------------------------ this range overlaps on `252_usize`... [INFO] [stdout] ... [INFO] [stdout] 267 | TRANSFER_PERIOD ... HBLANK_PERIOD => { // H-Blank [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... with this range [INFO] [stdout] | [INFO] [stdout] = note: you likely meant to write mutually exclusive ranges [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `new_mode` [INFO] [stdout] --> src/core/gpu.rs:221:7 [INFO] [stdout] | [INFO] [stdout] 221 | let mut new_mode: StatusMode; [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_mode` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/core/gpu.rs:372:22 [INFO] [stdout] | [INFO] [stdout] 372 | self.frame_buffer[offset as usize] = color; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `offset` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `debug_color` is assigned to, but never used [INFO] [stdout] --> src/core/gpu.rs:402:7 [INFO] [stdout] | [INFO] [stdout] 402 | let mut debug_color: u32 = (debug_line_color as u32) << 16; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_debug_color` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/gpu.rs:377:41 [INFO] [stdout] | [INFO] [stdout] 377 | fn draw_window(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 377 - fn draw_window(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] 377 + fn draw_window(&mut self, bg_priority: &mut [bool]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `display_x` [INFO] [stdout] --> src/core/gpu.rs:407:8 [INFO] [stdout] | [INFO] [stdout] 407 | let display_x = (i as u8).wrapping_add(window_x); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_x` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `debug_color` is never read [INFO] [stdout] --> src/core/gpu.rs:404:3 [INFO] [stdout] | [INFO] [stdout] 404 | debug_color |= (debug_line_color as u32); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `bg_priority` [INFO] [stdout] --> src/core/gpu.rs:406:12 [INFO] [stdout] | [INFO] [stdout] 406 | for i in 0..FRAME_WIDTH { [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] 406 - for i in 0..FRAME_WIDTH { [INFO] [stdout] 406 + for (i, ) in bg_priority.iter_mut().enumerate().take(FRAME_WIDTH) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/core/gpu.rs:454:7 [INFO] [stdout] | [INFO] [stdout] 454 | let mut iter = self.sprite_table.clone().into_iter().filter(|sprite| { [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/core/gpu.rs:436:22 [INFO] [stdout] | [INFO] [stdout] 436 | self.frame_buffer[buffer_offset as usize] = color; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `buffer_offset` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `stat` [INFO] [stdout] --> src/core/gpu.rs:589:7 [INFO] [stdout] | [INFO] [stdout] 589 | let stat = self.LCDC.get(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_stat` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/gpu.rs:442:42 [INFO] [stdout] | [INFO] [stdout] 442 | fn draw_sprites(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 442 - fn draw_sprites(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] 442 + fn draw_sprites(&mut self, bg_priority: &mut [bool]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `address` [INFO] [stdout] --> src/core/mbc/mbc0.rs:9:22 [INFO] [stdout] | [INFO] [stdout] 9 | fn write(&mut self, address: u16, data: u8) {} [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_address` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/core/gpu.rs:455:77 [INFO] [stdout] | [INFO] [stdout] 455 | scanline_y as i32 >= sprite.y_pos && scanline_y as i32 <= sprite.y_pos + sprite_y_max as i32 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `sprite_y_max` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `data` [INFO] [stdout] --> src/core/mbc/mbc0.rs:9:36 [INFO] [stdout] | [INFO] [stdout] 9 | fn write(&mut self, address: u16, data: u8) {} [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_data` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/core/gpu.rs:466:16 [INFO] [stdout] | [INFO] [stdout] 466 | true => { ((pixel_y as i8 - 7) * -1) as u8 }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(pixel_y as i8 - 7)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `name` [INFO] [stdout] --> src/core/mbc/mbc0.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | fn set_title(&mut self, name: String) {} [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/core/gpu.rs:502:15 [INFO] [stdout] | [INFO] [stdout] 502 | true => ((pixel_x as i8 - 7) * -1) as u8, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(pixel_x as i8 - 7)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `address` [INFO] [stdout] --> src/core/mbc/mbc2.rs:19:22 [INFO] [stdout] | [INFO] [stdout] 19 | fn write(&mut self, address: u16, data: u8) { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_address` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `data` [INFO] [stdout] --> src/core/mbc/mbc2.rs:19:36 [INFO] [stdout] | [INFO] [stdout] 19 | fn write(&mut self, address: u16, data: u8) { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_data` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `name` [INFO] [stdout] --> src/core/mbc/mbc2.rs:22:29 [INFO] [stdout] | [INFO] [stdout] 22 | fn set_title(&mut self, name: String) { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/core/gpu.rs:509:5 [INFO] [stdout] | [INFO] [stdout] 509 | / if sprite.behind_background { [INFO] [stdout] 510 | | if bg_priority[adjusted_x as usize] { [INFO] [stdout] 511 | | continue; [INFO] [stdout] 512 | | } [INFO] [stdout] 513 | | } [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] 509 ~ if sprite.behind_background [INFO] [stdout] 510 ~ && bg_priority[adjusted_x as usize] { [INFO] [stdout] 511 | continue; [INFO] [stdout] 512 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/core/joypad.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | let mut result = self.register.get() & 0x30; [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `data` [INFO] [stdout] --> src/core/timer.rs:101:33 [INFO] [stdout] | [INFO] [stdout] 101 | pub fn write_div(&mut self, data: u8) { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_data` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core/gpu.rs:624:50 [INFO] [stdout] | [INFO] [stdout] 624 | StatusMode::Oam | StatusMode::Transfer => { return; }, [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] 624 ~ StatusMode::Oam | StatusMode::Transfer => {}, [INFO] [stdout] 625 | _ => { [INFO] [stdout] ... [INFO] [stdout] 628 | } [INFO] [stdout] 629 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> src/core/mbc/mbc1.rs:50:19 [INFO] [stdout] | [INFO] [stdout] 50 | let offset = (0x4000 as u32 * self.rom_bank as u32) + index as u32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `0x4000_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> src/core/mbc/mbc1.rs:56:19 [INFO] [stdout] | [INFO] [stdout] 56 | let offset = (0x2000 as u32 * self.ram_bank as u32) + index as u32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `0x2000_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/emu/emulator.rs:36:7 [INFO] [stdout] | [INFO] [stdout] 36 | let mut multiplier = 100; [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `sub` is never used [INFO] [stdout] --> src/core/helper.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 38 | impl MemoryRegister { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 73 | pub fn sub(&mut self, data: u8) { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/core/mbc/mbc1.rs:68:24 [INFO] [stdout] | [INFO] [stdout] 68 | self.ram_enabled = match bits { [INFO] [stdout] | ____________________________________^ [INFO] [stdout] 69 | | 0x0A => true, [INFO] [stdout] 70 | | _ => false, [INFO] [stdout] 71 | | }; [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 68 - self.ram_enabled = match bits { [INFO] [stdout] 69 - 0x0A => true, [INFO] [stdout] 70 - _ => false, [INFO] [stdout] 71 - }; [INFO] [stdout] 68 + self.ram_enabled = matches!(bits, 0x0A); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Serial` is never constructed [INFO] [stdout] --> src/core/interrupt.rs:8:2 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum InterruptFlag { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 8 | Serial = 0b00001000, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/mbc/mbc1.rs:86:7 [INFO] [stdout] | [INFO] [stdout] 86 | self.rom_bank = self.rom_bank | (bank_id << 5); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.rom_bank |= (bank_id << 5)` [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: field `counter` is never read [INFO] [stdout] --> src/core/interrupt.rs:23:2 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct InterruptHandler { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 22 | [INFO] [stdout] 23 | counter: u32, // counts the number of opcodes since interrupt status changed [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> src/core/mbc/mbc1.rs:106:19 [INFO] [stdout] | [INFO] [stdout] 106 | let offset = (0x2000 as u32 * self.ram_bank as u32) + index as u32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `0x2000_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `read` is never used [INFO] [stdout] --> src/core/interrupt.rs:48:9 [INFO] [stdout] | [INFO] [stdout] 30 | impl InterruptHandler { [INFO] [stdout] | --------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 48 | pub fn read(&mut self, address: u16) -> u8 { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `disassemble` is never used [INFO] [stdout] --> src/core/disassembler.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn disassemble(reg: &Registers, mem: &Interconnect, opcode: u8) -> String { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SB` is never used [INFO] [stdout] --> src/core/memory_map.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | pub const SB: u16 = 0xFF01; // Serial transfer data [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/core/mbc/mbc3.rs:58:41 [INFO] [stdout] | [INFO] [stdout] 58 | self.ram_timer_enable = match data { [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 59 | | 0x0A => true, [INFO] [stdout] 60 | | _ => false, [INFO] [stdout] 61 | | }; [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 58 - self.ram_timer_enable = match data { [INFO] [stdout] 59 - 0x0A => true, [INFO] [stdout] 60 - _ => false, [INFO] [stdout] 61 - }; [INFO] [stdout] 58 + self.ram_timer_enable = matches!(data, 0x0A); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SC` is never used [INFO] [stdout] --> src/core/memory_map.rs:4:11 [INFO] [stdout] | [INFO] [stdout] 4 | pub const SC: u16 = 0xFF02; // SIO Control [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR10` is never used [INFO] [stdout] --> src/core/memory_map.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const NR10: u16 = 0xFF10; // Sound Mode 1 sweep [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/mbc/mod.rs:7:24 [INFO] [stdout] | [INFO] [stdout] 7 | fn read(&self, bytes: &Vec, address: u16) -> u8; [INFO] [stdout] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR11` is never used [INFO] [stdout] --> src/core/memory_map.rs:11:11 [INFO] [stdout] | [INFO] [stdout] 11 | pub const NR11: u16 = 0xFF11; // Sound Mode 1 wave pattern [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR12` is never used [INFO] [stdout] --> src/core/memory_map.rs:12:11 [INFO] [stdout] | [INFO] [stdout] 12 | pub const NR12: u16 = 0xFF12; // Sound Mode 1 envelope [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:39:17 [INFO] [stdout] | [INFO] [stdout] 39 | self.button_state = self.button_state | input; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.button_state |= input` [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: constant `NR13` is never used [INFO] [stdout] --> src/core/memory_map.rs:13:11 [INFO] [stdout] | [INFO] [stdout] 13 | pub const NR13: u16 = 0xFF13; // Sound Mode 1 frequency low [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR14` is never used [INFO] [stdout] --> src/core/memory_map.rs:14:11 [INFO] [stdout] | [INFO] [stdout] 14 | pub const NR14: u16 = 0xFF14; // Sound Mode 1 frequency high [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:42:24 [INFO] [stdout] | [INFO] [stdout] 42 | false => { self.button_state = self.button_state & !input; }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.button_state &= !input` [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: constant `NR21` is never used [INFO] [stdout] --> src/core/memory_map.rs:15:11 [INFO] [stdout] | [INFO] [stdout] 15 | pub const NR21: u16 = 0xFF16; // Sound Mode 2 wave pattern [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR22` is never used [INFO] [stdout] --> src/core/memory_map.rs:16:11 [INFO] [stdout] | [INFO] [stdout] 16 | pub const NR22: u16 = 0xFF17; // Sound Mode 2 envelope [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | self.directional_state = self.directional_state | input; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.directional_state |= input` [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: constant `NR23` is never used [INFO] [stdout] --> src/core/memory_map.rs:17:11 [INFO] [stdout] | [INFO] [stdout] 17 | pub const NR23: u16 = 0xFF18; // Sound Mode 2 frequency low [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR24` is never used [INFO] [stdout] --> src/core/memory_map.rs:18:11 [INFO] [stdout] | [INFO] [stdout] 18 | pub const NR24: u16 = 0xFF19; // Sound Mode 2 frequency high [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:52:24 [INFO] [stdout] | [INFO] [stdout] 52 | false => { self.directional_state = self.directional_state & !input; }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.directional_state &= !input` [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: constant `NR30` is never used [INFO] [stdout] --> src/core/memory_map.rs:19:11 [INFO] [stdout] | [INFO] [stdout] 19 | pub const NR30: u16 = 0xFF1A; // Sound Mode 3 sound on/off [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR31` is never used [INFO] [stdout] --> src/core/memory_map.rs:20:11 [INFO] [stdout] | [INFO] [stdout] 20 | pub const NR31: u16 = 0xFF1B; // Sound Mode 3 sound length [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR32` is never used [INFO] [stdout] --> src/core/memory_map.rs:21:11 [INFO] [stdout] | [INFO] [stdout] 21 | pub const NR32: u16 = 0xFF1C; // Sound Mode 3 output level [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR33` is never used [INFO] [stdout] --> src/core/memory_map.rs:22:11 [INFO] [stdout] | [INFO] [stdout] 22 | pub const NR33: u16 = 0xFF1D; // Sound Mode 3 frequency low [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR34` is never used [INFO] [stdout] --> src/core/memory_map.rs:23:11 [INFO] [stdout] | [INFO] [stdout] 23 | pub const NR34: u16 = 0xFF1E; // Sound Mode 3 frequency high [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/emu/emulator.rs:71:7 [INFO] [stdout] | [INFO] [stdout] 71 | if !(elapsed_time > frame_time) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(elapsed_time <= frame_time)` [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: constant `NR41` is never used [INFO] [stdout] --> src/core/memory_map.rs:24:11 [INFO] [stdout] | [INFO] [stdout] 24 | pub const NR41: u16 = 0xFF20; // Sound Mode 4 sound length [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR42` is never used [INFO] [stdout] --> src/core/memory_map.rs:25:11 [INFO] [stdout] | [INFO] [stdout] 25 | pub const NR42: u16 = 0xFF21; // Sound Mode 4 envelope [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR43` is never used [INFO] [stdout] --> src/core/memory_map.rs:26:11 [INFO] [stdout] | [INFO] [stdout] 26 | pub const NR43: u16 = 0xFF22; // Sound Mode 4 polynomial counter [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR44` is never used [INFO] [stdout] --> src/core/memory_map.rs:27:11 [INFO] [stdout] | [INFO] [stdout] 27 | pub const NR44: u16 = 0xFF23; // Sound Mode 4 counter/consecutive [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR50` is never used [INFO] [stdout] --> src/core/memory_map.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub const NR50: u16 = 0xFF24; // Channel Control/Volume [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR51` is never used [INFO] [stdout] --> src/core/memory_map.rs:29:11 [INFO] [stdout] | [INFO] [stdout] 29 | pub const NR51: u16 = 0xFF25; // Sound output terminal [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `NR52` is never used [INFO] [stdout] --> src/core/memory_map.rs:30:11 [INFO] [stdout] | [INFO] [stdout] 30 | pub const NR52: u16 = 0xFF26; // Sound on/off [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `size` is never used [INFO] [stdout] --> src/core/rom.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 13 | impl Rom { [INFO] [stdout] | -------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `StatusInterrupt` is never used [INFO] [stdout] --> src/core/gpu.rs:33:6 [INFO] [stdout] | [INFO] [stdout] 33 | enum StatusInterrupt { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_stat` is never used [INFO] [stdout] --> src/core/gpu.rs:550:5 [INFO] [stdout] | [INFO] [stdout] 108 | impl Gpu { [INFO] [stdout] | -------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 550 | fn set_stat(&mut self, mode: StatusInterrupt) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `size` is never used [INFO] [stdout] --> src/core/wram.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 8 | impl Wram { [INFO] [stdout] | --------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 15 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `size` is never used [INFO] [stdout] --> src/core/hram.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 8 | impl Hram { [INFO] [stdout] | --------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 15 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rom_bank` is never read [INFO] [stdout] --> src/core/mbc/mbc2.rs:4:2 [INFO] [stdout] | [INFO] [stdout] 3 | pub struct MBC2 { [INFO] [stdout] | ---- field in this struct [INFO] [stdout] 4 | rom_bank: u8 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `rtc_register` and `select_ram_bank` are never read [INFO] [stdout] --> src/core/mbc/mbc3.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct MBC3 { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 9 | rtc_register: u8, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 10 | ram_timer_enable: bool, [INFO] [stdout] 11 | select_ram_bank: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/helper.rs:16:32 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn dump(name: &str, bytes: &Vec) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 16 - pub fn dump(name: &str, bytes: &Vec) { [INFO] [stdout] 16 + pub fn dump(name: &str, bytes: &[u8]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/helper.rs:58:3 [INFO] [stdout] | [INFO] [stdout] 58 | self.value = self.value | b as u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.value |= b as u8` [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/core/helper.rs:62:3 [INFO] [stdout] | [INFO] [stdout] 62 | self.value = self.value & !(b as u8); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.value &= !(b as u8)` [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: unused `std::result::Result` that must be used [INFO] [stdout] --> src/core/helper.rs:18:2 [INFO] [stdout] | [INFO] [stdout] 18 | file.write_all(bytes); [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] 18 | let _ = file.write_all(bytes); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/core/helper.rs:28:13 [INFO] [stdout] | [INFO] [stdout] 28 | f.read_to_end(&mut temp_vec); [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] 28 | let _ = f.read_to_end(&mut temp_vec); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IE` should have a snake case name [INFO] [stdout] --> src/core/interrupt.rs:26:6 [INFO] [stdout] | [INFO] [stdout] 26 | pub IE: MemoryRegister, // used to control intterupts [INFO] [stdout] | ^^ help: convert the identifier to snake case: `ie` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IF` should have a snake case name [INFO] [stdout] --> src/core/interrupt.rs:27:6 [INFO] [stdout] | [INFO] [stdout] 27 | pub IF: MemoryRegister, // indicates which type of interrupt is set [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] help: rename the identifier or convert it to a snake case raw identifier [INFO] [stdout] | [INFO] [stdout] 27 - pub IF: MemoryRegister, // indicates which type of interrupt is set [INFO] [stdout] 27 + pub r#if: MemoryRegister, // indicates which type of interrupt is set [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `Vram` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:84:2 [INFO] [stdout] | [INFO] [stdout] 84 | Vram: Vec, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `vram` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `Oam` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:85:2 [INFO] [stdout] | [INFO] [stdout] 85 | Oam: Vec, [INFO] [stdout] | ^^^ help: convert the identifier to snake case (notice the capitalization): `oam` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `LCDC` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:93:6 [INFO] [stdout] | [INFO] [stdout] 93 | pub LCDC: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `lcdc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `STAT` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:94:6 [INFO] [stdout] | [INFO] [stdout] 94 | pub STAT: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `stat` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `LYC` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:95:6 [INFO] [stdout] | [INFO] [stdout] 95 | pub LYC: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `lyc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `LY` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:96:6 [INFO] [stdout] | [INFO] [stdout] 96 | pub LY: MemoryRegister, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `ly` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `BGP` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:97:6 [INFO] [stdout] | [INFO] [stdout] 97 | pub BGP: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `bgp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `OBP0` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:98:6 [INFO] [stdout] | [INFO] [stdout] 98 | pub OBP0: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `obp0` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `OBP1` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:99:6 [INFO] [stdout] | [INFO] [stdout] 99 | pub OBP1: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `obp1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/core/interrupt.rs:72:5 [INFO] [stdout] | [INFO] [stdout] 72 | / if interrupt_enable & bit > 0 { [INFO] [stdout] 73 | | if interrupt_flag & bit > 0 { [INFO] [stdout] 74 | | self.IF.set(interrupt_flag & !bit); [INFO] [stdout] 75 | | address = match bit { [INFO] [stdout] ... | [INFO] [stdout] 85 | | } [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] 72 ~ if interrupt_enable & bit > 0 [INFO] [stdout] 73 ~ && interrupt_flag & bit > 0 { [INFO] [stdout] 74 | self.IF.set(interrupt_flag & !bit); [INFO] [stdout] ... [INFO] [stdout] 83 | break; [INFO] [stdout] 84 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SCY` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:100:6 [INFO] [stdout] | [INFO] [stdout] 100 | pub SCY: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case (notice the capitalization): `scy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SCX` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:101:6 [INFO] [stdout] | [INFO] [stdout] 101 | pub SCX: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case (notice the capitalization): `scx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `WY` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:102:6 [INFO] [stdout] | [INFO] [stdout] 102 | pub WY: MemoryRegister, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `wy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `WX` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:103:6 [INFO] [stdout] | [INFO] [stdout] 103 | pub WX: MemoryRegister, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `wx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `DIV` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | DIV: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `div` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `TIMA` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | TIMA: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `tima` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `TMA` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | TMA: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `tma` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `TAC` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | TAC: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `tac` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u16` is unnecessary [INFO] [stdout] --> src/core/disassembler.rs:93:15 [INFO] [stdout] | [INFO] [stdout] 93 | mem.read((0xFF00 as u16).wrapping_add(reg.c as u16)), [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `0xFF00_u16` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/core/register.rs:103:3 [INFO] [stdout] | [INFO] [stdout] 103 | / match self.f & flag as u8 { [INFO] [stdout] 104 | | 0 => false, [INFO] [stdout] 105 | | _ => true [INFO] [stdout] 106 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 103 - match self.f & flag as u8 { [INFO] [stdout] 104 - 0 => false, [INFO] [stdout] 105 - _ => true [INFO] [stdout] 106 - } [INFO] [stdout] 103 + !matches!(self.f & flag as u8, 0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `CPU` contains a capitalized acronym [INFO] [stdout] --> src/core/cpu.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct CPU { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Cpu` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: some ranges overlap [INFO] [stdout] --> src/core/cpu.rs:363:4 [INFO] [stdout] | [INFO] [stdout] 363 | 0xC3 => { let nn = self.next_pointer(memory); self.jump(nn); 4 }, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] note: overlaps with this [INFO] [stdout] --> src/core/cpu.rs:430:4 [INFO] [stdout] | [INFO] [stdout] 430 | 0xC3 => { self.regs.pc = self.next_pointer(memory); 4 }, [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stdout] = note: `#[warn(clippy::match_overlapping_arm)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/core/gpu.rs:197:18 [INFO] [stdout] | [INFO] [stdout] 197 | let x_flip = (x - 7) * -1; [INFO] [stdout] | ^^^^^^^^^^^^ help: consider using: `-(x - 7)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] = note: `#[warn(clippy::neg_multiply)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/core/gpu.rs:254:6 [INFO] [stdout] | [INFO] [stdout] 254 | / if old_mode != StatusMode::Oam { [INFO] [stdout] 255 | | self.set_mode(StatusMode::Oam); [INFO] [stdout] 256 | | request_interrupt = self.STAT.is_set(Bit::Bit5); [INFO] [stdout] 257 | | } [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] 253 ~ 0 ... OAM_PERIOD // OAM [INFO] [stdout] 254 ~ if old_mode != StatusMode::Oam => { [INFO] [stdout] 255 | self.set_mode(StatusMode::Oam); [INFO] [stdout] 256 | request_interrupt = self.STAT.is_set(Bit::Bit5); [INFO] [stdout] 257 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/core/gpu.rs:260:6 [INFO] [stdout] | [INFO] [stdout] 260 | / if old_mode != StatusMode::Transfer { [INFO] [stdout] 261 | | self.set_mode(StatusMode::Transfer); [INFO] [stdout] ... | [INFO] [stdout] 265 | | } [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] 259 ~ OAM_PERIOD ... TRANSFER_PERIOD // Transfer [INFO] [stdout] 260 ~ if old_mode != StatusMode::Transfer => { [INFO] [stdout] 261 | self.set_mode(StatusMode::Transfer); [INFO] [stdout] ... [INFO] [stdout] 264 | self.update_scanline(); [INFO] [stdout] 265 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/core/gpu.rs:269:6 [INFO] [stdout] | [INFO] [stdout] 269 | / if old_mode != StatusMode::HBlank { [INFO] [stdout] 270 | | self.set_mode(StatusMode::HBlank); [INFO] [stdout] 271 | | request_interrupt = self.STAT.is_set(Bit::Bit3); [INFO] [stdout] 272 | | } [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] 267 ~ TRANSFER_PERIOD ... HBLANK_PERIOD // H-Blank [INFO] [stdout] 268 | // We have just entered H-Blank [INFO] [stdout] 269 ~ if old_mode != StatusMode::HBlank => { [INFO] [stdout] 270 | self.set_mode(StatusMode::HBlank); [INFO] [stdout] 271 | request_interrupt = self.STAT.is_set(Bit::Bit3); [INFO] [stdout] 272 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: some ranges overlap [INFO] [stdout] --> src/core/gpu.rs:253:5 [INFO] [stdout] | [INFO] [stdout] 253 | 0 ... OAM_PERIOD => { // OAM [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: overlaps with this [INFO] [stdout] --> src/core/gpu.rs:259:5 [INFO] [stdout] | [INFO] [stdout] 259 | OAM_PERIOD ... TRANSFER_PERIOD => { // Transfer [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/gpu.rs:322:45 [INFO] [stdout] | [INFO] [stdout] 322 | fn draw_background(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 322 - fn draw_background(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] 322 + fn draw_background(&mut self, bg_priority: &mut [bool]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `bg_priority` [INFO] [stdout] --> src/core/gpu.rs:340:12 [INFO] [stdout] | [INFO] [stdout] 340 | for i in 0..FRAME_WIDTH { [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] 340 - for i in 0..FRAME_WIDTH { [INFO] [stdout] 340 + for (i, ) in bg_priority.iter_mut().enumerate().take(FRAME_WIDTH) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/core/gpu.rs:372:22 [INFO] [stdout] | [INFO] [stdout] 372 | self.frame_buffer[offset as usize] = color; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `offset` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/gpu.rs:377:41 [INFO] [stdout] | [INFO] [stdout] 377 | fn draw_window(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 377 - fn draw_window(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] 377 + fn draw_window(&mut self, bg_priority: &mut [bool]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `bg_priority` [INFO] [stdout] --> src/core/gpu.rs:406:12 [INFO] [stdout] | [INFO] [stdout] 406 | for i in 0..FRAME_WIDTH { [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] 406 - for i in 0..FRAME_WIDTH { [INFO] [stdout] 406 + for (i, ) in bg_priority.iter_mut().enumerate().take(FRAME_WIDTH) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/core/gpu.rs:436:22 [INFO] [stdout] | [INFO] [stdout] 436 | self.frame_buffer[buffer_offset as usize] = color; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `buffer_offset` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/gpu.rs:442:42 [INFO] [stdout] | [INFO] [stdout] 442 | fn draw_sprites(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 442 - fn draw_sprites(&mut self, bg_priority: &mut Vec) { [INFO] [stdout] 442 + fn draw_sprites(&mut self, bg_priority: &mut [bool]) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/core/gpu.rs:455:77 [INFO] [stdout] | [INFO] [stdout] 455 | scanline_y as i32 >= sprite.y_pos && scanline_y as i32 <= sprite.y_pos + sprite_y_max as i32 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `sprite_y_max` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/core/gpu.rs:466:16 [INFO] [stdout] | [INFO] [stdout] 466 | true => { ((pixel_y as i8 - 7) * -1) as u8 }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(pixel_y as i8 - 7)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/core/gpu.rs:502:15 [INFO] [stdout] | [INFO] [stdout] 502 | true => ((pixel_x as i8 - 7) * -1) as u8, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(pixel_x as i8 - 7)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/core/gpu.rs:509:5 [INFO] [stdout] | [INFO] [stdout] 509 | / if sprite.behind_background { [INFO] [stdout] 510 | | if bg_priority[adjusted_x as usize] { [INFO] [stdout] 511 | | continue; [INFO] [stdout] 512 | | } [INFO] [stdout] 513 | | } [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] 509 ~ if sprite.behind_background [INFO] [stdout] 510 ~ && bg_priority[adjusted_x as usize] { [INFO] [stdout] 511 | continue; [INFO] [stdout] 512 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core/gpu.rs:624:50 [INFO] [stdout] | [INFO] [stdout] 624 | StatusMode::Oam | StatusMode::Transfer => { return; }, [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] 624 ~ StatusMode::Oam | StatusMode::Transfer => {}, [INFO] [stdout] 625 | _ => { [INFO] [stdout] ... [INFO] [stdout] 628 | } [INFO] [stdout] 629 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> src/core/mbc/mbc1.rs:50:19 [INFO] [stdout] | [INFO] [stdout] 50 | let offset = (0x4000 as u32 * self.rom_bank as u32) + index as u32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `0x4000_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> src/core/mbc/mbc1.rs:56:19 [INFO] [stdout] | [INFO] [stdout] 56 | let offset = (0x2000 as u32 * self.ram_bank as u32) + index as u32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `0x2000_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/core/mbc/mbc1.rs:68:24 [INFO] [stdout] | [INFO] [stdout] 68 | self.ram_enabled = match bits { [INFO] [stdout] | ____________________________________^ [INFO] [stdout] 69 | | 0x0A => true, [INFO] [stdout] 70 | | _ => false, [INFO] [stdout] 71 | | }; [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 68 - self.ram_enabled = match bits { [INFO] [stdout] 69 - 0x0A => true, [INFO] [stdout] 70 - _ => false, [INFO] [stdout] 71 - }; [INFO] [stdout] 68 + self.ram_enabled = matches!(bits, 0x0A); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/mbc/mbc1.rs:86:7 [INFO] [stdout] | [INFO] [stdout] 86 | self.rom_bank = self.rom_bank | (bank_id << 5); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.rom_bank |= (bank_id << 5)` [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: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> src/core/mbc/mbc1.rs:106:19 [INFO] [stdout] | [INFO] [stdout] 106 | let offset = (0x2000 as u32 * self.ram_bank as u32) + index as u32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `0x2000_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/core/mbc/mbc3.rs:58:41 [INFO] [stdout] | [INFO] [stdout] 58 | self.ram_timer_enable = match data { [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 59 | | 0x0A => true, [INFO] [stdout] 60 | | _ => false, [INFO] [stdout] 61 | | }; [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 58 - self.ram_timer_enable = match data { [INFO] [stdout] 59 - 0x0A => true, [INFO] [stdout] 60 - _ => false, [INFO] [stdout] 61 - }; [INFO] [stdout] 58 + self.ram_timer_enable = matches!(data, 0x0A); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/mbc/mod.rs:7:24 [INFO] [stdout] | [INFO] [stdout] 7 | fn read(&self, bytes: &Vec, address: u16) -> u8; [INFO] [stdout] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:39:17 [INFO] [stdout] | [INFO] [stdout] 39 | self.button_state = self.button_state | input; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.button_state |= input` [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: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:42:24 [INFO] [stdout] | [INFO] [stdout] 42 | false => { self.button_state = self.button_state & !input; }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.button_state &= !input` [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: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | self.directional_state = self.directional_state | input; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.directional_state |= input` [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: manual implementation of an assign operation [INFO] [stdout] --> src/core/joypad.rs:52:24 [INFO] [stdout] | [INFO] [stdout] 52 | false => { self.directional_state = self.directional_state & !input; }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.directional_state &= !input` [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/emu/emulator.rs:71:7 [INFO] [stdout] | [INFO] [stdout] 71 | if !(elapsed_time > frame_time) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(elapsed_time <= frame_time)` [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: unused `std::result::Result` that must be used [INFO] [stdout] --> src/core/helper.rs:18:2 [INFO] [stdout] | [INFO] [stdout] 18 | file.write_all(bytes); [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] 18 | let _ = file.write_all(bytes); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/core/helper.rs:28:13 [INFO] [stdout] | [INFO] [stdout] 28 | f.read_to_end(&mut temp_vec); [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] 28 | let _ = f.read_to_end(&mut temp_vec); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IE` should have a snake case name [INFO] [stdout] --> src/core/interrupt.rs:26:6 [INFO] [stdout] | [INFO] [stdout] 26 | pub IE: MemoryRegister, // used to control intterupts [INFO] [stdout] | ^^ help: convert the identifier to snake case: `ie` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IF` should have a snake case name [INFO] [stdout] --> src/core/interrupt.rs:27:6 [INFO] [stdout] | [INFO] [stdout] 27 | pub IF: MemoryRegister, // indicates which type of interrupt is set [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] help: rename the identifier or convert it to a snake case raw identifier [INFO] [stdout] | [INFO] [stdout] 27 - pub IF: MemoryRegister, // indicates which type of interrupt is set [INFO] [stdout] 27 + pub r#if: MemoryRegister, // indicates which type of interrupt is set [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `Vram` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:84:2 [INFO] [stdout] | [INFO] [stdout] 84 | Vram: Vec, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `vram` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `Oam` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:85:2 [INFO] [stdout] | [INFO] [stdout] 85 | Oam: Vec, [INFO] [stdout] | ^^^ help: convert the identifier to snake case (notice the capitalization): `oam` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `LCDC` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:93:6 [INFO] [stdout] | [INFO] [stdout] 93 | pub LCDC: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `lcdc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `STAT` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:94:6 [INFO] [stdout] | [INFO] [stdout] 94 | pub STAT: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `stat` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `LYC` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:95:6 [INFO] [stdout] | [INFO] [stdout] 95 | pub LYC: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `lyc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `LY` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:96:6 [INFO] [stdout] | [INFO] [stdout] 96 | pub LY: MemoryRegister, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `ly` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `BGP` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:97:6 [INFO] [stdout] | [INFO] [stdout] 97 | pub BGP: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `bgp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `OBP0` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:98:6 [INFO] [stdout] | [INFO] [stdout] 98 | pub OBP0: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `obp0` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `OBP1` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:99:6 [INFO] [stdout] | [INFO] [stdout] 99 | pub OBP1: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `obp1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SCY` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:100:6 [INFO] [stdout] | [INFO] [stdout] 100 | pub SCY: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case (notice the capitalization): `scy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SCX` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:101:6 [INFO] [stdout] | [INFO] [stdout] 101 | pub SCX: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case (notice the capitalization): `scx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `WY` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:102:6 [INFO] [stdout] | [INFO] [stdout] 102 | pub WY: MemoryRegister, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `wy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `WX` should have a snake case name [INFO] [stdout] --> src/core/gpu.rs:103:6 [INFO] [stdout] | [INFO] [stdout] 103 | pub WX: MemoryRegister, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `wx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `DIV` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | DIV: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `div` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `TIMA` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | TIMA: MemoryRegister, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `tima` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `TMA` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | TMA: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `tma` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `TAC` should have a snake case name [INFO] [stdout] --> src/core/timer.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | TAC: MemoryRegister, [INFO] [stdout] | ^^^ help: convert the identifier to snake case: `tac` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.07s [INFO] running `Command { std: "docker" "inspect" "fb59e52f0435b9c5aa7dc56eb9adf306563c5dd5ae4d2be4daa21a32f2f03dbe", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "fb59e52f0435b9c5aa7dc56eb9adf306563c5dd5ae4d2be4daa21a32f2f03dbe", kill_on_drop: false }` [INFO] [stdout] fb59e52f0435b9c5aa7dc56eb9adf306563c5dd5ae4d2be4daa21a32f2f03dbe