[INFO] updating cached repository apoloval/simproc [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/apoloval/simproc [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/apoloval/simproc" "work/ex/clippy-test-run/sources/stable/gh/apoloval/simproc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/apoloval/simproc'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/apoloval/simproc" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/apoloval/simproc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/apoloval/simproc'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 9cea797591c4a6f84fe36dfc68286286aa9924a6 [INFO] sha for GitHub repo apoloval/simproc: 9cea797591c4a6f84fe36dfc68286286aa9924a6 [INFO] validating manifest of apoloval/simproc 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 apoloval/simproc 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 apoloval/simproc [INFO] finished frobbing apoloval/simproc [INFO] frobbed toml for apoloval/simproc written to work/ex/clippy-test-run/sources/stable/gh/apoloval/simproc/Cargo.toml [INFO] started frobbing apoloval/simproc [INFO] finished frobbing apoloval/simproc [INFO] frobbed toml for apoloval/simproc written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/apoloval/simproc/Cargo.toml [INFO] crate apoloval/simproc 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 apoloval/simproc 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/apoloval/simproc:/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] 7a56ac456cae5468175d08860e1b7f85e4046e66d2936eab2fd8d69b79a4f633 [INFO] running `"docker" "start" "-a" "7a56ac456cae5468175d08860e1b7f85e4046e66d2936eab2fd8d69b79a4f633"` [INFO] [stderr] Compiling proc-macro2 v0.3.5 [INFO] [stderr] Checking env_logger v0.3.5 [INFO] [stderr] Checking quickcheck v0.2.27 [INFO] [stderr] Compiling quote v0.5.1 [INFO] [stderr] Compiling syn v0.13.1 [INFO] [stderr] Compiling serde_derive_internals v0.23.0 [INFO] [stderr] Compiling serde_derive v1.0.37 [INFO] [stderr] Checking docopt v0.8.3 [INFO] [stderr] Checking simproc v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cpu/exec.rs:1557:33 [INFO] [stderr] | [INFO] [stderr] 1557 | let dev = TestDev { val: val }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [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: redundant field names in struct initialization [INFO] [stderr] --> src/cpu/io.rs:74:58 [INFO] [stderr] | [INFO] [stderr] 74 | fn with_val(val: &'a mut u8) -> Self { FakeDev { val: val }} [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [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/cpu/exec.rs:1557:33 [INFO] [stderr] | [INFO] [stderr] 1557 | let dev = TestDev { val: val }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [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: redundant field names in struct initialization [INFO] [stderr] --> src/cpu/io.rs:74:58 [INFO] [stderr] | [INFO] [stderr] 74 | fn with_val(val: &'a mut u8) -> Self { FakeDev { val: val }} [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [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: module has the same name as its containing module [INFO] [stderr] --> src/cpu/mod.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | mod cpu; pub use self::cpu::*; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/inst/mod.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | mod inst; pub use self::inst::*; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/mem/mod.rs:11:1 [INFO] [stderr] | [INFO] [stderr] 11 | pub mod mem; pub use self::mem::*; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cpu/clock.rs:21:19 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn cycles(&self, n: Cycle) -> Duration { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/exec.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | / match inst { [INFO] [stderr] 26 | | &Inst::Add(dst, src) => exec_add(ctx, dst, src, false), [INFO] [stderr] 27 | | &Inst::Adc(dst, src) => exec_add(ctx, dst, src, true), [INFO] [stderr] 28 | | &Inst::Addi(dst, Immediate(k)) => exec_addi(ctx, dst, k), [INFO] [stderr] ... | [INFO] [stderr] 75 | | &Inst::Di => exec_set_int(ctx, false), [INFO] [stderr] 76 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 25 | match *inst { [INFO] [stderr] 26 | Inst::Add(dst, src) => exec_add(ctx, dst, src, false), [INFO] [stderr] 27 | Inst::Adc(dst, src) => exec_add(ctx, dst, src, true), [INFO] [stderr] 28 | Inst::Addi(dst, Immediate(k)) => exec_addi(ctx, dst, k), [INFO] [stderr] 29 | Inst::Sub(dst, src) => exec_sub(ctx, dst, src, false), [INFO] [stderr] 30 | Inst::Sbc(dst, src) => exec_sub(ctx, dst, src, true), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:93:15 [INFO] [stderr] | [INFO] [stderr] 93 | let lhs = regs.reg(dst) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(regs.reg(dst))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:94:15 [INFO] [stderr] | [INFO] [stderr] 94 | let rhs = src as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(src)` [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 i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:119:15 [INFO] [stderr] | [INFO] [stderr] 119 | let lhs = regs.reg(dst) as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(regs.reg(dst))` [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 i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:120:15 [INFO] [stderr] | [INFO] [stderr] 120 | let rhs = src as i16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `i16::from(src)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:136:15 [INFO] [stderr] | [INFO] [stderr] 136 | let res = logic(val) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u16::from(logic(val))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:153:15 [INFO] [stderr] | [INFO] [stderr] 153 | let res = logic(lhs, rhs) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(logic(lhs, rhs))` [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 i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:167:15 [INFO] [stderr] | [INFO] [stderr] 167 | let val = regs.reg(dst) as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(regs.reg(dst))` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:181:15 [INFO] [stderr] | [INFO] [stderr] 181 | let val = regs.areg(dst) as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(regs.areg(dst))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:202:28 [INFO] [stderr] | [INFO] [stderr] 202 | regs.st.zero = is_zero(res as u16); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(res)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:203:26 [INFO] [stderr] | [INFO] [stderr] 203 | regs.st.neg = is_neg(res as u16); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(res)` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:264:17 [INFO] [stderr] | [INFO] [stderr] 264 | let addr = (ctx.regs().sp as i32 - 1) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(ctx.regs().sp)` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:274:22 [INFO] [stderr] | [INFO] [stderr] 274 | ctx.regs().sp = (addr as i32 + 1) as u16; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i32::from(addr)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:295:14 [INFO] [stderr] | [INFO] [stderr] 295 | let pc = ctx.regs().pc as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(ctx.regs().pc)` [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 i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:297:38 [INFO] [stderr] | [INFO] [stderr] 297 | let inc = if f(&ctx.regs().st) { offset as i32 } else { 2 }; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i32::from(offset)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:327:14 [INFO] [stderr] | [INFO] [stderr] 327 | let al = ctx.mem().read(sp) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(ctx.mem().read(sp))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:328:14 [INFO] [stderr] | [INFO] [stderr] 328 | let ah = (ctx.mem().read(add(sp, 1)) as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(ctx.mem().read(add(sp, 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: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/exec.rs:348:30 [INFO] [stderr] | [INFO] [stderr] 348 | fn is_zero(n: u16) -> bool { n & 0x00ff == 0 } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `n.trailing_zeros() >= 8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::verbose_bit_mask)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#verbose_bit_mask [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:351:36 [INFO] [stderr] | [INFO] [stderr] 351 | fn add(n: u16, inc: i16) -> u16 { (n as i32 + inc as i32) as u16 } [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(n)` [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 i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:351:47 [INFO] [stderr] | [INFO] [stderr] 351 | fn add(n: u16, inc: i16) -> u16 { (n as i32 + inc as i32) as u16 } [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(inc)` [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 deriving a `Default` implementation for `cpu::io::Io<'a>` [INFO] [stderr] --> src/cpu/io.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn new() -> Self { Io { devs: HashMap::with_capacity(256) }} [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] 17 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `cpu::reg::Regs` [INFO] [stderr] --> src/cpu/reg.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn new() -> Self { [INFO] [stderr] 42 | | Regs { pc: 0, st: StatusReg::new(), sp: 0xffff, a0: 0, a1: 0, a2: 0, a3: 0, } [INFO] [stderr] 43 | | } [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] 40 | impl Default for cpu::reg::Regs { [INFO] [stderr] 41 | fn default() -> Self { [INFO] [stderr] 42 | Self::new() [INFO] [stderr] 43 | } [INFO] [stderr] 44 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:95:70 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn set_r0(&mut self, n: u8) { self.a0 = (self.a0 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:96:71 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn set_r1(&mut self, n: u8) { self.a0 = (self.a0 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:97:70 [INFO] [stderr] | [INFO] [stderr] 97 | pub fn set_r2(&mut self, n: u8) { self.a1 = (self.a1 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:98:71 [INFO] [stderr] | [INFO] [stderr] 98 | pub fn set_r3(&mut self, n: u8) { self.a1 = (self.a1 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:99:70 [INFO] [stderr] | [INFO] [stderr] 99 | pub fn set_r4(&mut self, n: u8) { self.a2 = (self.a2 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:100:71 [INFO] [stderr] | [INFO] [stderr] 100 | pub fn set_r5(&mut self, n: u8) { self.a2 = (self.a2 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:101:70 [INFO] [stderr] | [INFO] [stderr] 101 | pub fn set_r6(&mut self, n: u8) { self.a3 = (self.a3 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:102:71 [INFO] [stderr] | [INFO] [stderr] 102 | pub fn set_r7(&mut self, n: u8) { self.a3 = (self.a3 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/inst.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | / match self { [INFO] [stderr] 136 | | &Inst::Add(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x20), [INFO] [stderr] 137 | | &Inst::Add(ref r1, ref r2) => pack!(w, 0x80, regs r1, r2 in 0x00), [INFO] [stderr] 138 | | &Inst::Adc(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x24), [INFO] [stderr] ... | [INFO] [stderr] 195 | | &Inst::Di => pack!(w, 0x05), [INFO] [stderr] 196 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 135 | match *self { [INFO] [stderr] 136 | Inst::Add(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x20), [INFO] [stderr] 137 | Inst::Add(ref r1, ref r2) => pack!(w, 0x80, regs r1, r2 in 0x00), [INFO] [stderr] 138 | Inst::Adc(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x24), [INFO] [stderr] 139 | Inst::Adc(ref r1, ref r2) => pack!(w, 0x81, regs r1, r2 in 0x00), [INFO] [stderr] 140 | Inst::Addi(ref r, Immediate(k)) => pack!(w, reg r in 0x90, byte k), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/inst.rs:271:26 [INFO] [stderr] | [INFO] [stderr] 271 | fn is_onebyte(accum: &Reg, other: &Reg) -> bool { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `Reg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/inst.rs:271:39 [INFO] [stderr] | [INFO] [stderr] 271 | fn is_onebyte(accum: &Reg, other: &Reg) -> bool { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `Reg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(byte & 0x07)` [INFO] [stderr] --> src/inst/inst.rs:284:30 [INFO] [stderr] | [INFO] [stderr] 284 | get!(Reg::decode((byte & 0x07) >> 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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:20:36 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:20:54 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:23:16 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:23:38 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:33:36 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:33:54 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:36:16 [INFO] [stderr] | [INFO] [stderr] 36 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:36:38 [INFO] [stderr] | [INFO] [stderr] 36 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/ops.rs:62:19 [INFO] [stderr] | [INFO] [stderr] 62 | pub fn encode(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | / match self { [INFO] [stderr] 64 | | &Reg::R0 => 0x00, [INFO] [stderr] 65 | | &Reg::R1 => 0x01, [INFO] [stderr] 66 | | &Reg::R2 => 0x02, [INFO] [stderr] ... | [INFO] [stderr] 71 | | &Reg::R7 => 0x07, [INFO] [stderr] 72 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 63 | match *self { [INFO] [stderr] 64 | Reg::R0 => 0x00, [INFO] [stderr] 65 | Reg::R1 => 0x01, [INFO] [stderr] 66 | Reg::R2 => 0x02, [INFO] [stderr] 67 | Reg::R3 => 0x03, [INFO] [stderr] 68 | Reg::R4 => 0x04, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &Reg::R0 => write!(fmt, "R0"), [INFO] [stderr] 80 | | &Reg::R1 => write!(fmt, "R1"), [INFO] [stderr] 81 | | &Reg::R2 => write!(fmt, "R2"), [INFO] [stderr] ... | [INFO] [stderr] 86 | | &Reg::R7 => write!(fmt, "R7"), [INFO] [stderr] 87 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | Reg::R0 => write!(fmt, "R0"), [INFO] [stderr] 80 | Reg::R1 => write!(fmt, "R1"), [INFO] [stderr] 81 | Reg::R2 => write!(fmt, "R2"), [INFO] [stderr] 82 | Reg::R3 => write!(fmt, "R3"), [INFO] [stderr] 83 | Reg::R4 => write!(fmt, "R4"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/ops.rs:108:19 [INFO] [stderr] | [INFO] [stderr] 108 | pub fn encode(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | / match self { [INFO] [stderr] 110 | | &AddrReg::A0 => 0x00, [INFO] [stderr] 111 | | &AddrReg::A1 => 0x01, [INFO] [stderr] 112 | | &AddrReg::A2 => 0x02, [INFO] [stderr] 113 | | &AddrReg::A3 => 0x03, [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 109 | match *self { [INFO] [stderr] 110 | AddrReg::A0 => 0x00, [INFO] [stderr] 111 | AddrReg::A1 => 0x01, [INFO] [stderr] 112 | AddrReg::A2 => 0x02, [INFO] [stderr] 113 | AddrReg::A3 => 0x03, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:120:9 [INFO] [stderr] | [INFO] [stderr] 120 | / match self { [INFO] [stderr] 121 | | &AddrReg::A0 => write!(fmt, "A0"), [INFO] [stderr] 122 | | &AddrReg::A1 => write!(fmt, "A1"), [INFO] [stderr] 123 | | &AddrReg::A2 => write!(fmt, "A2"), [INFO] [stderr] 124 | | &AddrReg::A3 => write!(fmt, "A3"), [INFO] [stderr] 125 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 120 | match *self { [INFO] [stderr] 121 | AddrReg::A0 => write!(fmt, "A0"), [INFO] [stderr] 122 | AddrReg::A1 => write!(fmt, "A1"), [INFO] [stderr] 123 | AddrReg::A2 => write!(fmt, "A2"), [INFO] [stderr] 124 | AddrReg::A3 => write!(fmt, "A3"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:23:12 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u16::MIN as i64 || n > u16::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i64::from(u16::MIN)` [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:23:35 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u16::MIN as i64 || n > u16::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i64::from(u16::MAX)` [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:32:16 [INFO] [stderr] | [INFO] [stderr] 32 | let diff = (to as i64) - (from as i64); [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i64::from(to)` [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:32:30 [INFO] [stderr] | [INFO] [stderr] 32 | let diff = (to as i64) - (from as i64); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(from)` [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 loop variable `i` is used to index `bytes` [INFO] [stderr] --> src/mem/mem.rs:23:18 [INFO] [stderr] | [INFO] [stderr] 23 | for i in 0..bytes.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 23 | for (i, ) in bytes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `mem::page::RamPage` [INFO] [stderr] --> src/mem/page.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new() -> RamPage { [INFO] [stderr] 20 | | let mut ram = RamPage { bytes: Vec::with_capacity(PAGE_SIZE) }; [INFO] [stderr] 21 | | unsafe { ram.bytes.set_len(PAGE_SIZE) } [INFO] [stderr] 22 | | ram [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 14 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bin/spm/machine.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | Console { output: output, input: rx } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `output` [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 `println!("")` [INFO] [stderr] --> src/bin/spm/main.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bin/spm/machine.rs:37:19 [INFO] [stderr] | [INFO] [stderr] 37 | Console { output: output, input: rx } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `output` [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 `println!("")` [INFO] [stderr] --> src/bin/spm/main.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | symbols: symbols, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [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/bin/spasm/asm/assembler.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | write!(output, "{}\n", line.content) [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/bin/spasm/asm/expr.rs:72:28 [INFO] [stderr] | [INFO] [stderr] 72 | StdExprAssembler { symbols: symbols } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [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/bin/spasm/asm/expr.rs:148:75 [INFO] [stderr] | [INFO] [stderr] 148 | addr_dist(from, to).ok_or(ExprAssembleError::TooFar { from: from, to: to, }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `from` [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/bin/spasm/asm/expr.rs:148:87 [INFO] [stderr] | [INFO] [stderr] 148 | addr_dist(from, to).ok_or(ExprAssembleError::TooFar { from: from, to: to, }) [INFO] [stderr] | ^^^^^^ help: replace it with: `to` [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/bin/spasm/asm/full.rs:65:13 [INFO] [stderr] | [INFO] [stderr] 65 | symbols: symbols, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [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/bin/spasm/asm/full.rs:78:21 [INFO] [stderr] | [INFO] [stderr] 78 | line: line, base_addr: base_addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:78:33 [INFO] [stderr] | [INFO] [stderr] 78 | line: line, base_addr: base_addr, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_addr` [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/bin/spasm/asm/full.rs:84:25 [INFO] [stderr] | [INFO] [stderr] 84 | line: line, base_addr: base_addr, inst: inst [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:84:37 [INFO] [stderr] | [INFO] [stderr] 84 | line: line, base_addr: base_addr, inst: inst [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_addr` [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/bin/spasm/asm/full.rs:84:59 [INFO] [stderr] | [INFO] [stderr] 84 | line: line, base_addr: base_addr, inst: inst [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `inst` [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/bin/spasm/asm/full.rs:86:61 [INFO] [stderr] | [INFO] [stderr] 86 | Err(e) => Err(FullAssembleError::Expr { line: line, error: e }), [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:93:29 [INFO] [stderr] | [INFO] [stderr] 93 | line: line, base_addr: base_addr, data: rtdata [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:93:41 [INFO] [stderr] | [INFO] [stderr] 93 | line: line, base_addr: base_addr, data: rtdata [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_addr` [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/bin/spasm/asm/full.rs:97:29 [INFO] [stderr] | [INFO] [stderr] 97 | line: line, error: e, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/inst/full.rs:24:25 [INFO] [stderr] | [INFO] [stderr] 24 | InstAssembler { expr_asm: expr_asm } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `expr_asm` [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/bin/spasm/asm/pre.rs:85:25 [INFO] [stderr] | [INFO] [stderr] 85 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/pre.rs:138:49 [INFO] [stderr] | [INFO] [stderr] 138 | Ok(PreAssembled::Inst { line: line, base_addr: base, inst: inst }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/pre.rs:138:78 [INFO] [stderr] | [INFO] [stderr] 138 | Ok(PreAssembled::Inst { line: line, base_addr: base, inst: inst }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `inst` [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/bin/spasm/asm/pre.rs:158:42 [INFO] [stderr] | [INFO] [stderr] 158 | Ok(PreAssembled::Empty { line: line, base_addr: addr, }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/pre.rs:167:29 [INFO] [stderr] | [INFO] [stderr] 167 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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: using `println!("")` [INFO] [stderr] --> src/bin/spasm/main.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | symbols: symbols, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [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/bin/spasm/asm/assembler.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | write!(output, "{}\n", line.content) [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/bin/spasm/asm/expr.rs:72:28 [INFO] [stderr] | [INFO] [stderr] 72 | StdExprAssembler { symbols: symbols } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [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/bin/spasm/asm/expr.rs:148:75 [INFO] [stderr] | [INFO] [stderr] 148 | addr_dist(from, to).ok_or(ExprAssembleError::TooFar { from: from, to: to, }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `from` [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/bin/spasm/asm/expr.rs:148:87 [INFO] [stderr] | [INFO] [stderr] 148 | addr_dist(from, to).ok_or(ExprAssembleError::TooFar { from: from, to: to, }) [INFO] [stderr] | ^^^^^^ help: replace it with: `to` [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/bin/spasm/asm/full.rs:65:13 [INFO] [stderr] | [INFO] [stderr] 65 | symbols: symbols, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `symbols` [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/bin/spasm/asm/full.rs:78:21 [INFO] [stderr] | [INFO] [stderr] 78 | line: line, base_addr: base_addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:78:33 [INFO] [stderr] | [INFO] [stderr] 78 | line: line, base_addr: base_addr, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_addr` [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/bin/spasm/asm/full.rs:84:25 [INFO] [stderr] | [INFO] [stderr] 84 | line: line, base_addr: base_addr, inst: inst [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:84:37 [INFO] [stderr] | [INFO] [stderr] 84 | line: line, base_addr: base_addr, inst: inst [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_addr` [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/bin/spasm/asm/full.rs:84:59 [INFO] [stderr] | [INFO] [stderr] 84 | line: line, base_addr: base_addr, inst: inst [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `inst` [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/bin/spasm/asm/full.rs:86:61 [INFO] [stderr] | [INFO] [stderr] 86 | Err(e) => Err(FullAssembleError::Expr { line: line, error: e }), [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:93:29 [INFO] [stderr] | [INFO] [stderr] 93 | line: line, base_addr: base_addr, data: rtdata [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/full.rs:93:41 [INFO] [stderr] | [INFO] [stderr] 93 | line: line, base_addr: base_addr, data: rtdata [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `base_addr` [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/bin/spasm/asm/full.rs:97:29 [INFO] [stderr] | [INFO] [stderr] 97 | line: line, error: e, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/inst/full.rs:24:25 [INFO] [stderr] | [INFO] [stderr] 24 | InstAssembler { expr_asm: expr_asm } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `expr_asm` [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/bin/spasm/asm/pre.rs:85:25 [INFO] [stderr] | [INFO] [stderr] 85 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/pre.rs:138:49 [INFO] [stderr] | [INFO] [stderr] 138 | Ok(PreAssembled::Inst { line: line, base_addr: base, inst: inst }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/pre.rs:138:78 [INFO] [stderr] | [INFO] [stderr] 138 | Ok(PreAssembled::Inst { line: line, base_addr: base, inst: inst }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `inst` [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/bin/spasm/asm/pre.rs:158:42 [INFO] [stderr] | [INFO] [stderr] 158 | Ok(PreAssembled::Empty { line: line, base_addr: addr, }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/bin/spasm/asm/pre.rs:167:29 [INFO] [stderr] | [INFO] [stderr] 167 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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: using `println!("")` [INFO] [stderr] --> src/bin/spasm/main.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/cpu/mod.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | mod cpu; pub use self::cpu::*; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/inst/mod.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | mod inst; pub use self::inst::*; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/mem/mod.rs:11:1 [INFO] [stderr] | [INFO] [stderr] 11 | pub mod mem; pub use self::mem::*; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/mem/page.rs:92:13 [INFO] [stderr] | [INFO] [stderr] 92 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/cpu/clock.rs:21:19 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn cycles(&self, n: Cycle) -> Duration { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/exec.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | / match inst { [INFO] [stderr] 26 | | &Inst::Add(dst, src) => exec_add(ctx, dst, src, false), [INFO] [stderr] 27 | | &Inst::Adc(dst, src) => exec_add(ctx, dst, src, true), [INFO] [stderr] 28 | | &Inst::Addi(dst, Immediate(k)) => exec_addi(ctx, dst, k), [INFO] [stderr] ... | [INFO] [stderr] 75 | | &Inst::Di => exec_set_int(ctx, false), [INFO] [stderr] 76 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 25 | match *inst { [INFO] [stderr] 26 | Inst::Add(dst, src) => exec_add(ctx, dst, src, false), [INFO] [stderr] 27 | Inst::Adc(dst, src) => exec_add(ctx, dst, src, true), [INFO] [stderr] 28 | Inst::Addi(dst, Immediate(k)) => exec_addi(ctx, dst, k), [INFO] [stderr] 29 | Inst::Sub(dst, src) => exec_sub(ctx, dst, src, false), [INFO] [stderr] 30 | Inst::Sbc(dst, src) => exec_sub(ctx, dst, src, true), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:93:15 [INFO] [stderr] | [INFO] [stderr] 93 | let lhs = regs.reg(dst) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(regs.reg(dst))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:94:15 [INFO] [stderr] | [INFO] [stderr] 94 | let rhs = src as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(src)` [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 i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:119:15 [INFO] [stderr] | [INFO] [stderr] 119 | let lhs = regs.reg(dst) as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(regs.reg(dst))` [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 i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:120:15 [INFO] [stderr] | [INFO] [stderr] 120 | let rhs = src as i16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `i16::from(src)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:136:15 [INFO] [stderr] | [INFO] [stderr] 136 | let res = logic(val) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `u16::from(logic(val))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:153:15 [INFO] [stderr] | [INFO] [stderr] 153 | let res = logic(lhs, rhs) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(logic(lhs, rhs))` [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 i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:167:15 [INFO] [stderr] | [INFO] [stderr] 167 | let val = regs.reg(dst) as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(regs.reg(dst))` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:181:15 [INFO] [stderr] | [INFO] [stderr] 181 | let val = regs.areg(dst) as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(regs.areg(dst))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:202:28 [INFO] [stderr] | [INFO] [stderr] 202 | regs.st.zero = is_zero(res as u16); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(res)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:203:26 [INFO] [stderr] | [INFO] [stderr] 203 | regs.st.neg = is_neg(res as u16); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(res)` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:264:17 [INFO] [stderr] | [INFO] [stderr] 264 | let addr = (ctx.regs().sp as i32 - 1) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(ctx.regs().sp)` [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 u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:274:22 [INFO] [stderr] | [INFO] [stderr] 274 | ctx.regs().sp = (addr as i32 + 1) as u16; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i32::from(addr)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:295:14 [INFO] [stderr] | [INFO] [stderr] 295 | let pc = ctx.regs().pc as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `i32::from(ctx.regs().pc)` [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 i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:297:38 [INFO] [stderr] | [INFO] [stderr] 297 | let inc = if f(&ctx.regs().st) { offset as i32 } else { 2 }; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i32::from(offset)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:327:14 [INFO] [stderr] | [INFO] [stderr] 327 | let al = ctx.mem().read(sp) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(ctx.mem().read(sp))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:328:14 [INFO] [stderr] | [INFO] [stderr] 328 | let ah = (ctx.mem().read(add(sp, 1)) as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(ctx.mem().read(add(sp, 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: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/exec.rs:348:30 [INFO] [stderr] | [INFO] [stderr] 348 | fn is_zero(n: u16) -> bool { n & 0x00ff == 0 } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `n.trailing_zeros() >= 8` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::verbose_bit_mask)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#verbose_bit_mask [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:351:36 [INFO] [stderr] | [INFO] [stderr] 351 | fn add(n: u16, inc: i16) -> u16 { (n as i32 + inc as i32) as u16 } [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(n)` [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 i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/exec.rs:351:47 [INFO] [stderr] | [INFO] [stderr] 351 | fn add(n: u16, inc: i16) -> u16 { (n as i32 + inc as i32) as u16 } [INFO] [stderr] | ^^^^^^^^^^ help: try: `i32::from(inc)` [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 deriving a `Default` implementation for `cpu::io::Io<'a>` [INFO] [stderr] --> src/cpu/io.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn new() -> Self { Io { devs: HashMap::with_capacity(256) }} [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] 17 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `cpu::reg::Regs` [INFO] [stderr] --> src/cpu/reg.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn new() -> Self { [INFO] [stderr] 42 | | Regs { pc: 0, st: StatusReg::new(), sp: 0xffff, a0: 0, a1: 0, a2: 0, a3: 0, } [INFO] [stderr] 43 | | } [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] 40 | impl Default for cpu::reg::Regs { [INFO] [stderr] 41 | fn default() -> Self { [INFO] [stderr] 42 | Self::new() [INFO] [stderr] 43 | } [INFO] [stderr] 44 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:95:70 [INFO] [stderr] | [INFO] [stderr] 95 | pub fn set_r0(&mut self, n: u8) { self.a0 = (self.a0 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:96:71 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn set_r1(&mut self, n: u8) { self.a0 = (self.a0 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:97:70 [INFO] [stderr] | [INFO] [stderr] 97 | pub fn set_r2(&mut self, n: u8) { self.a1 = (self.a1 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:98:71 [INFO] [stderr] | [INFO] [stderr] 98 | pub fn set_r3(&mut self, n: u8) { self.a1 = (self.a1 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:99:70 [INFO] [stderr] | [INFO] [stderr] 99 | pub fn set_r4(&mut self, n: u8) { self.a2 = (self.a2 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:100:71 [INFO] [stderr] | [INFO] [stderr] 100 | pub fn set_r5(&mut self, n: u8) { self.a2 = (self.a2 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:101:70 [INFO] [stderr] | [INFO] [stderr] 101 | pub fn set_r6(&mut self, n: u8) { self.a3 = (self.a3 & 0xff00) + (n as u16) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/reg.rs:102:71 [INFO] [stderr] | [INFO] [stderr] 102 | pub fn set_r7(&mut self, n: u8) { self.a3 = (self.a3 & 0x00ff) + ((n as u16) << 8) } [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(n)` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/inst.rs:135:9 [INFO] [stderr] | [INFO] [stderr] 135 | / match self { [INFO] [stderr] 136 | | &Inst::Add(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x20), [INFO] [stderr] 137 | | &Inst::Add(ref r1, ref r2) => pack!(w, 0x80, regs r1, r2 in 0x00), [INFO] [stderr] 138 | | &Inst::Adc(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x24), [INFO] [stderr] ... | [INFO] [stderr] 195 | | &Inst::Di => pack!(w, 0x05), [INFO] [stderr] 196 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 135 | match *self { [INFO] [stderr] 136 | Inst::Add(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x20), [INFO] [stderr] 137 | Inst::Add(ref r1, ref r2) => pack!(w, 0x80, regs r1, r2 in 0x00), [INFO] [stderr] 138 | Inst::Adc(ref r1, ref r2) if Self::is_onebyte(r1, r2) => pack!(w, reg r2 in 0x24), [INFO] [stderr] 139 | Inst::Adc(ref r1, ref r2) => pack!(w, 0x81, regs r1, r2 in 0x00), [INFO] [stderr] 140 | Inst::Addi(ref r, Immediate(k)) => pack!(w, reg r in 0x90, byte k), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/inst.rs:271:26 [INFO] [stderr] | [INFO] [stderr] 271 | fn is_onebyte(accum: &Reg, other: &Reg) -> bool { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `Reg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/inst.rs:271:39 [INFO] [stderr] | [INFO] [stderr] 271 | fn is_onebyte(accum: &Reg, other: &Reg) -> bool { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `Reg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(byte & 0x07)` [INFO] [stderr] --> src/inst/inst.rs:284:30 [INFO] [stderr] | [INFO] [stderr] 284 | get!(Reg::decode((byte & 0x07) >> 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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/inst/inst.rs:714:42 [INFO] [stderr] | [INFO] [stderr] 714 | let actual = RuntimeInst::decode(bytes.iter().map(|b| *b)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `bytes.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:20:36 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:20:54 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:23:16 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:23:38 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:33:36 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:33:54 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn range() -> Range { u8::MIN as i64 .. u8::MAX as i64 } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:36:16 [INFO] [stderr] | [INFO] [stderr] 36 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/inst/ops.rs:36:38 [INFO] [stderr] | [INFO] [stderr] 36 | if n < u8::MIN as i64 || n > u8::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/ops.rs:62:19 [INFO] [stderr] | [INFO] [stderr] 62 | pub fn encode(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | / match self { [INFO] [stderr] 64 | | &Reg::R0 => 0x00, [INFO] [stderr] 65 | | &Reg::R1 => 0x01, [INFO] [stderr] 66 | | &Reg::R2 => 0x02, [INFO] [stderr] ... | [INFO] [stderr] 71 | | &Reg::R7 => 0x07, [INFO] [stderr] 72 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 63 | match *self { [INFO] [stderr] 64 | Reg::R0 => 0x00, [INFO] [stderr] 65 | Reg::R1 => 0x01, [INFO] [stderr] 66 | Reg::R2 => 0x02, [INFO] [stderr] 67 | Reg::R3 => 0x03, [INFO] [stderr] 68 | Reg::R4 => 0x04, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &Reg::R0 => write!(fmt, "R0"), [INFO] [stderr] 80 | | &Reg::R1 => write!(fmt, "R1"), [INFO] [stderr] 81 | | &Reg::R2 => write!(fmt, "R2"), [INFO] [stderr] ... | [INFO] [stderr] 86 | | &Reg::R7 => write!(fmt, "R7"), [INFO] [stderr] 87 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | Reg::R0 => write!(fmt, "R0"), [INFO] [stderr] 80 | Reg::R1 => write!(fmt, "R1"), [INFO] [stderr] 81 | Reg::R2 => write!(fmt, "R2"), [INFO] [stderr] 82 | Reg::R3 => write!(fmt, "R3"), [INFO] [stderr] 83 | Reg::R4 => write!(fmt, "R4"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inst/ops.rs:108:19 [INFO] [stderr] | [INFO] [stderr] 108 | pub fn encode(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | / match self { [INFO] [stderr] 110 | | &AddrReg::A0 => 0x00, [INFO] [stderr] 111 | | &AddrReg::A1 => 0x01, [INFO] [stderr] 112 | | &AddrReg::A2 => 0x02, [INFO] [stderr] 113 | | &AddrReg::A3 => 0x03, [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 109 | match *self { [INFO] [stderr] 110 | AddrReg::A0 => 0x00, [INFO] [stderr] 111 | AddrReg::A1 => 0x01, [INFO] [stderr] 112 | AddrReg::A2 => 0x02, [INFO] [stderr] 113 | AddrReg::A3 => 0x03, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/inst/ops.rs:120:9 [INFO] [stderr] | [INFO] [stderr] 120 | / match self { [INFO] [stderr] 121 | | &AddrReg::A0 => write!(fmt, "A0"), [INFO] [stderr] 122 | | &AddrReg::A1 => write!(fmt, "A1"), [INFO] [stderr] 123 | | &AddrReg::A2 => write!(fmt, "A2"), [INFO] [stderr] 124 | | &AddrReg::A3 => write!(fmt, "A3"), [INFO] [stderr] 125 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 120 | match *self { [INFO] [stderr] 121 | AddrReg::A0 => write!(fmt, "A0"), [INFO] [stderr] 122 | AddrReg::A1 => write!(fmt, "A1"), [INFO] [stderr] 123 | AddrReg::A2 => write!(fmt, "A2"), [INFO] [stderr] 124 | AddrReg::A3 => write!(fmt, "A3"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:23:12 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u16::MIN as i64 || n > u16::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i64::from(u16::MIN)` [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:23:35 [INFO] [stderr] | [INFO] [stderr] 23 | if n < u16::MIN as i64 || n > u16::MAX as i64 { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i64::from(u16::MAX)` [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:32:16 [INFO] [stderr] | [INFO] [stderr] 32 | let diff = (to as i64) - (from as i64); [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i64::from(to)` [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 u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mem/addr.rs:32:30 [INFO] [stderr] | [INFO] [stderr] 32 | let diff = (to as i64) - (from as i64); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(from)` [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 loop variable `i` is used to index `bytes` [INFO] [stderr] --> src/mem/mem.rs:23:18 [INFO] [stderr] | [INFO] [stderr] 23 | for i in 0..bytes.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 23 | for (i, ) in bytes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `mem::page::RamPage` [INFO] [stderr] --> src/mem/page.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new() -> RamPage { [INFO] [stderr] 20 | | let mut ram = RamPage { bytes: Vec::with_capacity(PAGE_SIZE) }; [INFO] [stderr] 21 | | unsafe { ram.bytes.set_len(PAGE_SIZE) } [INFO] [stderr] 22 | | ram [INFO] [stderr] 23 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 14 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/bin/spm/machine.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | self.output.write(&buf).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spm/main.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Error::Io(ref e) => write!(fmt, "{}", e), [INFO] [stderr] 32 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Error::Io(ref e) => write!(fmt, "{}", e), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/bin/spm/main.rs:42:5 [INFO] [stderr] | [INFO] [stderr] 42 | / match do_main() { [INFO] [stderr] 43 | | Err(e) => { [INFO] [stderr] 44 | | println!("Error: {}", e); [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | _ => {}, [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 42 | if let Err(e) = do_main() { [INFO] [stderr] 43 | println!("Error: {}", e); [INFO] [stderr] 44 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `simproc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:70:40 [INFO] [stderr] | [INFO] [stderr] 70 | &FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:70:49 [INFO] [stderr] | [INFO] [stderr] 70 | &FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `Inst { ref inst, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:73:40 [INFO] [stderr] | [INFO] [stderr] 73 | &FullAssembled::Data { line: _, base_addr: _, ref data } => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:73:49 [INFO] [stderr] | [INFO] [stderr] 73 | &FullAssembled::Data { line: _, base_addr: _, ref data } => { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `Data { ref data, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/bin/spm/machine.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | self.output.write(&buf).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spm/main.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Error::Io(ref e) => write!(fmt, "{}", e), [INFO] [stderr] 32 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Error::Io(ref e) => write!(fmt, "{}", e), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/bin/spm/main.rs:42:5 [INFO] [stderr] | [INFO] [stderr] 42 | / match do_main() { [INFO] [stderr] 43 | | Err(e) => { [INFO] [stderr] 44 | | println!("Error: {}", e); [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | _ => {}, [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 42 | if let Err(e) = do_main() { [INFO] [stderr] 43 | println!("Error: {}", e); [INFO] [stderr] 44 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `simproc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:70:40 [INFO] [stderr] | [INFO] [stderr] 70 | &FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unneeded_field_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:70:49 [INFO] [stderr] | [INFO] [stderr] 70 | &FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `Inst { ref inst, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:73:40 [INFO] [stderr] | [INFO] [stderr] 73 | &FullAssembled::Data { line: _, base_addr: _, ref data } => { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: You matched a field with a wildcard pattern. Consider using `..` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:73:49 [INFO] [stderr] | [INFO] [stderr] 73 | &FullAssembled::Data { line: _, base_addr: _, ref data } => { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Try with `Data { ref data, .. }` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unneeded_field_pattern [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/bin/spasm/asm/dir.rs:86:58 [INFO] [stderr] | [INFO] [stderr] 86 | pre_assemble_direct("org", vec![Expr::Number(0x100000)]), [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0010_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: long literal lacking separators [INFO] [stderr] --> src/bin/spasm/asm/dir.rs:87:53 [INFO] [stderr] | [INFO] [stderr] 87 | Err(DirectAssembleError::InvalidAddress(0x100000))); [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/bin/spasm/asm/expr.rs:277:46 [INFO] [stderr] | [INFO] [stderr] 277 | symbols.insert("toobig".to_string(), 0x100000); [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/bin/spasm/asm/expr.rs:290:75 [INFO] [stderr] | [INFO] [stderr] 290 | Err(ExprAssembleError::OutOfRange { range: ADDR_RANGE, given: 0x100000, })); [INFO] [stderr] | ^^^^^^^^ help: consider: `0x0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &Token::AddrReg(reg) => write!(fmt, "address register {}", reg), [INFO] [stderr] 60 | | &Token::Colon => write!(fmt, ":"), [INFO] [stderr] 61 | | &Token::Comma => write!(fmt, ","), [INFO] [stderr] ... | [INFO] [stderr] 69 | | &Token::Unknown(ref token) => write!(fmt, "unknown token `{}`", token), [INFO] [stderr] 70 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 58 | match *self { [INFO] [stderr] 59 | Token::AddrReg(reg) => write!(fmt, "address register {}", reg), [INFO] [stderr] 60 | Token::Colon => write!(fmt, ":"), [INFO] [stderr] 61 | Token::Comma => write!(fmt, ","), [INFO] [stderr] 62 | Token::Direct(ref name) => write!(fmt, "directive {}", name), [INFO] [stderr] 63 | Token::Eol(_) => write!(fmt, "end of line"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:149:20 [INFO] [stderr] | [INFO] [stderr] 149 | fn to_addr_reg(r: &str) -> Option { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:159:15 [INFO] [stderr] | [INFO] [stderr] 159 | fn to_reg(r: &str) -> Option { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:252:44 [INFO] [stderr] | [INFO] [stderr] 252 | Self::to_reg(&scanned).map(|r| Token::Reg(r)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Token::Reg` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:253:65 [INFO] [stderr] | [INFO] [stderr] 253 | .or_else(|| Self::to_addr_reg(&scanned).map(|r| Token::AddrReg(r))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Token::AddrReg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/parser.rs:35:6 [INFO] [stderr] | [INFO] [stderr] 35 | match self { [INFO] [stderr] | _________^ [INFO] [stderr] 36 | | &SyntaxError::UnexpectedToken(ref line, ref tok) => [INFO] [stderr] 37 | | write!(fmt, "in line {}: unexpected {}\n\t{}", line.row, tok, line.content), [INFO] [stderr] 38 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 35 | match *self { [INFO] [stderr] 36 | SyntaxError::UnexpectedToken(ref line, ref tok) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/data.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | / match self { [INFO] [stderr] 21 | | &DataSize::Byte => write!(fmt, "byte"), [INFO] [stderr] 22 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 20 | match *self { [INFO] [stderr] 21 | DataSize::Byte => write!(fmt, "byte"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/data.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | / match self { [INFO] [stderr] 54 | | &DataAssemblyError::Overflow { ref expected, given } => [INFO] [stderr] 55 | | write!(fmt, "data overflow in {} (expected {} value)", given, expected), [INFO] [stderr] 56 | | &DataAssemblyError::TypeMismatch { ref given } => [INFO] [stderr] ... | [INFO] [stderr] 59 | | write!(fmt, "{} is undefined", symbol), [INFO] [stderr] 60 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 53 | match *self { [INFO] [stderr] 54 | DataAssemblyError::Overflow { ref expected, given } => [INFO] [stderr] 55 | write!(fmt, "data overflow in {} (expected {} value)", given, expected), [INFO] [stderr] 56 | DataAssemblyError::TypeMismatch { ref given } => [INFO] [stderr] 57 | write!(fmt, "type mismatch in {:?}", given), [INFO] [stderr] 58 | DataAssemblyError::Undefined(ref symbol) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/data.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | / match size { [INFO] [stderr] 72 | | &DataSize::Byte => { [INFO] [stderr] 73 | | let byte = try!(to_u8(n).ok_or(DataAssemblyError::Overflow { [INFO] [stderr] 74 | | expected: DataSize::Byte, [INFO] [stderr] ... | [INFO] [stderr] 79 | | }, [INFO] [stderr] 80 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 71 | match *size { [INFO] [stderr] 72 | DataSize::Byte => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/bin/spasm/asm/data.rs:88:51 [INFO] [stderr] | [INFO] [stderr] 88 | let n = *try!(symbols.get(id).ok_or(DataAssemblyError::Undefined(id.clone()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| DataAssemblyError::Undefined(id.clone()))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/data.rs:93:63 [INFO] [stderr] | [INFO] [stderr] 93 | try!(full_assemble_number(&self.size, c as i64, &mut result)); [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(c)` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / pub fn code<'a>(&'a self) -> Code<'a> { [INFO] [stderr] 60 | | Code { results: self.results.iter() } [INFO] [stderr] 61 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / pub fn errors<'a>(&'a self) -> Errors<'a> { [INFO] [stderr] 64 | | Errors { results: self.results.iter() } [INFO] [stderr] 65 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | / match c { [INFO] [stderr] 70 | | &FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] 71 | | try!(inst.encode(output)); [INFO] [stderr] 72 | | }, [INFO] [stderr] ... | [INFO] [stderr] 76 | | _ => {}, [INFO] [stderr] 77 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 69 | match *c { [INFO] [stderr] 70 | FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] 71 | try!(inst.encode(output)); [INFO] [stderr] 72 | }, [INFO] [stderr] 73 | FullAssembled::Data { line: _, base_addr: _, ref data } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:74:21 [INFO] [stderr] | [INFO] [stderr] 74 | try!(output.write(data)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | / match c { [INFO] [stderr] 85 | | &FullAssembled::Empty { ref line, ref base_addr } => { [INFO] [stderr] 86 | | try!(Self::dump_text_line(base_addr, &[], line, output)); [INFO] [stderr] 87 | | }, [INFO] [stderr] ... | [INFO] [stderr] 95 | | }, [INFO] [stderr] 96 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 84 | match *c { [INFO] [stderr] 85 | FullAssembled::Empty { ref line, ref base_addr } => { [INFO] [stderr] 86 | try!(Self::dump_text_line(base_addr, &[], line, output)); [INFO] [stderr] 87 | }, [INFO] [stderr] 88 | FullAssembled::Inst { ref line, ref base_addr, ref inst } => { [INFO] [stderr] 89 | let mut buff: Vec = Vec::new(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:102:15 [INFO] [stderr] | [INFO] [stderr] 102 | addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/dir.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &DirectAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 33 | | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 34 | | &DirectAssembleError::InvalidAddress(addr) => [INFO] [stderr] ... | [INFO] [stderr] 39 | | write!(fmt, "unknown directive .{}", direct), [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 31 | match *self { [INFO] [stderr] 32 | DirectAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 33 | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 34 | DirectAssembleError::InvalidAddress(addr) => [INFO] [stderr] 35 | write!(fmt, "value {} is not a valid address", addr), [INFO] [stderr] 36 | DirectAssembleError::TypeMismatch { ref expected } => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/bin/spasm/asm/dir.rs:66:18 [INFO] [stderr] | [INFO] [stderr] 66 | .ok_or(DirectAssembleError::InvalidAddress(n)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| DirectAssembleError::InvalidAddress(n))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/expr.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match self { [INFO] [stderr] 44 | | &ExprAssembleError::TypeMismatch { ref expected, ref given } => [INFO] [stderr] 45 | | write!(fmt, "type mismatch in {:?} ({} expected)", given, expected), [INFO] [stderr] 46 | | &ExprAssembleError::Undefined { ref symbol } => [INFO] [stderr] ... | [INFO] [stderr] 52 | | given, range.start, range.end), [INFO] [stderr] 53 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 43 | match *self { [INFO] [stderr] 44 | ExprAssembleError::TypeMismatch { ref expected, ref given } => [INFO] [stderr] 45 | write!(fmt, "type mismatch in {:?} ({} expected)", given, expected), [INFO] [stderr] 46 | ExprAssembleError::Undefined { ref symbol } => [INFO] [stderr] 47 | write!(fmt, "'{}' is undefined", symbol), [INFO] [stderr] 48 | ExprAssembleError::TooFar { from, to } => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/full.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / match self { [INFO] [stderr] 38 | | &FullAssembleError::Data { ref line, ref error } => [INFO] [stderr] 39 | | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 40 | | &FullAssembleError::Pre(ref error) => write!(fmt, "{}", error), [INFO] [stderr] 41 | | &FullAssembleError::Expr { ref line, ref error } => [INFO] [stderr] 42 | | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 43 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 37 | match *self { [INFO] [stderr] 38 | FullAssembleError::Data { ref line, ref error } => [INFO] [stderr] 39 | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 40 | FullAssembleError::Pre(ref error) => write!(fmt, "{}", error), [INFO] [stderr] 41 | FullAssembleError::Expr { ref line, ref error } => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/inst/len.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | / match inst { [INFO] [stderr] 15 | | &Inst::Add(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] 16 | | &Inst::Add(_, _) => 2, [INFO] [stderr] 17 | | &Inst::Adc(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] ... | [INFO] [stderr] 74 | | &Inst::Di => 1, [INFO] [stderr] 75 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 14 | match *inst { [INFO] [stderr] 15 | Inst::Add(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] 16 | Inst::Add(_, _) => 2, [INFO] [stderr] 17 | Inst::Adc(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] 18 | Inst::Adc(_, _) => 2, [INFO] [stderr] 19 | Inst::Addi(_, _) => 2, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &MnemoAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 26 | | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 27 | | &MnemoAssembleError::UnknownMnemo(ref mnemo) => [INFO] [stderr] 28 | | write!(fmt, "unknown mnemo {}", mnemo), [INFO] [stderr] 29 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | MnemoAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 26 | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 27 | MnemoAssembleError::UnknownMnemo(ref mnemo) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:92:17 [INFO] [stderr] | [INFO] [stderr] 92 | fn is_reg(args: &ExprList, i: usize) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:99:18 [INFO] [stderr] | [INFO] [stderr] 99 | fn is_areg(args: &ExprList, i: usize) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:110:8 [INFO] [stderr] | [INFO] [stderr] 110 | if args.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!args.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/number.rs:12:10 [INFO] [stderr] | [INFO] [stderr] 12 | if n <= u8::MAX as i64 && n >= u8::MIN as i64 { Some(n as u8) } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/number.rs:12:33 [INFO] [stderr] | [INFO] [stderr] 12 | if n <= u8::MAX as i64 && n >= u8::MIN as i64 { Some(n as u8) } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | / match self { [INFO] [stderr] 43 | | &PreAssembleError::Direct(ref line, ref error) => [INFO] [stderr] 44 | | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 45 | | &PreAssembleError::DuplicatedLabel(ref line, ref label) => [INFO] [stderr] ... | [INFO] [stderr] 53 | | &PreAssembleError::Syntax(ref error) => write!(fmt, "{}", error), [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 42 | match *self { [INFO] [stderr] 43 | PreAssembleError::Direct(ref line, ref error) => [INFO] [stderr] 44 | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 45 | PreAssembleError::DuplicatedLabel(ref line, ref label) => [INFO] [stderr] 46 | write!(fmt, "in line {}: label {} is duplicated\n\t{}", [INFO] [stderr] 47 | line.row, label, line.content), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:118:31 [INFO] [stderr] | [INFO] [stderr] 118 | symbols.insert(l, memptr as i64); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(memptr)` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:179:23 [INFO] [stderr] | [INFO] [stderr] 179 | fn data_len(args: &ExprList, unit_size: usize) -> usize { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:182:13 [INFO] [stderr] | [INFO] [stderr] 182 | / match a { [INFO] [stderr] 183 | | &Expr::Number(_) | &Expr::Ident(_) => { size += unit_size }, [INFO] [stderr] 184 | | &Expr::String(ref s) => { size += unit_size * s.len() }, [INFO] [stderr] 185 | | _ => {}, [INFO] [stderr] 186 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 182 | match *a { [INFO] [stderr] 183 | Expr::Number(_) | Expr::Ident(_) => { size += unit_size }, [INFO] [stderr] 184 | Expr::String(ref s) => { size += unit_size * s.len() }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/main.rs:46:53 [INFO] [stderr] | [INFO] [stderr] 46 | let chars = file.bytes().map(|b| char::from_u32(b.ok().unwrap() as u32).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b.ok().unwrap())` [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `simproc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &Token::AddrReg(reg) => write!(fmt, "address register {}", reg), [INFO] [stderr] 60 | | &Token::Colon => write!(fmt, ":"), [INFO] [stderr] 61 | | &Token::Comma => write!(fmt, ","), [INFO] [stderr] ... | [INFO] [stderr] 69 | | &Token::Unknown(ref token) => write!(fmt, "unknown token `{}`", token), [INFO] [stderr] 70 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 58 | match *self { [INFO] [stderr] 59 | Token::AddrReg(reg) => write!(fmt, "address register {}", reg), [INFO] [stderr] 60 | Token::Colon => write!(fmt, ":"), [INFO] [stderr] 61 | Token::Comma => write!(fmt, ","), [INFO] [stderr] 62 | Token::Direct(ref name) => write!(fmt, "directive {}", name), [INFO] [stderr] 63 | Token::Eol(_) => write!(fmt, "end of line"), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:149:20 [INFO] [stderr] | [INFO] [stderr] 149 | fn to_addr_reg(r: &str) -> Option { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:159:15 [INFO] [stderr] | [INFO] [stderr] 159 | fn to_reg(r: &str) -> Option { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:252:44 [INFO] [stderr] | [INFO] [stderr] 252 | Self::to_reg(&scanned).map(|r| Token::Reg(r)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Token::Reg` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/bin/spasm/asm/lexer.rs:253:65 [INFO] [stderr] | [INFO] [stderr] 253 | .or_else(|| Self::to_addr_reg(&scanned).map(|r| Token::AddrReg(r))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Token::AddrReg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/parser.rs:35:6 [INFO] [stderr] | [INFO] [stderr] 35 | match self { [INFO] [stderr] | _________^ [INFO] [stderr] 36 | | &SyntaxError::UnexpectedToken(ref line, ref tok) => [INFO] [stderr] 37 | | write!(fmt, "in line {}: unexpected {}\n\t{}", line.row, tok, line.content), [INFO] [stderr] 38 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 35 | match *self { [INFO] [stderr] 36 | SyntaxError::UnexpectedToken(ref line, ref tok) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/data.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | / match self { [INFO] [stderr] 21 | | &DataSize::Byte => write!(fmt, "byte"), [INFO] [stderr] 22 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 20 | match *self { [INFO] [stderr] 21 | DataSize::Byte => write!(fmt, "byte"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/data.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | / match self { [INFO] [stderr] 54 | | &DataAssemblyError::Overflow { ref expected, given } => [INFO] [stderr] 55 | | write!(fmt, "data overflow in {} (expected {} value)", given, expected), [INFO] [stderr] 56 | | &DataAssemblyError::TypeMismatch { ref given } => [INFO] [stderr] ... | [INFO] [stderr] 59 | | write!(fmt, "{} is undefined", symbol), [INFO] [stderr] 60 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 53 | match *self { [INFO] [stderr] 54 | DataAssemblyError::Overflow { ref expected, given } => [INFO] [stderr] 55 | write!(fmt, "data overflow in {} (expected {} value)", given, expected), [INFO] [stderr] 56 | DataAssemblyError::TypeMismatch { ref given } => [INFO] [stderr] 57 | write!(fmt, "type mismatch in {:?}", given), [INFO] [stderr] 58 | DataAssemblyError::Undefined(ref symbol) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/data.rs:71:13 [INFO] [stderr] | [INFO] [stderr] 71 | / match size { [INFO] [stderr] 72 | | &DataSize::Byte => { [INFO] [stderr] 73 | | let byte = try!(to_u8(n).ok_or(DataAssemblyError::Overflow { [INFO] [stderr] 74 | | expected: DataSize::Byte, [INFO] [stderr] ... | [INFO] [stderr] 79 | | }, [INFO] [stderr] 80 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 71 | match *size { [INFO] [stderr] 72 | DataSize::Byte => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/bin/spasm/asm/data.rs:88:51 [INFO] [stderr] | [INFO] [stderr] 88 | let n = *try!(symbols.get(id).ok_or(DataAssemblyError::Undefined(id.clone()))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| DataAssemblyError::Undefined(id.clone()))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/data.rs:93:63 [INFO] [stderr] | [INFO] [stderr] 93 | try!(full_assemble_number(&self.size, c as i64, &mut result)); [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(c)` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 59 | / pub fn code<'a>(&'a self) -> Code<'a> { [INFO] [stderr] 60 | | Code { results: self.results.iter() } [INFO] [stderr] 61 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / pub fn errors<'a>(&'a self) -> Errors<'a> { [INFO] [stderr] 64 | | Errors { results: self.results.iter() } [INFO] [stderr] 65 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | / match c { [INFO] [stderr] 70 | | &FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] 71 | | try!(inst.encode(output)); [INFO] [stderr] 72 | | }, [INFO] [stderr] ... | [INFO] [stderr] 76 | | _ => {}, [INFO] [stderr] 77 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 69 | match *c { [INFO] [stderr] 70 | FullAssembled::Inst { line: _, base_addr: _, ref inst } => { [INFO] [stderr] 71 | try!(inst.encode(output)); [INFO] [stderr] 72 | }, [INFO] [stderr] 73 | FullAssembled::Data { line: _, base_addr: _, ref data } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:74:21 [INFO] [stderr] | [INFO] [stderr] 74 | try!(output.write(data)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | / match c { [INFO] [stderr] 85 | | &FullAssembled::Empty { ref line, ref base_addr } => { [INFO] [stderr] 86 | | try!(Self::dump_text_line(base_addr, &[], line, output)); [INFO] [stderr] 87 | | }, [INFO] [stderr] ... | [INFO] [stderr] 95 | | }, [INFO] [stderr] 96 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 84 | match *c { [INFO] [stderr] 85 | FullAssembled::Empty { ref line, ref base_addr } => { [INFO] [stderr] 86 | try!(Self::dump_text_line(base_addr, &[], line, output)); [INFO] [stderr] 87 | }, [INFO] [stderr] 88 | FullAssembled::Inst { ref line, ref base_addr, ref inst } => { [INFO] [stderr] 89 | let mut buff: Vec = Vec::new(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/bin/spasm/asm/assembler.rs:102:15 [INFO] [stderr] | [INFO] [stderr] 102 | addr: &Addr, [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `Addr` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/dir.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &DirectAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 33 | | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 34 | | &DirectAssembleError::InvalidAddress(addr) => [INFO] [stderr] ... | [INFO] [stderr] 39 | | write!(fmt, "unknown directive .{}", direct), [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 31 | match *self { [INFO] [stderr] 32 | DirectAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 33 | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 34 | DirectAssembleError::InvalidAddress(addr) => [INFO] [stderr] 35 | write!(fmt, "value {} is not a valid address", addr), [INFO] [stderr] 36 | DirectAssembleError::TypeMismatch { ref expected } => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/bin/spasm/asm/dir.rs:66:18 [INFO] [stderr] | [INFO] [stderr] 66 | .ok_or(DirectAssembleError::InvalidAddress(n)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| DirectAssembleError::InvalidAddress(n))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/expr.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match self { [INFO] [stderr] 44 | | &ExprAssembleError::TypeMismatch { ref expected, ref given } => [INFO] [stderr] 45 | | write!(fmt, "type mismatch in {:?} ({} expected)", given, expected), [INFO] [stderr] 46 | | &ExprAssembleError::Undefined { ref symbol } => [INFO] [stderr] ... | [INFO] [stderr] 52 | | given, range.start, range.end), [INFO] [stderr] 53 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 43 | match *self { [INFO] [stderr] 44 | ExprAssembleError::TypeMismatch { ref expected, ref given } => [INFO] [stderr] 45 | write!(fmt, "type mismatch in {:?} ({} expected)", given, expected), [INFO] [stderr] 46 | ExprAssembleError::Undefined { ref symbol } => [INFO] [stderr] 47 | write!(fmt, "'{}' is undefined", symbol), [INFO] [stderr] 48 | ExprAssembleError::TooFar { from, to } => [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/full.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / match self { [INFO] [stderr] 38 | | &FullAssembleError::Data { ref line, ref error } => [INFO] [stderr] 39 | | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 40 | | &FullAssembleError::Pre(ref error) => write!(fmt, "{}", error), [INFO] [stderr] 41 | | &FullAssembleError::Expr { ref line, ref error } => [INFO] [stderr] 42 | | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 43 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 37 | match *self { [INFO] [stderr] 38 | FullAssembleError::Data { ref line, ref error } => [INFO] [stderr] 39 | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 40 | FullAssembleError::Pre(ref error) => write!(fmt, "{}", error), [INFO] [stderr] 41 | FullAssembleError::Expr { ref line, ref error } => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/inst/len.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | / match inst { [INFO] [stderr] 15 | | &Inst::Add(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] 16 | | &Inst::Add(_, _) => 2, [INFO] [stderr] 17 | | &Inst::Adc(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] ... | [INFO] [stderr] 74 | | &Inst::Di => 1, [INFO] [stderr] 75 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 14 | match *inst { [INFO] [stderr] 15 | Inst::Add(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] 16 | Inst::Add(_, _) => 2, [INFO] [stderr] 17 | Inst::Adc(Expr::Reg(Reg::R0), Expr::Reg(src)) if src.encode() < 4 => 1, [INFO] [stderr] 18 | Inst::Adc(_, _) => 2, [INFO] [stderr] 19 | Inst::Addi(_, _) => 2, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &MnemoAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 26 | | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 27 | | &MnemoAssembleError::UnknownMnemo(ref mnemo) => [INFO] [stderr] 28 | | write!(fmt, "unknown mnemo {}", mnemo), [INFO] [stderr] 29 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | MnemoAssembleError::BadArgumentCount { expected, given } => [INFO] [stderr] 26 | write!(fmt, "expected {} arguments, {} given", expected, given), [INFO] [stderr] 27 | MnemoAssembleError::UnknownMnemo(ref mnemo) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:92:17 [INFO] [stderr] | [INFO] [stderr] 92 | fn is_reg(args: &ExprList, i: usize) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:99:18 [INFO] [stderr] | [INFO] [stderr] 99 | fn is_areg(args: &ExprList, i: usize) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/bin/spasm/asm/inst/pre.rs:110:8 [INFO] [stderr] | [INFO] [stderr] 110 | if args.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!args.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/number.rs:12:10 [INFO] [stderr] | [INFO] [stderr] 12 | if n <= u8::MAX as i64 && n >= u8::MIN as i64 { Some(n as u8) } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MAX)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/number.rs:12:33 [INFO] [stderr] | [INFO] [stderr] 12 | if n <= u8::MAX as i64 && n >= u8::MIN as i64 { Some(n as u8) } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i64::from(u8::MIN)` [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 i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/number.rs:25:15 [INFO] [stderr] | [INFO] [stderr] 25 | Some(c) => (c as i64) == n, [INFO] [stderr] | ^^^^^^^^^^ help: try: `i64::from(c)` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | / match self { [INFO] [stderr] 43 | | &PreAssembleError::Direct(ref line, ref error) => [INFO] [stderr] 44 | | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 45 | | &PreAssembleError::DuplicatedLabel(ref line, ref label) => [INFO] [stderr] ... | [INFO] [stderr] 53 | | &PreAssembleError::Syntax(ref error) => write!(fmt, "{}", error), [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 42 | match *self { [INFO] [stderr] 43 | PreAssembleError::Direct(ref line, ref error) => [INFO] [stderr] 44 | write!(fmt, "in line {}: {}\n\t{}", line.row, error, line.content), [INFO] [stderr] 45 | PreAssembleError::DuplicatedLabel(ref line, ref label) => [INFO] [stderr] 46 | write!(fmt, "in line {}: label {} is duplicated\n\t{}", [INFO] [stderr] 47 | line.row, label, line.content), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:118:31 [INFO] [stderr] | [INFO] [stderr] 118 | symbols.insert(l, memptr as i64); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i64::from(memptr)` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:179:23 [INFO] [stderr] | [INFO] [stderr] 179 | fn data_len(args: &ExprList, unit_size: usize) -> usize { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bin/spasm/asm/pre.rs:182:13 [INFO] [stderr] | [INFO] [stderr] 182 | / match a { [INFO] [stderr] 183 | | &Expr::Number(_) | &Expr::Ident(_) => { size += unit_size }, [INFO] [stderr] 184 | | &Expr::String(ref s) => { size += unit_size * s.len() }, [INFO] [stderr] 185 | | _ => {}, [INFO] [stderr] 186 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 182 | match *a { [INFO] [stderr] 183 | Expr::Number(_) | Expr::Ident(_) => { size += unit_size }, [INFO] [stderr] 184 | Expr::String(ref s) => { size += unit_size * s.len() }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/bin/spasm/main.rs:46:53 [INFO] [stderr] | [INFO] [stderr] 46 | let chars = file.bytes().map(|b| char::from_u32(b.ok().unwrap() as u32).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(b.ok().unwrap())` [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `simproc`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "7a56ac456cae5468175d08860e1b7f85e4046e66d2936eab2fd8d69b79a4f633"` [INFO] running `"docker" "rm" "-f" "7a56ac456cae5468175d08860e1b7f85e4046e66d2936eab2fd8d69b79a4f633"` [INFO] [stdout] 7a56ac456cae5468175d08860e1b7f85e4046e66d2936eab2fd8d69b79a4f633