[INFO] cloning repository https://github.com/mattbettcher/res [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mattbettcher/res" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmattbettcher%2Fres", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmattbettcher%2Fres'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] f0573d722abd5557271d94a18995a4d973470c6b [INFO] linting mattbettcher/res against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmattbettcher%2Fres" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/mattbettcher/res [INFO] finished tweaking git repo https://github.com/mattbettcher/res [INFO] tweaked toml for git repo https://github.com/mattbettcher/res written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/mattbettcher/res 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/mattbettcher/res 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] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded redox_syscall v0.1.31 [INFO] [stderr] Downloaded lazy_static v0.2.9 [INFO] [stderr] Downloaded fuchsia-zircon v0.2.1 [INFO] [stderr] Downloaded minifb v0.10.3 [INFO] [stderr] Downloaded bitfield v0.12.0 [INFO] [stderr] Downloaded kernel32-sys v0.1.4 [INFO] [stderr] Downloaded num v0.1.40 [INFO] [stderr] Downloaded rand v0.3.17 [INFO] [stderr] Downloaded sdl2-sys v0.30.0 [INFO] [stderr] Downloaded num-integer v0.1.35 [INFO] [stderr] Downloaded libc v0.2.32 [INFO] [stderr] Downloaded num-iter v0.1.34 [INFO] [stderr] Downloaded fuchsia-zircon-sys v0.2.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-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 26bb1150bdaeddf1b427c404b8f067e756088e057ffb2061bec0d7ed04b764d5 [INFO] running `Command { std: "docker" "start" "-a" "26bb1150bdaeddf1b427c404b8f067e756088e057ffb2061bec0d7ed04b764d5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "26bb1150bdaeddf1b427c404b8f067e756088e057ffb2061bec0d7ed04b764d5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "26bb1150bdaeddf1b427c404b8f067e756088e057ffb2061bec0d7ed04b764d5", kill_on_drop: false }` [INFO] [stdout] 26bb1150bdaeddf1b427c404b8f067e756088e057ffb2061bec0d7ed04b764d5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] eaf7c3fce58da2233ccc27f54406b6a2a62ad1ce012252ebf19edb75ab4a1de5 [INFO] running `Command { std: "docker" "start" "-a" "eaf7c3fce58da2233ccc27f54406b6a2a62ad1ce012252ebf19edb75ab4a1de5", 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 bitfield v0.12.0 [INFO] [stderr] Checking time v0.1.38 [INFO] [stderr] Checking rand v0.3.17 [INFO] [stderr] Compiling x11-dl v2.14.0 [INFO] [stderr] Compiling minifb v0.10.3 [INFO] [stderr] Checking res v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/disasm.rs:9:22 [INFO] [stdout] | [INFO] [stdout] 9 | const OPTABLE: [&'static str; 256] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/mem.rs:27:20 [INFO] [stdout] | [INFO] [stdout] 27 | 0x0000 ... 0x1fff => self.ram[a % 0x0800], // work ram mirrored [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/mem.rs:28:20 [INFO] [stdout] | [INFO] [stdout] 28 | 0x4018 ... 0xffff => self.mapper.read_byte(a as u16), // prg rom [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/mem.rs:30:20 [INFO] [stdout] | [INFO] [stdout] 30 | 0x2000 ... 0x3fff => self.ppu.read_reg(a % 8), // ppu registers [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/mem.rs:32:20 [INFO] [stdout] | [INFO] [stdout] 32 | 0x4016 ... 0x4017 => 0, // joypad i/o NOTE: not implented yet!!!! [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/mem.rs:41:20 [INFO] [stdout] | [INFO] [stdout] 41 | 0x0000 ... 0x1fff => self.ram[a % 0x0800] = v, // work ram mirrored [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/mem.rs:44:20 [INFO] [stdout] | [INFO] [stdout] 44 | 0x2000 ... 0x3fff => self.ppu.write_reg(a % 8, v), [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/mmc/nrom.rs:32:20 [INFO] [stdout] | [INFO] [stdout] 32 | 0x0000 ... 0x1FFF => return self.chr_rom[address as usize], [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/mmc/nrom.rs:33:20 [INFO] [stdout] | [INFO] [stdout] 33 | 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/mmc/nrom.rs:41:20 [INFO] [stdout] | [INFO] [stdout] 41 | 0x8000 ... 0xFFFF => { [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/mmc/nrom.rs:51:20 [INFO] [stdout] | [INFO] [stdout] 51 | 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: redundant field names in struct initialization [INFO] [stdout] --> src/cart.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | mapper_number: mapper_number, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mapper_number` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/mem.rs:9:21 [INFO] [stdout] | [INFO] [stdout] 9 | pub mapper: 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] 9 | pub mapper: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/cart.rs:88:79 [INFO] [stdout] | [INFO] [stdout] 88 | pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> 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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 88 | pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> Box { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/nes.rs:13:23 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn new(m: Box) -> Self { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 13 | pub fn new(m: Box) -> Self { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/mem.rs:14:23 [INFO] [stdout] | [INFO] [stdout] 14 | pub fn new(m: Box) -> Self { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 14 | pub fn new(m: Box) -> Self { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/ppu.rs:144:42 [INFO] [stdout] | [INFO] [stdout] 144 | pub fn step(&mut self, _mapper: &mut Mapper, cycles: usize) -> bool { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 144 | pub fn step(&mut self, _mapper: &mut dyn Mapper, cycles: usize) -> bool { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/disasm.rs:9:22 [INFO] [stdout] | [INFO] [stdout] 9 | const OPTABLE: [&'static str; 256] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/mem.rs:27:20 [INFO] [stdout] | [INFO] [stdout] 27 | 0x0000 ... 0x1fff => self.ram[a % 0x0800], // work ram mirrored [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/mem.rs:28:20 [INFO] [stdout] | [INFO] [stdout] 28 | 0x4018 ... 0xffff => self.mapper.read_byte(a as u16), // prg rom [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/mem.rs:30:20 [INFO] [stdout] | [INFO] [stdout] 30 | 0x2000 ... 0x3fff => self.ppu.read_reg(a % 8), // ppu registers [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/mem.rs:32:20 [INFO] [stdout] | [INFO] [stdout] 32 | 0x4016 ... 0x4017 => 0, // joypad i/o NOTE: not implented yet!!!! [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/mem.rs:41:20 [INFO] [stdout] | [INFO] [stdout] 41 | 0x0000 ... 0x1fff => self.ram[a % 0x0800] = v, // work ram mirrored [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/mem.rs:44:20 [INFO] [stdout] | [INFO] [stdout] 44 | 0x2000 ... 0x3fff => self.ppu.write_reg(a % 8, v), [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/mmc/nrom.rs:32:20 [INFO] [stdout] | [INFO] [stdout] 32 | 0x0000 ... 0x1FFF => return self.chr_rom[address as usize], [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/mmc/nrom.rs:33:20 [INFO] [stdout] | [INFO] [stdout] 33 | 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/mmc/nrom.rs:41:20 [INFO] [stdout] | [INFO] [stdout] 41 | 0x8000 ... 0xFFFF => { [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/mmc/nrom.rs:51:20 [INFO] [stdout] | [INFO] [stdout] 51 | 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: redundant field names in struct initialization [INFO] [stdout] --> src/cart.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | mapper_number: mapper_number, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mapper_number` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/cart.rs:108:21 [INFO] [stdout] | [INFO] [stdout] 108 | let mapper: Box = match header.mapper_number { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 108 | let mapper: Box = match header.mapper_number { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/main.rs:25:65 [INFO] [stdout] | [INFO] [stdout] 25 | Err(why) => panic!("Couldn't open {}: {}", file_path, why.description()), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/mem.rs:9:21 [INFO] [stdout] | [INFO] [stdout] 9 | pub mapper: 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] 9 | pub mapper: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/main.rs:31:56 [INFO] [stdout] | [INFO] [stdout] 31 | Err(why) => panic!("Couldn't read data: {}", why.description()), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/cpu.rs:322:14 [INFO] [stdout] | [INFO] [stdout] 322 | _ => P65::op_unk, /* silly silly, op is a u8 */ [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/cpu.rs:322:14 [INFO] [stdout] | [INFO] [stdout] 306 | ... 0x00 => P65::op_nil, 0x01 => P65::op_ora, 0x02 => P65::op_unk, 0x03 => P65::op_unk, 0x04 => P65::op_unk, 0x05 => P65::op_ora,... [INFO] [stdout] | ---- ---- ---- ---- matches some of the same values [INFO] [stdout] | | | | [INFO] [stdout] | | | matches some of the same values [INFO] [stdout] | | matches some of the same values [INFO] [stdout] | matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 322 | ... _ => P65::op_unk, /* silly silly, op is a u8 */ [INFO] [stdout] | ^ ...and 252 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: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/cart.rs:88:79 [INFO] [stdout] | [INFO] [stdout] 88 | pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> 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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 88 | pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> Box { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/cpu.rs:779:13 [INFO] [stdout] | [INFO] [stdout] 779 | _ => { P65::ad_unk } [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/cpu.rs:779:13 [INFO] [stdout] | [INFO] [stdout] 763 | ... 0x00 => { P65::brk_imp },0x01 => { P65::a2_ix} ,0x02 => { P65::ad_unk } ,0x03 => { P65::ad_unk },0x04 => { P65::ad_unk },0x05... [INFO] [stdout] | ---- ---- ---- ---- matches some of the same values [INFO] [stdout] | | | | [INFO] [stdout] | | | matches some of the same values [INFO] [stdout] | | matches some of the same values [INFO] [stdout] | matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 779 | ... _ => { P65::ad_unk } [INFO] [stdout] | ^ ...and 252 other patterns collectively make this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/nes.rs:13:23 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn new(m: Box) -> Self { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 13 | pub fn new(m: Box) -> Self { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/mem.rs:14:23 [INFO] [stdout] | [INFO] [stdout] 14 | pub fn new(m: Box) -> Self { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 14 | pub fn new(m: Box) -> Self { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/ppu.rs:144:42 [INFO] [stdout] | [INFO] [stdout] 144 | pub fn step(&mut self, _mapper: &mut Mapper, cycles: usize) -> bool { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 144 | pub fn step(&mut self, _mapper: &mut dyn Mapper, cycles: usize) -> bool { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/cpu.rs:7:13 [INFO] [stdout] | [INFO] [stdout] 7 | fn read<'a>(&'a mut self, a: usize) -> u8; [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 7 - fn read<'a>(&'a mut self, a: usize) -> u8; [INFO] [stdout] 7 + fn read(&mut self, a: usize) -> u8; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/cpu.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | fn write<'a>(&'a mut self, a: usize, v: u8); [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 8 - fn write<'a>(&'a mut self, a: usize, v: u8); [INFO] [stdout] 8 + fn write(&mut self, a: usize, v: u8); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | self.cycle = self.cycle + 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.cycle += 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:167:9 [INFO] [stdout] | [INFO] [stdout] 167 | self.v1 = self.v1 << 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v1 <<= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | self.v1 = self.v1 >> 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v1 >>= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/cpu.rs:188:9 [INFO] [stdout] | [INFO] [stdout] 188 | assert!(1==0, "Unknown Opcode!"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/cpu.rs:200:24 [INFO] [stdout] | [INFO] [stdout] 200 | let tsum = (self.a as u16 + self.v1 as u16 + if self.p.c { 0x1 } else { 0x0 }) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(self.a as u16 + self.v1 as u16 + if self.p.c { 0x1 } else { 0x0 })` [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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:202:27 [INFO] [stdout] | [INFO] [stdout] 202 | self.p.v = !((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsum & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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 to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:202:72 [INFO] [stdout] | [INFO] [stdout] 202 | self.p.v = !((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsum & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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 boolean expression can be simplified [INFO] [stdout] --> src/cpu.rs:224:24 [INFO] [stdout] | [INFO] [stdout] 224 | self.p.c = !(tsub >= 0x100); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `(tsub < 0x100)` [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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:225:26 [INFO] [stdout] | [INFO] [stdout] 225 | self.p.v = ((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsub & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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 to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:225:71 [INFO] [stdout] | [INFO] [stdout] 225 | self.p.v = ((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsub & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:238:28 [INFO] [stdout] | [INFO] [stdout] 238 | fn op_and(&mut self) { self.a = self.a & self.v1; let tmp = self.a; self.fix_nz(tmp); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.a &= self.v1` [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/cpu.rs:239:28 [INFO] [stdout] | [INFO] [stdout] 239 | fn op_ora(&mut self) { self.a = self.a | self.v1; let tmp = self.a; self.fix_nz(tmp); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.a |= self.v1` [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/cpu.rs:240:28 [INFO] [stdout] | [INFO] [stdout] 240 | fn op_eor(&mut self) { self.a = self.a ^ self.v1; let tmp = self.a; self.fix_nz(tmp); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.a ^= self.v1` [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: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/cart.rs:108:21 [INFO] [stdout] | [INFO] [stdout] 108 | let mapper: Box = match header.mapper_number { [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] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 108 | let mapper: Box = match header.mapper_number { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/main.rs:25:65 [INFO] [stdout] | [INFO] [stdout] 25 | Err(why) => panic!("Couldn't open {}: {}", file_path, why.description()), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/main.rs:31:56 [INFO] [stdout] | [INFO] [stdout] 31 | Err(why) => panic!("Couldn't read data: {}", why.description()), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/cpu.rs:322:14 [INFO] [stdout] | [INFO] [stdout] 322 | _ => P65::op_unk, /* silly silly, op is a u8 */ [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/cpu.rs:322:14 [INFO] [stdout] | [INFO] [stdout] 306 | ... 0x00 => P65::op_nil, 0x01 => P65::op_ora, 0x02 => P65::op_unk, 0x03 => P65::op_unk, 0x04 => P65::op_unk, 0x05 => P65::op_ora,... [INFO] [stdout] | ---- ---- ---- ---- matches some of the same values [INFO] [stdout] | | | | [INFO] [stdout] | | | matches some of the same values [INFO] [stdout] | | matches some of the same values [INFO] [stdout] | matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 322 | ... _ => P65::op_unk, /* silly silly, op is a u8 */ [INFO] [stdout] | ^ ...and 252 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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:616:58 [INFO] [stdout] | [INFO] [stdout] 616 | mem.write((self.s as usize) + 0x100, (self.p.pack()) as u8); self.dec_sp(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `(self.p.pack())` [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: unreachable pattern [INFO] [stdout] --> src/cpu.rs:779:13 [INFO] [stdout] | [INFO] [stdout] 779 | _ => { P65::ad_unk } [INFO] [stdout] | ^ no value can reach this [INFO] [stdout] | [INFO] [stdout] note: multiple earlier patterns match some of the same values [INFO] [stdout] --> src/cpu.rs:779:13 [INFO] [stdout] | [INFO] [stdout] 763 | ... 0x00 => { P65::brk_imp },0x01 => { P65::a2_ix} ,0x02 => { P65::ad_unk } ,0x03 => { P65::ad_unk },0x04 => { P65::ad_unk },0x05... [INFO] [stdout] | ---- ---- ---- ---- matches some of the same values [INFO] [stdout] | | | | [INFO] [stdout] | | | matches some of the same values [INFO] [stdout] | | matches some of the same values [INFO] [stdout] | matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 779 | ... _ => { P65::ad_unk } [INFO] [stdout] | ^ ...and 252 other patterns collectively make this unreachable [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> src/mem.rs:24:7 [INFO] [stdout] | [INFO] [stdout] 24 | impl <'a> Bus for MemMap { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PPU` contains a capitalized acronym [INFO] [stdout] --> src/ppu.rs:102:12 [INFO] [stdout] | [INFO] [stdout] 102 | pub struct PPU { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Ppu` [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: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/cpu.rs:7:13 [INFO] [stdout] | [INFO] [stdout] 7 | fn read<'a>(&'a mut self, a: usize) -> u8; [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 7 - fn read<'a>(&'a mut self, a: usize) -> u8; [INFO] [stdout] 7 + fn read(&mut self, a: usize) -> u8; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/cpu.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | fn write<'a>(&'a mut self, a: usize, v: u8); [INFO] [stdout] | ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 8 - fn write<'a>(&'a mut self, a: usize, v: u8); [INFO] [stdout] 8 + fn write(&mut self, a: usize, v: u8); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | / return Nrom { [INFO] [stdout] 17 | | prg_rom: prg.to_vec(), [INFO] [stdout] 18 | | prg_ram: Vec::new(), [INFO] [stdout] 19 | | chr_rom: chr.to_vec(), [INFO] [stdout] 20 | | mirroring: header.mirroring, [INFO] [stdout] 21 | | } [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] 16 ~ Nrom { [INFO] [stdout] 17 + prg_rom: prg.to_vec(), [INFO] [stdout] 18 + prg_ram: Vec::new(), [INFO] [stdout] 19 + chr_rom: chr.to_vec(), [INFO] [stdout] 20 + mirroring: header.mirroring, [INFO] [stdout] 21 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | return self.mirroring; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 27 - return self.mirroring; [INFO] [stdout] 27 + self.mirroring [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:32:34 [INFO] [stdout] | [INFO] [stdout] 32 | 0x0000 ... 0x1FFF => return self.chr_rom[address as usize], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 32 - 0x0000 ... 0x1FFF => return self.chr_rom[address as usize], [INFO] [stdout] 32 + 0x0000 ... 0x1FFF => self.chr_rom[address as usize], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:36:21 [INFO] [stdout] | [INFO] [stdout] 36 | return self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 36 - return self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize]; [INFO] [stdout] 36 + self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:38:21 [INFO] [stdout] | [INFO] [stdout] 38 | return 0; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 38 - return 0; [INFO] [stdout] 38 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:43:17 [INFO] [stdout] | [INFO] [stdout] 43 | return self.prg_rom[(address % (prg_rom_len as u16)) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 43 - return self.prg_rom[(address % (prg_rom_len as u16)) as usize]; [INFO] [stdout] 43 + self.prg_rom[(address % (prg_rom_len as u16)) as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:45:18 [INFO] [stdout] | [INFO] [stdout] 45 | _ => return 0 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 45 - _ => return 0 [INFO] [stdout] 45 + _ => 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/mmc/nrom.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | / match address { [INFO] [stdout] 51 | | 0x6000 ... 0x7FFF => { [INFO] [stdout] 52 | | let prg_ram_len = self.prg_ram.len(); [INFO] [stdout] 53 | | if prg_ram_len > 0 { [INFO] [stdout] ... | [INFO] [stdout] 57 | | _ => {} [INFO] [stdout] 58 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 50 ~ if let 0x6000 ... 0x7FFF = address { [INFO] [stdout] 51 + let prg_ram_len = self.prg_ram.len(); [INFO] [stdout] 52 + if prg_ram_len > 0 { [INFO] [stdout] 53 + self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize] = data; [INFO] [stdout] 54 + } [INFO] [stdout] 55 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/none.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | / return NoneMapper { [INFO] [stdout] 12 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 11 ~ NoneMapper { [INFO] [stdout] 12 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/none.rs:18:9 [INFO] [stdout] | [INFO] [stdout] 18 | return Mirroring::Horizontal; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 18 - return Mirroring::Horizontal; [INFO] [stdout] 18 + Mirroring::Horizontal [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/none.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | return 0; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 22 - return 0; [INFO] [stdout] 22 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | self.cycle = self.cycle + 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.cycle += 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cart.rs:78:5 [INFO] [stdout] | [INFO] [stdout] 78 | return nes_header; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 78 - return nes_header; [INFO] [stdout] 78 + nes_header [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/cart.rs:43:34 [INFO] [stdout] | [INFO] [stdout] 43 | pub fn extract_header(cartridge: &Vec) -> NesHeader { [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] 43 - pub fn extract_header(cartridge: &Vec) -> NesHeader { [INFO] [stdout] 43 + pub fn extract_header(cartridge: &[u8]) -> NesHeader { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:167:9 [INFO] [stdout] | [INFO] [stdout] 167 | self.v1 = self.v1 << 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v1 <<= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | self.v1 = self.v1 >> 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v1 >>= 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/cpu.rs:188:9 [INFO] [stdout] | [INFO] [stdout] 188 | assert!(1==0, "Unknown Opcode!"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cart.rs:121:5 [INFO] [stdout] | [INFO] [stdout] 121 | return mapper; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 121 - return mapper; [INFO] [stdout] 121 + mapper [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/cart.rs:88:62 [INFO] [stdout] | [INFO] [stdout] 88 | pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> Box { [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] 88 - pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> Box { [INFO] [stdout] 88 + pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &[u8]) -> Box { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cart.rs:93:9 [INFO] [stdout] | [INFO] [stdout] 93 | offset = offset + 512; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `offset += 512` [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 to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/cart.rs:96:24 [INFO] [stdout] | [INFO] [stdout] 96 | let prg_rom_size = (header.prg_rom_size) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(header.prg_rom_size)` [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: manual implementation of an assign operation [INFO] [stdout] --> src/cart.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | offset = offset + prg_rom_size; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `offset += prg_rom_size` [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 to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/cart.rs:100:24 [INFO] [stdout] | [INFO] [stdout] 100 | let chr_rom_size = (header.chr_rom_size) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(header.chr_rom_size)` [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 to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/cart.rs:101:50 [INFO] [stdout] | [INFO] [stdout] 101 | let chr_rom = &cartridge[offset .. (offset + chr_rom_size as usize)]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `chr_rom_size` [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 to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/cpu.rs:200:24 [INFO] [stdout] | [INFO] [stdout] 200 | let tsum = (self.a as u16 + self.v1 as u16 + if self.p.c { 0x1 } else { 0x0 }) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(self.a as u16 + self.v1 as u16 + if self.p.c { 0x1 } else { 0x0 })` [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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:202:27 [INFO] [stdout] | [INFO] [stdout] 202 | self.p.v = !((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsum & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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 to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:202:72 [INFO] [stdout] | [INFO] [stdout] 202 | self.p.v = !((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsum & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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 boolean expression can be simplified [INFO] [stdout] --> src/cpu.rs:224:24 [INFO] [stdout] | [INFO] [stdout] 224 | self.p.c = !(tsub >= 0x100); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `(tsub < 0x100)` [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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:225:26 [INFO] [stdout] | [INFO] [stdout] 225 | self.p.v = ((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsub & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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 to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:225:71 [INFO] [stdout] | [INFO] [stdout] 225 | self.p.v = ((self.a as u8 & 0x80) ^ (self.v1 & 0x80)) & ((self.a as u8 & 0x80) ^ ((tsub & 0x80) as u8)) != 0; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `self.a` [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: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:238:28 [INFO] [stdout] | [INFO] [stdout] 238 | fn op_and(&mut self) { self.a = self.a & self.v1; let tmp = self.a; self.fix_nz(tmp); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.a &= self.v1` [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/cpu.rs:239:28 [INFO] [stdout] | [INFO] [stdout] 239 | fn op_ora(&mut self) { self.a = self.a | self.v1; let tmp = self.a; self.fix_nz(tmp); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.a |= self.v1` [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/cpu.rs:240:28 [INFO] [stdout] | [INFO] [stdout] 240 | fn op_eor(&mut self) { self.a = self.a ^ self.v1; let tmp = self.a; self.fix_nz(tmp); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.a ^= self.v1` [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 to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/cpu.rs:616:58 [INFO] [stdout] | [INFO] [stdout] 616 | mem.write((self.s as usize) + 0x100, (self.p.pack()) as u8); self.dec_sp(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `(self.p.pack())` [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 lifetime isn't used in the impl [INFO] [stdout] --> src/mem.rs:24:7 [INFO] [stdout] | [INFO] [stdout] 24 | impl <'a> Bus for MemMap { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PPU` contains a capitalized acronym [INFO] [stdout] --> src/ppu.rs:102:12 [INFO] [stdout] | [INFO] [stdout] 102 | pub struct PPU { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Ppu` [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: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | / return Nrom { [INFO] [stdout] 17 | | prg_rom: prg.to_vec(), [INFO] [stdout] 18 | | prg_ram: Vec::new(), [INFO] [stdout] 19 | | chr_rom: chr.to_vec(), [INFO] [stdout] 20 | | mirroring: header.mirroring, [INFO] [stdout] 21 | | } [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] 16 ~ Nrom { [INFO] [stdout] 17 + prg_rom: prg.to_vec(), [INFO] [stdout] 18 + prg_ram: Vec::new(), [INFO] [stdout] 19 + chr_rom: chr.to_vec(), [INFO] [stdout] 20 + mirroring: header.mirroring, [INFO] [stdout] 21 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | return self.mirroring; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 27 - return self.mirroring; [INFO] [stdout] 27 + self.mirroring [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:32:34 [INFO] [stdout] | [INFO] [stdout] 32 | 0x0000 ... 0x1FFF => return self.chr_rom[address as usize], [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 32 - 0x0000 ... 0x1FFF => return self.chr_rom[address as usize], [INFO] [stdout] 32 + 0x0000 ... 0x1FFF => self.chr_rom[address as usize], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:36:21 [INFO] [stdout] | [INFO] [stdout] 36 | return self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 36 - return self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize]; [INFO] [stdout] 36 + self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:38:21 [INFO] [stdout] | [INFO] [stdout] 38 | return 0; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 38 - return 0; [INFO] [stdout] 38 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:43:17 [INFO] [stdout] | [INFO] [stdout] 43 | return self.prg_rom[(address % (prg_rom_len as u16)) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 43 - return self.prg_rom[(address % (prg_rom_len as u16)) as usize]; [INFO] [stdout] 43 + self.prg_rom[(address % (prg_rom_len as u16)) as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/nrom.rs:45:18 [INFO] [stdout] | [INFO] [stdout] 45 | _ => return 0 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 45 - _ => return 0 [INFO] [stdout] 45 + _ => 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/mmc/nrom.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | / match address { [INFO] [stdout] 51 | | 0x6000 ... 0x7FFF => { [INFO] [stdout] 52 | | let prg_ram_len = self.prg_ram.len(); [INFO] [stdout] 53 | | if prg_ram_len > 0 { [INFO] [stdout] ... | [INFO] [stdout] 57 | | _ => {} [INFO] [stdout] 58 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 50 ~ if let 0x6000 ... 0x7FFF = address { [INFO] [stdout] 51 + let prg_ram_len = self.prg_ram.len(); [INFO] [stdout] 52 + if prg_ram_len > 0 { [INFO] [stdout] 53 + self.prg_ram[((address - 0x6000) % (prg_ram_len as u16)) as usize] = data; [INFO] [stdout] 54 + } [INFO] [stdout] 55 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/none.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | / return NoneMapper { [INFO] [stdout] 12 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 11 ~ NoneMapper { [INFO] [stdout] 12 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/none.rs:18:9 [INFO] [stdout] | [INFO] [stdout] 18 | return Mirroring::Horizontal; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 18 - return Mirroring::Horizontal; [INFO] [stdout] 18 + Mirroring::Horizontal [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/mmc/none.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | return 0; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 22 - return 0; [INFO] [stdout] 22 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cart.rs:78:5 [INFO] [stdout] | [INFO] [stdout] 78 | return nes_header; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 78 - return nes_header; [INFO] [stdout] 78 + nes_header [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/cart.rs:43:34 [INFO] [stdout] | [INFO] [stdout] 43 | pub fn extract_header(cartridge: &Vec) -> NesHeader { [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] 43 - pub fn extract_header(cartridge: &Vec) -> NesHeader { [INFO] [stdout] 43 + pub fn extract_header(cartridge: &[u8]) -> NesHeader { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cart.rs:121:5 [INFO] [stdout] | [INFO] [stdout] 121 | return mapper; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 121 - return mapper; [INFO] [stdout] 121 + mapper [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/cart.rs:88:62 [INFO] [stdout] | [INFO] [stdout] 88 | pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> Box { [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] 88 - pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &Vec) -> Box { [INFO] [stdout] 88 + pub fn load_from_cartridge(nes_header: NesHeader, cartridge: &[u8]) -> Box { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cart.rs:93:9 [INFO] [stdout] | [INFO] [stdout] 93 | offset = offset + 512; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `offset += 512` [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 to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/cart.rs:96:24 [INFO] [stdout] | [INFO] [stdout] 96 | let prg_rom_size = (header.prg_rom_size) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(header.prg_rom_size)` [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: manual implementation of an assign operation [INFO] [stdout] --> src/cart.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | offset = offset + prg_rom_size; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `offset += prg_rom_size` [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 to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/cart.rs:100:24 [INFO] [stdout] | [INFO] [stdout] 100 | let chr_rom_size = (header.chr_rom_size) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(header.chr_rom_size)` [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 to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/cart.rs:101:50 [INFO] [stdout] | [INFO] [stdout] 101 | let chr_rom = &cartridge[offset .. (offset + chr_rom_size as usize)]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `chr_rom_size` [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] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.46s [INFO] running `Command { std: "docker" "inspect" "eaf7c3fce58da2233ccc27f54406b6a2a62ad1ce012252ebf19edb75ab4a1de5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "eaf7c3fce58da2233ccc27f54406b6a2a62ad1ce012252ebf19edb75ab4a1de5", kill_on_drop: false }` [INFO] [stdout] eaf7c3fce58da2233ccc27f54406b6a2a62ad1ce012252ebf19edb75ab4a1de5