[INFO] updating cached repository Krystex/Chip-8 [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/Krystex/Chip-8 [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/Krystex/Chip-8" "work/ex/clippy-test-run/sources/stable/gh/Krystex/Chip-8"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/Krystex/Chip-8'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/Krystex/Chip-8" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Krystex/Chip-8"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Krystex/Chip-8'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 55c126bb77a58276dccc1d4c5c57a4bd8670aa96 [INFO] sha for GitHub repo Krystex/Chip-8: 55c126bb77a58276dccc1d4c5c57a4bd8670aa96 [INFO] validating manifest of Krystex/Chip-8 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 Krystex/Chip-8 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 Krystex/Chip-8 [INFO] finished frobbing Krystex/Chip-8 [INFO] frobbed toml for Krystex/Chip-8 written to work/ex/clippy-test-run/sources/stable/gh/Krystex/Chip-8/Cargo.toml [INFO] started frobbing Krystex/Chip-8 [INFO] finished frobbing Krystex/Chip-8 [INFO] frobbed toml for Krystex/Chip-8 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/Krystex/Chip-8/Cargo.toml [INFO] crate Krystex/Chip-8 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 Krystex/Chip-8 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/Krystex/Chip-8:/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] bff62a09c791090de6ac69890123fa5f75e8ec026003233e375d8921518efd77 [INFO] running `"docker" "start" "-a" "bff62a09c791090de6ac69890123fa5f75e8ec026003233e375d8921518efd77"` [INFO] [stderr] Checking chip-8 v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/instruction.rs:304:4 [INFO] [stderr] | [INFO] [stderr] 304 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/main.rs:56:4 [INFO] [stderr] | [INFO] [stderr] 56 | write!(f, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/main.rs:191:4 [INFO] [stderr] | [INFO] [stderr] 191 | mem: mem, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `mem` [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/instruction.rs:304:4 [INFO] [stderr] | [INFO] [stderr] 304 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/main.rs:56:4 [INFO] [stderr] | [INFO] [stderr] 56 | write!(f, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/main.rs:191:4 [INFO] [stderr] | [INFO] [stderr] 191 | mem: mem, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `mem` [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: unneeded return statement [INFO] [stderr] --> src/main.rs:87:3 [INFO] [stderr] | [INFO] [stderr] 87 | return 0; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `0` [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: long literal lacking separators [INFO] [stderr] --> src/main.rs:95:20 [INFO] [stderr] | [INFO] [stderr] 95 | let mask = 0b10000000 >> i; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [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: unreachable statement [INFO] [stderr] --> src/main.rs:87:3 [INFO] [stderr] | [INFO] [stderr] 87 | return 0; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/main.rs:87:3 [INFO] [stderr] | [INFO] [stderr] 87 | return 0; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `0` [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: long literal lacking separators [INFO] [stderr] --> src/main.rs:95:20 [INFO] [stderr] | [INFO] [stderr] 95 | let mask = 0b10000000 >> i; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1000_0000` [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: unused variable: `y` [INFO] [stderr] --> src/main.rs:379:11 [INFO] [stderr] | [INFO] [stderr] 379 | Shr(x, y) => { [INFO] [stderr] | ^ help: consider using `_y` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `val` [INFO] [stderr] --> src/main.rs:390:10 [INFO] [stderr] | [INFO] [stderr] 390 | let (val, overflowing) = (*self.reg(x)).overflowing_sub(*self.reg(y)); [INFO] [stderr] | ^^^ help: consider using `_val` instead [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/main.rs:87:3 [INFO] [stderr] | [INFO] [stderr] 87 | return 0; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(val & 0x000f)` [INFO] [stderr] --> src/instruction.rs:135:4 [INFO] [stderr] | [INFO] [stderr] 135 | (val & 0x000f) >> 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:319:19 [INFO] [stderr] | [INFO] [stderr] 319 | let ins: u16 = ((data[0] as u16) << 8) + data[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(data[0])` [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/instruction.rs:319:44 [INFO] [stderr] | [INFO] [stderr] 319 | let ins: u16 = ((data[0] as u16) << 8) + data[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u16::from(data[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: you should consider adding a `Default` implementation for `Display` [INFO] [stderr] --> src/main.rs:20:2 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new() -> Display { [INFO] [stderr] | _____^ [INFO] [stderr] 21 | | Display { [INFO] [stderr] 22 | | arr: [[false; Self::WIDTH]; Self::HEIGHT] [INFO] [stderr] 23 | | } [INFO] [stderr] 24 | | } [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] 15 | impl Default for Display { [INFO] [stderr] 16 | fn default() -> Self { [INFO] [stderr] 17 | Self::new() [INFO] [stderr] 18 | } [INFO] [stderr] 19 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/main.rs:33:3 [INFO] [stderr] | [INFO] [stderr] 33 | previous == true && self.arr[x][y] == false [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `previous` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/main.rs:33:23 [INFO] [stderr] | [INFO] [stderr] 33 | previous == true && self.arr[x][y] == false [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.arr[x][y]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `Keyboard` [INFO] [stderr] --> src/main.rs:69:2 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn new() -> Keyboard { [INFO] [stderr] | _____^ [INFO] [stderr] 70 | | Keyboard { [INFO] [stderr] 71 | | keys: [false; 16], [INFO] [stderr] 72 | | } [INFO] [stderr] 73 | | } [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] 65 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `result` [INFO] [stderr] --> src/main.rs:94:14 [INFO] [stderr] | [INFO] [stderr] 94 | for i in 0..8 { [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] 94 | for (i, ) in result.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/main.rs:97:21 [INFO] [stderr] | [INFO] [stderr] 97 | result[i] = if bit == 1 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `bit == 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `System` [INFO] [stderr] --> src/main.rs:146:2 [INFO] [stderr] | [INFO] [stderr] 146 | pub fn new() -> System { [INFO] [stderr] | _____^ [INFO] [stderr] 147 | | let mut mem = [0u8; 4_096]; [INFO] [stderr] 148 | | store_sprites! { [INFO] [stderr] 149 | | mem => [INFO] [stderr] ... | [INFO] [stderr] 194 | | } [INFO] [stderr] 195 | | } [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] 144 | impl Default for System { [INFO] [stderr] 145 | fn default() -> Self { [INFO] [stderr] 146 | Self::new() [INFO] [stderr] 147 | } [INFO] [stderr] 148 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:223:5 [INFO] [stderr] | [INFO] [stderr] 223 | ((self.mem[self.pc as usize + 0] as u16) << 8) + [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.mem[self.pc as usize + 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: the operation is ineffective. Consider reducing it to `self.pc as usize` [INFO] [stderr] --> src/main.rs:223:15 [INFO] [stderr] | [INFO] [stderr] 223 | ((self.mem[self.pc as usize + 0] as u16) << 8) + [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/main.rs:224:5 [INFO] [stderr] | [INFO] [stderr] 224 | self.mem[self.pc as usize + 1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.mem[self.pc 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: the operation is ineffective. Consider reducing it to `val` [INFO] [stderr] --> src/main.rs:272:13 [INFO] [stderr] | [INFO] [stderr] 272 | let c = (val / 1 ) % 10; [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.i as usize` [INFO] [stderr] --> src/main.rs:274:14 [INFO] [stderr] | [INFO] [stderr] 274 | self.mem[self.i as usize + 0] = a; [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/main.rs:284:14 [INFO] [stderr] | [INFO] [stderr] 284 | self.i = x as u16 * 5; [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/main.rs:363:15 [INFO] [stderr] | [INFO] [stderr] 363 | self.i += *self.reg(x) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(*self.reg(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: an inclusive range would be more readable [INFO] [stderr] --> src/main.rs:369:14 [INFO] [stderr] | [INFO] [stderr] 369 | for i in 0..x+1 { [INFO] [stderr] | ^^^^^^ help: use: `0..=x` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/main.rs:393:22 [INFO] [stderr] | [INFO] [stderr] 393 | *self.reg(0xf) = match overflowing { [INFO] [stderr] | __________________________________^ [INFO] [stderr] 394 | | true => 1, [INFO] [stderr] 395 | | false => 0, [INFO] [stderr] 396 | | }; [INFO] [stderr] | |_________________^ help: consider using an if/else expression: `if overflowing { 1 } else { 0 }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:409:22 [INFO] [stderr] | [INFO] [stderr] 409 | self.pc = addr + *self.reg(0x0) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(*self.reg(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: unused variable: `y` [INFO] [stderr] --> src/main.rs:379:11 [INFO] [stderr] | [INFO] [stderr] 379 | Shr(x, y) => { [INFO] [stderr] | ^ help: consider using `_y` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `val` [INFO] [stderr] --> src/main.rs:390:10 [INFO] [stderr] | [INFO] [stderr] 390 | let (val, overflowing) = (*self.reg(x)).overflowing_sub(*self.reg(y)); [INFO] [stderr] | ^^^ help: consider using `_val` instead [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(val & 0x000f)` [INFO] [stderr] --> src/instruction.rs:135:4 [INFO] [stderr] | [INFO] [stderr] 135 | (val & 0x000f) >> 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:319:19 [INFO] [stderr] | [INFO] [stderr] 319 | let ins: u16 = ((data[0] as u16) << 8) + data[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u16::from(data[0])` [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/instruction.rs:319:44 [INFO] [stderr] | [INFO] [stderr] 319 | let ins: u16 = ((data[0] as u16) << 8) + data[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u16::from(data[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: the function has a cyclomatic complexity of 35 [INFO] [stderr] --> src/instruction.rs:334:1 [INFO] [stderr] | [INFO] [stderr] 334 | / fn test_instructions() { [INFO] [stderr] 335 | | use self::Instruction::*; [INFO] [stderr] 336 | | [INFO] [stderr] 337 | | test_instr!(0x00e0, Cls); [INFO] [stderr] ... | [INFO] [stderr] 370 | | test_instr!(0xf165, LdReadV0(0x1)); [INFO] [stderr] 371 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `Display` [INFO] [stderr] --> src/main.rs:20:2 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn new() -> Display { [INFO] [stderr] | _____^ [INFO] [stderr] 21 | | Display { [INFO] [stderr] 22 | | arr: [[false; Self::WIDTH]; Self::HEIGHT] [INFO] [stderr] 23 | | } [INFO] [stderr] 24 | | } [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] 15 | impl Default for Display { [INFO] [stderr] 16 | fn default() -> Self { [INFO] [stderr] 17 | Self::new() [INFO] [stderr] 18 | } [INFO] [stderr] 19 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/main.rs:33:3 [INFO] [stderr] | [INFO] [stderr] 33 | previous == true && self.arr[x][y] == false [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `previous` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/main.rs:33:23 [INFO] [stderr] | [INFO] [stderr] 33 | previous == true && self.arr[x][y] == false [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!self.arr[x][y]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `Keyboard` [INFO] [stderr] --> src/main.rs:69:2 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn new() -> Keyboard { [INFO] [stderr] | _____^ [INFO] [stderr] 70 | | Keyboard { [INFO] [stderr] 71 | | keys: [false; 16], [INFO] [stderr] 72 | | } [INFO] [stderr] 73 | | } [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] 65 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `result` [INFO] [stderr] --> src/main.rs:94:14 [INFO] [stderr] | [INFO] [stderr] 94 | for i in 0..8 { [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] 94 | for (i, ) in result.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/main.rs:97:21 [INFO] [stderr] | [INFO] [stderr] 97 | result[i] = if bit == 1 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `bit == 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `System` [INFO] [stderr] --> src/main.rs:146:2 [INFO] [stderr] | [INFO] [stderr] 146 | pub fn new() -> System { [INFO] [stderr] | _____^ [INFO] [stderr] 147 | | let mut mem = [0u8; 4_096]; [INFO] [stderr] 148 | | store_sprites! { [INFO] [stderr] 149 | | mem => [INFO] [stderr] ... | [INFO] [stderr] 194 | | } [INFO] [stderr] 195 | | } [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] 144 | impl Default for System { [INFO] [stderr] 145 | fn default() -> Self { [INFO] [stderr] 146 | Self::new() [INFO] [stderr] 147 | } [INFO] [stderr] 148 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:223:5 [INFO] [stderr] | [INFO] [stderr] 223 | ((self.mem[self.pc as usize + 0] as u16) << 8) + [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.mem[self.pc as usize + 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: the operation is ineffective. Consider reducing it to `self.pc as usize` [INFO] [stderr] --> src/main.rs:223:15 [INFO] [stderr] | [INFO] [stderr] 223 | ((self.mem[self.pc as usize + 0] as u16) << 8) + [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/main.rs:224:5 [INFO] [stderr] | [INFO] [stderr] 224 | self.mem[self.pc as usize + 1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.mem[self.pc 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: the operation is ineffective. Consider reducing it to `val` [INFO] [stderr] --> src/main.rs:272:13 [INFO] [stderr] | [INFO] [stderr] 272 | let c = (val / 1 ) % 10; [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.i as usize` [INFO] [stderr] --> src/main.rs:274:14 [INFO] [stderr] | [INFO] [stderr] 274 | self.mem[self.i as usize + 0] = a; [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/main.rs:284:14 [INFO] [stderr] | [INFO] [stderr] 284 | self.i = x as u16 * 5; [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/main.rs:363:15 [INFO] [stderr] | [INFO] [stderr] 363 | self.i += *self.reg(x) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(*self.reg(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: an inclusive range would be more readable [INFO] [stderr] --> src/main.rs:369:14 [INFO] [stderr] | [INFO] [stderr] 369 | for i in 0..x+1 { [INFO] [stderr] | ^^^^^^ help: use: `0..=x` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/main.rs:393:22 [INFO] [stderr] | [INFO] [stderr] 393 | *self.reg(0xf) = match overflowing { [INFO] [stderr] | __________________________________^ [INFO] [stderr] 394 | | true => 1, [INFO] [stderr] 395 | | false => 0, [INFO] [stderr] 396 | | }; [INFO] [stderr] | |_________________^ help: consider using an if/else expression: `if overflowing { 1 } else { 0 }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:409:22 [INFO] [stderr] | [INFO] [stderr] 409 | self.pc = addr + *self.reg(0x0) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(*self.reg(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] Finished dev [unoptimized + debuginfo] target(s) in 1.92s [INFO] running `"docker" "inspect" "bff62a09c791090de6ac69890123fa5f75e8ec026003233e375d8921518efd77"` [INFO] running `"docker" "rm" "-f" "bff62a09c791090de6ac69890123fa5f75e8ec026003233e375d8921518efd77"` [INFO] [stdout] bff62a09c791090de6ac69890123fa5f75e8ec026003233e375d8921518efd77