[INFO] cloning repository https://github.com/nishal21/NekoDroid [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/nishal21/NekoDroid" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnishal21%2FNekoDroid", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnishal21%2FNekoDroid'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 79772d8a28ca90bccfa378c6b5dacc81d3662bd9 [INFO] linting nishal21/NekoDroid against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnishal21%2FNekoDroid" "/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/nishal21/NekoDroid [INFO] finished tweaking git repo https://github.com/nishal21/NekoDroid [INFO] tweaked toml for git repo https://github.com/nishal21/NekoDroid written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/nishal21/NekoDroid 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/nishal21/NekoDroid 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] 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] 72dc2fa62bbedf3182a513bc9924570b0beedd1b5a63b8af7e8bd641ee3de593 [INFO] running `Command { std: "docker" "start" "-a" "72dc2fa62bbedf3182a513bc9924570b0beedd1b5a63b8af7e8bd641ee3de593", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "72dc2fa62bbedf3182a513bc9924570b0beedd1b5a63b8af7e8bd641ee3de593", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "72dc2fa62bbedf3182a513bc9924570b0beedd1b5a63b8af7e8bd641ee3de593", kill_on_drop: false }` [INFO] [stdout] 72dc2fa62bbedf3182a513bc9924570b0beedd1b5a63b8af7e8bd641ee3de593 [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] 50e8a4dd4bb7504d197a4b40a41c8ae7b8ddc51dbcde19b621fb7efcf288a409 [INFO] running `Command { std: "docker" "start" "-a" "50e8a4dd4bb7504d197a4b40a41c8ae7b8ddc51dbcde19b621fb7efcf288a409", kill_on_drop: false }` [INFO] [stderr] Compiling wasm-bindgen-shared v0.2.114 [INFO] [stderr] Compiling bumpalo v3.20.2 [INFO] [stderr] Checking unicode-ident v1.0.24 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling wasm-bindgen v0.2.114 [INFO] [stderr] Compiling wasm-bindgen-macro-support v0.2.114 [INFO] [stderr] Compiling wasm-bindgen-macro v0.2.114 [INFO] [stderr] Checking nekodroid v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/cpu.rs:1201:38 [INFO] [stdout] | [INFO] [stdout] 1201 | let overflow = (!((rn_val ^ op2)) & (rn_val ^ result)) >> 31 != 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove them: `(rn_val ^ op2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] = note: `#[warn(clippy::double_parens)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/cpu.rs:1698:42 [INFO] [stdout] | [INFO] [stdout] 1698 | let overflow = (!((rn_val ^ operand)) & (rn_val ^ result)) >> 31 != 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: remove them: `(rn_val ^ operand)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/cpu.rs:1201:38 [INFO] [stdout] | [INFO] [stdout] 1201 | let overflow = (!((rn_val ^ op2)) & (rn_val ^ result)) >> 31 != 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove them: `(rn_val ^ op2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] = note: `#[warn(clippy::double_parens)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/cpu.rs:1698:42 [INFO] [stdout] | [INFO] [stdout] 1698 | let overflow = (!((rn_val ^ operand)) & (rn_val ^ result)) >> 31 != 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: remove them: `(rn_val ^ operand)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `next_random` is never used [INFO] [stdout] --> src/lib.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 34 | impl VirtualCPU { [INFO] [stdout] | --------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 80 | fn next_random(&mut self) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MODE_SYS` is never used [INFO] [stdout] --> src/cpu.rs:29:7 [INFO] [stdout] | [INFO] [stdout] 29 | const MODE_SYS: u32 = 0x1F; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `default` can be confused for the standard trait method `std::default::Default::default` [INFO] [stdout] --> src/memory.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | / pub fn default() -> Self { [INFO] [stdout] 124 | | Self::new(DEFAULT_RAM_SIZE) [INFO] [stdout] 125 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::default::Default` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] = note: `#[warn(clippy::should_implement_trait)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:136:9 [INFO] [stdout] | [INFO] [stdout] 136 | addr >= VRAM_BASE && addr < VRAM_END [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VRAM_BASE..VRAM_END).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | addr >= UART_BASE && addr < PERIPH_END [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(UART_BASE..PERIPH_END).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/memory.rs:146:9 [INFO] [stdout] | [INFO] [stdout] 146 | addr >= VPB_PERIPH_START && addr <= VPB_PERIPH_END [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_PERIPH_START..=VPB_PERIPH_END).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:288:16 [INFO] [stdout] | [INFO] [stdout] 288 | if addr >= VPB_VIC_BASE && addr < VPB_VIC_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_VIC_BASE..VPB_VIC_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:295:16 [INFO] [stdout] | [INFO] [stdout] 295 | if addr >= VPB_TIMER_BASE && addr < VPB_TIMER_BASE + 0x20 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_TIMER_BASE..VPB_TIMER_BASE + 0x20).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:307:16 [INFO] [stdout] | [INFO] [stdout] 307 | if addr >= VPB_VIC_BASE && addr < VPB_VIC_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_VIC_BASE..VPB_VIC_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:310:16 [INFO] [stdout] | [INFO] [stdout] 310 | if addr >= VPB_TIMER_BASE && addr < VPB_TIMER_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_TIMER_BASE..VPB_TIMER_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/memory.rs:320:28 [INFO] [stdout] | [INFO] [stdout] 320 | INPUT_TOUCH => if self.touch_down { 1 } else { 0 }, [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] 320 - INPUT_TOUCH => if self.touch_down { 1 } else { 0 }, [INFO] [stdout] 320 + INPUT_TOUCHf self.touch_down => { 1 }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:415:16 [INFO] [stdout] | [INFO] [stdout] 415 | if addr >= VPB_VIC_BASE && addr < VPB_VIC_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_VIC_BASE..VPB_VIC_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:429:16 [INFO] [stdout] | [INFO] [stdout] 429 | if addr >= VPB_TIMER_BASE && addr < VPB_TIMER_BASE + 0x20 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_TIMER_BASE..VPB_TIMER_BASE + 0x20).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `RegisterFile` [INFO] [stdout] --> src/cpu.rs:91:5 [INFO] [stdout] | [INFO] [stdout] 91 | / pub fn new() -> Self { [INFO] [stdout] 92 | | RegisterFile { [INFO] [stdout] 93 | | regs: [0u32; 16], [INFO] [stdout] 94 | | cpsr: MODE_USER, // Start in User mode [INFO] [stdout] ... | [INFO] [stdout] 112 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 89 + impl Default for RegisterFile { [INFO] [stdout] 90 + fn default() -> Self { [INFO] [stdout] 91 + Self::new() [INFO] [stdout] 92 + } [INFO] [stdout] 93 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `default` can be confused for the standard trait method `std::default::Default::default` [INFO] [stdout] --> src/cpu.rs:402:5 [INFO] [stdout] | [INFO] [stdout] 402 | / pub fn default() -> Self { [INFO] [stdout] 403 | | Cpu { [INFO] [stdout] 404 | | regs: RegisterFile::new(), [INFO] [stdout] 405 | | mmu: Mmu::default(), [INFO] [stdout] ... | [INFO] [stdout] 410 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::default::Default` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cpu.rs:496:13 [INFO] [stdout] | [INFO] [stdout] 496 | return phys_base | offset; [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] 496 - return phys_base | offset; [INFO] [stdout] 496 + phys_base | offset [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cpu.rs:526:13 [INFO] [stdout] | [INFO] [stdout] 526 | return vaddr; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 526 - return vaddr; [INFO] [stdout] 526 + vaddr [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cpu.rs:536:13 [INFO] [stdout] | [INFO] [stdout] 536 | return vaddr; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 536 - return vaddr; [INFO] [stdout] 536 + vaddr [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this OR pattern can be rewritten using a range [INFO] [stdout] --> src/cpu.rs:764:21 [INFO] [stdout] | [INFO] [stdout] 764 | 0x8 | 0x9 | 0xA | 0xB => format!("{}{} {}, {}", mnemonic, cs, Self::reg_name(rn), op2_str), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `0x8..=0xB` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_patterns [INFO] [stdout] = note: `#[warn(clippy::manual_range_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/cpu.rs:1589:12 [INFO] [stdout] | [INFO] [stdout] 1589 | if (pre_index && write_back) || !pre_index { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 1589 - if (pre_index && write_back) || !pre_index { [INFO] [stdout] 1589 + if !(pre_index && !write_back) { [INFO] [stdout] | [INFO] [stdout] 1589 - if (pre_index && write_back) || !pre_index { [INFO] [stdout] 1589 + if !pre_index || write_back { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `exception_type` [INFO] [stdout] --> src/cpu.rs:860:41 [INFO] [stdout] | [INFO] [stdout] 860 | pub fn trigger_exception(&mut self, exception_type: &str, target_mode: u32, vector_offset: u32, pc_adjustment: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exception_type` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `VirtualCPU` [INFO] [stdout] --> src/lib.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 37 | / pub fn new() -> VirtualCPU { [INFO] [stdout] 38 | | let mut fb = vec![0u8; FRAMEBUFFER_SIZE]; [INFO] [stdout] 39 | | // Initialize to black with full alpha [INFO] [stdout] 40 | | for pixel in fb.chunks_exact_mut(4) { [INFO] [stdout] ... | [INFO] [stdout] 53 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 34 + impl Default for VirtualCPU { [INFO] [stdout] 35 + fn default() -> Self { [INFO] [stdout] 36 + Self::new() [INFO] [stdout] 37 + } [INFO] [stdout] 38 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/lib.rs:137:26 [INFO] [stdout] | [INFO] [stdout] 137 | let v2 = (((fy * 10.0 + time * 1.5).sin() + (fx * 10.0).cos()) * 0.5 + 0.5).min(1.0).max(0.0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(((fy * 10.0 + time * 1.5).sin() + (fx * 10.0).cos()) * 0.5 + 0.5).clamp(0.0, 1.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `category` [INFO] [stdout] --> src/cpu.rs:1999:37 [INFO] [stdout] | [INFO] [stdout] 1999 | fn log_unimplemented(&mut self, category: &str, instr: u32, pc: u32) { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_category` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `instr` [INFO] [stdout] --> src/cpu.rs:1999:53 [INFO] [stdout] | [INFO] [stdout] 1999 | fn log_unimplemented(&mut self, category: &str, instr: u32, pc: u32) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_instr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: initializer for `thread_local` value can be made `const` [INFO] [stdout] --> src/lib.rs:192:49 [INFO] [stdout] | [INFO] [stdout] 192 | static ARM_CPU: RefCell> = RefCell::new(None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(None) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_thread_local [INFO] [stdout] = note: `#[warn(clippy::missing_const_for_thread_local)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `pc` [INFO] [stdout] --> src/cpu.rs:1999:65 [INFO] [stdout] | [INFO] [stdout] 1999 | fn log_unimplemented(&mut self, category: &str, instr: u32, pc: u32) { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_pc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/lib.rs:406:16 [INFO] [stdout] | [INFO] [stdout] 406 | if clean.len() % 8 != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace with: `!clean.len().is_multiple_of(8)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `next_random` is never used [INFO] [stdout] --> src/lib.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 34 | impl VirtualCPU { [INFO] [stdout] | --------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 80 | fn next_random(&mut self) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MODE_SYS` is never used [INFO] [stdout] --> src/cpu.rs:29:7 [INFO] [stdout] | [INFO] [stdout] 29 | const MODE_SYS: u32 = 0x1F; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `default` can be confused for the standard trait method `std::default::Default::default` [INFO] [stdout] --> src/memory.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | / pub fn default() -> Self { [INFO] [stdout] 124 | | Self::new(DEFAULT_RAM_SIZE) [INFO] [stdout] 125 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::default::Default` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] = note: `#[warn(clippy::should_implement_trait)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:136:9 [INFO] [stdout] | [INFO] [stdout] 136 | addr >= VRAM_BASE && addr < VRAM_END [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VRAM_BASE..VRAM_END).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | addr >= UART_BASE && addr < PERIPH_END [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(UART_BASE..PERIPH_END).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/memory.rs:146:9 [INFO] [stdout] | [INFO] [stdout] 146 | addr >= VPB_PERIPH_START && addr <= VPB_PERIPH_END [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_PERIPH_START..=VPB_PERIPH_END).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:288:16 [INFO] [stdout] | [INFO] [stdout] 288 | if addr >= VPB_VIC_BASE && addr < VPB_VIC_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_VIC_BASE..VPB_VIC_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:295:16 [INFO] [stdout] | [INFO] [stdout] 295 | if addr >= VPB_TIMER_BASE && addr < VPB_TIMER_BASE + 0x20 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_TIMER_BASE..VPB_TIMER_BASE + 0x20).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:307:16 [INFO] [stdout] | [INFO] [stdout] 307 | if addr >= VPB_VIC_BASE && addr < VPB_VIC_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_VIC_BASE..VPB_VIC_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:310:16 [INFO] [stdout] | [INFO] [stdout] 310 | if addr >= VPB_TIMER_BASE && addr < VPB_TIMER_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_TIMER_BASE..VPB_TIMER_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/memory.rs:320:28 [INFO] [stdout] | [INFO] [stdout] 320 | INPUT_TOUCH => if self.touch_down { 1 } else { 0 }, [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] 320 - INPUT_TOUCH => if self.touch_down { 1 } else { 0 }, [INFO] [stdout] 320 + INPUT_TOUCHf self.touch_down => { 1 }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:415:16 [INFO] [stdout] | [INFO] [stdout] 415 | if addr >= VPB_VIC_BASE && addr < VPB_VIC_BASE + 0x1000 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_VIC_BASE..VPB_VIC_BASE + 0x1000).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/memory.rs:429:16 [INFO] [stdout] | [INFO] [stdout] 429 | if addr >= VPB_TIMER_BASE && addr < VPB_TIMER_BASE + 0x20 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(VPB_TIMER_BASE..VPB_TIMER_BASE + 0x20).contains(&addr)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/memory/tests.rs:101:23 [INFO] [stdout] | [INFO] [stdout] 101 | mmu.write_u32(VPB_TIMER_BASE + 0x00, 10); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `VPB_TIMER_BASE` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/memory/tests.rs:250:9 [INFO] [stdout] | [INFO] [stdout] 250 | assert_eq!(mmu.touch_down, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 250 - assert_eq!(mmu.touch_down, false); [INFO] [stdout] 250 + assert!(!mmu.touch_down); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `RegisterFile` [INFO] [stdout] --> src/cpu.rs:91:5 [INFO] [stdout] | [INFO] [stdout] 91 | / pub fn new() -> Self { [INFO] [stdout] 92 | | RegisterFile { [INFO] [stdout] 93 | | regs: [0u32; 16], [INFO] [stdout] 94 | | cpsr: MODE_USER, // Start in User mode [INFO] [stdout] ... | [INFO] [stdout] 112 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 89 + impl Default for RegisterFile { [INFO] [stdout] 90 + fn default() -> Self { [INFO] [stdout] 91 + Self::new() [INFO] [stdout] 92 + } [INFO] [stdout] 93 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `default` can be confused for the standard trait method `std::default::Default::default` [INFO] [stdout] --> src/cpu.rs:402:5 [INFO] [stdout] | [INFO] [stdout] 402 | / pub fn default() -> Self { [INFO] [stdout] 403 | | Cpu { [INFO] [stdout] 404 | | regs: RegisterFile::new(), [INFO] [stdout] 405 | | mmu: Mmu::default(), [INFO] [stdout] ... | [INFO] [stdout] 410 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::default::Default` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cpu.rs:496:13 [INFO] [stdout] | [INFO] [stdout] 496 | return phys_base | offset; [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] 496 - return phys_base | offset; [INFO] [stdout] 496 + phys_base | offset [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cpu.rs:526:13 [INFO] [stdout] | [INFO] [stdout] 526 | return vaddr; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 526 - return vaddr; [INFO] [stdout] 526 + vaddr [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/cpu.rs:536:13 [INFO] [stdout] | [INFO] [stdout] 536 | return vaddr; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 536 - return vaddr; [INFO] [stdout] 536 + vaddr [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this OR pattern can be rewritten using a range [INFO] [stdout] --> src/cpu.rs:764:21 [INFO] [stdout] | [INFO] [stdout] 764 | 0x8 | 0x9 | 0xA | 0xB => format!("{}{} {}, {}", mnemonic, cs, Self::reg_name(rn), op2_str), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `0x8..=0xB` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_patterns [INFO] [stdout] = note: `#[warn(clippy::manual_range_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/cpu.rs:1480:9 [INFO] [stdout] | [INFO] [stdout] 1480 | / match syscall_num { [INFO] [stdout] 1481 | | // Linux sys_write (fd, buf, count) [INFO] [stdout] 1482 | | 0x04 => { [INFO] [stdout] 1483 | | let _fd = self.regs.read(0); [INFO] [stdout] ... | [INFO] [stdout] 1511 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1480 ~ if syscall_num == 0x04 { [INFO] [stdout] 1481 + let _fd = self.regs.read(0); [INFO] [stdout] 1482 + let ptr = self.regs.read(1); [INFO] [stdout] 1483 + let len = self.regs.read(2); [INFO] [stdout] 1484 + [INFO] [stdout] 1485 + let mut string_buf = String::new(); [INFO] [stdout] 1486 + for i in 0..len { [INFO] [stdout] 1487 + let b = self.read_mem_u8(ptr.wrapping_add(i)); [INFO] [stdout] 1488 + string_buf.push(b as char); [INFO] [stdout] 1489 + } [INFO] [stdout] 1490 + [INFO] [stdout] 1491 + #[cfg(not(test))] [INFO] [stdout] 1492 + { [INFO] [stdout] 1493 ~ crate::log(&format!("⚙️ BIOS sys_write: {}", string_buf)); [INFO] [stdout] 1494 + } [INFO] [stdout] 1495 + #[cfg(test)] [INFO] [stdout] 1496 + { [INFO] [stdout] 1497 + let _ = string_buf; // avoid unused warning [INFO] [stdout] 1498 + } [INFO] [stdout] 1499 + [INFO] [stdout] 1500 + // Return bytes written in R0 (simulate success) [INFO] [stdout] 1501 + self.regs.write(0, len); [INFO] [stdout] 1502 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/cpu.rs:1589:12 [INFO] [stdout] | [INFO] [stdout] 1589 | if (pre_index && write_back) || !pre_index { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 1589 - if (pre_index && write_back) || !pre_index { [INFO] [stdout] 1589 + if !(pre_index && !write_back) { [INFO] [stdout] | [INFO] [stdout] 1589 - if (pre_index && write_back) || !pre_index { [INFO] [stdout] 1589 + if !pre_index || write_back { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `VirtualCPU` [INFO] [stdout] --> src/lib.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 37 | / pub fn new() -> VirtualCPU { [INFO] [stdout] 38 | | let mut fb = vec![0u8; FRAMEBUFFER_SIZE]; [INFO] [stdout] 39 | | // Initialize to black with full alpha [INFO] [stdout] 40 | | for pixel in fb.chunks_exact_mut(4) { [INFO] [stdout] ... | [INFO] [stdout] 53 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 34 + impl Default for VirtualCPU { [INFO] [stdout] 35 + fn default() -> Self { [INFO] [stdout] 36 + Self::new() [INFO] [stdout] 37 + } [INFO] [stdout] 38 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/lib.rs:137:26 [INFO] [stdout] | [INFO] [stdout] 137 | let v2 = (((fy * 10.0 + time * 1.5).sin() + (fx * 10.0).cos()) * 0.5 + 0.5).min(1.0).max(0.0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(((fy * 10.0 + time * 1.5).sin() + (fx * 10.0).cos()) * 0.5 + 0.5).clamp(0.0, 1.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: initializer for `thread_local` value can be made `const` [INFO] [stdout] --> src/lib.rs:192:49 [INFO] [stdout] | [INFO] [stdout] 192 | static ARM_CPU: RefCell> = RefCell::new(None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(None) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_thread_local [INFO] [stdout] = note: `#[warn(clippy::missing_const_for_thread_local)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/lib.rs:406:16 [INFO] [stdout] | [INFO] [stdout] 406 | if clean.len() % 8 != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace with: `!clean.len().is_multiple_of(8)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.13s [INFO] running `Command { std: "docker" "inspect" "50e8a4dd4bb7504d197a4b40a41c8ae7b8ddc51dbcde19b621fb7efcf288a409", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "50e8a4dd4bb7504d197a4b40a41c8ae7b8ddc51dbcde19b621fb7efcf288a409", kill_on_drop: false }` [INFO] [stdout] 50e8a4dd4bb7504d197a4b40a41c8ae7b8ddc51dbcde19b621fb7efcf288a409