[INFO] updating cached repository adleroliveira/chip8 [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/adleroliveira/chip8 [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/adleroliveira/chip8" "work/ex/clippy-test-run/sources/stable/gh/adleroliveira/chip8"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/adleroliveira/chip8'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/adleroliveira/chip8" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/adleroliveira/chip8"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/adleroliveira/chip8'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 4b85988fa32912334a0f2b3228baea8f30ea8e62 [INFO] sha for GitHub repo adleroliveira/chip8: 4b85988fa32912334a0f2b3228baea8f30ea8e62 [INFO] validating manifest of adleroliveira/chip8 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 adleroliveira/chip8 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 adleroliveira/chip8 [INFO] finished frobbing adleroliveira/chip8 [INFO] frobbed toml for adleroliveira/chip8 written to work/ex/clippy-test-run/sources/stable/gh/adleroliveira/chip8/Cargo.toml [INFO] started frobbing adleroliveira/chip8 [INFO] finished frobbing adleroliveira/chip8 [INFO] frobbed toml for adleroliveira/chip8 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/adleroliveira/chip8/Cargo.toml [INFO] crate adleroliveira/chip8 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 adleroliveira/chip8 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/adleroliveira/chip8:/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] e183943e8b8e308d53b4e4aa08e41c31a2f4187b806ef4220c04879b8046218b [INFO] running `"docker" "start" "-a" "e183943e8b8e308d53b4e4aa08e41c31a2f4187b806ef4220c04879b8046218b"` [INFO] [stderr] Compiling x11-dl v2.18.0 [INFO] [stderr] Checking crossbeam-epoch v0.3.1 [INFO] [stderr] Compiling num-derive v0.2.2 [INFO] [stderr] Compiling gl v0.10.0 [INFO] [stderr] Compiling glutin v0.14.0 [INFO] [stderr] Checking wayland-sys v0.12.5 [INFO] [stderr] Checking pistoncore-input v0.21.0 [INFO] [stderr] Checking wayland-client v0.12.5 [INFO] [stderr] Checking crossbeam-deque v0.2.0 [INFO] [stderr] Checking rayon-core v1.4.1 [INFO] [stderr] Checking rayon v1.0.2 [INFO] [stderr] Checking wayland-protocols v0.12.5 [INFO] [stderr] Checking wayland-kbd v0.13.1 [INFO] [stderr] Checking pistoncore-window v0.32.0 [INFO] [stderr] Checking pistoncore-event_loop v0.37.0 [INFO] [stderr] Checking wayland-window v0.13.3 [INFO] [stderr] Checking jpeg-decoder v0.1.15 [INFO] [stderr] Checking piston v0.37.0 [INFO] [stderr] Checking winit v0.12.0 [INFO] [stderr] Checking image v0.19.0 [INFO] [stderr] Checking pistoncore-glutin_window v0.47.0 [INFO] [stderr] Checking piston2d-opengl_graphics v0.53.0 [INFO] [stderr] Checking chip8 v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/cpu.rs:301:13 [INFO] [stderr] | [INFO] [stderr] 301 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/cpu.rs:301:13 [INFO] [stderr] | [INFO] [stderr] 301 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | (memory.ram[self.pc as usize] as u16) << 8 | (memory.ram[(self.pc + 1) as usize] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(memory.ram[self.pc as usize])` [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu.rs:50:54 [INFO] [stderr] | [INFO] [stderr] 50 | (memory.ram[self.pc as usize] as u16) << 8 | (memory.ram[(self.pc + 1) as usize] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(memory.ram[(self.pc + 1) as usize])` [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: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:215:9 [INFO] [stderr] | [INFO] [stderr] 215 | self.v[x] = self.v[x] | self.v[y]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] |= self.v[y]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:220:9 [INFO] [stderr] | [INFO] [stderr] 220 | self.v[x] = self.v[x] & self.v[y]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] &= self.v[y]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:225:9 [INFO] [stderr] | [INFO] [stderr] 225 | self.v[x] = self.v[x] ^ self.v[y]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] ^= self.v[y]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu.rs:230:18 [INFO] [stderr] | [INFO] [stderr] 230 | let vx = self.v[x] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(self.v[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/cpu.rs:231:18 [INFO] [stderr] | [INFO] [stderr] 231 | let vy = self.v[y] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(self.v[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/cpu.rs:278:22 [INFO] [stderr] | [INFO] [stderr] 278 | Action::Jump(self.v[0x0] as u16 + nnn) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.v[0x0])` [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: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:299:17 [INFO] [stderr] | [INFO] [stderr] 299 | memory.vram[coord_y][coord_x] = color ^ memory.vram[coord_y][coord_x]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `memory.vram[coord_y][coord_x] ^= color` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu.rs:367:18 [INFO] [stderr] | [INFO] [stderr] 367 | for i in 0..(x as u16 + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: use: `0..=x as u16` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu.rs:375:18 [INFO] [stderr] | [INFO] [stderr] 375 | for i in 0..(x as u16 + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: use: `0..=x as u16` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `addr` is used to index `program` [INFO] [stderr] --> src/chip8.rs:97:21 [INFO] [stderr] | [INFO] [stderr] 97 | for addr in 0..program.len() { [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] 97 | for (addr, ) in program.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/chip8.rs:97:21 [INFO] [stderr] | [INFO] [stderr] 97 | for addr in 0..program.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try replacing the loop by: `memory.ram[offset..(program.len() + offset)].clone_from_slice(&program[..])` [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/chip8.rs:152:33 [INFO] [stderr] | [INFO] [stderr] 152 | let index = match &k.button { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 153 | | &Button::Keyboard(Key::D1) => Some(0x1), [INFO] [stderr] 154 | | &Button::Keyboard(Key::D2) => Some(0x2), [INFO] [stderr] 155 | | &Button::Keyboard(Key::D3) => Some(0x3), [INFO] [stderr] ... | [INFO] [stderr] 169 | | _ => None, [INFO] [stderr] 170 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 152 | let index = match k.button { [INFO] [stderr] 153 | Button::Keyboard(Key::D1) => Some(0x1), [INFO] [stderr] 154 | Button::Keyboard(Key::D2) => Some(0x2), [INFO] [stderr] 155 | Button::Keyboard(Key::D3) => Some(0x3), [INFO] [stderr] 156 | Button::Keyboard(Key::D4) => Some(0xc), [INFO] [stderr] 157 | Button::Keyboard(Key::Q) => Some(0x4), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `memory::Memory` [INFO] [stderr] --> src/memory.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> Self { [INFO] [stderr] 12 | | let stack = [0; 16]; [INFO] [stderr] 13 | | let vram = [[0; CHIP8_WIDTH]; CHIP8_HEIGHT]; [INFO] [stderr] 14 | | let mut ram = [0; 4096]; [INFO] [stderr] ... | [INFO] [stderr] 21 | | Memory { ram, stack, vram, vram_changed } [INFO] [stderr] 22 | | } [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 memory::Memory { [INFO] [stderr] 11 | fn default() -> Self { [INFO] [stderr] 12 | Self::new() [INFO] [stderr] 13 | } [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/memory.rs:17:18 [INFO] [stderr] | [INFO] [stderr] 17 | for i in 0..FONT_SET.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try replacing the loop by: `ram[..FONT_SET.len()].clone_from_slice(&FONT_SET[..])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `drivers::keyboard::Keyboard` [INFO] [stderr] --> src/drivers/keyboard.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | / pub fn new() -> Self { [INFO] [stderr] 9 | | Keyboard { [INFO] [stderr] 10 | | keys: [false; 16] [INFO] [stderr] 11 | | } [INFO] [stderr] 12 | | } [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] 3 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/debugger.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | / match key { [INFO] [stderr] 61 | | &Button::Keyboard(Key::D0) => { [INFO] [stderr] 62 | | self.mode = DebugMode::Disabled; [INFO] [stderr] 63 | | println!("DEBUG MODE: {:?}", self.mode); [INFO] [stderr] ... | [INFO] [stderr] 137 | | _ => {} [INFO] [stderr] 138 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 60 | match *key { [INFO] [stderr] 61 | Button::Keyboard(Key::D0) => { [INFO] [stderr] 62 | self.mode = DebugMode::Disabled; [INFO] [stderr] 63 | println!("DEBUG MODE: {:?}", self.mode); [INFO] [stderr] 64 | } [INFO] [stderr] 65 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/debugger.rs:130:42 [INFO] [stderr] | [INFO] [stderr] 130 | let opcode = (program[addr] as u16) << 8 | (program[addr + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(program[addr])` [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/debugger.rs:130:72 [INFO] [stderr] | [INFO] [stderr] 130 | let opcode = (program[addr] as u16) << 8 | (program[addr + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(program[addr + 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 u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | (memory.ram[self.pc as usize] as u16) << 8 | (memory.ram[(self.pc + 1) as usize] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(memory.ram[self.pc as usize])` [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu.rs:50:54 [INFO] [stderr] | [INFO] [stderr] 50 | (memory.ram[self.pc as usize] as u16) << 8 | (memory.ram[(self.pc + 1) as usize] as u16) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(memory.ram[(self.pc + 1) as usize])` [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: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:215:9 [INFO] [stderr] | [INFO] [stderr] 215 | self.v[x] = self.v[x] | self.v[y]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] |= self.v[y]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:220:9 [INFO] [stderr] | [INFO] [stderr] 220 | self.v[x] = self.v[x] & self.v[y]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] &= self.v[y]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:225:9 [INFO] [stderr] | [INFO] [stderr] 225 | self.v[x] = self.v[x] ^ self.v[y]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] ^= self.v[y]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu.rs:230:18 [INFO] [stderr] | [INFO] [stderr] 230 | let vx = self.v[x] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(self.v[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/cpu.rs:231:18 [INFO] [stderr] | [INFO] [stderr] 231 | let vy = self.v[y] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(self.v[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/cpu.rs:278:22 [INFO] [stderr] | [INFO] [stderr] 278 | Action::Jump(self.v[0x0] as u16 + nnn) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.v[0x0])` [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: manual implementation of an assign operation [INFO] [stderr] --> src/cpu.rs:299:17 [INFO] [stderr] | [INFO] [stderr] 299 | memory.vram[coord_y][coord_x] = color ^ memory.vram[coord_y][coord_x]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `memory.vram[coord_y][coord_x] ^= color` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu.rs:367:18 [INFO] [stderr] | [INFO] [stderr] 367 | for i in 0..(x as u16 + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: use: `0..=x as u16` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu.rs:375:18 [INFO] [stderr] | [INFO] [stderr] 375 | for i in 0..(x as u16 + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: use: `0..=x as u16` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `addr` is used to index `program` [INFO] [stderr] --> src/chip8.rs:97:21 [INFO] [stderr] | [INFO] [stderr] 97 | for addr in 0..program.len() { [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] 97 | for (addr, ) in program.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/chip8.rs:97:21 [INFO] [stderr] | [INFO] [stderr] 97 | for addr in 0..program.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try replacing the loop by: `memory.ram[offset..(program.len() + offset)].clone_from_slice(&program[..])` [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: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/chip8.rs:152:33 [INFO] [stderr] | [INFO] [stderr] 152 | let index = match &k.button { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 153 | | &Button::Keyboard(Key::D1) => Some(0x1), [INFO] [stderr] 154 | | &Button::Keyboard(Key::D2) => Some(0x2), [INFO] [stderr] 155 | | &Button::Keyboard(Key::D3) => Some(0x3), [INFO] [stderr] ... | [INFO] [stderr] 169 | | _ => None, [INFO] [stderr] 170 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 152 | let index = match k.button { [INFO] [stderr] 153 | Button::Keyboard(Key::D1) => Some(0x1), [INFO] [stderr] 154 | Button::Keyboard(Key::D2) => Some(0x2), [INFO] [stderr] 155 | Button::Keyboard(Key::D3) => Some(0x3), [INFO] [stderr] 156 | Button::Keyboard(Key::D4) => Some(0xc), [INFO] [stderr] 157 | Button::Keyboard(Key::Q) => Some(0x4), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `memory::Memory` [INFO] [stderr] --> src/memory.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> Self { [INFO] [stderr] 12 | | let stack = [0; 16]; [INFO] [stderr] 13 | | let vram = [[0; CHIP8_WIDTH]; CHIP8_HEIGHT]; [INFO] [stderr] 14 | | let mut ram = [0; 4096]; [INFO] [stderr] ... | [INFO] [stderr] 21 | | Memory { ram, stack, vram, vram_changed } [INFO] [stderr] 22 | | } [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 memory::Memory { [INFO] [stderr] 11 | fn default() -> Self { [INFO] [stderr] 12 | Self::new() [INFO] [stderr] 13 | } [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/memory.rs:17:18 [INFO] [stderr] | [INFO] [stderr] 17 | for i in 0..FONT_SET.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try replacing the loop by: `ram[..FONT_SET.len()].clone_from_slice(&FONT_SET[..])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `drivers::keyboard::Keyboard` [INFO] [stderr] --> src/drivers/keyboard.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | / pub fn new() -> Self { [INFO] [stderr] 9 | | Keyboard { [INFO] [stderr] 10 | | keys: [false; 16] [INFO] [stderr] 11 | | } [INFO] [stderr] 12 | | } [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] 3 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/debugger.rs:60:9 [INFO] [stderr] | [INFO] [stderr] 60 | / match key { [INFO] [stderr] 61 | | &Button::Keyboard(Key::D0) => { [INFO] [stderr] 62 | | self.mode = DebugMode::Disabled; [INFO] [stderr] 63 | | println!("DEBUG MODE: {:?}", self.mode); [INFO] [stderr] ... | [INFO] [stderr] 137 | | _ => {} [INFO] [stderr] 138 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 60 | match *key { [INFO] [stderr] 61 | Button::Keyboard(Key::D0) => { [INFO] [stderr] 62 | self.mode = DebugMode::Disabled; [INFO] [stderr] 63 | println!("DEBUG MODE: {:?}", self.mode); [INFO] [stderr] 64 | } [INFO] [stderr] 65 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/debugger.rs:130:42 [INFO] [stderr] | [INFO] [stderr] 130 | let opcode = (program[addr] as u16) << 8 | (program[addr + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(program[addr])` [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/debugger.rs:130:72 [INFO] [stderr] | [INFO] [stderr] 130 | let opcode = (program[addr] as u16) << 8 | (program[addr + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(program[addr + 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] Finished dev [unoptimized + debuginfo] target(s) in 47.26s [INFO] running `"docker" "inspect" "e183943e8b8e308d53b4e4aa08e41c31a2f4187b806ef4220c04879b8046218b"` [INFO] running `"docker" "rm" "-f" "e183943e8b8e308d53b4e4aa08e41c31a2f4187b806ef4220c04879b8046218b"` [INFO] [stdout] e183943e8b8e308d53b4e4aa08e41c31a2f4187b806ef4220c04879b8046218b