[INFO] cloning repository https://github.com/JJag/gb-rust [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/JJag/gb-rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJJag%2Fgb-rust", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJJag%2Fgb-rust'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] e3662b403478bb0160e0b3bbcefcb4e7823101a7 [INFO] linting JJag/gb-rust against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJJag%2Fgb-rust" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/JJag/gb-rust [INFO] finished tweaking git repo https://github.com/JJag/gb-rust [INFO] tweaked toml for git repo https://github.com/JJag/gb-rust written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/JJag/gb-rust 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/JJag/gb-rust already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded wayland-scanner v0.21.7 [INFO] [stderr] Downloaded wayland-commons v0.21.7 [INFO] [stderr] Downloaded pistoncore-input v0.23.0 [INFO] [stderr] Downloaded wayland-client v0.21.7 [INFO] [stderr] Downloaded piston v0.39.0 [INFO] [stderr] Downloaded pistoncore-glutin_window v0.51.1 [INFO] [stderr] Downloaded winapi-util v0.1.1 [INFO] [stderr] Downloaded pistoncore-event_loop v0.39.0 [INFO] [stderr] Downloaded num-derive v0.2.3 [INFO] [stderr] Downloaded parking_lot_core v0.3.1 [INFO] [stderr] Downloaded gfx_device_gl v0.15.3 [INFO] [stderr] Downloaded arrayvec v0.4.8 [INFO] [stderr] Downloaded rusttype v0.7.3 [INFO] [stderr] Downloaded piston2d-graphics v0.28.0 [INFO] [stderr] Downloaded wayland-protocols v0.21.7 [INFO] [stderr] Downloaded image v0.20.1 [INFO] [stderr] Downloaded rand v0.5.5 [INFO] [stderr] Downloaded nix v0.11.0 [INFO] [stderr] Downloaded winit v0.18.0 [INFO] [stderr] Downloaded smithay-client-toolkit v0.4.2 [INFO] [stderr] Downloaded inflate v0.4.3 [INFO] [stderr] Downloaded gleam v0.6.8 [INFO] [stderr] Downloaded core-foundation v0.6.3 [INFO] [stderr] Downloaded objc v0.2.5 [INFO] [stderr] Downloaded smallvec v0.6.7 [INFO] [stderr] Downloaded parking_lot v0.6.4 [INFO] [stderr] Downloaded piston2d-gfx_graphics v0.54.0 [INFO] [stderr] Downloaded khronos_api v3.0.0 [INFO] [stderr] Downloaded stb_truetype v0.2.4 [INFO] [stderr] Downloaded rand_core v0.3.0 [INFO] [stderr] Downloaded andrew v0.1.4 [INFO] [stderr] Downloaded piston-gfx_texture v0.34.0 [INFO] [stderr] Downloaded interpolation v0.1.0 [INFO] [stderr] Downloaded approx v0.3.0 [INFO] [stderr] Downloaded ordered-float v1.0.1 [INFO] [stderr] Downloaded downcast-rs v1.0.3 [INFO] [stderr] Downloaded rand_core v0.2.2 [INFO] [stderr] Downloaded wayland-sys v0.21.7 [INFO] [stderr] Downloaded pistoncore-window v0.34.0 [INFO] [stderr] Downloaded piston_window v0.85.0 [INFO] [stderr] Downloaded tiff v0.2.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] 3c9cc205dc6e54df52dc2cdb6e6d451b347447583d8c0ba01d4b451812ce74b8 [INFO] running `Command { std: "docker" "start" "-a" "3c9cc205dc6e54df52dc2cdb6e6d451b347447583d8c0ba01d4b451812ce74b8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3c9cc205dc6e54df52dc2cdb6e6d451b347447583d8c0ba01d4b451812ce74b8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3c9cc205dc6e54df52dc2cdb6e6d451b347447583d8c0ba01d4b451812ce74b8", kill_on_drop: false }` [INFO] [stdout] 3c9cc205dc6e54df52dc2cdb6e6d451b347447583d8c0ba01d4b451812ce74b8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] 58562a9d72efbd5535ea87c07e0c88616c4cffd16ec0e39a0af7b7357f45edf4 [INFO] running `Command { std: "docker" "start" "-a" "58562a9d72efbd5535ea87c07e0c88616c4cffd16ec0e39a0af7b7357f45edf4", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.44 [INFO] [stderr] Checking cfg-if v0.1.6 [INFO] [stderr] Compiling proc-macro2 v0.4.24 [INFO] [stderr] Compiling xml-rs v0.8.0 [INFO] [stderr] Checking nodrop v0.1.13 [INFO] [stderr] Checking byteorder v1.2.7 [INFO] [stderr] Checking scopeguard v0.3.3 [INFO] [stderr] Compiling cc v1.0.25 [INFO] [stderr] Checking void v1.0.2 [INFO] [stderr] Compiling khronos_api v3.0.0 [INFO] [stderr] Checking piston-float v0.3.0 [INFO] [stderr] Compiling log v0.4.6 [INFO] [stderr] Compiling nix v0.11.0 [INFO] [stderr] Checking memoffset v0.2.1 [INFO] [stderr] Checking ordered-float v1.0.1 [INFO] [stderr] Checking approx v0.3.0 [INFO] [stderr] Compiling num-integer v0.1.39 [INFO] [stderr] Checking rand_core v0.3.0 [INFO] [stderr] Compiling rayon-core v1.4.1 [INFO] [stderr] Compiling khronos_api v2.2.0 [INFO] [stderr] Checking crossbeam-utils v0.2.2 [INFO] [stderr] Checking arrayvec v0.4.8 [INFO] [stderr] Checking piston-viewport v0.5.0 [INFO] [stderr] Compiling serde v1.0.80 [INFO] [stderr] Compiling parking_lot_core v0.3.1 [INFO] [stderr] Checking stb_truetype v0.2.4 [INFO] [stderr] Checking unreachable v1.0.0 [INFO] [stderr] Checking rand_core v0.2.2 [INFO] [stderr] Checking adler32 v1.0.3 [INFO] [stderr] Compiling pkg-config v0.3.14 [INFO] [stderr] Compiling rayon v1.0.3 [INFO] [stderr] Compiling num-derive v0.2.3 [INFO] [stderr] Checking same-file v1.0.4 [INFO] [stderr] Compiling bitflags v1.0.4 [INFO] [stderr] Checking downcast-rs v1.0.3 [INFO] [stderr] Checking stable_deref_trait v1.1.1 [INFO] [stderr] Checking walkdir v2.2.7 [INFO] [stderr] Compiling xml-rs v0.7.0 [INFO] [stderr] Checking smallvec v0.6.7 [INFO] [stderr] Checking crossbeam-epoch v0.3.1 [INFO] [stderr] Checking rusttype v0.7.3 [INFO] [stderr] Checking owning_ref v0.4.0 [INFO] [stderr] Checking line_drawing v0.7.0 [INFO] [stderr] Compiling num-traits v0.2.6 [INFO] [stderr] Checking draw_state v0.8.0 [INFO] [stderr] Checking rand v0.5.5 [INFO] [stderr] Checking num_cpus v1.8.0 [INFO] [stderr] Checking either v1.5.0 [INFO] [stderr] Checking crossbeam-deque v0.2.0 [INFO] [stderr] Checking shader_version v0.3.0 [INFO] [stderr] Checking lzw v0.10.0 [INFO] [stderr] Compiling num-rational v0.2.1 [INFO] [stderr] Checking memmap v0.6.2 [INFO] [stderr] Checking lock_api v0.1.5 [INFO] [stderr] Checking num-iter v0.1.37 [INFO] [stderr] Compiling libloading v0.5.0 [INFO] [stderr] Checking deflate v0.7.19 [INFO] [stderr] Compiling quote v0.6.10 [INFO] [stderr] Compiling x11-dl v2.18.3 [INFO] [stderr] Compiling gl_generator v0.9.0 [INFO] [stderr] Checking inflate v0.4.3 [INFO] [stderr] Compiling wayland-scanner v0.21.7 [INFO] [stderr] Compiling gl_generator v0.10.0 [INFO] [stderr] Compiling syn v0.15.22 [INFO] [stderr] Checking dlib v0.4.1 [INFO] [stderr] Checking color_quant v1.0.1 [INFO] [stderr] Checking andrew v0.1.4 [INFO] [stderr] Checking wayland-sys v0.21.7 [INFO] [stderr] Checking png v0.12.0 [INFO] [stderr] Checking gif v0.10.1 [INFO] [stderr] Checking shared_library v0.1.9 [INFO] [stderr] Checking scoped_threadpool v0.1.9 [INFO] [stderr] Checking piston-texture v0.6.0 [INFO] [stderr] Checking osmesa-sys v0.1.2 [INFO] [stderr] Checking vecmath v0.3.1 [INFO] [stderr] Checking interpolation v0.1.0 [INFO] [stderr] Checking read_color v1.0.0 [INFO] [stderr] Checking piston-shaders_graphics2d v0.3.1 [INFO] [stderr] Compiling wayland-client v0.21.7 [INFO] [stderr] Compiling wayland-protocols v0.21.7 [INFO] [stderr] Compiling gfx_gl v0.5.0 [INFO] [stderr] Compiling gl v0.11.0 [INFO] [stderr] Compiling glutin v0.19.0 [INFO] [stderr] Checking piston2d-graphics v0.28.0 [INFO] [stderr] Checking parking_lot v0.6.4 [INFO] [stderr] Checking wayland-commons v0.21.7 [INFO] [stderr] Checking jpeg-decoder v0.1.15 [INFO] [stderr] Compiling derivative v1.0.2 [INFO] [stderr] Compiling serde_derive v1.0.80 [INFO] [stderr] Checking smithay-client-toolkit v0.4.2 [INFO] [stderr] Checking gfx_core v0.8.3 [INFO] [stderr] Checking winit v0.18.0 [INFO] [stderr] Checking tiff v0.2.1 [INFO] [stderr] Checking image v0.20.1 [INFO] [stderr] Checking gfx v0.17.1 [INFO] [stderr] Checking gfx_device_gl v0.15.3 [INFO] [stderr] Checking pistoncore-input v0.23.0 [INFO] [stderr] Checking piston-gfx_texture v0.34.0 [INFO] [stderr] Checking pistoncore-window v0.34.0 [INFO] [stderr] Checking piston2d-gfx_graphics v0.54.0 [INFO] [stderr] Checking pistoncore-event_loop v0.39.0 [INFO] [stderr] Checking pistoncore-glutin_window v0.51.1 [INFO] [stderr] Checking piston v0.39.0 [INFO] [stderr] Checking piston_window v0.85.0 [INFO] [stderr] Checking gb-rust v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `piston_window::*` [INFO] [stdout] --> src/main.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use piston_window::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::gb::Interrupts` [INFO] [stdout] --> src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use crate::gb::Interrupts; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::gb::joypad::JoypadInterrupt` [INFO] [stdout] --> src/main.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | use crate::gb::joypad::JoypadInterrupt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::util::Array2D` [INFO] [stdout] --> src/frontend/mod.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::util::Array2D; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::gb::joypad::JoypadInterrupt` [INFO] [stdout] --> src/emu.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::gb::joypad::JoypadInterrupt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/gb/mmu.rs:53:13 [INFO] [stdout] | [INFO] [stdout] 53 | timer: timer, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `timer` [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: redundant field names in struct initialization [INFO] [stdout] --> src/gb/mmu.rs:54:13 [INFO] [stdout] | [INFO] [stdout] 54 | joypad: joypad, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `joypad` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/gb/mmu.rs:55:13 [INFO] [stdout] | [INFO] [stdout] 55 | ppu: ppu, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ppu` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/gb/mmu.rs:77:23 [INFO] [stdout] | [INFO] [stdout] 77 | 0x0000...0x3FFF => self.cart.read_byte(addr as u16), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:78:23 [INFO] [stdout] | [INFO] [stdout] 78 | 0x4000...0x7FFF => self.cart.read_byte(addr as u16), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:79:23 [INFO] [stdout] | [INFO] [stdout] 79 | 0x8000...0x9FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:84:23 [INFO] [stdout] | [INFO] [stdout] 84 | 0xA000...0xBFFF => self.cart.read_byte(addr as u16), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:85:23 [INFO] [stdout] | [INFO] [stdout] 85 | 0xC000...0xDFFF => self.work_ram[addr - 0xC000], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:86:23 [INFO] [stdout] | [INFO] [stdout] 86 | 0xE000...0xFDFF => self.work_ram[addr - 0xE000], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:87:23 [INFO] [stdout] | [INFO] [stdout] 87 | 0xFE00...0xFE9F => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:120:23 [INFO] [stdout] | [INFO] [stdout] 120 | 0xFF00...0xFF7F => self.unhandled_io[addr - 0xFF00], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:121:23 [INFO] [stdout] | [INFO] [stdout] 121 | 0xFF80...0xFFFF => self.zero_ram[addr - 0xFF80], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:122:23 [INFO] [stdout] | [INFO] [stdout] 122 | 0xFEA0...0xFEFF => 0, // accessing this memory is undefined behaviour [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:138:19 [INFO] [stdout] | [INFO] [stdout] 138 | 0x0000...0x3FFF => self.cart.write_byte(addr as u16, val), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:139:19 [INFO] [stdout] | [INFO] [stdout] 139 | 0x4000...0x7FFF => self.cart.write_byte(addr as u16, val), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:140:19 [INFO] [stdout] | [INFO] [stdout] 140 | 0x8000...0x9FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:145:19 [INFO] [stdout] | [INFO] [stdout] 145 | 0xA000...0xBFFF => self.cart.write_byte(addr as u16, val), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:146:19 [INFO] [stdout] | [INFO] [stdout] 146 | 0xC000...0xDFFF => self.work_ram[addr - 0xC000] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:147:19 [INFO] [stdout] | [INFO] [stdout] 147 | 0xE000...0xFDFF => self.work_ram[addr - 0xE000] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:148:19 [INFO] [stdout] | [INFO] [stdout] 148 | 0xFE00...0xFE9F => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:177:19 [INFO] [stdout] | [INFO] [stdout] 177 | 0xFF01...0xFF7F => self.unhandled_io[addr - 0xFF00] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:178:19 [INFO] [stdout] | [INFO] [stdout] 178 | 0xFF80...0xFFFF => self.zero_ram[addr - 0xFF80] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:179:19 [INFO] [stdout] | [INFO] [stdout] 179 | 0xFEA0...0xFEFF => {}, // accessing this memory is undefined behaviour [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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 block return value [INFO] [stdout] --> src/gb/ppu.rs:359:9 [INFO] [stdout] | [INFO] [stdout] 359 | / ( [INFO] [stdout] 360 | | (self.lcd_display_enable as u8) << 7 | [INFO] [stdout] | |____________^ [INFO] [stdout] ... [INFO] [stdout] 367 | (self.bg_window_priority as u8) << 0 [INFO] [stdout] | _____________________________________________________^ [INFO] [stdout] 368 | | ) [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] 359 ~ (self.lcd_display_enable as u8) << 7 | [INFO] [stdout] 360 | (self.window_tilemap_select1 as u8) << 6 | [INFO] [stdout] ... [INFO] [stdout] 365 | (self.sprites_enabled as u8) << 1 | [INFO] [stdout] 366 ~ (self.bg_window_priority as u8) << 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/gb/mbc.rs:40:19 [INFO] [stdout] | [INFO] [stdout] 40 | 0x0000...0x3FFF => self.rom[addr as usize], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:41:19 [INFO] [stdout] | [INFO] [stdout] 41 | 0x4000...0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:45:19 [INFO] [stdout] | [INFO] [stdout] 45 | 0xA000...0xBFFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:54:19 [INFO] [stdout] | [INFO] [stdout] 54 | 0x0000...0x1FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:57:19 [INFO] [stdout] | [INFO] [stdout] 57 | 0x2000...0x3FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:63:19 [INFO] [stdout] | [INFO] [stdout] 63 | 0x4000...0x5FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:70:19 [INFO] [stdout] | [INFO] [stdout] 70 | 0x6000...0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:78:19 [INFO] [stdout] | [INFO] [stdout] 78 | 0xA000...0xBFFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `piston_window::*` [INFO] [stdout] --> src/main.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use piston_window::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (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/emu.rs:9:23 [INFO] [stdout] | [INFO] [stdout] 9 | pub frontend: Box, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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 frontend: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::gb::Interrupts` [INFO] [stdout] --> src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use crate::gb::Interrupts; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::gb::joypad::JoypadInterrupt` [INFO] [stdout] --> src/main.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | use crate::gb::joypad::JoypadInterrupt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/gb/mmu.rs:17:19 [INFO] [stdout] | [INFO] [stdout] 17 | pub cart: Box, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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] 17 | pub cart: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::util::Array2D` [INFO] [stdout] --> src/frontend/mod.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::util::Array2D; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::gb::joypad::JoypadInterrupt` [INFO] [stdout] --> src/emu.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::gb::joypad::JoypadInterrupt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/gb/mmu.rs:53:13 [INFO] [stdout] | [INFO] [stdout] 53 | timer: timer, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `timer` [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: redundant field names in struct initialization [INFO] [stdout] --> src/gb/mmu.rs:54:13 [INFO] [stdout] | [INFO] [stdout] 54 | joypad: joypad, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `joypad` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/gb/mmu.rs:55:13 [INFO] [stdout] | [INFO] [stdout] 55 | ppu: ppu, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ppu` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/gb/mmu.rs:77:23 [INFO] [stdout] | [INFO] [stdout] 77 | 0x0000...0x3FFF => self.cart.read_byte(addr as u16), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:78:23 [INFO] [stdout] | [INFO] [stdout] 78 | 0x4000...0x7FFF => self.cart.read_byte(addr as u16), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:79:23 [INFO] [stdout] | [INFO] [stdout] 79 | 0x8000...0x9FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:84:23 [INFO] [stdout] | [INFO] [stdout] 84 | 0xA000...0xBFFF => self.cart.read_byte(addr as u16), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:85:23 [INFO] [stdout] | [INFO] [stdout] 85 | 0xC000...0xDFFF => self.work_ram[addr - 0xC000], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:86:23 [INFO] [stdout] | [INFO] [stdout] 86 | 0xE000...0xFDFF => self.work_ram[addr - 0xE000], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:87:23 [INFO] [stdout] | [INFO] [stdout] 87 | 0xFE00...0xFE9F => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:120:23 [INFO] [stdout] | [INFO] [stdout] 120 | 0xFF00...0xFF7F => self.unhandled_io[addr - 0xFF00], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:121:23 [INFO] [stdout] | [INFO] [stdout] 121 | 0xFF80...0xFFFF => self.zero_ram[addr - 0xFF80], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:122:23 [INFO] [stdout] | [INFO] [stdout] 122 | 0xFEA0...0xFEFF => 0, // accessing this memory is undefined behaviour [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:138:19 [INFO] [stdout] | [INFO] [stdout] 138 | 0x0000...0x3FFF => self.cart.write_byte(addr as u16, val), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:139:19 [INFO] [stdout] | [INFO] [stdout] 139 | 0x4000...0x7FFF => self.cart.write_byte(addr as u16, val), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:140:19 [INFO] [stdout] | [INFO] [stdout] 140 | 0x8000...0x9FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:145:19 [INFO] [stdout] | [INFO] [stdout] 145 | 0xA000...0xBFFF => self.cart.write_byte(addr as u16, val), [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:146:19 [INFO] [stdout] | [INFO] [stdout] 146 | 0xC000...0xDFFF => self.work_ram[addr - 0xC000] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:147:19 [INFO] [stdout] | [INFO] [stdout] 147 | 0xE000...0xFDFF => self.work_ram[addr - 0xE000] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:148:19 [INFO] [stdout] | [INFO] [stdout] 148 | 0xFE00...0xFE9F => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:177:19 [INFO] [stdout] | [INFO] [stdout] 177 | 0xFF01...0xFF7F => self.unhandled_io[addr - 0xFF00] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:178:19 [INFO] [stdout] | [INFO] [stdout] 178 | 0xFF80...0xFFFF => self.zero_ram[addr - 0xFF80] = val, [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mmu.rs:179:19 [INFO] [stdout] | [INFO] [stdout] 179 | 0xFEA0...0xFEFF => {}, // accessing this memory is undefined behaviour [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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 block return value [INFO] [stdout] --> src/gb/ppu.rs:359:9 [INFO] [stdout] | [INFO] [stdout] 359 | / ( [INFO] [stdout] 360 | | (self.lcd_display_enable as u8) << 7 | [INFO] [stdout] | |____________^ [INFO] [stdout] ... [INFO] [stdout] 367 | (self.bg_window_priority as u8) << 0 [INFO] [stdout] | _____________________________________________________^ [INFO] [stdout] 368 | | ) [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] 359 ~ (self.lcd_display_enable as u8) << 7 | [INFO] [stdout] 360 | (self.window_tilemap_select1 as u8) << 6 | [INFO] [stdout] ... [INFO] [stdout] 365 | (self.sprites_enabled as u8) << 1 | [INFO] [stdout] 366 ~ (self.bg_window_priority as u8) << 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/gb/mbc.rs:40:19 [INFO] [stdout] | [INFO] [stdout] 40 | 0x0000...0x3FFF => self.rom[addr as usize], [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:41:19 [INFO] [stdout] | [INFO] [stdout] 41 | 0x4000...0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:45:19 [INFO] [stdout] | [INFO] [stdout] 45 | 0xA000...0xBFFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:54:19 [INFO] [stdout] | [INFO] [stdout] 54 | 0x0000...0x1FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:57:19 [INFO] [stdout] | [INFO] [stdout] 57 | 0x2000...0x3FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:63:19 [INFO] [stdout] | [INFO] [stdout] 63 | 0x4000...0x5FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:70:19 [INFO] [stdout] | [INFO] [stdout] 70 | 0x6000...0x7FFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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/gb/mbc.rs:78:19 [INFO] [stdout] | [INFO] [stdout] 78 | 0xA000...0xBFFF => { [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/main.rs:39:36 [INFO] [stdout] | [INFO] [stdout] 39 | fn build_cart(rom: Vec) -> Box { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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] 39 | fn build_cart(rom: Vec) -> Box { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/gb/mmu.rs:38:19 [INFO] [stdout] | [INFO] [stdout] 38 | cart: Box, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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] 38 | cart: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/emu.rs:9:23 [INFO] [stdout] | [INFO] [stdout] 9 | pub frontend: Box, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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 frontend: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/gb/mmu.rs:17:19 [INFO] [stdout] | [INFO] [stdout] 17 | pub cart: Box, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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] 17 | pub cart: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/main.rs:39:36 [INFO] [stdout] | [INFO] [stdout] 39 | fn build_cart(rom: Vec) -> Box { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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] 39 | fn build_cart(rom: Vec) -> Box { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/gb/mmu.rs:38:19 [INFO] [stdout] | [INFO] [stdout] 38 | cart: Box, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) 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] 38 | cart: Box, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `piston_window` [INFO] [stdout] --> src/emu.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use piston_window::*; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `piston_window` [INFO] [stdout] --> src/emu.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use piston_window::*; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `addr` [INFO] [stdout] --> src/gb/mbc.rs:101:30 [INFO] [stdout] | [INFO] [stdout] 101 | fn write_byte(&mut self, addr: u16, val: u8) {} [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_addr` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `val` [INFO] [stdout] --> src/gb/mbc.rs:101:41 [INFO] [stdout] | [INFO] [stdout] 101 | fn write_byte(&mut self, addr: u16, val: u8) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_val` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/gb/mod.rs:388:9 [INFO] [stdout] | [INFO] [stdout] 388 | _ => handle_invalid_opcode(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/gb/mod.rs:388:9 [INFO] [stdout] | [INFO] [stdout] 112 | 0x00 => cpu.nop(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 113 | 0x01 => cpu.ld_bc_nn(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 114 | 0x02 => cpu.ld_bc_a(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 115 | 0x03 => cpu.INC_BC(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 388 | _ => handle_invalid_opcode(opcode), [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: unused variable: `rom_name` [INFO] [stdout] --> src/main.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | let rom_name = cart.get_name(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rom_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/frontend/gfx.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | return rgba_fractional; [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] 18 - return rgba_fractional; [INFO] [stdout] 18 + rgba_fractional [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `addr` [INFO] [stdout] --> src/gb/mbc.rs:101:30 [INFO] [stdout] | [INFO] [stdout] 101 | fn write_byte(&mut self, addr: u16, val: u8) {} [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_addr` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `val` [INFO] [stdout] --> src/gb/mbc.rs:101:41 [INFO] [stdout] | [INFO] [stdout] 101 | fn write_byte(&mut self, addr: u16, val: u8) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_val` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/frontend/gfx.rs:97:24 [INFO] [stdout] | [INFO] [stdout] 97 | if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 97 - if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stdout] 97 + if !(behind_bg && bg_color == 0) { [INFO] [stdout] | [INFO] [stdout] 97 - if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stdout] 97 + if !behind_bg || bg_color != 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `idx` is used to index `framebuffer` [INFO] [stdout] --> src/frontend/gfx.rs:115:16 [INFO] [stdout] | [INFO] [stdout] 115 | for idx in 0..160 * 144 { [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] 115 - for idx in 0..160 * 144 { [INFO] [stdout] 115 + for (idx, ) in framebuffer.iter().enumerate().take(160 * 144) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/frontend/gfx.rs:171:36 [INFO] [stdout] | [INFO] [stdout] 171 | let tile = tilemap.get(&tileset, 0, tile_x, tile_y); [INFO] [stdout] | ^^^^^^^^ help: change this to: `tileset` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/gb/mod.rs:388:9 [INFO] [stdout] | [INFO] [stdout] 388 | _ => handle_invalid_opcode(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/gb/mod.rs:388:9 [INFO] [stdout] | [INFO] [stdout] 112 | 0x00 => cpu.nop(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 113 | 0x01 => cpu.ld_bc_nn(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 114 | 0x02 => cpu.ld_bc_a(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] 115 | 0x03 => cpu.INC_BC(), [INFO] [stdout] | ---- matches some of the same values [INFO] [stdout] ... [INFO] [stdout] 388 | _ => handle_invalid_opcode(opcode), [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/frontend/mod.rs:47:88 [INFO] [stdout] | [INFO] [stdout] 47 | let joypad_interrupt: Option = gb.cpu.mmu.joypad.on_event(&e); [INFO] [stdout] | ^^ help: change this to: `e` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/frontend/mod.rs:53:20 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(_) = e.render_args() { [INFO] [stdout] | -------^^^^^^^------------------ help: try: `if e.render_args().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/frontend/mod.rs:54:60 [INFO] [stdout] | [INFO] [stdout] 54 | gfx::render_framebuffer1(&mut self.window, &e, &gb.cpu.mmu.ppu.framebuffer); [INFO] [stdout] | ^^ help: change this to: `e` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emu.rs:50:21 [INFO] [stdout] | [INFO] [stdout] 50 | print_registers(&cpu); [INFO] [stdout] | ^^^^ help: change this to: `cpu` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rom_name` [INFO] [stdout] --> src/main.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | let rom_name = cart.get_name(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rom_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/frontend/gfx.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | return rgba_fractional; [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] 18 - return rgba_fractional; [INFO] [stdout] 18 + rgba_fractional [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/gb/vram.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / impl Default for DmgColor { [INFO] [stdout] 11 | | fn default() -> Self { [INFO] [stdout] 12 | | DmgColor::White [INFO] [stdout] 13 | | } [INFO] [stdout] 14 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 3 + #[derive(Default)] [INFO] [stdout] 4 | pub enum DmgColor { [INFO] [stdout] 5 | Black, [INFO] [stdout] 6 | DarkGray, [INFO] [stdout] 7 | LightGray, [INFO] [stdout] 8 ~ #[default] [INFO] [stdout] 9 ~ White, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/frontend/gfx.rs:97:24 [INFO] [stdout] | [INFO] [stdout] 97 | if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 97 - if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stdout] 97 + if !(behind_bg && bg_color == 0) { [INFO] [stdout] | [INFO] [stdout] 97 - if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stdout] 97 + if !behind_bg || bg_color != 0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/vram.rs:50:34 [INFO] [stdout] | [INFO] [stdout] 50 | let lo_byte = tile_bytes[2 * y + 0]; [INFO] [stdout] | ^^^^^^^^^ help: consider reducing it to: `(2 * y)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: it looks like you're manually copying between slices [INFO] [stdout] --> src/gb/vram.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | / for i in 0..(32 * 32) { [INFO] [stdout] 65 | | tile_idxs[i] = vram[0x1800 + i]; [INFO] [stdout] 66 | | } [INFO] [stdout] | |_____^ help: try replacing the loop by: `tile_idxs[..(32 * 32)].copy_from_slice(&vram[6144..(32 * 32 + 6144)]);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stdout] = note: `#[warn(clippy::manual_memcpy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `idx` is used to index `framebuffer` [INFO] [stdout] --> src/frontend/gfx.rs:115:16 [INFO] [stdout] | [INFO] [stdout] 115 | for idx in 0..160 * 144 { [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] 115 - for idx in 0..160 * 144 { [INFO] [stdout] 115 + for (idx, ) in framebuffer.iter().enumerate().take(160 * 144) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/frontend/gfx.rs:171:36 [INFO] [stdout] | [INFO] [stdout] 171 | let tile = tilemap.get(&tileset, 0, tile_x, tile_y); [INFO] [stdout] | ^^^^^^^^ help: change this to: `tileset` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/frontend/mod.rs:47:88 [INFO] [stdout] | [INFO] [stdout] 47 | let joypad_interrupt: Option = gb.cpu.mmu.joypad.on_event(&e); [INFO] [stdout] | ^^ help: change this to: `e` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/frontend/mod.rs:53:20 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(_) = e.render_args() { [INFO] [stdout] | -------^^^^^^^------------------ help: try: `if e.render_args().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/frontend/mod.rs:54:60 [INFO] [stdout] | [INFO] [stdout] 54 | gfx::render_framebuffer1(&mut self.window, &e, &gb.cpu.mmu.ppu.framebuffer); [INFO] [stdout] | ^^ help: change this to: `e` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emu.rs:50:21 [INFO] [stdout] | [INFO] [stdout] 50 | print_registers(&cpu); [INFO] [stdout] | ^^^^ help: change this to: `cpu` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/joypad.rs:103:9 [INFO] [stdout] | [INFO] [stdout] 103 | return byte; [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] 103 - return byte; [INFO] [stdout] 103 + byte [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/joypad.rs:93:24 [INFO] [stdout] | [INFO] [stdout] 93 | & !((self.right as u8) << 0) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((self.right as u8))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/joypad.rs:99:24 [INFO] [stdout] | [INFO] [stdout] 99 | & !((self.a as u8) << 0) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((self.a as u8))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/gb/vram.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / impl Default for DmgColor { [INFO] [stdout] 11 | | fn default() -> Self { [INFO] [stdout] 12 | | DmgColor::White [INFO] [stdout] 13 | | } [INFO] [stdout] 14 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 3 + #[derive(Default)] [INFO] [stdout] 4 | pub enum DmgColor { [INFO] [stdout] 5 | Black, [INFO] [stdout] 6 | DarkGray, [INFO] [stdout] 7 | LightGray, [INFO] [stdout] 8 ~ #[default] [INFO] [stdout] 9 ~ White, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/vram.rs:50:34 [INFO] [stdout] | [INFO] [stdout] 50 | let lo_byte = tile_bytes[2 * y + 0]; [INFO] [stdout] | ^^^^^^^^^ help: consider reducing it to: `(2 * y)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: it looks like you're manually copying between slices [INFO] [stdout] --> src/gb/vram.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | / for i in 0..(32 * 32) { [INFO] [stdout] 65 | | tile_idxs[i] = vram[0x1800 + i]; [INFO] [stdout] 66 | | } [INFO] [stdout] | |_____^ help: try replacing the loop by: `tile_idxs[..(32 * 32)].copy_from_slice(&vram[6144..(32 * 32 + 6144)]);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stdout] = note: `#[warn(clippy::manual_memcpy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/joypad.rs:103:9 [INFO] [stdout] | [INFO] [stdout] 103 | return byte; [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] 103 - return byte; [INFO] [stdout] 103 + byte [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/joypad.rs:93:24 [INFO] [stdout] | [INFO] [stdout] 93 | & !((self.right as u8) << 0) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((self.right as u8))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/joypad.rs:99:24 [INFO] [stdout] | [INFO] [stdout] 99 | & !((self.a as u8) << 0) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((self.a as u8))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:100:37 [INFO] [stdout] | [INFO] [stdout] 100 | pub fn set_af(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:104:37 [INFO] [stdout] | [INFO] [stdout] 104 | pub fn set_bc(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:108:37 [INFO] [stdout] | [INFO] [stdout] 108 | pub fn set_de(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:112:37 [INFO] [stdout] | [INFO] [stdout] 112 | pub fn set_hl(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/cpu/mod.rs:220:9 [INFO] [stdout] | [INFO] [stdout] 220 | return false; [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] 220 - return false; [INFO] [stdout] 220 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/gb/mmu.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 43 | / let mmu = Mmu { [INFO] [stdout] 44 | | bootrom, [INFO] [stdout] 45 | | cart, [INFO] [stdout] 46 | | vram: [0; 8 * 1024], [INFO] [stdout] ... | [INFO] [stdout] 58 | | restrict_vram_oam: false, [INFO] [stdout] 59 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 60 | [INFO] [stdout] 61 | mmu [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 43 ~ [INFO] [stdout] 44 | [INFO] [stdout] 45 ~ Mmu { [INFO] [stdout] 46 + bootrom, [INFO] [stdout] 47 + cart, [INFO] [stdout] 48 + vram: [0; 8 * 1024], [INFO] [stdout] 49 + work_ram: [0; 8 * 1024], [INFO] [stdout] 50 + oam: [0; 160], [INFO] [stdout] 51 + unhandled_io: [0; 128], [INFO] [stdout] 52 + zero_ram: [0; 128], [INFO] [stdout] 53 + _if: Interrupts::from_bits_truncate(0), [INFO] [stdout] 54 + ie: Interrupts::from_bits_truncate(0), [INFO] [stdout] 55 + timer: timer, [INFO] [stdout] 56 + joypad: joypad, [INFO] [stdout] 57 + ppu: ppu, [INFO] [stdout] 58 + dma_cycles_left: 0, [INFO] [stdout] 59 + dma_src: 0, [INFO] [stdout] 60 + restrict_vram_oam: false, [INFO] [stdout] 61 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: some ranges overlap [INFO] [stdout] --> src/gb/mmu.rs:94:17 [INFO] [stdout] | [INFO] [stdout] 94 | 0xFF00 => self.joypad.read_byte(), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: overlaps with this [INFO] [stdout] --> src/gb/mmu.rs:120:17 [INFO] [stdout] | [INFO] [stdout] 120 | 0xFF00...0xFF7F => self.unhandled_io[addr - 0xFF00], [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: unneeded unit return type [INFO] [stdout] --> src/gb/mmu.rs:129:54 [INFO] [stdout] | [INFO] [stdout] 129 | pub fn write_word(&mut self, val: u16, addr: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/mmu.rs:135:53 [INFO] [stdout] | [INFO] [stdout] 135 | pub fn write_byte(&mut self, val: u8, addr: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/gb/mmu.rs:198:17 [INFO] [stdout] | [INFO] [stdout] 198 | assert!(addr >= 0x8000 && addr < 0xA000); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x8000..0xA000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:33:13 [INFO] [stdout] | [INFO] [stdout] 33 | to_u2(self.colors[3]) << 0 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `to_u2(self.colors[3])` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/gb/ppu.rs:234:13 [INFO] [stdout] | [INFO] [stdout] 234 | let tilemap_start_addr; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `tilemap_start_addr` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 234 ~ [INFO] [stdout] 235 ~ let tilemap_start_addr = if tilemap1 { [INFO] [stdout] 236 ~ 0x9C00 [INFO] [stdout] 237 | } else { [INFO] [stdout] 238 ~ 0x9800 [INFO] [stdout] 239 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:246:32 [INFO] [stdout] | [INFO] [stdout] 246 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/gb/ppu.rs:260:13 [INFO] [stdout] | [INFO] [stdout] 260 | let tile_height: u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] help: move the declaration `tile_height` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 260 ~ [INFO] [stdout] 261 ~ let tile_height: u8 = if self.lcdc.tall_sprites { [INFO] [stdout] 262 ~ 16 [INFO] [stdout] 263 | } else { [INFO] [stdout] 264 ~ 8 [INFO] [stdout] 265 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:291:44 [INFO] [stdout] | [INFO] [stdout] 291 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `line` [INFO] [stdout] --> src/gb/ppu.rs:314:18 [INFO] [stdout] | [INFO] [stdout] 314 | for x in 0..160 { [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] 314 - for x in 0..160 { [INFO] [stdout] 314 + for (x, ) in line.iter().enumerate().take(160) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:100:37 [INFO] [stdout] | [INFO] [stdout] 100 | pub fn set_af(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:104:37 [INFO] [stdout] | [INFO] [stdout] 104 | pub fn set_bc(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:108:37 [INFO] [stdout] | [INFO] [stdout] 108 | pub fn set_de(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/cpu/mod.rs:112:37 [INFO] [stdout] | [INFO] [stdout] 112 | pub fn set_hl(&mut self, n: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/gb/ppu.rs:328:18 [INFO] [stdout] | [INFO] [stdout] 328 | 0x8000 + (tile_idx as u16 * 16) as u16 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(tile_idx as u16 * 16)` [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: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:367:17 [INFO] [stdout] | [INFO] [stdout] 367 | (self.bg_window_priority as u8) << 0 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((self.bg_window_priority as u8))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/ppu.rs:395:5 [INFO] [stdout] | [INFO] [stdout] 395 | return rgba_fractional; [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] 395 - return rgba_fractional; [INFO] [stdout] 395 + rgba_fractional [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/cpu/mod.rs:220:9 [INFO] [stdout] | [INFO] [stdout] 220 | return false; [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] 220 - return false; [INFO] [stdout] 220 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/gb/mmu.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 43 | / let mmu = Mmu { [INFO] [stdout] 44 | | bootrom, [INFO] [stdout] 45 | | cart, [INFO] [stdout] 46 | | vram: [0; 8 * 1024], [INFO] [stdout] ... | [INFO] [stdout] 58 | | restrict_vram_oam: false, [INFO] [stdout] 59 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 60 | [INFO] [stdout] 61 | mmu [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 43 ~ [INFO] [stdout] 44 | [INFO] [stdout] 45 ~ Mmu { [INFO] [stdout] 46 + bootrom, [INFO] [stdout] 47 + cart, [INFO] [stdout] 48 + vram: [0; 8 * 1024], [INFO] [stdout] 49 + work_ram: [0; 8 * 1024], [INFO] [stdout] 50 + oam: [0; 160], [INFO] [stdout] 51 + unhandled_io: [0; 128], [INFO] [stdout] 52 + zero_ram: [0; 128], [INFO] [stdout] 53 + _if: Interrupts::from_bits_truncate(0), [INFO] [stdout] 54 + ie: Interrupts::from_bits_truncate(0), [INFO] [stdout] 55 + timer: timer, [INFO] [stdout] 56 + joypad: joypad, [INFO] [stdout] 57 + ppu: ppu, [INFO] [stdout] 58 + dma_cycles_left: 0, [INFO] [stdout] 59 + dma_src: 0, [INFO] [stdout] 60 + restrict_vram_oam: false, [INFO] [stdout] 61 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/gb/mbc.rs:67:21 [INFO] [stdout] | [INFO] [stdout] 67 | self.rom_bank = self.rom_bank | ((val as u32 % 3) << 5); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.rom_bank |= ((val as u32 % 3) << 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] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: some ranges overlap [INFO] [stdout] --> src/gb/mmu.rs:94:17 [INFO] [stdout] | [INFO] [stdout] 94 | 0xFF00 => self.joypad.read_byte(), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: overlaps with this [INFO] [stdout] --> src/gb/mmu.rs:120:17 [INFO] [stdout] | [INFO] [stdout] 120 | 0xFF00...0xFF7F => self.unhandled_io[addr - 0xFF00], [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: unneeded `return` statement [INFO] [stdout] --> src/gb/mod.rs:51:9 [INFO] [stdout] | [INFO] [stdout] 51 | return vblank_int.is_some(); [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] 51 - return vblank_int.is_some(); [INFO] [stdout] 51 + vblank_int.is_some() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/mmu.rs:129:54 [INFO] [stdout] | [INFO] [stdout] 129 | pub fn write_word(&mut self, val: u16, addr: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gb/mmu.rs:135:53 [INFO] [stdout] | [INFO] [stdout] 135 | pub fn write_byte(&mut self, val: u8, addr: u16) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/gb/mmu.rs:198:17 [INFO] [stdout] | [INFO] [stdout] 198 | assert!(addr >= 0x8000 && addr < 0xA000); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x8000..0xA000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:33:13 [INFO] [stdout] | [INFO] [stdout] 33 | to_u2(self.colors[3]) << 0 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `to_u2(self.colors[3])` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/mod.rs:390:5 [INFO] [stdout] | [INFO] [stdout] 390 | return CYCLES[opcode 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] 390 - return CYCLES[opcode as usize]; [INFO] [stdout] 390 + CYCLES[opcode as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/gb/ppu.rs:234:13 [INFO] [stdout] | [INFO] [stdout] 234 | let tilemap_start_addr; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `tilemap_start_addr` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 234 ~ [INFO] [stdout] 235 ~ let tilemap_start_addr = if tilemap1 { [INFO] [stdout] 236 ~ 0x9C00 [INFO] [stdout] 237 | } else { [INFO] [stdout] 238 ~ 0x9800 [INFO] [stdout] 239 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:246:32 [INFO] [stdout] | [INFO] [stdout] 246 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/gb/ppu.rs:260:13 [INFO] [stdout] | [INFO] [stdout] 260 | let tile_height: u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] help: move the declaration `tile_height` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 260 ~ [INFO] [stdout] 261 ~ let tile_height: u8 = if self.lcdc.tall_sprites { [INFO] [stdout] 262 ~ 16 [INFO] [stdout] 263 | } else { [INFO] [stdout] 264 ~ 8 [INFO] [stdout] 265 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:291:44 [INFO] [stdout] | [INFO] [stdout] 291 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `line` [INFO] [stdout] --> src/gb/ppu.rs:314:18 [INFO] [stdout] | [INFO] [stdout] 314 | for x in 0..160 { [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] 314 - for x in 0..160 { [INFO] [stdout] 314 + for (x, ) in line.iter().enumerate().take(160) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/mod.rs:457:5 [INFO] [stdout] | [INFO] [stdout] 457 | return CB_CYCLES[opcode 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] 457 - return CB_CYCLES[opcode as usize]; [INFO] [stdout] 457 + CB_CYCLES[opcode as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/gb/ppu.rs:328:18 [INFO] [stdout] | [INFO] [stdout] 328 | 0x8000 + (tile_idx as u16 * 16) as u16 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(tile_idx as u16 * 16)` [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: this operation has no effect [INFO] [stdout] --> src/gb/ppu.rs:367:17 [INFO] [stdout] | [INFO] [stdout] 367 | (self.bg_window_priority as u8) << 0 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((self.bg_window_priority as u8))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: there is no need to manually implement bit rotation [INFO] [stdout] --> src/util.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | x >> 4 | x << 4 [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x.rotate_left(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_rotate [INFO] [stdout] = note: `#[warn(clippy::manual_rotate)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/ppu.rs:395:5 [INFO] [stdout] | [INFO] [stdout] 395 | return rgba_fractional; [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] 395 - return rgba_fractional; [INFO] [stdout] 395 + rgba_fractional [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/gb/mbc.rs:67:21 [INFO] [stdout] | [INFO] [stdout] 67 | self.rom_bank = self.rom_bank | ((val as u32 % 3) << 5); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.rom_bank |= ((val as u32 % 3) << 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] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/mod.rs:51:9 [INFO] [stdout] | [INFO] [stdout] 51 | return vblank_int.is_some(); [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] 51 - return vblank_int.is_some(); [INFO] [stdout] 51 + vblank_int.is_some() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/frontend/gfx.rs:11:35 [INFO] [stdout] | [INFO] [stdout] 11 | let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: there's also `to_le_bytes` and `to_be_bytes` if you expect a particular byte order [INFO] [stdout] = note: `#[warn(unnecessary_transmutes)]` on by default [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 11 - let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] 11 + let bytes: [u8; 4] = unsafe { u32::to_ne_bytes(rgba.to_be()) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/cpu/instrs/add16.rs:34:33 [INFO] [stdout] | [INFO] [stdout] 34 | let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 34 - let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] 34 + let signed_n = unsafe { u8::cast_signed(n) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/cpu/instrs/jp.rs:42:26 [INFO] [stdout] | [INFO] [stdout] 42 | let n = unsafe { mem::transmute::(self.mmu.read_byte(self.pc)) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 42 - let n = unsafe { mem::transmute::(self.mmu.read_byte(self.pc)) }; [INFO] [stdout] 42 + let n = unsafe { u8::cast_signed(self.mmu.read_byte(self.pc)) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/cpu/instrs/ld.rs:168:33 [INFO] [stdout] | [INFO] [stdout] 168 | let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 168 - let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] 168 + let signed_n = unsafe { u8::cast_signed(n) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/ppu.rs:330:33 [INFO] [stdout] | [INFO] [stdout] 330 | let tile_idx = unsafe { mem::transmute::(tile_idx) } as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 330 - let tile_idx = unsafe { mem::transmute::(tile_idx) } as i32; [INFO] [stdout] 330 + let tile_idx = unsafe { u8::cast_signed(tile_idx) } as i32; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/ppu.rs:388:35 [INFO] [stdout] | [INFO] [stdout] 388 | let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: there's also `to_le_bytes` and `to_be_bytes` if you expect a particular byte order [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 388 - let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] 388 + let bytes: [u8; 4] = unsafe { u32::to_ne_bytes(rgba.to_be()) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/mod.rs:390:5 [INFO] [stdout] | [INFO] [stdout] 390 | return CYCLES[opcode 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] 390 - return CYCLES[opcode as usize]; [INFO] [stdout] 390 + CYCLES[opcode as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/gb/mod.rs:457:5 [INFO] [stdout] | [INFO] [stdout] 457 | return CB_CYCLES[opcode 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] 457 - return CB_CYCLES[opcode as usize]; [INFO] [stdout] 457 + CB_CYCLES[opcode as usize] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: there is no need to manually implement bit rotation [INFO] [stdout] --> src/util.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | x >> 4 | x << 4 [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x.rotate_left(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_rotate [INFO] [stdout] = note: `#[warn(clippy::manual_rotate)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/util.rs:128:9 [INFO] [stdout] | [INFO] [stdout] 128 | assert_eq!(check_bit(0b1111_0000, 0), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 128 - assert_eq!(check_bit(0b1111_0000, 0), false); [INFO] [stdout] 128 + assert!(!check_bit(0b1111_0000, 0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/util.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | assert_eq!(check_bit(0b1111_0000, 3), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 129 - assert_eq!(check_bit(0b1111_0000, 3), false); [INFO] [stdout] 129 + assert!(!check_bit(0b1111_0000, 3)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/util.rs:130:9 [INFO] [stdout] | [INFO] [stdout] 130 | assert_eq!(check_bit(0b1111_0000, 4), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 130 - assert_eq!(check_bit(0b1111_0000, 4), true); [INFO] [stdout] 130 + assert!(check_bit(0b1111_0000, 4)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/util.rs:131:9 [INFO] [stdout] | [INFO] [stdout] 131 | assert_eq!(check_bit(0b1111_0000, 7), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 131 - assert_eq!(check_bit(0b1111_0000, 7), true); [INFO] [stdout] 131 + assert!(check_bit(0b1111_0000, 7)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/frontend/gfx.rs:11:35 [INFO] [stdout] | [INFO] [stdout] 11 | let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: there's also `to_le_bytes` and `to_be_bytes` if you expect a particular byte order [INFO] [stdout] = note: `#[warn(unnecessary_transmutes)]` on by default [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 11 - let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] 11 + let bytes: [u8; 4] = unsafe { u32::to_ne_bytes(rgba.to_be()) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/cpu/instrs/add16.rs:34:33 [INFO] [stdout] | [INFO] [stdout] 34 | let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 34 - let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] 34 + let signed_n = unsafe { u8::cast_signed(n) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/cpu/instrs/jp.rs:42:26 [INFO] [stdout] | [INFO] [stdout] 42 | let n = unsafe { mem::transmute::(self.mmu.read_byte(self.pc)) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 42 - let n = unsafe { mem::transmute::(self.mmu.read_byte(self.pc)) }; [INFO] [stdout] 42 + let n = unsafe { u8::cast_signed(self.mmu.read_byte(self.pc)) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/cpu/instrs/ld.rs:168:33 [INFO] [stdout] | [INFO] [stdout] 168 | let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 168 - let signed_n = unsafe { mem::transmute::(n) }; [INFO] [stdout] 168 + let signed_n = unsafe { u8::cast_signed(n) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/ppu.rs:330:33 [INFO] [stdout] | [INFO] [stdout] 330 | let tile_idx = unsafe { mem::transmute::(tile_idx) } as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 330 - let tile_idx = unsafe { mem::transmute::(tile_idx) } as i32; [INFO] [stdout] 330 + let tile_idx = unsafe { u8::cast_signed(tile_idx) } as i32; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary transmute [INFO] [stdout] --> src/gb/ppu.rs:388:35 [INFO] [stdout] | [INFO] [stdout] 388 | let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: there's also `to_le_bytes` and `to_be_bytes` if you expect a particular byte order [INFO] [stdout] help: replace this with [INFO] [stdout] | [INFO] [stdout] 388 - let bytes: [u8; 4] = unsafe { transmute(rgba.to_be()) }; [INFO] [stdout] 388 + let bytes: [u8; 4] = unsafe { u32::to_ne_bytes(rgba.to_be()) }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 22.03s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: glutin v0.19.0, winit v0.18.0 [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 6` [INFO] running `Command { std: "docker" "inspect" "58562a9d72efbd5535ea87c07e0c88616c4cffd16ec0e39a0af7b7357f45edf4", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "58562a9d72efbd5535ea87c07e0c88616c4cffd16ec0e39a0af7b7357f45edf4", kill_on_drop: false }` [INFO] [stdout] 58562a9d72efbd5535ea87c07e0c88616c4cffd16ec0e39a0af7b7357f45edf4