[INFO] updating cached repository JJag/gb-rust [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/JJag/gb-rust [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/JJag/gb-rust" "work/ex/clippy-test-run/sources/stable/gh/JJag/gb-rust"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/JJag/gb-rust'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/JJag/gb-rust" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/JJag/gb-rust"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/JJag/gb-rust'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 97cecba0147993acf99cc0b3d0ff1e3f6d0a6b27 [INFO] sha for GitHub repo JJag/gb-rust: 97cecba0147993acf99cc0b3d0ff1e3f6d0a6b27 [INFO] validating manifest of JJag/gb-rust on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of JJag/gb-rust on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing JJag/gb-rust [INFO] finished frobbing JJag/gb-rust [INFO] frobbed toml for JJag/gb-rust written to work/ex/clippy-test-run/sources/stable/gh/JJag/gb-rust/Cargo.toml [INFO] started frobbing JJag/gb-rust [INFO] finished frobbing JJag/gb-rust [INFO] frobbed toml for JJag/gb-rust written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/JJag/gb-rust/Cargo.toml [INFO] crate JJag/gb-rust has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting JJag/gb-rust against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/JJag/gb-rust:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 1e8e5b0843a4df4c9a2c6e2d539d33257941583acd9ddd5356ae9cb34e88d05a [INFO] running `"docker" "start" "-a" "1e8e5b0843a4df4c9a2c6e2d539d33257941583acd9ddd5356ae9cb34e88d05a"` [INFO] [stderr] Checking pistoncore-input v0.23.0 [INFO] [stderr] Checking gfx_core v0.8.3 [INFO] [stderr] Checking tiff v0.2.1 [INFO] [stderr] Checking image v0.20.1 [INFO] [stderr] Checking pistoncore-window v0.34.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 gfx v0.17.1 [INFO] [stderr] Checking gfx_device_gl v0.15.3 [INFO] [stderr] Checking piston-gfx_texture v0.34.0 [INFO] [stderr] Checking piston2d-gfx_graphics v0.54.0 [INFO] [stderr] Checking piston_window v0.85.0 [INFO] [stderr] Checking gb-rust v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/mmu.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/mmu.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | joypad: joypad, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `joypad` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/mmu.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | ppu: ppu, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ppu` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/mmu.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/mmu.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | joypad: joypad, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `joypad` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/mmu.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | ppu: ppu, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ppu` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::vram::*` [INFO] [stderr] --> src/main.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | use crate::vram::*; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/joypad.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | return byte; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `byte` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:109:38 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn set_af(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:113:38 [INFO] [stderr] | [INFO] [stderr] 113 | pub fn set_bc(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:117:38 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn set_de(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:121:38 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn set_hl(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cpu/mod.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/gfx.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | return rgba_fractional; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rgba_fractional` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/gfx.rs:146:43 [INFO] [stderr] | [INFO] [stderr] 146 | let palette = DmgPalette::from_u8(0b00011011); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1011` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/gfx.rs:173:43 [INFO] [stderr] | [INFO] [stderr] 173 | let palette = DmgPalette::from_u8(0b00011011); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1011` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::vram::*` [INFO] [stderr] --> src/mmu.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use crate::vram::*; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/mmu.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | mmu [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/mmu.rs:42:19 [INFO] [stderr] | [INFO] [stderr] 42 | let mmu = Mmu { [INFO] [stderr] | ___________________^ [INFO] [stderr] 43 | | bootrom, [INFO] [stderr] 44 | | rom, [INFO] [stderr] 45 | | vram: [0; 8 * 1024], [INFO] [stderr] ... | [INFO] [stderr] 55 | | ppu: ppu, [INFO] [stderr] 56 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/mmu.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | val [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/mmu.rs:64:19 [INFO] [stderr] | [INFO] [stderr] 64 | let val = util::concat(l, h); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/mmu.rs:111:9 [INFO] [stderr] | [INFO] [stderr] 111 | val [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/mmu.rs:69:19 [INFO] [stderr] | [INFO] [stderr] 69 | let val = if addr < 0x100 && self.bootrom_enabled() { [INFO] [stderr] | ___________________^ [INFO] [stderr] 70 | | self.bootrom[addr as usize] [INFO] [stderr] 71 | | } else { [INFO] [stderr] 72 | | let addr = addr as usize; [INFO] [stderr] ... | [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/mmu.rs:119:55 [INFO] [stderr] | [INFO] [stderr] 119 | pub fn write_word(&mut self, val: u16, addr: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/mmu.rs:125:54 [INFO] [stderr] | [INFO] [stderr] 125 | pub fn write_byte(&mut self, val: u8, addr: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/timer.rs:31:51 [INFO] [stderr] | [INFO] [stderr] 31 | let seconds_passed = cycles as f32 / (4194304. / 4.); [INFO] [stderr] | ^^^^^^^^ help: consider: `4_194_304.` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: All variants have the same prefix: `Hz` [INFO] [stderr] --> src/timer.rs:75:1 [INFO] [stderr] | [INFO] [stderr] 75 | / enum TacFrequency { [INFO] [stderr] 76 | | Hz4096 = 0b00, [INFO] [stderr] 77 | | Hz262144 = 0b01, [INFO] [stderr] 78 | | Hz65536 = 0b10, [INFO] [stderr] 79 | | Hz16384 = 0b11, [INFO] [stderr] 80 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: remove the prefixes and use full paths to the variants instead of glob imports [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/timer.rs:86:39 [INFO] [stderr] | [INFO] [stderr] 86 | TacFrequency::Hz262144 => 262144, // every 16 clock cycles [INFO] [stderr] | ^^^^^^ help: consider: `262_144` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/ppu.rs:397:5 [INFO] [stderr] | [INFO] [stderr] 397 | return rgba_fractional; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rgba_fractional` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | return vblank_int.is_some(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `vblank_int.is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/main.rs:224:5 [INFO] [stderr] | [INFO] [stderr] 224 | continue_debugging [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/main.rs:213:30 [INFO] [stderr] | [INFO] [stderr] 213 | let continue_debugging = match line.trim() { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 214 | | "q" => false, [INFO] [stderr] 215 | | l => { [INFO] [stderr] 216 | | if let Ok(addr) = u16::from_str_radix(l, 16) { [INFO] [stderr] ... | [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:562:5 [INFO] [stderr] | [INFO] [stderr] 562 | return CYCLES[opcode as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `CYCLES[opcode as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:627:5 [INFO] [stderr] | [INFO] [stderr] 627 | return CB_CYCLES[opcode as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `CB_CYCLES[opcode as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::vram::*` [INFO] [stderr] --> src/main.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | use crate::vram::*; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/joypad.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | return byte; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `byte` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:109:38 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn set_af(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:113:38 [INFO] [stderr] | [INFO] [stderr] 113 | pub fn set_bc(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:117:38 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn set_de(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/cpu/mod.rs:121:38 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn set_hl(&mut self, n: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cpu/mod.rs:232:9 [INFO] [stderr] | [INFO] [stderr] 232 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/gfx.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | return rgba_fractional; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rgba_fractional` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/gfx.rs:146:43 [INFO] [stderr] | [INFO] [stderr] 146 | let palette = DmgPalette::from_u8(0b00011011); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1011` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/gfx.rs:173:43 [INFO] [stderr] | [INFO] [stderr] 173 | let palette = DmgPalette::from_u8(0b00011011); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1011` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::vram::*` [INFO] [stderr] --> src/mmu.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use crate::vram::*; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/mmu.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | mmu [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/mmu.rs:42:19 [INFO] [stderr] | [INFO] [stderr] 42 | let mmu = Mmu { [INFO] [stderr] | ___________________^ [INFO] [stderr] 43 | | bootrom, [INFO] [stderr] 44 | | rom, [INFO] [stderr] 45 | | vram: [0; 8 * 1024], [INFO] [stderr] ... | [INFO] [stderr] 55 | | ppu: ppu, [INFO] [stderr] 56 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/mmu.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | val [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/mmu.rs:64:19 [INFO] [stderr] | [INFO] [stderr] 64 | let val = util::concat(l, h); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/mmu.rs:111:9 [INFO] [stderr] | [INFO] [stderr] 111 | val [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/mmu.rs:69:19 [INFO] [stderr] | [INFO] [stderr] 69 | let val = if addr < 0x100 && self.bootrom_enabled() { [INFO] [stderr] | ___________________^ [INFO] [stderr] 70 | | self.bootrom[addr as usize] [INFO] [stderr] 71 | | } else { [INFO] [stderr] 72 | | let addr = addr as usize; [INFO] [stderr] ... | [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/mmu.rs:119:55 [INFO] [stderr] | [INFO] [stderr] 119 | pub fn write_word(&mut self, val: u16, addr: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: unneeded unit return type [INFO] [stderr] --> src/mmu.rs:125:54 [INFO] [stderr] | [INFO] [stderr] 125 | pub fn write_byte(&mut self, val: u8, addr: u16) -> () { [INFO] [stderr] | ^^^^^ help: remove the `-> ()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/timer.rs:31:51 [INFO] [stderr] | [INFO] [stderr] 31 | let seconds_passed = cycles as f32 / (4194304. / 4.); [INFO] [stderr] | ^^^^^^^^ help: consider: `4_194_304.` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: All variants have the same prefix: `Hz` [INFO] [stderr] --> src/timer.rs:75:1 [INFO] [stderr] | [INFO] [stderr] 75 | / enum TacFrequency { [INFO] [stderr] 76 | | Hz4096 = 0b00, [INFO] [stderr] 77 | | Hz262144 = 0b01, [INFO] [stderr] 78 | | Hz65536 = 0b10, [INFO] [stderr] 79 | | Hz16384 = 0b11, [INFO] [stderr] 80 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::enum_variant_names)] on by default [INFO] [stderr] = help: remove the prefixes and use full paths to the variants instead of glob imports [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/timer.rs:86:39 [INFO] [stderr] | [INFO] [stderr] 86 | TacFrequency::Hz262144 => 262144, // every 16 clock cycles [INFO] [stderr] | ^^^^^^ help: consider: `262_144` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `super::*` [INFO] [stderr] --> src/util.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | use super::*; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/ppu.rs:397:5 [INFO] [stderr] | [INFO] [stderr] 397 | return rgba_fractional; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `rgba_fractional` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | return vblank_int.is_some(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `vblank_int.is_some()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/main.rs:224:5 [INFO] [stderr] | [INFO] [stderr] 224 | continue_debugging [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/main.rs:213:30 [INFO] [stderr] | [INFO] [stderr] 213 | let continue_debugging = match line.trim() { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 214 | | "q" => false, [INFO] [stderr] 215 | | l => { [INFO] [stderr] 216 | | if let Ok(addr) = u16::from_str_radix(l, 16) { [INFO] [stderr] ... | [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:562:5 [INFO] [stderr] | [INFO] [stderr] 562 | return CYCLES[opcode as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `CYCLES[opcode as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:627:5 [INFO] [stderr] | [INFO] [stderr] 627 | return CB_CYCLES[opcode as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `CB_CYCLES[opcode as usize]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused variable: `vram` [INFO] [stderr] --> src/ppu.rs:328:53 [INFO] [stderr] | [INFO] [stderr] 328 | fn get_tile_addr(tile_idx: u8, tileset_mode1: bool, vram: &[u8]) -> u16 { [INFO] [stderr] | ^^^^ help: consider using `_vram` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ime` [INFO] [stderr] --> src/cpu/mod.rs:207:13 [INFO] [stderr] | [INFO] [stderr] 207 | let ime = self.ime; [INFO] [stderr] | ^^^ help: consider using `_ime` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `spr_enabled` [INFO] [stderr] --> src/ppu.rs:204:13 [INFO] [stderr] | [INFO] [stderr] 204 | let spr_enabled = self.lcdc.sprites_enabled; [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_spr_enabled` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tileset1` [INFO] [stderr] --> src/ppu.rs:212:13 [INFO] [stderr] | [INFO] [stderr] 212 | let tileset1: bool = self.lcdc.bg_window_tile_data_select1; [INFO] [stderr] | ^^^^^^^^ help: consider using `_tileset1` instead [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `2 * y` [INFO] [stderr] --> src/vram.rs:50:34 [INFO] [stderr] | [INFO] [stderr] 50 | let lo_byte = tile_bytes[2 * y + 0]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/vram.rs:64:14 [INFO] [stderr] | [INFO] [stderr] 64 | for i in 0..(32 * 32) { [INFO] [stderr] | ^^^^^^^^^^^^ help: try replacing the loop by: `tile_idxs[..(32 * 32)].clone_from_slice(&vram[6144..((32 * 32) + 6144)])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/vram.rs:156:28 [INFO] [stderr] | [INFO] [stderr] 156 | &self.tiles[(256 + idx as i32) as usize] [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(idx)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: unused variable: `vram` [INFO] [stderr] --> src/ppu.rs:328:53 [INFO] [stderr] | [INFO] [stderr] 328 | fn get_tile_addr(tile_idx: u8, tileset_mode1: bool, vram: &[u8]) -> u16 { [INFO] [stderr] | ^^^^ help: consider using `_vram` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ime` [INFO] [stderr] --> src/cpu/mod.rs:207:13 [INFO] [stderr] | [INFO] [stderr] 207 | let ime = self.ime; [INFO] [stderr] | ^^^ help: consider using `_ime` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `spr_enabled` [INFO] [stderr] --> src/ppu.rs:204:13 [INFO] [stderr] | [INFO] [stderr] 204 | let spr_enabled = self.lcdc.sprites_enabled; [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_spr_enabled` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `tileset1` [INFO] [stderr] --> src/ppu.rs:212:13 [INFO] [stderr] | [INFO] [stderr] 212 | let tileset1: bool = self.lcdc.bg_window_tile_data_select1; [INFO] [stderr] | ^^^^^^^^ help: consider using `_tileset1` instead [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `joypad::Joypad` [INFO] [stderr] --> src/joypad.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | / pub fn new() -> Joypad { [INFO] [stderr] 72 | | Joypad { [INFO] [stderr] 73 | | down: false, [INFO] [stderr] 74 | | up: false, [INFO] [stderr] ... | [INFO] [stderr] 83 | | } [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 12 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(self.right as u8)` [INFO] [stderr] --> src/joypad.rs:93:24 [INFO] [stderr] | [INFO] [stderr] 93 | & !((self.right as u8) << 0) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(self.a as u8)` [INFO] [stderr] --> src/joypad.rs:99:24 [INFO] [stderr] | [INFO] [stderr] 99 | & !((self.a as u8) << 0) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/jp.rs:45:22 [INFO] [stderr] | [INFO] [stderr] 45 | let pc = self.pc as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i32::from(self.pc)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/jp.rs:46:42 [INFO] [stderr] | [INFO] [stderr] 46 | let new_pc = pc.wrapping_add(n as i32); [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:60:46 [INFO] [stderr] | [INFO] [stderr] 60 | self.mmu.write_byte(self.a, 0xFF00 + self.c as u16) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(self.c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:63:46 [INFO] [stderr] | [INFO] [stderr] 63 | self.a = self.mmu.read_byte(0xFF00 + self.c as u16) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(self.c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:90:46 [INFO] [stderr] | [INFO] [stderr] 90 | self.mmu.write_byte(self.a, 0xFF00 + n as u16) [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:94:46 [INFO] [stderr] | [INFO] [stderr] 94 | self.a = self.mmu.read_byte(0xFF00 + n as u16) [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `1` [INFO] [stderr] --> src/cpu/mod.rs:13:26 [INFO] [stderr] | [INFO] [stderr] 13 | const VBLANK = 1 << 0; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | (bytes[0] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | (bytes[1] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | (bytes[2] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | (bytes[3] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:46:20 [INFO] [stderr] | [INFO] [stderr] 46 | let sc_x = mmu.ppu.sc_x as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(mmu.ppu.sc_x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:47:20 [INFO] [stderr] | [INFO] [stderr] 47 | let sc_y = mmu.ppu.sc_y as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(mmu.ppu.sc_y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/gfx.rs:100:28 [INFO] [stderr] | [INFO] [stderr] 100 | if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 100 | if bg_color != 0 || !behind_bg { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 100 | if !(behind_bg && bg_color == 0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gfx.rs:80:36 [INFO] [stderr] | [INFO] [stderr] 80 | fn draw_sprite(ppu: &Ppu, spr: &OamEntry, tileset: &Tileset, out_buf: &mut Array2D) { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `OamEntry` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `framebuffer` [INFO] [stderr] --> src/gfx.rs:119:20 [INFO] [stderr] | [INFO] [stderr] 119 | for idx in 0..160 * 144 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 119 | for (idx, ) in framebuffer.iter().enumerate().take(160 * 144) { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: some ranges overlap [INFO] [stderr] --> src/mmu.rs:82:17 [INFO] [stderr] | [INFO] [stderr] 82 | 0xFF00 => self.joypad.read_byte(), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_overlapping_arm)] on by default [INFO] [stderr] note: overlaps with this [INFO] [stderr] --> src/mmu.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105| 0xFF00...0xFF7F => self.unhandled_io[addr - 0xFF00], [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/mmu.rs:116:43 [INFO] [stderr] | [INFO] [stderr] 116 | String::from_utf8(ascii.to_vec()).unwrap_or("unknown".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "unknown".to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: some ranges overlap [INFO] [stderr] --> src/mmu.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | 0xFF01...0xFF7F => self.unhandled_io[addr - 0xFF00] = val, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: overlaps with this [INFO] [stderr] --> src/mmu.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | 0xFF04 => self.timer.reset_div(), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/mmu.rs:167:24 [INFO] [stderr] | [INFO] [stderr] 167 | let src_from = (src as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `u16::from(src)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `timer::Timer` [INFO] [stderr] --> src/timer.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new() -> Timer { [INFO] [stderr] 18 | | Timer { [INFO] [stderr] 19 | | div: 0.0, [INFO] [stderr] 20 | | tima: 0.0, [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | impl Default for timer::Timer { [INFO] [stderr] 11 | fn default() -> Self { [INFO] [stderr] 12 | Self::new() [INFO] [stderr] 13 | } [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/timer.rs:37:29 [INFO] [stderr] | [INFO] [stderr] 37 | self.tima = self.tma as f32; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `f32::from(self.tma)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/timer.rs:83:25 [INFO] [stderr] | [INFO] [stderr] 83 | fn get_frequency_hz(&self) -> u32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:2:15 [INFO] [stderr] | [INFO] [stderr] 2 | let x16 = x as u16; [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:3:15 [INFO] [stderr] | [INFO] [stderr] 3 | let y16 = y as u16; [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | (a as u16) + (b as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:30:18 [INFO] [stderr] | [INFO] [stderr] 30 | (a as u16) + (b as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | (a as u32) + (b as u32) > 0xFFFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:38:18 [INFO] [stderr] | [INFO] [stderr] 38 | (a as u32) + (b as u32) > 0xFFFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | (a as u16) + (b as u16) + (c as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:46:18 [INFO] [stderr] | [INFO] [stderr] 46 | (a as u16) + (b as u16) + (c as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:46:31 [INFO] [stderr] | [INFO] [stderr] 46 | (a as u16) + (b as u16) + (c as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | (a as u16) < b as u16 + c as u16 [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:54:18 [INFO] [stderr] | [INFO] [stderr] 54 | (a as u16) < b as u16 + c as u16 [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:54:29 [INFO] [stderr] | [INFO] [stderr] 54 | (a as u16) < b as u16 + c as u16 [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `2 * y` [INFO] [stderr] --> src/vram.rs:50:34 [INFO] [stderr] | [INFO] [stderr] 50 | let lo_byte = tile_bytes[2 * y + 0]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/vram.rs:64:14 [INFO] [stderr] | [INFO] [stderr] 64 | for i in 0..(32 * 32) { [INFO] [stderr] | ^^^^^^^^^^^^ help: try replacing the loop by: `tile_idxs[..(32 * 32)].clone_from_slice(&vram[6144..((32 * 32) + 6144)])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `to_u2(self.colors[3])` [INFO] [stderr] --> src/ppu.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | to_u2(self.colors[3]) << 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `ppu::Ppu` [INFO] [stderr] --> src/ppu.rs:80:5 [INFO] [stderr] | [INFO] [stderr] 80 | / pub fn new() -> Ppu { [INFO] [stderr] 81 | | Ppu { [INFO] [stderr] 82 | | lcdc: Lcdc::default(), [INFO] [stderr] 83 | | [INFO] [stderr] ... | [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 79 | impl Default for ppu::Ppu { [INFO] [stderr] 80 | fn default() -> Self { [INFO] [stderr] 81 | Self::new() [INFO] [stderr] 82 | } [INFO] [stderr] 83 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/vram.rs:156:28 [INFO] [stderr] | [INFO] [stderr] 156 | &self.tiles[(256 + idx as i32) as usize] [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(idx)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `joypad::Joypad` [INFO] [stderr] --> src/joypad.rs:71:5 [INFO] [stderr] | [INFO] [stderr] 71 | / pub fn new() -> Joypad { [INFO] [stderr] 72 | | Joypad { [INFO] [stderr] 73 | | down: false, [INFO] [stderr] 74 | | up: false, [INFO] [stderr] ... | [INFO] [stderr] 83 | | } [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/ppu.rs:233:13 [INFO] [stderr] | [INFO] [stderr] 233 | / let tilemap_start_addr; [INFO] [stderr] 234 | | if tilemap1 { [INFO] [stderr] 235 | | tilemap_start_addr = 0x9C00; [INFO] [stderr] 236 | | } else { [INFO] [stderr] 237 | | tilemap_start_addr = 0x9800; [INFO] [stderr] 238 | | } [INFO] [stderr] | |_____________^ help: it is more idiomatic to write: `let tilemap_start_addr = if tilemap1 { 0x9C00 } else { 0x9800 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:239:31 [INFO] [stderr] | [INFO] [stderr] 239 | let tilemap_idx = tilemap_y as u16 * 32 + tilemap_x as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(tilemap_y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:239:55 [INFO] [stderr] | [INFO] [stderr] 239 | let tilemap_idx = tilemap_y as u16 * 32 + tilemap_x as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(tilemap_x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16` [INFO] [stderr] --> src/ppu.rs:245:32 [INFO] [stderr] | [INFO] [stderr] 245 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:245:59 [INFO] [stderr] | [INFO] [stderr] 245 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:246:59 [INFO] [stderr] | [INFO] [stderr] 246 | let tile_hi = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 1) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 12 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16` [INFO] [stderr] --> src/ppu.rs:293:44 [INFO] [stderr] | [INFO] [stderr] 293 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:293:71 [INFO] [stderr] | [INFO] [stderr] 293 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:294:71 [INFO] [stderr] | [INFO] [stderr] 294 | let tile_hi = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 1) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `x` is used to index `line` [INFO] [stderr] --> src/ppu.rs:316:18 [INFO] [stderr] | [INFO] [stderr] 316 | for x in 0..160 { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 316 | for (x, ) in line.iter().enumerate().take(160) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(self.right as u8)` [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:330:19 [INFO] [stderr] | [INFO] [stderr] 330 | 0x8000 + (tile_idx as u16 * 16) as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u16::from(tile_idx)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:332:24 [INFO] [stderr] | [INFO] [stderr] 332 | let tile_idx = unsafe { mem::transmute::(tile_idx) } as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(unsafe { mem::transmute::(tile_idx) })` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(self.bg_window_priority as u8)` [INFO] [stderr] --> src/ppu.rs:369:17 [INFO] [stderr] | [INFO] [stderr] 369 | (self.bg_window_priority as u8) << 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] --> src/joypad.rs:93:24 [INFO] [stderr] | [INFO] [stderr] 93 | & !((self.right as u8) << 0) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `1` [INFO] [stderr] --> src/ppu.rs:382:38 [INFO] [stderr] | [INFO] [stderr] 382 | bg_window_priority: (b & (1 << 0) != 0), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(self.a as u8)` [INFO] [stderr] --> src/joypad.rs:99:24 [INFO] [stderr] | [INFO] [stderr] 99 | & !((self.a as u8) << 0) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:392:9 [INFO] [stderr] | [INFO] [stderr] 392 | (bytes[0] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:393:9 [INFO] [stderr] | [INFO] [stderr] 393 | (bytes[1] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:394:9 [INFO] [stderr] | [INFO] [stderr] 394 | (bytes[2] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:395:9 [INFO] [stderr] | [INFO] [stderr] 395 | (bytes[3] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/main.rs:104:24 [INFO] [stderr] | [INFO] [stderr] 104 | if let Some(_) = e.render_args() { [INFO] [stderr] | _________________- ^^^^^^^ [INFO] [stderr] 105 | | gfx.render_framebuffer1(&mut window, &e, &cpu.mmu.ppu.framebuffer); [INFO] [stderr] 106 | | } [INFO] [stderr] | |_________________- help: try this: `if e.render_args().is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:126:26 [INFO] [stderr] | [INFO] [stderr] 126 | cpu.set_busy(instr_cycles as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(instr_cycles)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/jp.rs:45:22 [INFO] [stderr] | [INFO] [stderr] 45 | let pc = self.pc as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i32::from(self.pc)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/jp.rs:46:42 [INFO] [stderr] | [INFO] [stderr] 46 | let new_pc = pc.wrapping_add(n as i32); [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:60:46 [INFO] [stderr] | [INFO] [stderr] 60 | self.mmu.write_byte(self.a, 0xFF00 + self.c as u16) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(self.c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:63:46 [INFO] [stderr] | [INFO] [stderr] 63 | self.a = self.mmu.read_byte(0xFF00 + self.c as u16) [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(self.c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:90:46 [INFO] [stderr] | [INFO] [stderr] 90 | self.mmu.write_byte(self.a, 0xFF00 + n as u16) [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/instrs/ld.rs:94:46 [INFO] [stderr] | [INFO] [stderr] 94 | self.a = self.mmu.read_byte(0xFF00 + n as u16) [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `1` [INFO] [stderr] --> src/cpu/mod.rs:13:26 [INFO] [stderr] | [INFO] [stderr] 13 | const VBLANK = 1 << 0; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | (bytes[0] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | (bytes[1] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | (bytes[2] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:18:9 [INFO] [stderr] | [INFO] [stderr] 18 | (bytes[3] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:46:20 [INFO] [stderr] | [INFO] [stderr] 46 | let sc_x = mmu.ppu.sc_x as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(mmu.ppu.sc_x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/gfx.rs:47:20 [INFO] [stderr] | [INFO] [stderr] 47 | let sc_y = mmu.ppu.sc_y as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(mmu.ppu.sc_y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/gfx.rs:100:28 [INFO] [stderr] | [INFO] [stderr] 100 | if !behind_bg || (behind_bg && bg_color != 0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 100 | if bg_color != 0 || !behind_bg { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] 100 | if !(behind_bg && bg_color == 0) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/gfx.rs:80:36 [INFO] [stderr] | [INFO] [stderr] 80 | fn draw_sprite(ppu: &Ppu, spr: &OamEntry, tileset: &Tileset, out_buf: &mut Array2D) { [INFO] [stderr] | ^^^^^^^^^ help: consider passing by value instead: `OamEntry` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `framebuffer` [INFO] [stderr] --> src/gfx.rs:119:20 [INFO] [stderr] | [INFO] [stderr] 119 | for idx in 0..160 * 144 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 119 | for (idx, ) in framebuffer.iter().enumerate().take(160 * 144) { [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: some ranges overlap [INFO] [stderr] --> src/mmu.rs:82:17 [INFO] [stderr] | [INFO] [stderr] 82 | 0xFF00 => self.joypad.read_byte(), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_overlapping_arm)] on by default [INFO] [stderr] note: overlaps with this [INFO] [stderr] --> src/mmu.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105| 0xFF00...0xFF7F => self.unhandled_io[addr - 0xFF00], [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/mmu.rs:116:43 [INFO] [stderr] | [INFO] [stderr] 116 | String::from_utf8(ascii.to_vec()).unwrap_or("unknown".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "unknown".to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: some ranges overlap [INFO] [stderr] --> src/mmu.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | 0xFF01...0xFF7F => self.unhandled_io[addr - 0xFF00] = val, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: overlaps with this [INFO] [stderr] --> src/mmu.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | 0xFF04 => self.timer.reset_div(), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_overlapping_arm [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/mmu.rs:167:24 [INFO] [stderr] | [INFO] [stderr] 167 | let src_from = (src as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `u16::from(src)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `timer::Timer` [INFO] [stderr] --> src/timer.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | / pub fn new() -> Timer { [INFO] [stderr] 18 | | Timer { [INFO] [stderr] 19 | | div: 0.0, [INFO] [stderr] 20 | | tima: 0.0, [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | impl Default for timer::Timer { [INFO] [stderr] 11 | fn default() -> Self { [INFO] [stderr] 12 | Self::new() [INFO] [stderr] 13 | } [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/timer.rs:37:29 [INFO] [stderr] | [INFO] [stderr] 37 | self.tima = self.tma as f32; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `f32::from(self.tma)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/timer.rs:83:25 [INFO] [stderr] | [INFO] [stderr] 83 | fn get_frequency_hz(&self) -> u32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:2:15 [INFO] [stderr] | [INFO] [stderr] 2 | let x16 = x as u16; [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:3:15 [INFO] [stderr] | [INFO] [stderr] 3 | let y16 = y as u16; [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | (a as u16) + (b as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:30:18 [INFO] [stderr] | [INFO] [stderr] 30 | (a as u16) + (b as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:38:5 [INFO] [stderr] | [INFO] [stderr] 38 | (a as u32) + (b as u32) > 0xFFFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:38:18 [INFO] [stderr] | [INFO] [stderr] 38 | (a as u32) + (b as u32) > 0xFFFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | (a as u16) + (b as u16) + (c as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:46:18 [INFO] [stderr] | [INFO] [stderr] 46 | (a as u16) + (b as u16) + (c as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:46:31 [INFO] [stderr] | [INFO] [stderr] 46 | (a as u16) + (b as u16) + (c as u16) > 0xFF [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | (a as u16) < b as u16 + c as u16 [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(a)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:54:18 [INFO] [stderr] | [INFO] [stderr] 54 | (a as u16) < b as u16 + c as u16 [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(b)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:54:29 [INFO] [stderr] | [INFO] [stderr] 54 | (a as u16) < b as u16 + c as u16 [INFO] [stderr] | ^^^^^^^^ help: try: `u16::from(c)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `to_u2(self.colors[3])` [INFO] [stderr] --> src/ppu.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | to_u2(self.colors[3]) << 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `ppu::Ppu` [INFO] [stderr] --> src/ppu.rs:80:5 [INFO] [stderr] | [INFO] [stderr] 80 | / pub fn new() -> Ppu { [INFO] [stderr] 81 | | Ppu { [INFO] [stderr] 82 | | lcdc: Lcdc::default(), [INFO] [stderr] 83 | | [INFO] [stderr] ... | [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 79 | impl Default for ppu::Ppu { [INFO] [stderr] 80 | fn default() -> Self { [INFO] [stderr] 81 | Self::new() [INFO] [stderr] 82 | } [INFO] [stderr] 83 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/ppu.rs:233:13 [INFO] [stderr] | [INFO] [stderr] 233 | / let tilemap_start_addr; [INFO] [stderr] 234 | | if tilemap1 { [INFO] [stderr] 235 | | tilemap_start_addr = 0x9C00; [INFO] [stderr] 236 | | } else { [INFO] [stderr] 237 | | tilemap_start_addr = 0x9800; [INFO] [stderr] 238 | | } [INFO] [stderr] | |_____________^ help: it is more idiomatic to write: `let tilemap_start_addr = if tilemap1 { 0x9C00 } else { 0x9800 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:239:31 [INFO] [stderr] | [INFO] [stderr] 239 | let tilemap_idx = tilemap_y as u16 * 32 + tilemap_x as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(tilemap_y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:239:55 [INFO] [stderr] | [INFO] [stderr] 239 | let tilemap_idx = tilemap_y as u16 * 32 + tilemap_x as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(tilemap_x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16` [INFO] [stderr] --> src/ppu.rs:245:32 [INFO] [stderr] | [INFO] [stderr] 245 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:245:59 [INFO] [stderr] | [INFO] [stderr] 245 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:246:59 [INFO] [stderr] | [INFO] [stderr] 246 | let tile_hi = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 1) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16` [INFO] [stderr] --> src/ppu.rs:293:44 [INFO] [stderr] | [INFO] [stderr] 293 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:293:71 [INFO] [stderr] | [INFO] [stderr] 293 | let tile_lo = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 0) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:294:71 [INFO] [stderr] | [INFO] [stderr] 294 | let tile_hi = vram[(tile_addr - VRAM_OFFSET + (y_in_tile * 2) as u16 + 1) as usize]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(y_in_tile * 2)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `x` is used to index `line` [INFO] [stderr] --> src/ppu.rs:316:18 [INFO] [stderr] | [INFO] [stderr] 316 | for x in 0..160 { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 316 | for (x, ) in line.iter().enumerate().take(160) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:330:19 [INFO] [stderr] | [INFO] [stderr] 330 | 0x8000 + (tile_idx as u16 * 16) as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u16::from(tile_idx)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:332:24 [INFO] [stderr] | [INFO] [stderr] 332 | let tile_idx = unsafe { mem::transmute::(tile_idx) } as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(unsafe { mem::transmute::(tile_idx) })` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(self.bg_window_priority as u8)` [INFO] [stderr] --> src/ppu.rs:369:17 [INFO] [stderr] | [INFO] [stderr] 369 | (self.bg_window_priority as u8) << 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `1` [INFO] [stderr] --> src/ppu.rs:382:38 [INFO] [stderr] | [INFO] [stderr] 382 | bg_window_priority: (b & (1 << 0) != 0), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:392:9 [INFO] [stderr] | [INFO] [stderr] 392 | (bytes[0] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:393:9 [INFO] [stderr] | [INFO] [stderr] 393 | (bytes[1] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:394:9 [INFO] [stderr] | [INFO] [stderr] 394 | (bytes[2] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/ppu.rs:395:9 [INFO] [stderr] | [INFO] [stderr] 395 | (bytes[3] as f32) / 256.0, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/main.rs:104:24 [INFO] [stderr] | [INFO] [stderr] 104 | if let Some(_) = e.render_args() { [INFO] [stderr] | _________________- ^^^^^^^ [INFO] [stderr] 105 | | gfx.render_framebuffer1(&mut window, &e, &cpu.mmu.ppu.framebuffer); [INFO] [stderr] 106 | | } [INFO] [stderr] | |_________________- help: try this: `if e.render_args().is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:126:26 [INFO] [stderr] | [INFO] [stderr] 126 | cpu.set_busy(instr_cycles as u32); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(instr_cycles)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 56.87s [INFO] running `"docker" "inspect" "1e8e5b0843a4df4c9a2c6e2d539d33257941583acd9ddd5356ae9cb34e88d05a"` [INFO] running `"docker" "rm" "-f" "1e8e5b0843a4df4c9a2c6e2d539d33257941583acd9ddd5356ae9cb34e88d05a"` [INFO] [stdout] 1e8e5b0843a4df4c9a2c6e2d539d33257941583acd9ddd5356ae9cb34e88d05a