[INFO] updating cached repository BlinfoldKing/Chip8-rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/BlinfoldKing/Chip8-rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/BlinfoldKing/Chip8-rs" "work/ex/clippy-test-run/sources/stable/gh/BlinfoldKing/Chip8-rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/BlinfoldKing/Chip8-rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/BlinfoldKing/Chip8-rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/BlinfoldKing/Chip8-rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/BlinfoldKing/Chip8-rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 865bc402f1a586becc472eee2fc0df921cf17e52 [INFO] sha for GitHub repo BlinfoldKing/Chip8-rs: 865bc402f1a586becc472eee2fc0df921cf17e52 [INFO] validating manifest of BlinfoldKing/Chip8-rs 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 BlinfoldKing/Chip8-rs 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 BlinfoldKing/Chip8-rs [INFO] finished frobbing BlinfoldKing/Chip8-rs [INFO] frobbed toml for BlinfoldKing/Chip8-rs written to work/ex/clippy-test-run/sources/stable/gh/BlinfoldKing/Chip8-rs/Cargo.toml [INFO] started frobbing BlinfoldKing/Chip8-rs [INFO] finished frobbing BlinfoldKing/Chip8-rs [INFO] frobbed toml for BlinfoldKing/Chip8-rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/BlinfoldKing/Chip8-rs/Cargo.toml [INFO] crate BlinfoldKing/Chip8-rs 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] [stderr] Blocking waiting for file lock on the registry index [INFO] linting BlinfoldKing/Chip8-rs 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/BlinfoldKing/Chip8-rs:/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] d12570a12138e178f0ca27c3a2e62343c8f5de8426d6ed17cc3e79308c96dccf [INFO] running `"docker" "start" "-a" "d12570a12138e178f0ca27c3a2e62343c8f5de8426d6ed17cc3e79308c96dccf"` [INFO] [stderr] Checking gfx_core v0.8.3 [INFO] [stderr] Compiling num-derive v0.2.3 [INFO] [stderr] Checking rusttype v0.4.3 [INFO] [stderr] Checking parking_lot v0.6.4 [INFO] [stderr] Checking pistoncore-input v0.21.0 [INFO] [stderr] Checking smithay-client-toolkit v0.3.0 [INFO] [stderr] Checking piston2d-graphics v0.26.0 [INFO] [stderr] Checking winit v0.17.2 [INFO] [stderr] Checking tiff v0.2.1 [INFO] [stderr] Checking pistoncore-window v0.32.0 [INFO] [stderr] Checking image v0.20.0 [INFO] [stderr] Checking glutin v0.18.0 [INFO] [stderr] Checking pistoncore-event_loop v0.37.0 [INFO] [stderr] Checking piston v0.37.0 [INFO] [stderr] Checking pistoncore-glutin_window v0.48.0 [INFO] [stderr] Checking piston2d-opengl_graphics v0.54.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.52.0 [INFO] [stderr] Checking piston_window v0.81.0 [INFO] [stderr] Checking chip8-rust v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `piston::window::WindowSettings` [INFO] [stderr] --> src/main.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use piston::window::WindowSettings; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `glutin_window::GlutinWindow as Window` [INFO] [stderr] --> src/main.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use glutin_window::GlutinWindow as Window; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `piston::event_loop::*` [INFO] [stderr] --> src/main.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use piston::event_loop::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `piston::input::*` [INFO] [stderr] --> src/main.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use piston::input::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `GlGraphics`, `OpenGL` [INFO] [stderr] --> src/main.rs:13:24 [INFO] [stderr] | [INFO] [stderr] 13 | use opengl_graphics::{ GlGraphics, OpenGL }; [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::prelude::*` [INFO] [stderr] --> src/CPU.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::io::prelude::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/main.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | println!("Hello, world!"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused variable: `state` [INFO] [stderr] --> src/CPU.rs:83:13 [INFO] [stderr] | [INFO] [stderr] 83 | let state = match nibble { [INFO] [stderr] | ^^^^^ help: consider using `_state` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `bytes_read` [INFO] [stderr] --> src/CPU.rs:265:13 [INFO] [stderr] | [INFO] [stderr] 265 | let bytes_read = if let Ok(bytes_read) = reader.read(&mut buffer) { [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_bytes_read` instead [INFO] [stderr] [INFO] [stderr] warning: field is never used: `gfx` [INFO] [stderr] --> src/CPU.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | gfx: [[u8; 32]; 64], [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `delay_timer` [INFO] [stderr] --> src/CPU.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | delay_timer: u8, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sound_timer` [INFO] [stderr] --> src/CPU.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | sound_timer: u8, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: module `CPU` should have a snake case name such as `cpu` [INFO] [stderr] --> src/main.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | mod CPU; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `fontset` should have an upper case name such as `FONTSET` [INFO] [stderr] --> src/CPU.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | / const fontset: [u8; 80] = [ [INFO] [stderr] 10 | | 0xF0, 0x90, 0x90, 0x90, 0xF0, 0x20, 0x60, 0x20, 0x20, 0x70, [INFO] [stderr] 11 | | 0xF0, 0x10, 0xF0, 0x80, 0xF0, 0xF0, 0x10, 0xF0, 0x10, 0xF0, [INFO] [stderr] 12 | | 0x90, 0x90, 0xF0, 0x10, 0x10, 0xF0, 0x80, 0xF0, 0x10, 0xF0, [INFO] [stderr] ... | [INFO] [stderr] 17 | | 0xF0, 0x80, 0xF0, 0x80, 0xF0, 0xF0, 0x80, 0xF0, 0x80, 0x80 [INFO] [stderr] 18 | | ]; [INFO] [stderr] | |__^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] warning: structure field `V` should have a snake case name such as `v` [INFO] [stderr] --> src/CPU.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | V: [u8; 16], // General purpose registers [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `fontset` [INFO] [stderr] --> src/CPU.rs:48:18 [INFO] [stderr] | [INFO] [stderr] 48 | for i in 0..80 { [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] 48 | for (i, ) in fontset.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/CPU.rs:48:18 [INFO] [stderr] | [INFO] [stderr] 48 | for i in 0..80 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `cpu.memory[..80].clone_from_slice(&fontset[..80])` [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 u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/CPU.rs:60:23 [INFO] [stderr] | [INFO] [stderr] 60 | self.opcode = (self.memory[self.program_counter as usize] as u16) << 8 | (self.memory[self.program_counter as usize + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.memory[self.program_counter 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:60:82 [INFO] [stderr] | [INFO] [stderr] 60 | self.opcode = (self.memory[self.program_counter as usize] as u16) << 8 | (self.memory[self.program_counter as usize + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.memory[self.program_counter as usize + 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: this let-binding has unit value. Consider omitting `let state =` [INFO] [stderr] --> src/CPU.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | / let state = match nibble { [INFO] [stderr] 84 | | (0x0, 0x0, 0xE, 0x0) => (), [INFO] [stderr] 85 | | (0x0, 0x0, 0xE, 0xE) => self.RET(), [INFO] [stderr] 86 | | (0x1, _, _, _) => self.JP(nnn), [INFO] [stderr] ... | [INFO] [stderr] 108 | | (_, _, _, _) => () [INFO] [stderr] 109 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: method `JP` should have a snake case name such as `jp` [INFO] [stderr] --> src/CPU.rs:116:5 [INFO] [stderr] | [INFO] [stderr] 116 | / fn JP (&mut self, nnn: u16) { [INFO] [stderr] 117 | | println!("JP {}", nnn); [INFO] [stderr] 118 | | self.program_counter = nnn; [INFO] [stderr] 119 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `CALL` should have a snake case name such as `call` [INFO] [stderr] --> src/CPU.rs:121:5 [INFO] [stderr] | [INFO] [stderr] 121 | / fn CALL (&mut self, nnn: u16) { [INFO] [stderr] 122 | | println!("CALL {}", nnn); [INFO] [stderr] 123 | | self.stack[self.sp as usize] = self.program_counter; [INFO] [stderr] 124 | | self.sp + 1; [INFO] [stderr] 125 | | self.program_counter = nnn; [INFO] [stderr] 126 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: unused arithmetic operation that must be used [INFO] [stderr] --> src/CPU.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | self.sp + 1; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] [INFO] [stderr] warning: statement with no effect [INFO] [stderr] --> src/CPU.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | self.sp + 1; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::no_effect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#no_effect [INFO] [stderr] [INFO] [stderr] warning: method `RET` should have a snake case name such as `ret` [INFO] [stderr] --> src/CPU.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / fn RET (&mut self) { [INFO] [stderr] 129 | | println!("RET"); [INFO] [stderr] 130 | | self.program_counter = self.stack[self.sp as usize]; [INFO] [stderr] 131 | | self.sp -= 1; [INFO] [stderr] 132 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SE` should have a snake case name such as `se` [INFO] [stderr] --> src/CPU.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | / fn SE (&mut self, x: u16, kk: u16) { [INFO] [stderr] 135 | | println!("SE {} {}", x, kk); [INFO] [stderr] 136 | | if self.V[x as usize] as u16 == kk { [INFO] [stderr] 137 | | self.program_counter += 2; [INFO] [stderr] 138 | | } [INFO] [stderr] 139 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/CPU.rs:136:12 [INFO] [stderr] | [INFO] [stderr] 136 | if self.V[x as usize] as u16 == kk { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.V[x 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: method `SNE` should have a snake case name such as `sne` [INFO] [stderr] --> src/CPU.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | / fn SNE (&mut self, x: u16, kk: u16) { [INFO] [stderr] 142 | | println!("SNE {} {}", x, kk); [INFO] [stderr] 143 | | if self.V[x as usize] as u16 != kk { [INFO] [stderr] 144 | | self.program_counter += 2; [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/CPU.rs:143:12 [INFO] [stderr] | [INFO] [stderr] 143 | if self.V[x as usize] as u16 != kk { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.V[x 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: method `SE_xy` should have a snake case name such as `se_xy` [INFO] [stderr] --> src/CPU.rs:148:5 [INFO] [stderr] | [INFO] [stderr] 148 | / fn SE_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 149 | | println!("SE_xy {} {}", x, y); [INFO] [stderr] 150 | | if self.V[x as usize] != self.V[y as usize] { [INFO] [stderr] 151 | | self.program_counter += 2; [INFO] [stderr] 152 | | } [INFO] [stderr] 153 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `LD` should have a snake case name such as `ld` [INFO] [stderr] --> src/CPU.rs:155:5 [INFO] [stderr] | [INFO] [stderr] 155 | / fn LD (&mut self, x: u16, kk: u16) { [INFO] [stderr] 156 | | println!("LD {} {}", x, kk); [INFO] [stderr] 157 | | self.V[x as usize] = kk as u8; [INFO] [stderr] 158 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `ADD` should have a snake case name such as `add` [INFO] [stderr] --> src/CPU.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | / fn ADD (&mut self, x: u16, kk: u16) { [INFO] [stderr] 161 | | println!("ADD {} {}", x, kk); [INFO] [stderr] 162 | | self.V[x as usize] += kk as u8; [INFO] [stderr] 163 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `LD_xy` should have a snake case name such as `ld_xy` [INFO] [stderr] --> src/CPU.rs:165:5 [INFO] [stderr] | [INFO] [stderr] 165 | / fn LD_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 166 | | println!("LD_xy {} {}", x, y); [INFO] [stderr] 167 | | self.V[x as usize] = self.V[y as usize]; [INFO] [stderr] 168 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `OR` should have a snake case name such as `or` [INFO] [stderr] --> src/CPU.rs:170:5 [INFO] [stderr] | [INFO] [stderr] 170 | / fn OR (&mut self, x: u16, y: u16) { [INFO] [stderr] 171 | | println!("OR {} {}", x, y); [INFO] [stderr] 172 | | self.V[x as usize] |= self.V[y as usize]; [INFO] [stderr] 173 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `AND` should have a snake case name such as `and` [INFO] [stderr] --> src/CPU.rs:175:5 [INFO] [stderr] | [INFO] [stderr] 175 | / fn AND (&mut self, x: u16, y: u16) { [INFO] [stderr] 176 | | println!("AND {} {}", x, y); [INFO] [stderr] 177 | | self.V[x as usize] &= self.V[y as usize]; [INFO] [stderr] 178 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `XOR` should have a snake case name such as `xor` [INFO] [stderr] --> src/CPU.rs:180:5 [INFO] [stderr] | [INFO] [stderr] 180 | / fn XOR (&mut self, x: u16, y: u16) { [INFO] [stderr] 181 | | println!("XOR {} {}", x, y); [INFO] [stderr] 182 | | self.V[x as usize] ^= self.V[y as usize]; [INFO] [stderr] 183 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `ADD_xy` should have a snake case name such as `add_xy` [INFO] [stderr] --> src/CPU.rs:185:5 [INFO] [stderr] | [INFO] [stderr] 185 | / fn ADD_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 186 | | println!("ADD_xy {} {}", x, y); [INFO] [stderr] 187 | | self.V[x as usize] += self.V[y as usize]; [INFO] [stderr] 188 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SUB` should have a snake case name such as `sub` [INFO] [stderr] --> src/CPU.rs:190:5 [INFO] [stderr] | [INFO] [stderr] 190 | / fn SUB (&mut self, x: u16, y: u16) { [INFO] [stderr] 191 | | println!("SUB {} {}", x, y); [INFO] [stderr] 192 | | if self.V[x as usize] > self.V[y as usize] { [INFO] [stderr] 193 | | self.V[0xF] = 1; [INFO] [stderr] ... | [INFO] [stderr] 197 | | self.V[x as usize] -= self.V[y as usize]; [INFO] [stderr] 198 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SHR` should have a snake case name such as `shr` [INFO] [stderr] --> src/CPU.rs:200:5 [INFO] [stderr] | [INFO] [stderr] 200 | / fn SHR (&mut self, x: u16) { [INFO] [stderr] 201 | | println!("SHR {}", x); [INFO] [stderr] 202 | | self.V[0xF] = self.V[x as usize] & 0x1; [INFO] [stderr] 203 | | self.V[x as usize] >>= 1; [INFO] [stderr] 204 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SUBN` should have a snake case name such as `subn` [INFO] [stderr] --> src/CPU.rs:206:5 [INFO] [stderr] | [INFO] [stderr] 206 | / fn SUBN (&mut self, x: u16, y: u16) { [INFO] [stderr] 207 | | println!("SUB {} {}", x, y); [INFO] [stderr] 208 | | if self.V[y as usize] > self.V[x as usize] { [INFO] [stderr] 209 | | self.V[0xF] = 1; [INFO] [stderr] ... | [INFO] [stderr] 213 | | self.V[x as usize] -= self.V[y as usize]; [INFO] [stderr] 214 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SHL` should have a snake case name such as `shl` [INFO] [stderr] --> src/CPU.rs:216:5 [INFO] [stderr] | [INFO] [stderr] 216 | / fn SHL (&mut self, x: u16) { [INFO] [stderr] 217 | | println!("SHL {}", x); [INFO] [stderr] 218 | | self.V[0xF] = self.V[x as usize] & 0x80; [INFO] [stderr] 219 | | self.V[x as usize] <<= 1; [INFO] [stderr] 220 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SNE_xy` should have a snake case name such as `sne_xy` [INFO] [stderr] --> src/CPU.rs:222:5 [INFO] [stderr] | [INFO] [stderr] 222 | / fn SNE_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 223 | | println!("SNE_xy {} {}", x, y); [INFO] [stderr] 224 | | if self.V[x as usize] == self.V[y as usize] { [INFO] [stderr] 225 | | self.program_counter += 2; [INFO] [stderr] 226 | | } [INFO] [stderr] 227 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `LD_I` should have a snake case name such as `ld_i` [INFO] [stderr] --> src/CPU.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | / fn LD_I (&mut self, nnn: u16) { [INFO] [stderr] 230 | | println!("LD_I {}", nnn); [INFO] [stderr] 231 | | self.index_register = nnn; [INFO] [stderr] 232 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `JP_V0` should have a snake case name such as `jp_v0` [INFO] [stderr] --> src/CPU.rs:234:5 [INFO] [stderr] | [INFO] [stderr] 234 | / fn JP_V0 (&mut self, nnn: u16) { [INFO] [stderr] 235 | | println!("JP_V0 {}", nnn); [INFO] [stderr] 236 | | self.program_counter = (self.V[0] + nnn as u8).into(); [INFO] [stderr] 237 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `RND` should have a snake case name such as `rnd` [INFO] [stderr] --> src/CPU.rs:239:5 [INFO] [stderr] | [INFO] [stderr] 239 | / fn RND (&mut self, x: u16, kk: u16) { [INFO] [stderr] 240 | | println!("RND {} {}", x, kk); [INFO] [stderr] 241 | | self.V[x as usize] = (thread_rng().gen_range(0, 255) as u16 & kk) as u8; [INFO] [stderr] 242 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SKP` should have a snake case name such as `skp` [INFO] [stderr] --> src/CPU.rs:244:5 [INFO] [stderr] | [INFO] [stderr] 244 | / fn SKP (&mut self, x: u16) { [INFO] [stderr] 245 | | println!("SKP {}", x); [INFO] [stderr] 246 | | if true { [INFO] [stderr] 247 | | // self.program_counter += 2; [INFO] [stderr] 248 | | } [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SKNP` should have a snake case name such as `sknp` [INFO] [stderr] --> src/CPU.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | / fn SKNP (&mut self, x: u16) { [INFO] [stderr] 252 | | println!("SKNP {}", x); [INFO] [stderr] 253 | | if true { [INFO] [stderr] 254 | | // self.program_counter += 2; [INFO] [stderr] 255 | | } [INFO] [stderr] 256 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/CPU.rs:263:26 [INFO] [stderr] | [INFO] [stderr] 263 | let mut reader = File::open(&path).ok().expect("Failed to load file"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: unused import: `piston::window::WindowSettings` [INFO] [stderr] --> src/main.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use piston::window::WindowSettings; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `glutin_window::GlutinWindow as Window` [INFO] [stderr] --> src/main.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | use glutin_window::GlutinWindow as Window; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `piston::event_loop::*` [INFO] [stderr] --> src/main.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use piston::event_loop::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `piston::input::*` [INFO] [stderr] --> src/main.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use piston::input::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `GlGraphics`, `OpenGL` [INFO] [stderr] --> src/main.rs:13:24 [INFO] [stderr] | [INFO] [stderr] 13 | use opengl_graphics::{ GlGraphics, OpenGL }; [INFO] [stderr] | ^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io::prelude::*` [INFO] [stderr] --> src/CPU.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::io::prelude::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/main.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | println!("Hello, world!"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: unused variable: `state` [INFO] [stderr] --> src/CPU.rs:83:13 [INFO] [stderr] | [INFO] [stderr] 83 | let state = match nibble { [INFO] [stderr] | ^^^^^ help: consider using `_state` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `bytes_read` [INFO] [stderr] --> src/CPU.rs:265:13 [INFO] [stderr] | [INFO] [stderr] 265 | let bytes_read = if let Ok(bytes_read) = reader.read(&mut buffer) { [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_bytes_read` instead [INFO] [stderr] [INFO] [stderr] warning: field is never used: `gfx` [INFO] [stderr] --> src/CPU.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | gfx: [[u8; 32]; 64], [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `delay_timer` [INFO] [stderr] --> src/CPU.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | delay_timer: u8, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sound_timer` [INFO] [stderr] --> src/CPU.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | sound_timer: u8, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: module `CPU` should have a snake case name such as `cpu` [INFO] [stderr] --> src/main.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | mod CPU; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `fontset` should have an upper case name such as `FONTSET` [INFO] [stderr] --> src/CPU.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | / const fontset: [u8; 80] = [ [INFO] [stderr] 10 | | 0xF0, 0x90, 0x90, 0x90, 0xF0, 0x20, 0x60, 0x20, 0x20, 0x70, [INFO] [stderr] 11 | | 0xF0, 0x10, 0xF0, 0x80, 0xF0, 0xF0, 0x10, 0xF0, 0x10, 0xF0, [INFO] [stderr] 12 | | 0x90, 0x90, 0xF0, 0x10, 0x10, 0xF0, 0x80, 0xF0, 0x10, 0xF0, [INFO] [stderr] ... | [INFO] [stderr] 17 | | 0xF0, 0x80, 0xF0, 0x80, 0xF0, 0xF0, 0x80, 0xF0, 0x80, 0x80 [INFO] [stderr] 18 | | ]; [INFO] [stderr] | |__^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] warning: structure field `V` should have a snake case name such as `v` [INFO] [stderr] --> src/CPU.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | V: [u8; 16], // General purpose registers [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `fontset` [INFO] [stderr] --> src/CPU.rs:48:18 [INFO] [stderr] | [INFO] [stderr] 48 | for i in 0..80 { [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] 48 | for (i, ) in fontset.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/CPU.rs:48:18 [INFO] [stderr] | [INFO] [stderr] 48 | for i in 0..80 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `cpu.memory[..80].clone_from_slice(&fontset[..80])` [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 u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/CPU.rs:60:23 [INFO] [stderr] | [INFO] [stderr] 60 | self.opcode = (self.memory[self.program_counter as usize] as u16) << 8 | (self.memory[self.program_counter as usize + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.memory[self.program_counter 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:60:82 [INFO] [stderr] | [INFO] [stderr] 60 | self.opcode = (self.memory[self.program_counter as usize] as u16) << 8 | (self.memory[self.program_counter as usize + 1] as u16); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.memory[self.program_counter as usize + 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: this let-binding has unit value. Consider omitting `let state =` [INFO] [stderr] --> src/CPU.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | / let state = match nibble { [INFO] [stderr] 84 | | (0x0, 0x0, 0xE, 0x0) => (), [INFO] [stderr] 85 | | (0x0, 0x0, 0xE, 0xE) => self.RET(), [INFO] [stderr] 86 | | (0x1, _, _, _) => self.JP(nnn), [INFO] [stderr] ... | [INFO] [stderr] 108 | | (_, _, _, _) => () [INFO] [stderr] 109 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: method `JP` should have a snake case name such as `jp` [INFO] [stderr] --> src/CPU.rs:116:5 [INFO] [stderr] | [INFO] [stderr] 116 | / fn JP (&mut self, nnn: u16) { [INFO] [stderr] 117 | | println!("JP {}", nnn); [INFO] [stderr] 118 | | self.program_counter = nnn; [INFO] [stderr] 119 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `CALL` should have a snake case name such as `call` [INFO] [stderr] --> src/CPU.rs:121:5 [INFO] [stderr] | [INFO] [stderr] 121 | / fn CALL (&mut self, nnn: u16) { [INFO] [stderr] 122 | | println!("CALL {}", nnn); [INFO] [stderr] 123 | | self.stack[self.sp as usize] = self.program_counter; [INFO] [stderr] 124 | | self.sp + 1; [INFO] [stderr] 125 | | self.program_counter = nnn; [INFO] [stderr] 126 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: unused arithmetic operation that must be used [INFO] [stderr] --> src/CPU.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | self.sp + 1; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] [INFO] [stderr] warning: statement with no effect [INFO] [stderr] --> src/CPU.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | self.sp + 1; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::no_effect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#no_effect [INFO] [stderr] [INFO] [stderr] warning: method `RET` should have a snake case name such as `ret` [INFO] [stderr] --> src/CPU.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | / fn RET (&mut self) { [INFO] [stderr] 129 | | println!("RET"); [INFO] [stderr] 130 | | self.program_counter = self.stack[self.sp as usize]; [INFO] [stderr] 131 | | self.sp -= 1; [INFO] [stderr] 132 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SE` should have a snake case name such as `se` [INFO] [stderr] --> src/CPU.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | / fn SE (&mut self, x: u16, kk: u16) { [INFO] [stderr] 135 | | println!("SE {} {}", x, kk); [INFO] [stderr] 136 | | if self.V[x as usize] as u16 == kk { [INFO] [stderr] 137 | | self.program_counter += 2; [INFO] [stderr] 138 | | } [INFO] [stderr] 139 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/CPU.rs:136:12 [INFO] [stderr] | [INFO] [stderr] 136 | if self.V[x as usize] as u16 == kk { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.V[x 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: method `SNE` should have a snake case name such as `sne` [INFO] [stderr] --> src/CPU.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | / fn SNE (&mut self, x: u16, kk: u16) { [INFO] [stderr] 142 | | println!("SNE {} {}", x, kk); [INFO] [stderr] 143 | | if self.V[x as usize] as u16 != kk { [INFO] [stderr] 144 | | self.program_counter += 2; [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/CPU.rs:143:12 [INFO] [stderr] | [INFO] [stderr] 143 | if self.V[x as usize] as u16 != kk { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.V[x 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: method `SE_xy` should have a snake case name such as `se_xy` [INFO] [stderr] --> src/CPU.rs:148:5 [INFO] [stderr] | [INFO] [stderr] 148 | / fn SE_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 149 | | println!("SE_xy {} {}", x, y); [INFO] [stderr] 150 | | if self.V[x as usize] != self.V[y as usize] { [INFO] [stderr] 151 | | self.program_counter += 2; [INFO] [stderr] 152 | | } [INFO] [stderr] 153 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `LD` should have a snake case name such as `ld` [INFO] [stderr] --> src/CPU.rs:155:5 [INFO] [stderr] | [INFO] [stderr] 155 | / fn LD (&mut self, x: u16, kk: u16) { [INFO] [stderr] 156 | | println!("LD {} {}", x, kk); [INFO] [stderr] 157 | | self.V[x as usize] = kk as u8; [INFO] [stderr] 158 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `ADD` should have a snake case name such as `add` [INFO] [stderr] --> src/CPU.rs:160:5 [INFO] [stderr] | [INFO] [stderr] 160 | / fn ADD (&mut self, x: u16, kk: u16) { [INFO] [stderr] 161 | | println!("ADD {} {}", x, kk); [INFO] [stderr] 162 | | self.V[x as usize] += kk as u8; [INFO] [stderr] 163 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `LD_xy` should have a snake case name such as `ld_xy` [INFO] [stderr] --> src/CPU.rs:165:5 [INFO] [stderr] | [INFO] [stderr] 165 | / fn LD_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 166 | | println!("LD_xy {} {}", x, y); [INFO] [stderr] 167 | | self.V[x as usize] = self.V[y as usize]; [INFO] [stderr] 168 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `OR` should have a snake case name such as `or` [INFO] [stderr] --> src/CPU.rs:170:5 [INFO] [stderr] | [INFO] [stderr] 170 | / fn OR (&mut self, x: u16, y: u16) { [INFO] [stderr] 171 | | println!("OR {} {}", x, y); [INFO] [stderr] 172 | | self.V[x as usize] |= self.V[y as usize]; [INFO] [stderr] 173 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `AND` should have a snake case name such as `and` [INFO] [stderr] --> src/CPU.rs:175:5 [INFO] [stderr] | [INFO] [stderr] 175 | / fn AND (&mut self, x: u16, y: u16) { [INFO] [stderr] 176 | | println!("AND {} {}", x, y); [INFO] [stderr] 177 | | self.V[x as usize] &= self.V[y as usize]; [INFO] [stderr] 178 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `XOR` should have a snake case name such as `xor` [INFO] [stderr] --> src/CPU.rs:180:5 [INFO] [stderr] | [INFO] [stderr] 180 | / fn XOR (&mut self, x: u16, y: u16) { [INFO] [stderr] 181 | | println!("XOR {} {}", x, y); [INFO] [stderr] 182 | | self.V[x as usize] ^= self.V[y as usize]; [INFO] [stderr] 183 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `ADD_xy` should have a snake case name such as `add_xy` [INFO] [stderr] --> src/CPU.rs:185:5 [INFO] [stderr] | [INFO] [stderr] 185 | / fn ADD_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 186 | | println!("ADD_xy {} {}", x, y); [INFO] [stderr] 187 | | self.V[x as usize] += self.V[y as usize]; [INFO] [stderr] 188 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SUB` should have a snake case name such as `sub` [INFO] [stderr] --> src/CPU.rs:190:5 [INFO] [stderr] | [INFO] [stderr] 190 | / fn SUB (&mut self, x: u16, y: u16) { [INFO] [stderr] 191 | | println!("SUB {} {}", x, y); [INFO] [stderr] 192 | | if self.V[x as usize] > self.V[y as usize] { [INFO] [stderr] 193 | | self.V[0xF] = 1; [INFO] [stderr] ... | [INFO] [stderr] 197 | | self.V[x as usize] -= self.V[y as usize]; [INFO] [stderr] 198 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SHR` should have a snake case name such as `shr` [INFO] [stderr] --> src/CPU.rs:200:5 [INFO] [stderr] | [INFO] [stderr] 200 | / fn SHR (&mut self, x: u16) { [INFO] [stderr] 201 | | println!("SHR {}", x); [INFO] [stderr] 202 | | self.V[0xF] = self.V[x as usize] & 0x1; [INFO] [stderr] 203 | | self.V[x as usize] >>= 1; [INFO] [stderr] 204 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SUBN` should have a snake case name such as `subn` [INFO] [stderr] --> src/CPU.rs:206:5 [INFO] [stderr] | [INFO] [stderr] 206 | / fn SUBN (&mut self, x: u16, y: u16) { [INFO] [stderr] 207 | | println!("SUB {} {}", x, y); [INFO] [stderr] 208 | | if self.V[y as usize] > self.V[x as usize] { [INFO] [stderr] 209 | | self.V[0xF] = 1; [INFO] [stderr] ... | [INFO] [stderr] 213 | | self.V[x as usize] -= self.V[y as usize]; [INFO] [stderr] 214 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SHL` should have a snake case name such as `shl` [INFO] [stderr] --> src/CPU.rs:216:5 [INFO] [stderr] | [INFO] [stderr] 216 | / fn SHL (&mut self, x: u16) { [INFO] [stderr] 217 | | println!("SHL {}", x); [INFO] [stderr] 218 | | self.V[0xF] = self.V[x as usize] & 0x80; [INFO] [stderr] 219 | | self.V[x as usize] <<= 1; [INFO] [stderr] 220 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SNE_xy` should have a snake case name such as `sne_xy` [INFO] [stderr] --> src/CPU.rs:222:5 [INFO] [stderr] | [INFO] [stderr] 222 | / fn SNE_xy (&mut self, x: u16, y: u16) { [INFO] [stderr] 223 | | println!("SNE_xy {} {}", x, y); [INFO] [stderr] 224 | | if self.V[x as usize] == self.V[y as usize] { [INFO] [stderr] 225 | | self.program_counter += 2; [INFO] [stderr] 226 | | } [INFO] [stderr] 227 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `LD_I` should have a snake case name such as `ld_i` [INFO] [stderr] --> src/CPU.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | / fn LD_I (&mut self, nnn: u16) { [INFO] [stderr] 230 | | println!("LD_I {}", nnn); [INFO] [stderr] 231 | | self.index_register = nnn; [INFO] [stderr] 232 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `JP_V0` should have a snake case name such as `jp_v0` [INFO] [stderr] --> src/CPU.rs:234:5 [INFO] [stderr] | [INFO] [stderr] 234 | / fn JP_V0 (&mut self, nnn: u16) { [INFO] [stderr] 235 | | println!("JP_V0 {}", nnn); [INFO] [stderr] 236 | | self.program_counter = (self.V[0] + nnn as u8).into(); [INFO] [stderr] 237 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `RND` should have a snake case name such as `rnd` [INFO] [stderr] --> src/CPU.rs:239:5 [INFO] [stderr] | [INFO] [stderr] 239 | / fn RND (&mut self, x: u16, kk: u16) { [INFO] [stderr] 240 | | println!("RND {} {}", x, kk); [INFO] [stderr] 241 | | self.V[x as usize] = (thread_rng().gen_range(0, 255) as u16 & kk) as u8; [INFO] [stderr] 242 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SKP` should have a snake case name such as `skp` [INFO] [stderr] --> src/CPU.rs:244:5 [INFO] [stderr] | [INFO] [stderr] 244 | / fn SKP (&mut self, x: u16) { [INFO] [stderr] 245 | | println!("SKP {}", x); [INFO] [stderr] 246 | | if true { [INFO] [stderr] 247 | | // self.program_counter += 2; [INFO] [stderr] 248 | | } [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method `SKNP` should have a snake case name such as `sknp` [INFO] [stderr] --> src/CPU.rs:251:5 [INFO] [stderr] | [INFO] [stderr] 251 | / fn SKNP (&mut self, x: u16) { [INFO] [stderr] 252 | | println!("SKNP {}", x); [INFO] [stderr] 253 | | if true { [INFO] [stderr] 254 | | // self.program_counter += 2; [INFO] [stderr] 255 | | } [INFO] [stderr] 256 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/CPU.rs:263:26 [INFO] [stderr] | [INFO] [stderr] 263 | let mut reader = File::open(&path).ok().expect("Failed to load file"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 07s [INFO] running `"docker" "inspect" "d12570a12138e178f0ca27c3a2e62343c8f5de8426d6ed17cc3e79308c96dccf"` [INFO] running `"docker" "rm" "-f" "d12570a12138e178f0ca27c3a2e62343c8f5de8426d6ed17cc3e79308c96dccf"` [INFO] [stdout] d12570a12138e178f0ca27c3a2e62343c8f5de8426d6ed17cc3e79308c96dccf