[INFO] cloning repository https://github.com/pmasucci/chip8 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/pmasucci/chip8" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpmasucci%2Fchip8", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpmasucci%2Fchip8'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 0276d2f684223062d78417b452176b7bd7d768b4 [INFO] linting pmasucci/chip8 against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpmasucci%2Fchip8" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/pmasucci/chip8 [INFO] finished tweaking git repo https://github.com/pmasucci/chip8 [INFO] tweaked toml for git repo https://github.com/pmasucci/chip8 written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/pmasucci/chip8 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/pmasucci/chip8 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded shared_library v0.1.9 [INFO] [stderr] Downloaded shader_version v0.3.0 [INFO] [stderr] Downloaded piston-float v1.0.0 [INFO] [stderr] Downloaded glutin v0.19.0 [INFO] [stderr] Downloaded piston-viewport v1.0.0 [INFO] [stderr] Downloaded piston v0.43.0 [INFO] [stderr] Downloaded osmesa-sys v0.1.2 [INFO] [stderr] Downloaded piston-texture v0.6.0 [INFO] [stderr] Downloaded vecmath v1.0.0 [INFO] [stderr] Downloaded piston-shaders_graphics2d v0.3.1 [INFO] [stderr] Downloaded pistoncore-event_loop v0.43.0 [INFO] [stderr] Downloaded gl v0.11.0 [INFO] [stderr] Downloaded interpolation v0.2.0 [INFO] [stderr] Downloaded read_color v1.0.0 [INFO] [stderr] Downloaded getopts v0.2.19 [INFO] [stderr] Downloaded gl_generator v0.11.0 [INFO] [stderr] Downloaded piston2d-graphics v0.32.0 [INFO] [stderr] Downloaded gl_generator v0.10.0 [INFO] [stderr] Downloaded gleam v0.6.17 [INFO] [stderr] Downloaded cgl v0.2.3 [INFO] [stderr] Downloaded pistoncore-glutin_window v0.55.0 [INFO] [stderr] Downloaded pistoncore-input v0.25.0 [INFO] [stderr] Downloaded winit v0.18.1 [INFO] [stderr] Downloaded pistoncore-window v0.38.0 [INFO] [stderr] Downloaded khronos_api v2.2.0 [INFO] [stderr] Downloaded piston2d-opengl_graphics v0.62.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] e56fdff0f2c241d9932332bb26c0e5955f7e0bfdc0bc0701f55bb541adfe5778 [INFO] running `Command { std: "docker" "start" "-a" "e56fdff0f2c241d9932332bb26c0e5955f7e0bfdc0bc0701f55bb541adfe5778", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e56fdff0f2c241d9932332bb26c0e5955f7e0bfdc0bc0701f55bb541adfe5778", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e56fdff0f2c241d9932332bb26c0e5955f7e0bfdc0bc0701f55bb541adfe5778", kill_on_drop: false }` [INFO] [stdout] e56fdff0f2c241d9932332bb26c0e5955f7e0bfdc0bc0701f55bb541adfe5778 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f8cc379faba05aca7d9ef4dfa1e7dbe23576410e103060e0c733557b94be60d3 [INFO] running `Command { std: "docker" "start" "-a" "f8cc379faba05aca7d9ef4dfa1e7dbe23576410e103060e0c733557b94be60d3", kill_on_drop: false }` [INFO] [stderr] Compiling autocfg v0.1.4 [INFO] [stderr] Compiling proc-macro2 v0.4.30 [INFO] [stderr] Compiling libc v0.2.55 [INFO] [stderr] Compiling xml-rs v0.8.0 [INFO] [stderr] Checking lazy_static v1.3.0 [INFO] [stderr] Checking cfg-if v0.1.9 [INFO] [stderr] Compiling byteorder v1.3.1 [INFO] [stderr] Checking bitflags v1.0.4 [INFO] [stderr] Compiling arrayvec v0.4.10 [INFO] [stderr] Checking nodrop v0.1.13 [INFO] [stderr] Checking rand_core v0.4.0 [INFO] [stderr] Compiling cc v1.0.37 [INFO] [stderr] Compiling syn v0.15.34 [INFO] [stderr] Checking scopeguard v0.3.3 [INFO] [stderr] Compiling khronos_api v3.1.0 [INFO] [stderr] Compiling nix v0.13.0 [INFO] [stderr] Checking piston-float v1.0.0 [INFO] [stderr] Checking void v1.0.2 [INFO] [stderr] Compiling log v0.4.6 [INFO] [stderr] Checking piston-viewport v1.0.0 [INFO] [stderr] Checking crossbeam-utils v0.2.2 [INFO] [stderr] Checking rand_core v0.3.1 [INFO] [stderr] Compiling rayon-core v1.4.1 [INFO] [stderr] Compiling serde v1.0.91 [INFO] [stderr] Checking memoffset v0.2.1 [INFO] [stderr] Checking rand_xorshift v0.1.1 [INFO] [stderr] Checking rand_hc v0.1.0 [INFO] [stderr] Checking rand_isaac v0.1.1 [INFO] [stderr] Checking rand_jitter v0.1.4 [INFO] [stderr] Compiling num-traits v0.2.8 [INFO] [stderr] Compiling rand_pcg v0.1.2 [INFO] [stderr] Compiling rand_chacha v0.1.1 [INFO] [stderr] Compiling rand v0.6.5 [INFO] [stderr] Compiling num-integer v0.1.41 [INFO] [stderr] Compiling parking_lot_core v0.4.0 [INFO] [stderr] Checking downcast-rs v1.0.4 [INFO] [stderr] Compiling pkg-config v0.3.14 [INFO] [stderr] Checking same-file v1.0.4 [INFO] [stderr] Checking stable_deref_trait v1.1.1 [INFO] [stderr] Checking walkdir v2.2.7 [INFO] [stderr] Checking owning_ref v0.4.0 [INFO] [stderr] Compiling num-iter v0.1.39 [INFO] [stderr] Compiling num-derive v0.2.5 [INFO] [stderr] Checking stb_truetype v0.2.6 [INFO] [stderr] Checking xdg v2.2.0 [INFO] [stderr] Compiling gl_generator v0.10.0 [INFO] [stderr] Checking smallvec v0.6.9 [INFO] [stderr] Compiling rayon v1.0.3 [INFO] [stderr] Checking shader_version v0.3.0 [INFO] [stderr] Checking adler32 v1.0.3 [INFO] [stderr] Compiling libloading v0.5.0 [INFO] [stderr] Checking lock_api v0.1.5 [INFO] [stderr] Compiling num-rational v0.2.1 [INFO] [stderr] Checking either v1.5.2 [INFO] [stderr] Checking lzw v0.10.0 [INFO] [stderr] Checking deflate v0.7.19 [INFO] [stderr] Checking rand_os v0.1.3 [INFO] [stderr] Checking num_cpus v1.10.0 [INFO] [stderr] Compiling x11-dl v2.18.3 [INFO] [stderr] Checking memmap v0.7.0 [INFO] [stderr] Checking shared_library v0.1.9 [INFO] [stderr] Checking inflate v0.4.5 [INFO] [stderr] Checking percent-encoding v1.0.1 [INFO] [stderr] Checking crossbeam-epoch v0.3.1 [INFO] [stderr] Checking color_quant v1.0.1 [INFO] [stderr] Checking osmesa-sys v0.1.2 [INFO] [stderr] Checking vecmath v1.0.0 [INFO] [stderr] Compiling quote v0.6.12 [INFO] [stderr] Checking dlib v0.4.1 [INFO] [stderr] Checking gif v0.10.1 [INFO] [stderr] Checking interpolation v0.2.0 [INFO] [stderr] Checking wayland-sys v0.21.12 [INFO] [stderr] Checking scoped_threadpool v0.1.9 [INFO] [stderr] Checking read_color v1.0.0 [INFO] [stderr] Checking piston-texture v0.6.0 [INFO] [stderr] Checking unicode-width v0.1.5 [INFO] [stderr] Checking piston-shaders_graphics2d v0.3.1 [INFO] [stderr] Checking getopts v0.2.19 [INFO] [stderr] Compiling wayland-scanner v0.21.12 [INFO] [stderr] Checking ordered-float v1.0.2 [INFO] [stderr] Checking approx v0.3.2 [INFO] [stderr] Checking line_drawing v0.7.0 [INFO] [stderr] Checking crossbeam-deque v0.2.0 [INFO] [stderr] Checking rusttype v0.7.6 [INFO] [stderr] Checking parking_lot v0.7.1 [INFO] [stderr] Compiling gl v0.11.0 [INFO] [stderr] Compiling glutin v0.19.0 [INFO] [stderr] Checking andrew v0.2.1 [INFO] [stderr] Checking piston2d-graphics v0.32.0 [INFO] [stderr] Checking png v0.14.1 [INFO] [stderr] Compiling wayland-client v0.21.12 [INFO] [stderr] Compiling wayland-protocols v0.21.12 [INFO] [stderr] Checking wayland-commons v0.21.12 [INFO] [stderr] Compiling serde_derive v1.0.91 [INFO] [stderr] Checking jpeg-decoder v0.1.15 [INFO] [stderr] Checking tiff v0.2.2 [INFO] [stderr] Checking image v0.21.1 [INFO] [stderr] Checking pistoncore-input v0.25.0 [INFO] [stderr] Checking piston2d-opengl_graphics v0.62.0 [INFO] [stderr] Checking pistoncore-window v0.38.0 [INFO] [stderr] Checking pistoncore-event_loop v0.43.0 [INFO] [stderr] Checking piston v0.43.0 [INFO] [stderr] Checking smithay-client-toolkit v0.4.5 [INFO] [stderr] Checking winit v0.18.1 [INFO] [stderr] Checking pistoncore-glutin_window v0.55.0 [INFO] [stderr] Checking chip8 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `thread` and `time` [INFO] [stdout] --> src/chip.rs:13:11 [INFO] [stdout] | [INFO] [stdout] 13 | use std::{thread, time}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `thread` and `time` [INFO] [stdout] --> src/chip.rs:13:11 [INFO] [stdout] | [INFO] [stdout] 13 | use std::{thread, time}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `u` [INFO] [stdout] --> src/chip.rs:53:17 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(u) = e.update_args() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_u` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `bytes_read` [INFO] [stdout] --> src/cpu.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | let bytes_read = if let Ok(bytes_read) = f.read(&mut buffer) { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Screen` is never constructed [INFO] [stdout] --> src/drivers/displayDriver.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | pub struct Screen { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DisplayDriver` is never constructed [INFO] [stdout] --> src/drivers/displayDriver.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct DisplayDriver { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `display` are never used [INFO] [stdout] --> src/drivers/displayDriver.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 12 | impl DisplayDriver { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 13 | pub fn new(screen: Screen, scale: u8, primary_color: [u8; 4]) -> DisplayDriver { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub fn display(&mut self, screen: [u8; 2048]) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/cpu.rs:43:22 [INFO] [stdout] | [INFO] [stdout] 43 | let bytes_read = if let Ok(bytes_read) = f.read(&mut buffer) { [INFO] [stdout] | ______________________^ [INFO] [stdout] 44 | | bytes_read [INFO] [stdout] 45 | | } else { [INFO] [stdout] 46 | | 0 [INFO] [stdout] 47 | | }; [INFO] [stdout] | |_____^ help: ascribe the type usize and replace your expression with: `f.read(&mut buffer).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `FONT_SET` [INFO] [stdout] --> src/cpu.rs:62:14 [INFO] [stdout] | [INFO] [stdout] 62 | for i in 0..80 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 62 - for i in 0..80 { [INFO] [stdout] 62 + for (i, ) in FONT_SET.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/cpu.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | if !(self.v[x] == kk) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `(self.v[x] != kk)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | / if self.v[x] == kk { [INFO] [stdout] 103 | | self.pc += 2; [INFO] [stdout] 104 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 101 ~ 0x3 [INFO] [stdout] 102 ~ if self.v[x] == kk => { [INFO] [stdout] 103 | self.pc += 2; [INFO] [stdout] 104 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:107:9 [INFO] [stdout] | [INFO] [stdout] 107 | / if !(self.v[x] == kk) { [INFO] [stdout] 108 | | self.pc += 2; [INFO] [stdout] 109 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 106 ~ 0x4 [INFO] [stdout] 107 ~ if !(self.v[x] == kk) => { [INFO] [stdout] 108 | self.pc += 2; [INFO] [stdout] 109 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:112:9 [INFO] [stdout] | [INFO] [stdout] 112 | / if self.v[x] == self.v[y] { [INFO] [stdout] 113 | | self.pc += 2; [INFO] [stdout] 114 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 111 ~ 0x5 [INFO] [stdout] 112 ~ if self.v[x] == self.v[y] => { [INFO] [stdout] 113 | self.pc += 2; [INFO] [stdout] 114 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | / if self.v[x] != self.v[y] { [INFO] [stdout] 173 | | self.pc += 2; [INFO] [stdout] 174 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 171 ~ 0x9 [INFO] [stdout] 172 ~ if self.v[x] != self.v[y] => { [INFO] [stdout] 173 | self.pc += 2; [INFO] [stdout] 174 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:127:11 [INFO] [stdout] | [INFO] [stdout] 127 | self.v[x] = self.v[x] | self.v[y]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] |= self.v[y]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:130:11 [INFO] [stdout] | [INFO] [stdout] 130 | self.v[x] = self.v[x] & self.v[y]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] &= self.v[y]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:133:11 [INFO] [stdout] | [INFO] [stdout] 133 | self.v[x] = self.v[x] ^ self.v[y]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] ^= self.v[y]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/display.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 48 | return collision; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 48 - return collision; [INFO] [stdout] 48 + collision [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `row` is used to index `sprite` [INFO] [stdout] --> src/display.rs:32:16 [INFO] [stdout] | [INFO] [stdout] 32 | for row in 0..sprite_rows { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 32 - for row in 0..sprite_rows { [INFO] [stdout] 32 + for (row, ) in sprite.iter().enumerate().take(sprite_rows) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `print!()` with a format string that ends in a single newline [INFO] [stdout] --> src/drivers/displayDriver.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | print!("\n"); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_with_newline [INFO] [stdout] = note: `#[warn(clippy::print_with_newline)]` on by default [INFO] [stdout] help: use `println!` instead [INFO] [stdout] | [INFO] [stdout] 27 - print!("\n"); [INFO] [stdout] 27 + println!(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/unchip.rs:11:20 [INFO] [stdout] | [INFO] [stdout] 11 | let bytes_read = if let Ok(bytes_read) = f.read(&mut buffer) { [INFO] [stdout] | ____________________^ [INFO] [stdout] 12 | | bytes_read [INFO] [stdout] 13 | | } else { [INFO] [stdout] 14 | | 0 [INFO] [stdout] 15 | | }; [INFO] [stdout] | |___^ help: ascribe the type usize and replace your expression with: `f.read(&mut buffer).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/main.rs:22:30 [INFO] [stdout] | [INFO] [stdout] 22 | Err(error) => panic!(error.to_string()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(non_fmt_panics)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 22 | Err(error) => panic!("{}", error.to_string()), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module `displayDriver` should have a snake case name [INFO] [stdout] --> src/drivers/mod.rs:1:9 [INFO] [stdout] | [INFO] [stdout] 1 | pub mod displayDriver; [INFO] [stdout] | ^^^^^^^^^^^^^ help: convert the identifier to snake case: `display_driver` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `u` [INFO] [stdout] --> src/chip.rs:53:17 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(u) = e.update_args() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_u` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `bytes_read` [INFO] [stdout] --> src/cpu.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | let bytes_read = if let Ok(bytes_read) = f.read(&mut buffer) { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Screen` is never constructed [INFO] [stdout] --> src/drivers/displayDriver.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | pub struct Screen { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DisplayDriver` is never constructed [INFO] [stdout] --> src/drivers/displayDriver.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct DisplayDriver { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `display` are never used [INFO] [stdout] --> src/drivers/displayDriver.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 12 | impl DisplayDriver { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 13 | pub fn new(screen: Screen, scale: u8, primary_color: [u8; 4]) -> DisplayDriver { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub fn display(&mut self, screen: [u8; 2048]) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/cpu.rs:43:22 [INFO] [stdout] | [INFO] [stdout] 43 | let bytes_read = if let Ok(bytes_read) = f.read(&mut buffer) { [INFO] [stdout] | ______________________^ [INFO] [stdout] 44 | | bytes_read [INFO] [stdout] 45 | | } else { [INFO] [stdout] 46 | | 0 [INFO] [stdout] 47 | | }; [INFO] [stdout] | |_____^ help: ascribe the type usize and replace your expression with: `f.read(&mut buffer).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `FONT_SET` [INFO] [stdout] --> src/cpu.rs:62:14 [INFO] [stdout] | [INFO] [stdout] 62 | for i in 0..80 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 62 - for i in 0..80 { [INFO] [stdout] 62 + for (i, ) in FONT_SET.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/cpu.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | if !(self.v[x] == kk) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `(self.v[x] != kk)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | / if self.v[x] == kk { [INFO] [stdout] 103 | | self.pc += 2; [INFO] [stdout] 104 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 101 ~ 0x3 [INFO] [stdout] 102 ~ if self.v[x] == kk => { [INFO] [stdout] 103 | self.pc += 2; [INFO] [stdout] 104 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:107:9 [INFO] [stdout] | [INFO] [stdout] 107 | / if !(self.v[x] == kk) { [INFO] [stdout] 108 | | self.pc += 2; [INFO] [stdout] 109 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 106 ~ 0x4 [INFO] [stdout] 107 ~ if !(self.v[x] == kk) => { [INFO] [stdout] 108 | self.pc += 2; [INFO] [stdout] 109 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:112:9 [INFO] [stdout] | [INFO] [stdout] 112 | / if self.v[x] == self.v[y] { [INFO] [stdout] 113 | | self.pc += 2; [INFO] [stdout] 114 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 111 ~ 0x5 [INFO] [stdout] 112 ~ if self.v[x] == self.v[y] => { [INFO] [stdout] 113 | self.pc += 2; [INFO] [stdout] 114 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/cpu.rs:172:9 [INFO] [stdout] | [INFO] [stdout] 172 | / if self.v[x] != self.v[y] { [INFO] [stdout] 173 | | self.pc += 2; [INFO] [stdout] 174 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 171 ~ 0x9 [INFO] [stdout] 172 ~ if self.v[x] != self.v[y] => { [INFO] [stdout] 173 | self.pc += 2; [INFO] [stdout] 174 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:127:11 [INFO] [stdout] | [INFO] [stdout] 127 | self.v[x] = self.v[x] | self.v[y]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] |= self.v[y]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:130:11 [INFO] [stdout] | [INFO] [stdout] 130 | self.v[x] = self.v[x] & self.v[y]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] &= self.v[y]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/cpu.rs:133:11 [INFO] [stdout] | [INFO] [stdout] 133 | self.v[x] = self.v[x] ^ self.v[y]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.v[x] ^= self.v[y]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/display.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 48 | return collision; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 48 - return collision; [INFO] [stdout] 48 + collision [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `row` is used to index `sprite` [INFO] [stdout] --> src/display.rs:32:16 [INFO] [stdout] | [INFO] [stdout] 32 | for row in 0..sprite_rows { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 32 - for row in 0..sprite_rows { [INFO] [stdout] 32 + for (row, ) in sprite.iter().enumerate().take(sprite_rows) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `print!()` with a format string that ends in a single newline [INFO] [stdout] --> src/drivers/displayDriver.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | print!("\n"); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_with_newline [INFO] [stdout] = note: `#[warn(clippy::print_with_newline)]` on by default [INFO] [stdout] help: use `println!` instead [INFO] [stdout] | [INFO] [stdout] 27 - print!("\n"); [INFO] [stdout] 27 + println!(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/unchip.rs:11:20 [INFO] [stdout] | [INFO] [stdout] 11 | let bytes_read = if let Ok(bytes_read) = f.read(&mut buffer) { [INFO] [stdout] | ____________________^ [INFO] [stdout] 12 | | bytes_read [INFO] [stdout] 13 | | } else { [INFO] [stdout] 14 | | 0 [INFO] [stdout] 15 | | }; [INFO] [stdout] | |___^ help: ascribe the type usize and replace your expression with: `f.read(&mut buffer).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/main.rs:22:30 [INFO] [stdout] | [INFO] [stdout] 22 | Err(error) => panic!(error.to_string()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of `panic!()` is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(non_fmt_panics)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: add a "{}" format string to `Display` the message [INFO] [stdout] | [INFO] [stdout] 22 | Err(error) => panic!("{}", error.to_string()), [INFO] [stdout] | +++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module `displayDriver` should have a snake case name [INFO] [stdout] --> src/drivers/mod.rs:1:9 [INFO] [stdout] | [INFO] [stdout] 1 | pub mod displayDriver; [INFO] [stdout] | ^^^^^^^^^^^^^ help: convert the identifier to snake case: `display_driver` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.94s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: glutin v0.19.0, winit v0.18.1 [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 3` [INFO] running `Command { std: "docker" "inspect" "f8cc379faba05aca7d9ef4dfa1e7dbe23576410e103060e0c733557b94be60d3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f8cc379faba05aca7d9ef4dfa1e7dbe23576410e103060e0c733557b94be60d3", kill_on_drop: false }` [INFO] [stdout] f8cc379faba05aca7d9ef4dfa1e7dbe23576410e103060e0c733557b94be60d3