[INFO] crate rs6502 0.3.4 is already in cache [INFO] extracting crate rs6502 0.3.4 into work/ex/clippy-test-run/sources/stable/reg/rs6502/0.3.4 [INFO] extracting crate rs6502 0.3.4 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rs6502/0.3.4 [INFO] validating manifest of rs6502-0.3.4 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 rs6502-0.3.4 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 rs6502-0.3.4 [INFO] finished frobbing rs6502-0.3.4 [INFO] frobbed toml for rs6502-0.3.4 written to work/ex/clippy-test-run/sources/stable/reg/rs6502/0.3.4/Cargo.toml [INFO] started frobbing rs6502-0.3.4 [INFO] finished frobbing rs6502-0.3.4 [INFO] frobbed toml for rs6502-0.3.4 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rs6502/0.3.4/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 rs6502-0.3.4 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rs6502/0.3.4:/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 -Dclippy::into_iter_on_array" "-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] 21b28bdbfb678011e9c500e7c48fad5e9d6ad38f9e2af443382f971cf0137273 [INFO] running `"docker" "start" "-a" "21b28bdbfb678011e9c500e7c48fad5e9d6ad38f9e2af443382f971cf0137273"` [INFO] [stderr] Checking rs6502 v0.3.4 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cpu/cpu_error.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [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/cpu_error.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `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/cpu/cpu_error.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [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/cpu_error.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `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: module has the same name as its containing module [INFO] [stderr] --> src/assembler/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | mod assembler; [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: unused import: `OpCode` [INFO] [stderr] --> src/assembler/assembler.rs:7:33 [INFO] [stderr] | [INFO] [stderr] 7 | use ::opcodes::{AddressingMode, OpCode}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `LexerToken` [INFO] [stderr] --> src/assembler/assembler.rs:10:24 [INFO] [stderr] | [INFO] [stderr] 10 | use assembler::token::{LexerToken, ParserToken}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AddressingMode` [INFO] [stderr] --> src/assembler/token.rs:1:17 [INFO] [stderr] | [INFO] [stderr] 1 | use ::opcodes::{AddressingMode, OpCode}; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `::opcodes::OpCode` [INFO] [stderr] --> src/assembler/lexer.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use ::opcodes::OpCode; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/assembler/lexer.rs:307:20 [INFO] [stderr] | [INFO] [stderr] 307 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 308 | | if !peeker.peek().unwrap().is_whitespace() { [INFO] [stderr] 309 | | break; [INFO] [stderr] 310 | | } else { [INFO] [stderr] 311 | | self.advance(&mut peeker); [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 307 | } else if !peeker.peek().unwrap().is_whitespace() { [INFO] [stderr] 308 | break; [INFO] [stderr] 309 | } else { [INFO] [stderr] 310 | self.advance(&mut peeker); [INFO] [stderr] 311 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/assembler/parser.rs:302:36 [INFO] [stderr] | [INFO] [stderr] 302 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 303 | | if addressing_mode == AddressingMode::ZeroPage { [INFO] [stderr] 304 | | AddressingMode::ZeroPageY [INFO] [stderr] 305 | | } else { [INFO] [stderr] 306 | | AddressingMode::AbsoluteY [INFO] [stderr] 307 | | } [INFO] [stderr] 308 | | }; [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 302 | } else if addressing_mode == AddressingMode::ZeroPage { [INFO] [stderr] 303 | AddressingMode::ZeroPageY [INFO] [stderr] 304 | } else { [INFO] [stderr] 305 | AddressingMode::AbsoluteY [INFO] [stderr] 306 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/assembler/parser.rs:571:9 [INFO] [stderr] | [INFO] [stderr] 571 | immediate [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/assembler/parser.rs:569:25 [INFO] [stderr] | [INFO] [stderr] 569 | let immediate = u8::from_str_radix(&value[..], base).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/disassembler.rs:226:24 [INFO] [stderr] | [INFO] [stderr] 226 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 227 | | if self.disable_opcodes { [INFO] [stderr] 228 | | format!("{:04X} {}{}\n", [INFO] [stderr] 229 | | i + self.code_offset as usize, [INFO] [stderr] ... | [INFO] [stderr] 238 | | } [INFO] [stderr] 239 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 226 | } else if self.disable_opcodes { [INFO] [stderr] 227 | format!("{:04X} {}{}\n", [INFO] [stderr] 228 | i + self.code_offset as usize, [INFO] [stderr] 229 | opcode.mnemonic, [INFO] [stderr] 230 | val.1) [INFO] [stderr] 231 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/cpu/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | mod cpu; [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: unused import: `AddressingMode` [INFO] [stderr] --> src/cpu/cpu.rs:3:17 [INFO] [stderr] | [INFO] [stderr] 3 | use ::opcodes::{AddressingMode, OpCode}; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/assembler/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | mod assembler; [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: unused import: `OpCode` [INFO] [stderr] --> src/assembler/assembler.rs:7:33 [INFO] [stderr] | [INFO] [stderr] 7 | use ::opcodes::{AddressingMode, OpCode}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `LexerToken` [INFO] [stderr] --> src/assembler/assembler.rs:10:24 [INFO] [stderr] | [INFO] [stderr] 10 | use assembler::token::{LexerToken, ParserToken}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AddressingMode` [INFO] [stderr] --> src/assembler/token.rs:1:17 [INFO] [stderr] | [INFO] [stderr] 1 | use ::opcodes::{AddressingMode, OpCode}; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `::opcodes::OpCode` [INFO] [stderr] --> src/assembler/lexer.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use ::opcodes::OpCode; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/assembler/lexer.rs:307:20 [INFO] [stderr] | [INFO] [stderr] 307 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 308 | | if !peeker.peek().unwrap().is_whitespace() { [INFO] [stderr] 309 | | break; [INFO] [stderr] 310 | | } else { [INFO] [stderr] 311 | | self.advance(&mut peeker); [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 307 | } else if !peeker.peek().unwrap().is_whitespace() { [INFO] [stderr] 308 | break; [INFO] [stderr] 309 | } else { [INFO] [stderr] 310 | self.advance(&mut peeker); [INFO] [stderr] 311 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/assembler/parser.rs:302:36 [INFO] [stderr] | [INFO] [stderr] 302 | } else { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 303 | | if addressing_mode == AddressingMode::ZeroPage { [INFO] [stderr] 304 | | AddressingMode::ZeroPageY [INFO] [stderr] 305 | | } else { [INFO] [stderr] 306 | | AddressingMode::AbsoluteY [INFO] [stderr] 307 | | } [INFO] [stderr] 308 | | }; [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 302 | } else if addressing_mode == AddressingMode::ZeroPage { [INFO] [stderr] 303 | AddressingMode::ZeroPageY [INFO] [stderr] 304 | } else { [INFO] [stderr] 305 | AddressingMode::AbsoluteY [INFO] [stderr] 306 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/assembler/parser.rs:571:9 [INFO] [stderr] | [INFO] [stderr] 571 | immediate [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/assembler/parser.rs:569:25 [INFO] [stderr] | [INFO] [stderr] 569 | let immediate = u8::from_str_radix(&value[..], base).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `ImmediateBase` [INFO] [stderr] --> src/assembler/parser.rs:610:30 [INFO] [stderr] | [INFO] [stderr] 610 | use ::assembler::token::{ImmediateBase, LexerToken, ParserToken}; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/disassembler.rs:226:24 [INFO] [stderr] | [INFO] [stderr] 226 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 227 | | if self.disable_opcodes { [INFO] [stderr] 228 | | format!("{:04X} {}{}\n", [INFO] [stderr] 229 | | i + self.code_offset as usize, [INFO] [stderr] ... | [INFO] [stderr] 238 | | } [INFO] [stderr] 239 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 226 | } else if self.disable_opcodes { [INFO] [stderr] 227 | format!("{:04X} {}{}\n", [INFO] [stderr] 228 | i + self.code_offset as usize, [INFO] [stderr] 229 | opcode.mnemonic, [INFO] [stderr] 230 | val.1) [INFO] [stderr] 231 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/cpu/mod.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | mod cpu; [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: unused import: `AddressingMode` [INFO] [stderr] --> src/cpu/cpu.rs:3:17 [INFO] [stderr] | [INFO] [stderr] 3 | use ::opcodes::{AddressingMode, OpCode}; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/assembler/parser.rs:327:21 [INFO] [stderr] | [INFO] [stderr] 327 | let next = *peeker.peek().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/assembler/parser.rs:490:9 [INFO] [stderr] | [INFO] [stderr] 490 | unreachable!(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [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: variable `last_addressing_mode` is assigned to, but never used [INFO] [stderr] --> src/assembler/assembler.rs:181:17 [INFO] [stderr] | [INFO] [stderr] 181 | let mut last_addressing_mode = AddressingMode::Absolute; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] = note: consider using `_last_addressing_mode` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `last_addressing_mode` is never read [INFO] [stderr] --> src/assembler/assembler.rs:192:17 [INFO] [stderr] | [INFO] [stderr] 192 | last_addressing_mode = opcode.mode; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `added_label` [INFO] [stderr] --> src/assembler/parser.rs:94:21 [INFO] [stderr] | [INFO] [stderr] 94 | let mut added_label = false; [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_added_label` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `opcode` [INFO] [stderr] --> src/assembler/parser.rs:192:21 [INFO] [stderr] | [INFO] [stderr] 192 | if let Some(opcode) = OpCode::from_mnemonic(mnemonic) { [INFO] [stderr] | ^^^^^^ help: consider using `_opcode` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `next` [INFO] [stderr] --> src/assembler/parser.rs:327:25 [INFO] [stderr] | [INFO] [stderr] 327 | let next = *peeker.peek().unwrap(); [INFO] [stderr] | ^^^^ help: consider using `_next` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `addressing_mode` [INFO] [stderr] --> src/assembler/parser.rs:334:21 [INFO] [stderr] | [INFO] [stderr] 334 | let addressing_mode = AddressingMode::Indirect; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using `_addressing_mode` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `addressing_mode` [INFO] [stderr] --> src/assembler/parser.rs:406:29 [INFO] [stderr] | [INFO] [stderr] 406 | let addressing_mode = AddressingMode::IndirectY; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using `_addressing_mode` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/lexer.rs:109:30 [INFO] [stderr] | [INFO] [stderr] 109 | fn advance(&mut self, mut peeker: &mut Peekable) [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:200:33 [INFO] [stderr] | [INFO] [stderr] 200 | mut peeker: &mut Peekable, [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:494:37 [INFO] [stderr] | [INFO] [stderr] 494 | mut peeker: &mut Peekable) [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:515:38 [INFO] [stderr] | [INFO] [stderr] 515 | mut peeker: &mut Peekable) [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:528:17 [INFO] [stderr] | [INFO] [stderr] 528 | let mut next = peeker.next().unwrap(); [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:530:13 [INFO] [stderr] | [INFO] [stderr] 530 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:598:13 [INFO] [stderr] | [INFO] [stderr] 598 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:604:13 [INFO] [stderr] | [INFO] [stderr] 604 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:626:13 [INFO] [stderr] | [INFO] [stderr] 626 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/assembler/parser.rs:327:21 [INFO] [stderr] | [INFO] [stderr] 327 | let next = *peeker.peek().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/assembler/parser.rs:490:9 [INFO] [stderr] | [INFO] [stderr] 490 | unreachable!(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [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: variant is never constructed: `Absolute` [INFO] [stderr] --> src/assembler/token.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | Absolute(String), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `unexpected_ident` [INFO] [stderr] --> src/assembler/lexer.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | / fn unexpected_ident(expected: A, found: B, line: u32, column: u32) -> LexerError [INFO] [stderr] 21 | | where A: std::fmt::Display, [INFO] [stderr] 22 | | B: std::fmt::Display [INFO] [stderr] 23 | | { [INFO] [stderr] ... | [INFO] [stderr] 30 | | } [INFO] [stderr] 31 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `expected_eol` [INFO] [stderr] --> src/assembler/parser.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | fn expected_eol(line: u32) -> ParserError { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `assembler::assembler::Assembler` [INFO] [stderr] --> src/assembler/assembler.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / pub fn new() -> Assembler { [INFO] [stderr] 64 | | Assembler { symbol_table: HashMap::new() } [INFO] [stderr] 65 | | } [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] 58 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/assembler/assembler.rs:122:25 [INFO] [stderr] | [INFO] [stderr] 122 | addr += opcode.length as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(opcode.length)` [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: length comparison to zero [INFO] [stderr] --> src/assembler/assembler.rs:125:20 [INFO] [stderr] | [INFO] [stderr] 125 | if current_segment.code.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!current_segment.code.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] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/assembler/assembler.rs:155:32 [INFO] [stderr] | [INFO] [stderr] 155 | if distance < -128 || distance > 127 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because -128 is the minimum value for this type, this comparison is always false [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: comparison is useless due to type limits [INFO] [stderr] --> src/assembler/assembler.rs:155:51 [INFO] [stderr] | [INFO] [stderr] 155 | if distance < -128 || distance > 127 { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_comparisons)] on by default [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/assembler/assembler.rs:155:51 [INFO] [stderr] | [INFO] [stderr] 155 | if distance < -128 || distance > 127 { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 127 is the maximum value for this type, this comparison is always false [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/assembler.rs:184:13 [INFO] [stderr] | [INFO] [stderr] 184 | / if let &ParserToken::Label(ref label) = token { [INFO] [stderr] 185 | | // Insert a label with the specified memory address [INFO] [stderr] 186 | | // as its offset [INFO] [stderr] 187 | | self.symbol_table.insert(label.clone(), Label(addr)); [INFO] [stderr] ... | [INFO] [stderr] 194 | | addr = new_addr [INFO] [stderr] 195 | | } [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] 184 | if let ParserToken::Label(ref label) = *token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/assembler.rs:188:20 [INFO] [stderr] | [INFO] [stderr] 188 | } else if let &ParserToken::OpCode(opcode) = token { [INFO] [stderr] | ____________________^ [INFO] [stderr] 189 | | // Add the length of this opcode to our [INFO] [stderr] 190 | | // address offset [INFO] [stderr] 191 | | addr += opcode.length as u16; [INFO] [stderr] ... | [INFO] [stderr] 194 | | addr = new_addr [INFO] [stderr] 195 | | } [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] 188 | } else if let ParserToken::OpCode(opcode) = *token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/assembler/assembler.rs:191:25 [INFO] [stderr] | [INFO] [stderr] 191 | addr += opcode.length as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(opcode.length)` [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/assembler/assembler.rs:193:20 [INFO] [stderr] | [INFO] [stderr] 193 | } else if let &ParserToken::OrgDirective(new_addr) = token { [INFO] [stderr] | ____________________^ [INFO] [stderr] 194 | | addr = new_addr [INFO] [stderr] 195 | | } [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] 193 | } else if let ParserToken::OrgDirective(new_addr) = *token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/assembler/lexer.rs:46:26 [INFO] [stderr] | [INFO] [stderr] 46 | LexerError::from(format!("Unexpected end of file")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unexpected end of file".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:112:16 [INFO] [stderr] | [INFO] [stderr] 112 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 113 | | return; [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/assembler/lexer.rs:130:16 [INFO] [stderr] | [INFO] [stderr] 130 | if line.trim().len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.trim().is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:141:24 [INFO] [stderr] | [INFO] [stderr] 141 | if let None = peeker.peek() { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 142 | | break; [INFO] [stderr] 143 | | } [INFO] [stderr] | |_________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:201:20 [INFO] [stderr] | [INFO] [stderr] 201 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 202 | | break; [INFO] [stderr] 203 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:232:20 [INFO] [stderr] | [INFO] [stderr] 232 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 233 | | return Err(LexerError::unexpected_eof()); [INFO] [stderr] 234 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/assembler/lexer.rs:252:32 [INFO] [stderr] | [INFO] [stderr] 252 | base: &ImmediateBase) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider passing by value instead: `ImmediateBase` [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: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:264:20 [INFO] [stderr] | [INFO] [stderr] 264 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 265 | | break; [INFO] [stderr] 266 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/assembler/lexer.rs:276:57 [INFO] [stderr] | [INFO] [stderr] 276 | Ok(LexerToken::Immediate(result.to_uppercase(), base.clone())) [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*base` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:305:20 [INFO] [stderr] | [INFO] [stderr] 305 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 306 | | break; [INFO] [stderr] 307 | | } else { [INFO] [stderr] 308 | | if !peeker.peek().unwrap().is_whitespace() { [INFO] [stderr] ... | [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:100:20 [INFO] [stderr] | [INFO] [stderr] 100 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 101 | | continue; [INFO] [stderr] 102 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:106:13 [INFO] [stderr] | [INFO] [stderr] 106 | / if let &LexerToken::Ident(ref ident) = next { [INFO] [stderr] 107 | | // Check if this is an opcode [INFO] [stderr] 108 | | if Self::is_opcode(ident.clone()) { [INFO] [stderr] 109 | | // Yep its an opcode, lets figure out its addressing mode [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [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] 106 | if let LexerToken::Ident(ref ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:116:28 [INFO] [stderr] | [INFO] [stderr] 116 | if let None = peeker.peek() { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 117 | | result.push(ParserToken::Label(ident.clone())); [INFO] [stderr] 118 | | continue; [INFO] [stderr] 119 | | } [INFO] [stderr] | |_____________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:123:21 [INFO] [stderr] | [INFO] [stderr] 123 | / if let &LexerToken::Colon = next { [INFO] [stderr] 124 | | result.push(ParserToken::Label(ident.clone())); [INFO] [stderr] 125 | | continue; [INFO] [stderr] 126 | | } [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] 123 | if let LexerToken::Colon = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:129:21 [INFO] [stderr] | [INFO] [stderr] 129 | / if let &LexerToken::Ident(ref ident) = next { [INFO] [stderr] 130 | | // Lets add the original as a label [INFO] [stderr] 131 | | if let &LexerToken::Ident(ref original_ident) = original_ident { [INFO] [stderr] 132 | | result.push(ParserToken::Label(original_ident.clone())); [INFO] [stderr] ... | [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [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] 129 | if let LexerToken::Ident(ref ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:131:25 [INFO] [stderr] | [INFO] [stderr] 131 | / if let &LexerToken::Ident(ref original_ident) = original_ident { [INFO] [stderr] 132 | | result.push(ParserToken::Label(original_ident.clone())); [INFO] [stderr] 133 | | } [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] 131 | if let LexerToken::Ident(ref original_ident) = *original_ident { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:142:28 [INFO] [stderr] | [INFO] [stderr] 142 | } else if let &LexerToken::Assignment = next { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 143 | | // Its a variable assignment - lets store the variable in the symbol table [INFO] [stderr] 144 | | peeker.next(); // Jump the assignment operator [INFO] [stderr] 145 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [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] 142 | } else if let LexerToken::Assignment = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:145:32 [INFO] [stderr] | [INFO] [stderr] 145 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 146 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 147 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:150:25 [INFO] [stderr] | [INFO] [stderr] 150 | / if let &LexerToken::Address(ref address) = next { [INFO] [stderr] 151 | | self.symbol_table [INFO] [stderr] 152 | | .insert(ident.clone(), [INFO] [stderr] 153 | | Variable(LexerToken::Address(address.clone()))); [INFO] [stderr] ... | [INFO] [stderr] 158 | | Variable(LexerToken::Ident(var_ident.clone()))); [INFO] [stderr] 159 | | } [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] 150 | if let LexerToken::Address(ref address) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:154:32 [INFO] [stderr] | [INFO] [stderr] 154 | } else if let &LexerToken::Ident(ref var_ident) = next { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 155 | | // Its another variable [INFO] [stderr] 156 | | self.symbol_table [INFO] [stderr] 157 | | .insert(ident.clone(), [INFO] [stderr] 158 | | Variable(LexerToken::Ident(var_ident.clone()))); [INFO] [stderr] 159 | | } [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] 154 | } else if let LexerToken::Ident(ref var_ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:162:20 [INFO] [stderr] | [INFO] [stderr] 162 | } else if let &LexerToken::Period = next { [INFO] [stderr] | ____________________^ [INFO] [stderr] 163 | | // Its a directive? Lets make sure: [INFO] [stderr] 164 | | peeker.next(); [INFO] [stderr] 165 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [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] 162 | } else if let LexerToken::Period = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:165:24 [INFO] [stderr] | [INFO] [stderr] 165 | if let None = peeker.peek() { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 166 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 167 | | } [INFO] [stderr] | |_________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:170:17 [INFO] [stderr] | [INFO] [stderr] 170 | / if let &LexerToken::Ident(ref directive) = next { [INFO] [stderr] 171 | | // Lets check if its a valid directive: [INFO] [stderr] 172 | | let directive = directive.to_uppercase(); [INFO] [stderr] 173 | | match &directive[..] { [INFO] [stderr] ... | [INFO] [stderr] 181 | | } [INFO] [stderr] 182 | | } [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] 170 | if let LexerToken::Ident(ref directive) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/assembler/parser.rs:199:5 [INFO] [stderr] | [INFO] [stderr] 199 | / fn consume_opcode<'a, I, S>(&mut self, [INFO] [stderr] 200 | | mut peeker: &mut Peekable, [INFO] [stderr] 201 | | ident: S) [INFO] [stderr] 202 | | -> Result, ParserError> [INFO] [stderr] ... | [INFO] [stderr] 490 | | unreachable!(); [INFO] [stderr] 491 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:211:16 [INFO] [stderr] | [INFO] [stderr] 211 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 212 | | if let Some(opcode) = [INFO] [stderr] 213 | | OpCode::from_mnemonic_and_addressing_mode(ident.clone(), AddressingMode::Implied) { [INFO] [stderr] 214 | | return Ok(vec![ParserToken::OpCode(opcode)]); [INFO] [stderr] ... | [INFO] [stderr] 487 | | } [INFO] [stderr] 488 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:262:28 [INFO] [stderr] | [INFO] [stderr] 262 | if let None = peeker.peek() { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 263 | | // Nothing else.. find an opcode with this ident and addressing mode [INFO] [stderr] 264 | | if let Some(opcode) = [INFO] [stderr] 265 | | OpCode::from_mnemonic_and_addressing_mode(ident, addressing_mode) { [INFO] [stderr] ... | [INFO] [stderr] 275 | | } [INFO] [stderr] 276 | | } [INFO] [stderr] | |_____________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:282:21 [INFO] [stderr] | [INFO] [stderr] 282 | / if let &LexerToken::Comma = next { [INFO] [stderr] 283 | | // Yes, its a comma. Consume it and check what is next [INFO] [stderr] 284 | | peeker.next(); [INFO] [stderr] 285 | | // If theres nothing after the comma thats an error [INFO] [stderr] ... | [INFO] [stderr] 325 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 326 | | } [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] 282 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:286:32 [INFO] [stderr] | [INFO] [stderr] 286 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 287 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 288 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:291:25 [INFO] [stderr] | [INFO] [stderr] 291 | / if let &LexerToken::Ident(ref register) = next { [INFO] [stderr] 292 | | let register = register.to_uppercase(); [INFO] [stderr] 293 | | if register != "X" && register != "Y" { [INFO] [stderr] 294 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] ... | [INFO] [stderr] 322 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 323 | | } [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] 291 | if let LexerToken::Ident(ref register) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:338:24 [INFO] [stderr] | [INFO] [stderr] 338 | if let None = peeker.peek() { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 339 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 340 | | } [INFO] [stderr] | |_________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:363:28 [INFO] [stderr] | [INFO] [stderr] 363 | if let None = peeker.peek() { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 364 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 365 | | } [INFO] [stderr] | |_____________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:367:21 [INFO] [stderr] | [INFO] [stderr] 367 | / if let &LexerToken::Comma = next { [INFO] [stderr] 368 | | // If its a comma - lets target IndirectX [INFO] [stderr] 369 | | peeker.next(); // skip the comma [INFO] [stderr] 370 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 462 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 463 | | } [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] 367 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:370:32 [INFO] [stderr] | [INFO] [stderr] 370 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 371 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 372 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:375:25 [INFO] [stderr] | [INFO] [stderr] 375 | / if let &LexerToken::Ident(ref register) = next { [INFO] [stderr] 376 | | let register = register.to_uppercase(); [INFO] [stderr] 377 | | if register != "X" { [INFO] [stderr] 378 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] ... | [INFO] [stderr] 402 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 403 | | } [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] 375 | if let LexerToken::Ident(ref register) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:383:36 [INFO] [stderr] | [INFO] [stderr] 383 | if let None = peeker.peek() { [INFO] [stderr] | _____________________________- ^^^^ [INFO] [stderr] 384 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 385 | | } [INFO] [stderr] | |_____________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:388:29 [INFO] [stderr] | [INFO] [stderr] 388 | / if let &LexerToken::CloseParenthesis = next { [INFO] [stderr] 389 | | peeker.next(); [INFO] [stderr] 390 | | // Lets make sure we can find an appropriate opcode [INFO] [stderr] 391 | | if let Some(opcode) = OpCode::from_mnemonic_and_addressing_mode(ident, AddressingMode::IndirectX) { [INFO] [stderr] ... | [INFO] [stderr] 399 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 400 | | } [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] 388 | if let LexerToken::CloseParenthesis = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:404:28 [INFO] [stderr] | [INFO] [stderr] 404 | } else if let &LexerToken::CloseParenthesis = next { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 405 | | // We're headed for Indirect or IndirectY .. [INFO] [stderr] 406 | | let addressing_mode = AddressingMode::IndirectY; [INFO] [stderr] 407 | | peeker.next(); // Skip the closing paren [INFO] [stderr] ... | [INFO] [stderr] 462 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 463 | | } [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] 404 | } else if let LexerToken::CloseParenthesis = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:409:32 [INFO] [stderr] | [INFO] [stderr] 409 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 410 | | // If this is the end.. then lets check if this [INFO] [stderr] 411 | | // is the indirect jump: JMP ($0000) [INFO] [stderr] 412 | | if let Some(opcode) = OpCode::from_mnemonic_and_addressing_mode(ident, AddressingMode::Indirect) { [INFO] [stderr] ... | [INFO] [stderr] 425 | | } [INFO] [stderr] 426 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:430:25 [INFO] [stderr] | [INFO] [stderr] 430 | / if let &LexerToken::Comma = next { [INFO] [stderr] 431 | | // Great, lets continue [INFO] [stderr] 432 | | peeker.next(); // Skip the comma [INFO] [stderr] 433 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 459 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 460 | | } [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] 430 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:433:36 [INFO] [stderr] | [INFO] [stderr] 433 | if let None = peeker.peek() { [INFO] [stderr] | _____________________________- ^^^^ [INFO] [stderr] 434 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 435 | | } [INFO] [stderr] | |_____________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:438:29 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &LexerToken::Ident(ref register) = next { [INFO] [stderr] 439 | | let register = register.to_uppercase(); [INFO] [stderr] 440 | | // If its not IndirectY .. thats a problem [INFO] [stderr] 441 | | if register != "Y" { [INFO] [stderr] ... | [INFO] [stderr] 456 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 457 | | } [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] 438 | if let LexerToken::Ident(ref register) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:500:16 [INFO] [stderr] | [INFO] [stderr] 500 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 501 | | return Err(ParserError::expected_address(self.line)); [INFO] [stderr] 502 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:506:9 [INFO] [stderr] | [INFO] [stderr] 506 | / if let &LexerToken::Address(ref address) = next { [INFO] [stderr] 507 | | let bytes = self.parse_address_bytes(address)?; [INFO] [stderr] 508 | | return Ok(ParserToken::OrgDirective(LittleEndian::read_u16(&bytes))); [INFO] [stderr] 509 | | } else { [INFO] [stderr] 510 | | return Err(ParserError::expected_address(self.line)); [INFO] [stderr] 511 | | } [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] 506 | if let LexerToken::Address(ref address) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:523:16 [INFO] [stderr] | [INFO] [stderr] 523 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 524 | | return Err(ParserError::expected_immediate(self.line)); [INFO] [stderr] 525 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:529:13 [INFO] [stderr] | [INFO] [stderr] 529 | / if let &LexerToken::Ident(ref ident) = next { [INFO] [stderr] 530 | | let variable = self.get_variable_value(ident.clone())?; [INFO] [stderr] 531 | | if let LexerToken::Immediate(ref value, base) = variable.0 { [INFO] [stderr] 532 | | let immediate = self.unwrap_immediate(&value[..], base); [INFO] [stderr] ... | [INFO] [stderr] 541 | | return Err(ParserError::expected_immediate(self.line)); [INFO] [stderr] 542 | | } [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] 529 | if let LexerToken::Ident(ref ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:537:20 [INFO] [stderr] | [INFO] [stderr] 537 | } else if let &LexerToken::Immediate(ref value, base) = next { [INFO] [stderr] | ____________________^ [INFO] [stderr] 538 | | let immediate = self.unwrap_immediate(&value[..], base); [INFO] [stderr] 539 | | result.push(immediate); [INFO] [stderr] 540 | | } else { [INFO] [stderr] 541 | | return Err(ParserError::expected_immediate(self.line)); [INFO] [stderr] 542 | | } [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] 537 | } else if let LexerToken::Immediate(ref value, base) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:545:20 [INFO] [stderr] | [INFO] [stderr] 545 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 546 | | break; [INFO] [stderr] 547 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:550:13 [INFO] [stderr] | [INFO] [stderr] 550 | / if let &LexerToken::Comma = next { [INFO] [stderr] 551 | | // Awesome, go again [INFO] [stderr] 552 | | } else { [INFO] [stderr] 553 | | break; [INFO] [stderr] 554 | | } [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] 550 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/assembler/parser.rs:594:23 [INFO] [stderr] | [INFO] [stderr] 594 | let var = var.clone(); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 594 | let var = &(*var).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 594 | let var = &assembler::parser::Variable::clone(var); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `disassembler::Disassembler` [INFO] [stderr] --> src/disassembler.rs:40:5 [INFO] [stderr] | [INFO] [stderr] 40 | / pub fn new() -> Disassembler { [INFO] [stderr] 41 | | Disassembler { [INFO] [stderr] 42 | | disable_offsets: false, [INFO] [stderr] 43 | | disable_opcodes: true, [INFO] [stderr] 44 | | code_offset: 0, [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | } [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] 5 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/disassembler.rs:281:28 [INFO] [stderr] | [INFO] [stderr] 281 | .filter(|line| line.len() > 0) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!line.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `cpu::cpu::Cpu` [INFO] [stderr] --> src/cpu/cpu.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn new() -> Cpu { [INFO] [stderr] 42 | | Cpu { [INFO] [stderr] 43 | | memory: MemoryBus::new(), [INFO] [stderr] 44 | | registers: Registers::new(), [INFO] [stderr] ... | [INFO] [stderr] 47 | | } [INFO] [stderr] 48 | | } [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] 39 | impl Default for cpu::cpu::Cpu { [INFO] [stderr] 40 | fn default() -> Self { [INFO] [stderr] 41 | Self::new() [INFO] [stderr] 42 | } [INFO] [stderr] 43 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:59:16 [INFO] [stderr] | [INFO] [stderr] 59 | if addr as u32 + code.len() as u32 - 1 > u16::max_value() as u32 { [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::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 u32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:59:54 [INFO] [stderr] | [INFO] [stderr] 59 | if addr as u32 + code.len() as u32 - 1 > u16::max_value() as u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(u16::max_value())` [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 `x` is used to index `code` [INFO] [stderr] --> src/cpu/cpu.rs:70:18 [INFO] [stderr] | [INFO] [stderr] 70 | for x in 0..code.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] 70 | for (x, ) in code.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u64 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:93:18 [INFO] [stderr] | [INFO] [stderr] 93 | v += self.step()? as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.step()?)` [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/cpu.rs:112:34 [INFO] [stderr] | [INFO] [stderr] 112 | self.registers.PC += opcode.length as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(opcode.length)` [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/cpu.rs:200:41 [INFO] [stderr] | [INFO] [stderr] 200 | ZeroPage => Operand::Memory((self.read_byte(operand_start) as u16) & 0xFF), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(operand_start))` [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/cpu.rs:202:34 [INFO] [stderr] | [INFO] [stderr] 202 | Operand::Memory((self.registers.X as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.X)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:202:60 [INFO] [stderr] | [INFO] [stderr] 202 | Operand::Memory((self.registers.X as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(operand_start))` [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/cpu.rs:206:34 [INFO] [stderr] | [INFO] [stderr] 206 | Operand::Memory((self.registers.Y as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.Y)` [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/cpu.rs:206:60 [INFO] [stderr] | [INFO] [stderr] 206 | Operand::Memory((self.registers.Y as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(operand_start))` [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/cpu.rs:210:42 [INFO] [stderr] | [INFO] [stderr] 210 | AbsoluteX => Operand::Memory(self.registers.X as u16 + self.read_u16(operand_start)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.X)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:211:42 [INFO] [stderr] | [INFO] [stderr] 211 | AbsoluteY => Operand::Memory(self.registers.Y as u16 + self.read_u16(operand_start)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.Y)` [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/cpu.rs:214:48 [INFO] [stderr] | [INFO] [stderr] 214 | Operand::Memory(self.read_u16((self.registers.X as u16 + [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.X)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:215:48 [INFO] [stderr] | [INFO] [stderr] 215 | self.read_byte(self.registers.PC + 1) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(self.registers.PC + 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:219:33 [INFO] [stderr] | [INFO] [stderr] 219 | Operand::Memory(self.registers.Y as u16 + [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.Y)` [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/cpu.rs:220:47 [INFO] [stderr] | [INFO] [stderr] 220 | self.read_u16(self.read_byte(self.registers.PC + 1) as u16)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(self.registers.PC + 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:235:41 [INFO] [stderr] | [INFO] [stderr] 235 | Operand::Immediate(byte) => byte as u16, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u16::from(byte)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:251:36 [INFO] [stderr] | [INFO] [stderr] 251 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:253:9 [INFO] [stderr] | [INFO] [stderr] 253 | self.stack.push_u16(mem, self.registers.PC); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:254:9 [INFO] [stderr] | [INFO] [stderr] 254 | self.stack.push(mem, self.flags.to_u8()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:274:36 [INFO] [stderr] | [INFO] [stderr] 274 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:276:9 [INFO] [stderr] | [INFO] [stderr] 276 | self.stack.push_u16(mem, self.registers.PC); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:277:9 [INFO] [stderr] | [INFO] [stderr] 277 | self.stack.push(mem, self.flags.to_u8()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:296:21 [INFO] [stderr] | [INFO] [stderr] 296 | let value = self.unwrap_immediate(&operand) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.unwrap_immediate(&operand))` [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/cpu.rs:300:26 [INFO] [stderr] | [INFO] [stderr] 300 | let mut result = self.registers.A as u16 + value as u16 + carry as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.A)` [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/cpu.rs:304:17 [INFO] [stderr] | [INFO] [stderr] 304 | if (self.registers.A as u16 & 0x0F) + (value & 0x0F) + carry > 0x09 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.A)` [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/cpu.rs:314:27 [INFO] [stderr] | [INFO] [stderr] 314 | self.flags.zero = result as u8 & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(result as u8).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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:314:27 [INFO] [stderr] | [INFO] [stderr] 314 | self.flags.zero = result as u8 & 0xFF == 0x00; [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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:321:28 [INFO] [stderr] | [INFO] [stderr] 321 | self.registers.A = result as u8 & 0xFF; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:330:27 [INFO] [stderr] | [INFO] [stderr] 330 | self.flags.zero = result as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(result as u8).trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:330:27 [INFO] [stderr] | [INFO] [stderr] 330 | self.flags.zero = result as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:335:25 [INFO] [stderr] | [INFO] [stderr] 335 | let mut value = if let &Operand::Implied = operand { [INFO] [stderr] | _________________________^ [INFO] [stderr] 336 | | // Implied ASL uses the A register [INFO] [stderr] 337 | | self.registers.A [INFO] [stderr] 338 | | } else { [INFO] [stderr] 339 | | self.unwrap_immediate(&operand) [INFO] [stderr] 340 | | }; [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] 335 | let mut value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/cpu/cpu.rs:347:9 [INFO] [stderr] | [INFO] [stderr] 347 | value = value << 0x01; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `value <<= 0x01` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:349:27 [INFO] [stderr] | [INFO] [stderr] 349 | self.flags.zero = value as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(value as u8).trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value as u8` [INFO] [stderr] --> src/cpu/cpu.rs:349:27 [INFO] [stderr] | [INFO] [stderr] 349 | self.flags.zero = value as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:351:9 [INFO] [stderr] | [INFO] [stderr] 351 | / if let &Operand::Implied = operand { [INFO] [stderr] 352 | | self.registers.A = value; [INFO] [stderr] 353 | | } else { [INFO] [stderr] 354 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 355 | | self.write_byte(addr, value); [INFO] [stderr] 356 | | } [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] 351 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:456:27 [INFO] [stderr] | [INFO] [stderr] 456 | let result: i16 = byte as i16 - value as i16; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i16::from(byte)` [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/cpu.rs:456:41 [INFO] [stderr] | [INFO] [stderr] 456 | let result: i16 = byte as i16 - value as i16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i16::from(value)` [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/cpu.rs:459:27 [INFO] [stderr] | [INFO] [stderr] 459 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:471:27 [INFO] [stderr] | [INFO] [stderr] 471 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:471:27 [INFO] [stderr] | [INFO] [stderr] 471 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:478:27 [INFO] [stderr] | [INFO] [stderr] 478 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.X.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.X` [INFO] [stderr] --> src/cpu/cpu.rs:478:27 [INFO] [stderr] | [INFO] [stderr] 478 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:485:27 [INFO] [stderr] | [INFO] [stderr] 485 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.Y.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.Y` [INFO] [stderr] --> src/cpu/cpu.rs:485:27 [INFO] [stderr] | [INFO] [stderr] 485 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:495:27 [INFO] [stderr] | [INFO] [stderr] 495 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:495:27 [INFO] [stderr] | [INFO] [stderr] 495 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:506:27 [INFO] [stderr] | [INFO] [stderr] 506 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:506:27 [INFO] [stderr] | [INFO] [stderr] 506 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:513:27 [INFO] [stderr] | [INFO] [stderr] 513 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.X.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.X` [INFO] [stderr] --> src/cpu/cpu.rs:513:27 [INFO] [stderr] | [INFO] [stderr] 513 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:520:27 [INFO] [stderr] | [INFO] [stderr] 520 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.Y.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.Y` [INFO] [stderr] --> src/cpu/cpu.rs:520:27 [INFO] [stderr] | [INFO] [stderr] 520 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:530:40 [INFO] [stderr] | [INFO] [stderr] 530 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:532:9 [INFO] [stderr] | [INFO] [stderr] 532 | self.stack.push_u16(mem, self.registers.PC); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:541:27 [INFO] [stderr] | [INFO] [stderr] 541 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:541:27 [INFO] [stderr] | [INFO] [stderr] 541 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:549:27 [INFO] [stderr] | [INFO] [stderr] 549 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:549:27 [INFO] [stderr] | [INFO] [stderr] 549 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:557:27 [INFO] [stderr] | [INFO] [stderr] 557 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:557:27 [INFO] [stderr] | [INFO] [stderr] 557 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:562:21 [INFO] [stderr] | [INFO] [stderr] 562 | let value = if let &Operand::Implied = operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 563 | | self.registers.A [INFO] [stderr] 564 | | } else { [INFO] [stderr] 565 | | self.unwrap_immediate(&operand) [INFO] [stderr] 566 | | }; [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] 562 | let value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:573:27 [INFO] [stderr] | [INFO] [stderr] 573 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:573:27 [INFO] [stderr] | [INFO] [stderr] 573 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:575:9 [INFO] [stderr] | [INFO] [stderr] 575 | / if let &Operand::Implied = operand { [INFO] [stderr] 576 | | self.registers.A = value; [INFO] [stderr] 577 | | } else { [INFO] [stderr] 578 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 579 | | self.memory.write_byte(addr, value); [INFO] [stderr] 580 | | } [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] 575 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:592:27 [INFO] [stderr] | [INFO] [stderr] 592 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:592:27 [INFO] [stderr] | [INFO] [stderr] 592 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:598:40 [INFO] [stderr] | [INFO] [stderr] 598 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:604:40 [INFO] [stderr] | [INFO] [stderr] 604 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:610:36 [INFO] [stderr] | [INFO] [stderr] 610 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:618:36 [INFO] [stderr] | [INFO] [stderr] 618 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:626:40 [INFO] [stderr] | [INFO] [stderr] 626 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:633:21 [INFO] [stderr] | [INFO] [stderr] 633 | let value = if let &Operand::Implied = operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 634 | | self.registers.A [INFO] [stderr] 635 | | } else { [INFO] [stderr] 636 | | self.unwrap_immediate(&operand) [INFO] [stderr] 637 | | }; [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] 633 | let value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:649:27 [INFO] [stderr] | [INFO] [stderr] 649 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:649:27 [INFO] [stderr] | [INFO] [stderr] 649 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:651:9 [INFO] [stderr] | [INFO] [stderr] 651 | / if let &Operand::Implied = operand { [INFO] [stderr] 652 | | self.registers.A = value; [INFO] [stderr] 653 | | } else { [INFO] [stderr] 654 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 655 | | self.memory.write_byte(addr, value); [INFO] [stderr] 656 | | } [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] 651 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:659:21 [INFO] [stderr] | [INFO] [stderr] 659 | let value = if let &Operand::Implied = operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 660 | | self.registers.A [INFO] [stderr] 661 | | } else { [INFO] [stderr] 662 | | self.unwrap_immediate(&operand) [INFO] [stderr] 663 | | }; [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] 659 | let value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:675:27 [INFO] [stderr] | [INFO] [stderr] 675 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:675:27 [INFO] [stderr] | [INFO] [stderr] 675 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:677:9 [INFO] [stderr] | [INFO] [stderr] 677 | / if let &Operand::Implied = operand { [INFO] [stderr] 678 | | self.registers.A = value; [INFO] [stderr] 679 | | } else { [INFO] [stderr] 680 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 681 | | self.memory.write_byte(addr, value); [INFO] [stderr] 682 | | } [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] 677 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:686:36 [INFO] [stderr] | [INFO] [stderr] 686 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:698:21 [INFO] [stderr] | [INFO] [stderr] 698 | let value = self.unwrap_immediate(&operand) as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.unwrap_immediate(&operand))` [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/cpu.rs:702:26 [INFO] [stderr] | [INFO] [stderr] 702 | let mut result = self.registers.A as i16 - value as i16 - carry as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.registers.A)` [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/cpu.rs:704:27 [INFO] [stderr] | [INFO] [stderr] 704 | self.flags.zero = result as u8 & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(result as u8).trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:704:27 [INFO] [stderr] | [INFO] [stderr] 704 | self.flags.zero = result as u8 & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:712:18 [INFO] [stderr] | [INFO] [stderr] 712 | if (((self.registers.A as i16) & 0x0F) - carry as i16) < ((value as i16) & 0x0F) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.registers.A)` [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/cpu.rs:749:27 [INFO] [stderr] | [INFO] [stderr] 749 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.A.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.A` [INFO] [stderr] --> src/cpu/cpu.rs:749:27 [INFO] [stderr] | [INFO] [stderr] 749 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:756:27 [INFO] [stderr] | [INFO] [stderr] 756 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.A.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.A` [INFO] [stderr] --> src/cpu/cpu.rs:756:27 [INFO] [stderr] | [INFO] [stderr] 756 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:764:27 [INFO] [stderr] | [INFO] [stderr] 764 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:764:27 [INFO] [stderr] | [INFO] [stderr] 764 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:771:27 [INFO] [stderr] | [INFO] [stderr] 771 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.X.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.X` [INFO] [stderr] --> src/cpu/cpu.rs:771:27 [INFO] [stderr] | [INFO] [stderr] 771 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:782:27 [INFO] [stderr] | [INFO] [stderr] 782 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.Y.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.Y` [INFO] [stderr] --> src/cpu/cpu.rs:782:27 [INFO] [stderr] | [INFO] [stderr] 782 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:789:42 [INFO] [stderr] | [INFO] [stderr] 789 | self.registers.PC -= 0x100 - offset as u16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::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/cpu.rs:791:34 [INFO] [stderr] | [INFO] [stderr] 791 | self.registers.PC += offset as u16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::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: useless use of `format!` [INFO] [stderr] --> src/cpu/cpu_error.rs:17:22 [INFO] [stderr] | [INFO] [stderr] 17 | message: format!("CODE segment out of bounds"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"CODE segment out of bounds".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `cpu::memory_bus::MemoryBus` [INFO] [stderr] --> src/cpu/memory_bus.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> MemoryBus { [INFO] [stderr] 12 | | MemoryBus { ram: [0; 1024 * 64] } [INFO] [stderr] 13 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | impl Default for cpu::memory_bus::MemoryBus { [INFO] [stderr] 11 | fn default() -> Self { [INFO] [stderr] 12 | Self::new() [INFO] [stderr] 13 | } [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cpu::stack::Stack` [INFO] [stderr] --> src/cpu/stack.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn new() -> Stack { [INFO] [stderr] 27 | | Stack { pointer: 0xFF } [INFO] [stderr] 28 | | } [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] 21 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: static variable `OpCodes` should have an upper case name such as `OP_CODES` [INFO] [stderr] --> src/opcodes.rs:53:1 [INFO] [stderr] | [INFO] [stderr] 53 | / static OpCodes: [OpCode; 151] = [OpCode { [INFO] [stderr] 54 | | code: 0x69, [INFO] [stderr] 55 | | mnemonic: "ADC", [INFO] [stderr] 56 | | length: 2, [INFO] [stderr] ... | [INFO] [stderr] 1108 | | mode: AddressingMode::Absolute, [INFO] [stderr] 1109 | | }]; [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rs6502`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variable `last_addressing_mode` is assigned to, but never used [INFO] [stderr] --> src/assembler/assembler.rs:181:17 [INFO] [stderr] | [INFO] [stderr] 181 | let mut last_addressing_mode = AddressingMode::Absolute; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] = note: consider using `_last_addressing_mode` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `last_addressing_mode` is never read [INFO] [stderr] --> src/assembler/assembler.rs:192:17 [INFO] [stderr] | [INFO] [stderr] 192 | last_addressing_mode = opcode.mode; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `added_label` [INFO] [stderr] --> src/assembler/parser.rs:94:21 [INFO] [stderr] | [INFO] [stderr] 94 | let mut added_label = false; [INFO] [stderr] | ^^^^^^^^^^^ help: consider using `_added_label` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `opcode` [INFO] [stderr] --> src/assembler/parser.rs:192:21 [INFO] [stderr] | [INFO] [stderr] 192 | if let Some(opcode) = OpCode::from_mnemonic(mnemonic) { [INFO] [stderr] | ^^^^^^ help: consider using `_opcode` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `next` [INFO] [stderr] --> src/assembler/parser.rs:327:25 [INFO] [stderr] | [INFO] [stderr] 327 | let next = *peeker.peek().unwrap(); [INFO] [stderr] | ^^^^ help: consider using `_next` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `addressing_mode` [INFO] [stderr] --> src/assembler/parser.rs:334:21 [INFO] [stderr] | [INFO] [stderr] 334 | let addressing_mode = AddressingMode::Indirect; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using `_addressing_mode` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `addressing_mode` [INFO] [stderr] --> src/assembler/parser.rs:406:29 [INFO] [stderr] | [INFO] [stderr] 406 | let addressing_mode = AddressingMode::IndirectY; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using `_addressing_mode` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/lexer.rs:109:30 [INFO] [stderr] | [INFO] [stderr] 109 | fn advance(&mut self, mut peeker: &mut Peekable) [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:200:33 [INFO] [stderr] | [INFO] [stderr] 200 | mut peeker: &mut Peekable, [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:494:37 [INFO] [stderr] | [INFO] [stderr] 494 | mut peeker: &mut Peekable) [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:515:38 [INFO] [stderr] | [INFO] [stderr] 515 | mut peeker: &mut Peekable) [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/assembler/parser.rs:528:17 [INFO] [stderr] | [INFO] [stderr] 528 | let mut next = peeker.next().unwrap(); [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:530:13 [INFO] [stderr] | [INFO] [stderr] 530 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:598:13 [INFO] [stderr] | [INFO] [stderr] 598 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:604:13 [INFO] [stderr] | [INFO] [stderr] 604 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/cpu/cpu.rs:626:13 [INFO] [stderr] | [INFO] [stderr] 626 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Absolute` [INFO] [stderr] --> src/assembler/token.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | Absolute(String), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `unexpected_ident` [INFO] [stderr] --> src/assembler/lexer.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | / fn unexpected_ident(expected: A, found: B, line: u32, column: u32) -> LexerError [INFO] [stderr] 21 | | where A: std::fmt::Display, [INFO] [stderr] 22 | | B: std::fmt::Display [INFO] [stderr] 23 | | { [INFO] [stderr] ... | [INFO] [stderr] 30 | | } [INFO] [stderr] 31 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `expected_eol` [INFO] [stderr] --> src/assembler/parser.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | fn expected_eol(line: u32) -> ParserError { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `assembler::assembler::Assembler` [INFO] [stderr] --> src/assembler/assembler.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | / pub fn new() -> Assembler { [INFO] [stderr] 64 | | Assembler { symbol_table: HashMap::new() } [INFO] [stderr] 65 | | } [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] 58 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/assembler/assembler.rs:122:25 [INFO] [stderr] | [INFO] [stderr] 122 | addr += opcode.length as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(opcode.length)` [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: length comparison to zero [INFO] [stderr] --> src/assembler/assembler.rs:125:20 [INFO] [stderr] | [INFO] [stderr] 125 | if current_segment.code.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!current_segment.code.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] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/assembler/assembler.rs:155:32 [INFO] [stderr] | [INFO] [stderr] 155 | if distance < -128 || distance > 127 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because -128 is the minimum value for this type, this comparison is always false [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: comparison is useless due to type limits [INFO] [stderr] --> src/assembler/assembler.rs:155:51 [INFO] [stderr] | [INFO] [stderr] 155 | if distance < -128 || distance > 127 { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_comparisons)] on by default [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/assembler/assembler.rs:155:51 [INFO] [stderr] | [INFO] [stderr] 155 | if distance < -128 || distance > 127 { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 127 is the maximum value for this type, this comparison is always false [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/assembler.rs:184:13 [INFO] [stderr] | [INFO] [stderr] 184 | / if let &ParserToken::Label(ref label) = token { [INFO] [stderr] 185 | | // Insert a label with the specified memory address [INFO] [stderr] 186 | | // as its offset [INFO] [stderr] 187 | | self.symbol_table.insert(label.clone(), Label(addr)); [INFO] [stderr] ... | [INFO] [stderr] 194 | | addr = new_addr [INFO] [stderr] 195 | | } [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] 184 | if let ParserToken::Label(ref label) = *token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/assembler.rs:188:20 [INFO] [stderr] | [INFO] [stderr] 188 | } else if let &ParserToken::OpCode(opcode) = token { [INFO] [stderr] | ____________________^ [INFO] [stderr] 189 | | // Add the length of this opcode to our [INFO] [stderr] 190 | | // address offset [INFO] [stderr] 191 | | addr += opcode.length as u16; [INFO] [stderr] ... | [INFO] [stderr] 194 | | addr = new_addr [INFO] [stderr] 195 | | } [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] 188 | } else if let ParserToken::OpCode(opcode) = *token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/assembler/assembler.rs:191:25 [INFO] [stderr] | [INFO] [stderr] 191 | addr += opcode.length as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(opcode.length)` [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/assembler/assembler.rs:193:20 [INFO] [stderr] | [INFO] [stderr] 193 | } else if let &ParserToken::OrgDirective(new_addr) = token { [INFO] [stderr] | ____________________^ [INFO] [stderr] 194 | | addr = new_addr [INFO] [stderr] 195 | | } [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] 193 | } else if let ParserToken::OrgDirective(new_addr) = *token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/assembler/lexer.rs:46:26 [INFO] [stderr] | [INFO] [stderr] 46 | LexerError::from(format!("Unexpected end of file")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Unexpected end of file".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:112:16 [INFO] [stderr] | [INFO] [stderr] 112 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 113 | | return; [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/assembler/lexer.rs:130:16 [INFO] [stderr] | [INFO] [stderr] 130 | if line.trim().len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.trim().is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:141:24 [INFO] [stderr] | [INFO] [stderr] 141 | if let None = peeker.peek() { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 142 | | break; [INFO] [stderr] 143 | | } [INFO] [stderr] | |_________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:201:20 [INFO] [stderr] | [INFO] [stderr] 201 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 202 | | break; [INFO] [stderr] 203 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:232:20 [INFO] [stderr] | [INFO] [stderr] 232 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 233 | | return Err(LexerError::unexpected_eof()); [INFO] [stderr] 234 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/assembler/lexer.rs:252:32 [INFO] [stderr] | [INFO] [stderr] 252 | base: &ImmediateBase) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider passing by value instead: `ImmediateBase` [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: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:264:20 [INFO] [stderr] | [INFO] [stderr] 264 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 265 | | break; [INFO] [stderr] 266 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/assembler/lexer.rs:276:57 [INFO] [stderr] | [INFO] [stderr] 276 | Ok(LexerToken::Immediate(result.to_uppercase(), base.clone())) [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*base` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/lexer.rs:305:20 [INFO] [stderr] | [INFO] [stderr] 305 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 306 | | break; [INFO] [stderr] 307 | | } else { [INFO] [stderr] 308 | | if !peeker.peek().unwrap().is_whitespace() { [INFO] [stderr] ... | [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:100:20 [INFO] [stderr] | [INFO] [stderr] 100 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 101 | | continue; [INFO] [stderr] 102 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:106:13 [INFO] [stderr] | [INFO] [stderr] 106 | / if let &LexerToken::Ident(ref ident) = next { [INFO] [stderr] 107 | | // Check if this is an opcode [INFO] [stderr] 108 | | if Self::is_opcode(ident.clone()) { [INFO] [stderr] 109 | | // Yep its an opcode, lets figure out its addressing mode [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [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] 106 | if let LexerToken::Ident(ref ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:116:28 [INFO] [stderr] | [INFO] [stderr] 116 | if let None = peeker.peek() { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 117 | | result.push(ParserToken::Label(ident.clone())); [INFO] [stderr] 118 | | continue; [INFO] [stderr] 119 | | } [INFO] [stderr] | |_____________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:123:21 [INFO] [stderr] | [INFO] [stderr] 123 | / if let &LexerToken::Colon = next { [INFO] [stderr] 124 | | result.push(ParserToken::Label(ident.clone())); [INFO] [stderr] 125 | | continue; [INFO] [stderr] 126 | | } [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] 123 | if let LexerToken::Colon = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:129:21 [INFO] [stderr] | [INFO] [stderr] 129 | / if let &LexerToken::Ident(ref ident) = next { [INFO] [stderr] 130 | | // Lets add the original as a label [INFO] [stderr] 131 | | if let &LexerToken::Ident(ref original_ident) = original_ident { [INFO] [stderr] 132 | | result.push(ParserToken::Label(original_ident.clone())); [INFO] [stderr] ... | [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [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] 129 | if let LexerToken::Ident(ref ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:131:25 [INFO] [stderr] | [INFO] [stderr] 131 | / if let &LexerToken::Ident(ref original_ident) = original_ident { [INFO] [stderr] 132 | | result.push(ParserToken::Label(original_ident.clone())); [INFO] [stderr] 133 | | } [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] 131 | if let LexerToken::Ident(ref original_ident) = *original_ident { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:142:28 [INFO] [stderr] | [INFO] [stderr] 142 | } else if let &LexerToken::Assignment = next { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 143 | | // Its a variable assignment - lets store the variable in the symbol table [INFO] [stderr] 144 | | peeker.next(); // Jump the assignment operator [INFO] [stderr] 145 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [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] 142 | } else if let LexerToken::Assignment = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:145:32 [INFO] [stderr] | [INFO] [stderr] 145 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 146 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 147 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:150:25 [INFO] [stderr] | [INFO] [stderr] 150 | / if let &LexerToken::Address(ref address) = next { [INFO] [stderr] 151 | | self.symbol_table [INFO] [stderr] 152 | | .insert(ident.clone(), [INFO] [stderr] 153 | | Variable(LexerToken::Address(address.clone()))); [INFO] [stderr] ... | [INFO] [stderr] 158 | | Variable(LexerToken::Ident(var_ident.clone()))); [INFO] [stderr] 159 | | } [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] 150 | if let LexerToken::Address(ref address) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:154:32 [INFO] [stderr] | [INFO] [stderr] 154 | } else if let &LexerToken::Ident(ref var_ident) = next { [INFO] [stderr] | ________________________________^ [INFO] [stderr] 155 | | // Its another variable [INFO] [stderr] 156 | | self.symbol_table [INFO] [stderr] 157 | | .insert(ident.clone(), [INFO] [stderr] 158 | | Variable(LexerToken::Ident(var_ident.clone()))); [INFO] [stderr] 159 | | } [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] 154 | } else if let LexerToken::Ident(ref var_ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:162:20 [INFO] [stderr] | [INFO] [stderr] 162 | } else if let &LexerToken::Period = next { [INFO] [stderr] | ____________________^ [INFO] [stderr] 163 | | // Its a directive? Lets make sure: [INFO] [stderr] 164 | | peeker.next(); [INFO] [stderr] 165 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 182 | | } [INFO] [stderr] 183 | | } [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] 162 | } else if let LexerToken::Period = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:165:24 [INFO] [stderr] | [INFO] [stderr] 165 | if let None = peeker.peek() { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 166 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 167 | | } [INFO] [stderr] | |_________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:170:17 [INFO] [stderr] | [INFO] [stderr] 170 | / if let &LexerToken::Ident(ref directive) = next { [INFO] [stderr] 171 | | // Lets check if its a valid directive: [INFO] [stderr] 172 | | let directive = directive.to_uppercase(); [INFO] [stderr] 173 | | match &directive[..] { [INFO] [stderr] ... | [INFO] [stderr] 181 | | } [INFO] [stderr] 182 | | } [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] 170 | if let LexerToken::Ident(ref directive) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/assembler/parser.rs:199:5 [INFO] [stderr] | [INFO] [stderr] 199 | / fn consume_opcode<'a, I, S>(&mut self, [INFO] [stderr] 200 | | mut peeker: &mut Peekable, [INFO] [stderr] 201 | | ident: S) [INFO] [stderr] 202 | | -> Result, ParserError> [INFO] [stderr] ... | [INFO] [stderr] 490 | | unreachable!(); [INFO] [stderr] 491 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:211:16 [INFO] [stderr] | [INFO] [stderr] 211 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 212 | | if let Some(opcode) = [INFO] [stderr] 213 | | OpCode::from_mnemonic_and_addressing_mode(ident.clone(), AddressingMode::Implied) { [INFO] [stderr] 214 | | return Ok(vec![ParserToken::OpCode(opcode)]); [INFO] [stderr] ... | [INFO] [stderr] 487 | | } [INFO] [stderr] 488 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:262:28 [INFO] [stderr] | [INFO] [stderr] 262 | if let None = peeker.peek() { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 263 | | // Nothing else.. find an opcode with this ident and addressing mode [INFO] [stderr] 264 | | if let Some(opcode) = [INFO] [stderr] 265 | | OpCode::from_mnemonic_and_addressing_mode(ident, addressing_mode) { [INFO] [stderr] ... | [INFO] [stderr] 275 | | } [INFO] [stderr] 276 | | } [INFO] [stderr] | |_____________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:282:21 [INFO] [stderr] | [INFO] [stderr] 282 | / if let &LexerToken::Comma = next { [INFO] [stderr] 283 | | // Yes, its a comma. Consume it and check what is next [INFO] [stderr] 284 | | peeker.next(); [INFO] [stderr] 285 | | // If theres nothing after the comma thats an error [INFO] [stderr] ... | [INFO] [stderr] 325 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 326 | | } [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] 282 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:286:32 [INFO] [stderr] | [INFO] [stderr] 286 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 287 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 288 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:291:25 [INFO] [stderr] | [INFO] [stderr] 291 | / if let &LexerToken::Ident(ref register) = next { [INFO] [stderr] 292 | | let register = register.to_uppercase(); [INFO] [stderr] 293 | | if register != "X" && register != "Y" { [INFO] [stderr] 294 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] ... | [INFO] [stderr] 322 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 323 | | } [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] 291 | if let LexerToken::Ident(ref register) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:338:24 [INFO] [stderr] | [INFO] [stderr] 338 | if let None = peeker.peek() { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 339 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 340 | | } [INFO] [stderr] | |_________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:363:28 [INFO] [stderr] | [INFO] [stderr] 363 | if let None = peeker.peek() { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 364 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 365 | | } [INFO] [stderr] | |_____________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:367:21 [INFO] [stderr] | [INFO] [stderr] 367 | / if let &LexerToken::Comma = next { [INFO] [stderr] 368 | | // If its a comma - lets target IndirectX [INFO] [stderr] 369 | | peeker.next(); // skip the comma [INFO] [stderr] 370 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 462 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 463 | | } [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] 367 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:370:32 [INFO] [stderr] | [INFO] [stderr] 370 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 371 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 372 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:375:25 [INFO] [stderr] | [INFO] [stderr] 375 | / if let &LexerToken::Ident(ref register) = next { [INFO] [stderr] 376 | | let register = register.to_uppercase(); [INFO] [stderr] 377 | | if register != "X" { [INFO] [stderr] 378 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] ... | [INFO] [stderr] 402 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 403 | | } [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] 375 | if let LexerToken::Ident(ref register) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:383:36 [INFO] [stderr] | [INFO] [stderr] 383 | if let None = peeker.peek() { [INFO] [stderr] | _____________________________- ^^^^ [INFO] [stderr] 384 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 385 | | } [INFO] [stderr] | |_____________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:388:29 [INFO] [stderr] | [INFO] [stderr] 388 | / if let &LexerToken::CloseParenthesis = next { [INFO] [stderr] 389 | | peeker.next(); [INFO] [stderr] 390 | | // Lets make sure we can find an appropriate opcode [INFO] [stderr] 391 | | if let Some(opcode) = OpCode::from_mnemonic_and_addressing_mode(ident, AddressingMode::IndirectX) { [INFO] [stderr] ... | [INFO] [stderr] 399 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 400 | | } [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] 388 | if let LexerToken::CloseParenthesis = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:404:28 [INFO] [stderr] | [INFO] [stderr] 404 | } else if let &LexerToken::CloseParenthesis = next { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 405 | | // We're headed for Indirect or IndirectY .. [INFO] [stderr] 406 | | let addressing_mode = AddressingMode::IndirectY; [INFO] [stderr] 407 | | peeker.next(); // Skip the closing paren [INFO] [stderr] ... | [INFO] [stderr] 462 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 463 | | } [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] 404 | } else if let LexerToken::CloseParenthesis = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:409:32 [INFO] [stderr] | [INFO] [stderr] 409 | if let None = peeker.peek() { [INFO] [stderr] | _________________________- ^^^^ [INFO] [stderr] 410 | | // If this is the end.. then lets check if this [INFO] [stderr] 411 | | // is the indirect jump: JMP ($0000) [INFO] [stderr] 412 | | if let Some(opcode) = OpCode::from_mnemonic_and_addressing_mode(ident, AddressingMode::Indirect) { [INFO] [stderr] ... | [INFO] [stderr] 425 | | } [INFO] [stderr] 426 | | } [INFO] [stderr] | |_________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:430:25 [INFO] [stderr] | [INFO] [stderr] 430 | / if let &LexerToken::Comma = next { [INFO] [stderr] 431 | | // Great, lets continue [INFO] [stderr] 432 | | peeker.next(); // Skip the comma [INFO] [stderr] 433 | | if let None = peeker.peek() { [INFO] [stderr] ... | [INFO] [stderr] 459 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 460 | | } [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] 430 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:433:36 [INFO] [stderr] | [INFO] [stderr] 433 | if let None = peeker.peek() { [INFO] [stderr] | _____________________________- ^^^^ [INFO] [stderr] 434 | | return Err(ParserError::unexpected_eol(self.line)); [INFO] [stderr] 435 | | } [INFO] [stderr] | |_____________________________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:438:29 [INFO] [stderr] | [INFO] [stderr] 438 | / if let &LexerToken::Ident(ref register) = next { [INFO] [stderr] 439 | | let register = register.to_uppercase(); [INFO] [stderr] 440 | | // If its not IndirectY .. thats a problem [INFO] [stderr] 441 | | if register != "Y" { [INFO] [stderr] ... | [INFO] [stderr] 456 | | return Err(ParserError::unexpected_token(self.line)); [INFO] [stderr] 457 | | } [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] 438 | if let LexerToken::Ident(ref register) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:500:16 [INFO] [stderr] | [INFO] [stderr] 500 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 501 | | return Err(ParserError::expected_address(self.line)); [INFO] [stderr] 502 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:506:9 [INFO] [stderr] | [INFO] [stderr] 506 | / if let &LexerToken::Address(ref address) = next { [INFO] [stderr] 507 | | let bytes = self.parse_address_bytes(address)?; [INFO] [stderr] 508 | | return Ok(ParserToken::OrgDirective(LittleEndian::read_u16(&bytes))); [INFO] [stderr] 509 | | } else { [INFO] [stderr] 510 | | return Err(ParserError::expected_address(self.line)); [INFO] [stderr] 511 | | } [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] 506 | if let LexerToken::Address(ref address) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:523:16 [INFO] [stderr] | [INFO] [stderr] 523 | if let None = peeker.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 524 | | return Err(ParserError::expected_immediate(self.line)); [INFO] [stderr] 525 | | } [INFO] [stderr] | |_________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:529:13 [INFO] [stderr] | [INFO] [stderr] 529 | / if let &LexerToken::Ident(ref ident) = next { [INFO] [stderr] 530 | | let variable = self.get_variable_value(ident.clone())?; [INFO] [stderr] 531 | | if let LexerToken::Immediate(ref value, base) = variable.0 { [INFO] [stderr] 532 | | let immediate = self.unwrap_immediate(&value[..], base); [INFO] [stderr] ... | [INFO] [stderr] 541 | | return Err(ParserError::expected_immediate(self.line)); [INFO] [stderr] 542 | | } [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] 529 | if let LexerToken::Ident(ref ident) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:537:20 [INFO] [stderr] | [INFO] [stderr] 537 | } else if let &LexerToken::Immediate(ref value, base) = next { [INFO] [stderr] | ____________________^ [INFO] [stderr] 538 | | let immediate = self.unwrap_immediate(&value[..], base); [INFO] [stderr] 539 | | result.push(immediate); [INFO] [stderr] 540 | | } else { [INFO] [stderr] 541 | | return Err(ParserError::expected_immediate(self.line)); [INFO] [stderr] 542 | | } [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] 537 | } else if let LexerToken::Immediate(ref value, base) = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/assembler/parser.rs:545:20 [INFO] [stderr] | [INFO] [stderr] 545 | if let None = peeker.peek() { [INFO] [stderr] | _____________- ^^^^ [INFO] [stderr] 546 | | break; [INFO] [stderr] 547 | | } [INFO] [stderr] | |_____________- help: try this: `if peeker.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/parser.rs:550:13 [INFO] [stderr] | [INFO] [stderr] 550 | / if let &LexerToken::Comma = next { [INFO] [stderr] 551 | | // Awesome, go again [INFO] [stderr] 552 | | } else { [INFO] [stderr] 553 | | break; [INFO] [stderr] 554 | | } [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] 550 | if let LexerToken::Comma = *next { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/assembler/parser.rs:594:23 [INFO] [stderr] | [INFO] [stderr] 594 | let var = var.clone(); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 594 | let var = &(*var).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 594 | let var = &assembler::parser::Variable::clone(var); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `disassembler::Disassembler` [INFO] [stderr] --> src/disassembler.rs:40:5 [INFO] [stderr] | [INFO] [stderr] 40 | / pub fn new() -> Disassembler { [INFO] [stderr] 41 | | Disassembler { [INFO] [stderr] 42 | | disable_offsets: false, [INFO] [stderr] 43 | | disable_opcodes: true, [INFO] [stderr] 44 | | code_offset: 0, [INFO] [stderr] 45 | | } [INFO] [stderr] 46 | | } [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] 5 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/disassembler.rs:281:28 [INFO] [stderr] | [INFO] [stderr] 281 | .filter(|line| line.len() > 0) [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!line.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `cpu::cpu::Cpu` [INFO] [stderr] --> src/cpu/cpu.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn new() -> Cpu { [INFO] [stderr] 42 | | Cpu { [INFO] [stderr] 43 | | memory: MemoryBus::new(), [INFO] [stderr] 44 | | registers: Registers::new(), [INFO] [stderr] ... | [INFO] [stderr] 47 | | } [INFO] [stderr] 48 | | } [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] 39 | impl Default for cpu::cpu::Cpu { [INFO] [stderr] 40 | fn default() -> Self { [INFO] [stderr] 41 | Self::new() [INFO] [stderr] 42 | } [INFO] [stderr] 43 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:59:16 [INFO] [stderr] | [INFO] [stderr] 59 | if addr as u32 + code.len() as u32 - 1 > u16::max_value() as u32 { [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u32::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 u32 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:59:54 [INFO] [stderr] | [INFO] [stderr] 59 | if addr as u32 + code.len() as u32 - 1 > u16::max_value() as u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(u16::max_value())` [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 `x` is used to index `code` [INFO] [stderr] --> src/cpu/cpu.rs:70:18 [INFO] [stderr] | [INFO] [stderr] 70 | for x in 0..code.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] 70 | for (x, ) in code.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u64 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:93:18 [INFO] [stderr] | [INFO] [stderr] 93 | v += self.step()? as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(self.step()?)` [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/cpu.rs:112:34 [INFO] [stderr] | [INFO] [stderr] 112 | self.registers.PC += opcode.length as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(opcode.length)` [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/cpu.rs:200:41 [INFO] [stderr] | [INFO] [stderr] 200 | ZeroPage => Operand::Memory((self.read_byte(operand_start) as u16) & 0xFF), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(operand_start))` [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/cpu.rs:202:34 [INFO] [stderr] | [INFO] [stderr] 202 | Operand::Memory((self.registers.X as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.X)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:202:60 [INFO] [stderr] | [INFO] [stderr] 202 | Operand::Memory((self.registers.X as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(operand_start))` [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/cpu.rs:206:34 [INFO] [stderr] | [INFO] [stderr] 206 | Operand::Memory((self.registers.Y as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.Y)` [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/cpu.rs:206:60 [INFO] [stderr] | [INFO] [stderr] 206 | Operand::Memory((self.registers.Y as u16 + self.read_byte(operand_start) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(operand_start))` [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/cpu.rs:210:42 [INFO] [stderr] | [INFO] [stderr] 210 | AbsoluteX => Operand::Memory(self.registers.X as u16 + self.read_u16(operand_start)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.X)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:211:42 [INFO] [stderr] | [INFO] [stderr] 211 | AbsoluteY => Operand::Memory(self.registers.Y as u16 + self.read_u16(operand_start)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.Y)` [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/cpu.rs:214:48 [INFO] [stderr] | [INFO] [stderr] 214 | Operand::Memory(self.read_u16((self.registers.X as u16 + [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.X)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:215:48 [INFO] [stderr] | [INFO] [stderr] 215 | self.read_byte(self.registers.PC + 1) as u16) & [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(self.registers.PC + 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:219:33 [INFO] [stderr] | [INFO] [stderr] 219 | Operand::Memory(self.registers.Y as u16 + [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.Y)` [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/cpu.rs:220:47 [INFO] [stderr] | [INFO] [stderr] 220 | self.read_u16(self.read_byte(self.registers.PC + 1) as u16)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.read_byte(self.registers.PC + 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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:235:41 [INFO] [stderr] | [INFO] [stderr] 235 | Operand::Immediate(byte) => byte as u16, [INFO] [stderr] | ^^^^^^^^^^^ help: try: `u16::from(byte)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:251:36 [INFO] [stderr] | [INFO] [stderr] 251 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:253:9 [INFO] [stderr] | [INFO] [stderr] 253 | self.stack.push_u16(mem, self.registers.PC); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:254:9 [INFO] [stderr] | [INFO] [stderr] 254 | self.stack.push(mem, self.flags.to_u8()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:274:36 [INFO] [stderr] | [INFO] [stderr] 274 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:276:9 [INFO] [stderr] | [INFO] [stderr] 276 | self.stack.push_u16(mem, self.registers.PC); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:277:9 [INFO] [stderr] | [INFO] [stderr] 277 | self.stack.push(mem, self.flags.to_u8()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:296:21 [INFO] [stderr] | [INFO] [stderr] 296 | let value = self.unwrap_immediate(&operand) as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.unwrap_immediate(&operand))` [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/cpu.rs:300:26 [INFO] [stderr] | [INFO] [stderr] 300 | let mut result = self.registers.A as u16 + value as u16 + carry as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.A)` [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/cpu.rs:304:17 [INFO] [stderr] | [INFO] [stderr] 304 | if (self.registers.A as u16 & 0x0F) + (value & 0x0F) + carry > 0x09 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.registers.A)` [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/cpu.rs:314:27 [INFO] [stderr] | [INFO] [stderr] 314 | self.flags.zero = result as u8 & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(result as u8).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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:314:27 [INFO] [stderr] | [INFO] [stderr] 314 | self.flags.zero = result as u8 & 0xFF == 0x00; [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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:321:28 [INFO] [stderr] | [INFO] [stderr] 321 | self.registers.A = result as u8 & 0xFF; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:330:27 [INFO] [stderr] | [INFO] [stderr] 330 | self.flags.zero = result as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(result as u8).trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:330:27 [INFO] [stderr] | [INFO] [stderr] 330 | self.flags.zero = result as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:335:25 [INFO] [stderr] | [INFO] [stderr] 335 | let mut value = if let &Operand::Implied = operand { [INFO] [stderr] | _________________________^ [INFO] [stderr] 336 | | // Implied ASL uses the A register [INFO] [stderr] 337 | | self.registers.A [INFO] [stderr] 338 | | } else { [INFO] [stderr] 339 | | self.unwrap_immediate(&operand) [INFO] [stderr] 340 | | }; [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] 335 | let mut value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/cpu/cpu.rs:347:9 [INFO] [stderr] | [INFO] [stderr] 347 | value = value << 0x01; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `value <<= 0x01` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:349:27 [INFO] [stderr] | [INFO] [stderr] 349 | self.flags.zero = value as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(value as u8).trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value as u8` [INFO] [stderr] --> src/cpu/cpu.rs:349:27 [INFO] [stderr] | [INFO] [stderr] 349 | self.flags.zero = value as u8 & 0xFF == 0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:351:9 [INFO] [stderr] | [INFO] [stderr] 351 | / if let &Operand::Implied = operand { [INFO] [stderr] 352 | | self.registers.A = value; [INFO] [stderr] 353 | | } else { [INFO] [stderr] 354 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 355 | | self.write_byte(addr, value); [INFO] [stderr] 356 | | } [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] 351 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:456:27 [INFO] [stderr] | [INFO] [stderr] 456 | let result: i16 = byte as i16 - value as i16; [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i16::from(byte)` [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/cpu.rs:456:41 [INFO] [stderr] | [INFO] [stderr] 456 | let result: i16 = byte as i16 - value as i16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i16::from(value)` [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/cpu.rs:459:27 [INFO] [stderr] | [INFO] [stderr] 459 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:471:27 [INFO] [stderr] | [INFO] [stderr] 471 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:471:27 [INFO] [stderr] | [INFO] [stderr] 471 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:478:27 [INFO] [stderr] | [INFO] [stderr] 478 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.X.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.X` [INFO] [stderr] --> src/cpu/cpu.rs:478:27 [INFO] [stderr] | [INFO] [stderr] 478 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:485:27 [INFO] [stderr] | [INFO] [stderr] 485 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.Y.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.Y` [INFO] [stderr] --> src/cpu/cpu.rs:485:27 [INFO] [stderr] | [INFO] [stderr] 485 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:495:27 [INFO] [stderr] | [INFO] [stderr] 495 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:495:27 [INFO] [stderr] | [INFO] [stderr] 495 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:506:27 [INFO] [stderr] | [INFO] [stderr] 506 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:506:27 [INFO] [stderr] | [INFO] [stderr] 506 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:513:27 [INFO] [stderr] | [INFO] [stderr] 513 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.X.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.X` [INFO] [stderr] --> src/cpu/cpu.rs:513:27 [INFO] [stderr] | [INFO] [stderr] 513 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:520:27 [INFO] [stderr] | [INFO] [stderr] 520 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.Y.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.Y` [INFO] [stderr] --> src/cpu/cpu.rs:520:27 [INFO] [stderr] | [INFO] [stderr] 520 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:530:40 [INFO] [stderr] | [INFO] [stderr] 530 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/cpu.rs:532:9 [INFO] [stderr] | [INFO] [stderr] 532 | self.stack.push_u16(mem, self.registers.PC); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:541:27 [INFO] [stderr] | [INFO] [stderr] 541 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:541:27 [INFO] [stderr] | [INFO] [stderr] 541 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:549:27 [INFO] [stderr] | [INFO] [stderr] 549 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:549:27 [INFO] [stderr] | [INFO] [stderr] 549 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:557:27 [INFO] [stderr] | [INFO] [stderr] 557 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:557:27 [INFO] [stderr] | [INFO] [stderr] 557 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:562:21 [INFO] [stderr] | [INFO] [stderr] 562 | let value = if let &Operand::Implied = operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 563 | | self.registers.A [INFO] [stderr] 564 | | } else { [INFO] [stderr] 565 | | self.unwrap_immediate(&operand) [INFO] [stderr] 566 | | }; [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] 562 | let value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:573:27 [INFO] [stderr] | [INFO] [stderr] 573 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:573:27 [INFO] [stderr] | [INFO] [stderr] 573 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:575:9 [INFO] [stderr] | [INFO] [stderr] 575 | / if let &Operand::Implied = operand { [INFO] [stderr] 576 | | self.registers.A = value; [INFO] [stderr] 577 | | } else { [INFO] [stderr] 578 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 579 | | self.memory.write_byte(addr, value); [INFO] [stderr] 580 | | } [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] 575 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:592:27 [INFO] [stderr] | [INFO] [stderr] 592 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `result.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result` [INFO] [stderr] --> src/cpu/cpu.rs:592:27 [INFO] [stderr] | [INFO] [stderr] 592 | self.flags.zero = result & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:598:40 [INFO] [stderr] | [INFO] [stderr] 598 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:604:40 [INFO] [stderr] | [INFO] [stderr] 604 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:610:36 [INFO] [stderr] | [INFO] [stderr] 610 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:618:36 [INFO] [stderr] | [INFO] [stderr] 618 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:626:40 [INFO] [stderr] | [INFO] [stderr] 626 | let mut mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:633:21 [INFO] [stderr] | [INFO] [stderr] 633 | let value = if let &Operand::Implied = operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 634 | | self.registers.A [INFO] [stderr] 635 | | } else { [INFO] [stderr] 636 | | self.unwrap_immediate(&operand) [INFO] [stderr] 637 | | }; [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] 633 | let value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:649:27 [INFO] [stderr] | [INFO] [stderr] 649 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:649:27 [INFO] [stderr] | [INFO] [stderr] 649 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:651:9 [INFO] [stderr] | [INFO] [stderr] 651 | / if let &Operand::Implied = operand { [INFO] [stderr] 652 | | self.registers.A = value; [INFO] [stderr] 653 | | } else { [INFO] [stderr] 654 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 655 | | self.memory.write_byte(addr, value); [INFO] [stderr] 656 | | } [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] 651 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:659:21 [INFO] [stderr] | [INFO] [stderr] 659 | let value = if let &Operand::Implied = operand { [INFO] [stderr] | _____________________^ [INFO] [stderr] 660 | | self.registers.A [INFO] [stderr] 661 | | } else { [INFO] [stderr] 662 | | self.unwrap_immediate(&operand) [INFO] [stderr] 663 | | }; [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] 659 | let value = if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:675:27 [INFO] [stderr] | [INFO] [stderr] 675 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:675:27 [INFO] [stderr] | [INFO] [stderr] 675 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cpu/cpu.rs:677:9 [INFO] [stderr] | [INFO] [stderr] 677 | / if let &Operand::Implied = operand { [INFO] [stderr] 678 | | self.registers.A = value; [INFO] [stderr] 679 | | } else { [INFO] [stderr] 680 | | let addr = self.unwrap_address(&operand); [INFO] [stderr] 681 | | self.memory.write_byte(addr, value); [INFO] [stderr] 682 | | } [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] 677 | if let Operand::Implied = *operand { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/cpu/cpu.rs:686:36 [INFO] [stderr] | [INFO] [stderr] 686 | let mem = &mut self.memory[STACK_START..STACK_END + 0x01]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `STACK_START..=STACK_END` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:698:21 [INFO] [stderr] | [INFO] [stderr] 698 | let value = self.unwrap_immediate(&operand) as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.unwrap_immediate(&operand))` [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/cpu.rs:702:26 [INFO] [stderr] | [INFO] [stderr] 702 | let mut result = self.registers.A as i16 - value as i16 - carry as i16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.registers.A)` [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/cpu.rs:704:27 [INFO] [stderr] | [INFO] [stderr] 704 | self.flags.zero = result as u8 & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(result as u8).trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `result as u8` [INFO] [stderr] --> src/cpu/cpu.rs:704:27 [INFO] [stderr] | [INFO] [stderr] 704 | self.flags.zero = result as u8 & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:712:18 [INFO] [stderr] | [INFO] [stderr] 712 | if (((self.registers.A as i16) & 0x0F) - carry as i16) < ((value as i16) & 0x0F) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.registers.A)` [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/cpu.rs:749:27 [INFO] [stderr] | [INFO] [stderr] 749 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.A.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.A` [INFO] [stderr] --> src/cpu/cpu.rs:749:27 [INFO] [stderr] | [INFO] [stderr] 749 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:756:27 [INFO] [stderr] | [INFO] [stderr] 756 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.A.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.A` [INFO] [stderr] --> src/cpu/cpu.rs:756:27 [INFO] [stderr] | [INFO] [stderr] 756 | self.flags.zero = self.registers.A & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:764:27 [INFO] [stderr] | [INFO] [stderr] 764 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `value.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `value` [INFO] [stderr] --> src/cpu/cpu.rs:764:27 [INFO] [stderr] | [INFO] [stderr] 764 | self.flags.zero = value & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:771:27 [INFO] [stderr] | [INFO] [stderr] 771 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.X.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.X` [INFO] [stderr] --> src/cpu/cpu.rs:771:27 [INFO] [stderr] | [INFO] [stderr] 771 | self.flags.zero = self.registers.X & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: bit mask could be simplified with a call to `trailing_zeros` [INFO] [stderr] --> src/cpu/cpu.rs:782:27 [INFO] [stderr] | [INFO] [stderr] 782 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.registers.Y.trailing_zeros() >= 8` [INFO] [stderr] | [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: the operation is ineffective. Consider reducing it to `self.registers.Y` [INFO] [stderr] --> src/cpu/cpu.rs:782:27 [INFO] [stderr] | [INFO] [stderr] 782 | self.flags.zero = self.registers.Y & 0xFF == 0x00; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cpu/cpu.rs:789:42 [INFO] [stderr] | [INFO] [stderr] 789 | self.registers.PC -= 0x100 - offset as u16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::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/cpu.rs:791:34 [INFO] [stderr] | [INFO] [stderr] 791 | self.registers.PC += offset as u16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::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: useless use of `format!` [INFO] [stderr] --> src/cpu/cpu_error.rs:17:22 [INFO] [stderr] | [INFO] [stderr] 17 | message: format!("CODE segment out of bounds"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"CODE segment out of bounds".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `cpu::memory_bus::MemoryBus` [INFO] [stderr] --> src/cpu/memory_bus.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> MemoryBus { [INFO] [stderr] 12 | | MemoryBus { ram: [0; 1024 * 64] } [INFO] [stderr] 13 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | impl Default for cpu::memory_bus::MemoryBus { [INFO] [stderr] 11 | fn default() -> Self { [INFO] [stderr] 12 | Self::new() [INFO] [stderr] 13 | } [INFO] [stderr] 14 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cpu::stack::Stack` [INFO] [stderr] --> src/cpu/stack.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | / pub fn new() -> Stack { [INFO] [stderr] 27 | | Stack { pointer: 0xFF } [INFO] [stderr] 28 | | } [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] 21 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:85:9 [INFO] [stderr] | [INFO] [stderr] 85 | stack.push(&mut stack_area, 55); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:95:9 [INFO] [stderr] | [INFO] [stderr] 95 | stack.push(&mut stack_area, 55); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: The function/method `pop` doesn't need a mutable reference [INFO] [stderr] --> src/cpu/stack.rs:96:29 [INFO] [stderr] | [INFO] [stderr] 96 | let val = stack.pop(&mut stack_area).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:106:9 [INFO] [stderr] | [INFO] [stderr] 106 | stack.push(&mut stack_area, 5); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:107:9 [INFO] [stderr] | [INFO] [stderr] 107 | stack.push(&mut stack_area, 10); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:108:9 [INFO] [stderr] | [INFO] [stderr] 108 | stack.push(&mut stack_area, 15); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | stack.push(&mut stack_area, 20); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: The function/method `pop` doesn't need a mutable reference [INFO] [stderr] --> src/cpu/stack.rs:111:32 [INFO] [stderr] | [INFO] [stderr] 111 | let twenty = stack.pop(&mut stack_area).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `pop` doesn't need a mutable reference [INFO] [stderr] --> src/cpu/stack.rs:112:33 [INFO] [stderr] | [INFO] [stderr] 112 | let fifteen = stack.pop(&mut stack_area).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `pop` doesn't need a mutable reference [INFO] [stderr] --> src/cpu/stack.rs:113:29 [INFO] [stderr] | [INFO] [stderr] 113 | let ten = stack.pop(&mut stack_area).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `pop` doesn't need a mutable reference [INFO] [stderr] --> src/cpu/stack.rs:114:30 [INFO] [stderr] | [INFO] [stderr] 114 | let five = stack.pop(&mut stack_area).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: The function/method `pop` doesn't need a mutable reference [INFO] [stderr] --> src/cpu/stack.rs:127:32 [INFO] [stderr] | [INFO] [stderr] 127 | let result = stack.pop(&mut stack_area); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:138:13 [INFO] [stderr] | [INFO] [stderr] 138 | stack.push(&mut stack_area, 5); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:151:9 [INFO] [stderr] | [INFO] [stderr] 151 | stack.push_u16(&mut stack_area, 0x4400); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cpu/stack.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | stack.push_u16(&mut stack_area, 0x4400); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: static variable `OpCodes` should have an upper case name such as `OP_CODES` [INFO] [stderr] --> src/opcodes.rs:53:1 [INFO] [stderr] | [INFO] [stderr] 53 | / static OpCodes: [OpCode; 151] = [OpCode { [INFO] [stderr] 54 | | code: 0x69, [INFO] [stderr] 55 | | mnemonic: "ADC", [INFO] [stderr] 56 | | length: 2, [INFO] [stderr] ... | [INFO] [stderr] 1108 | | mode: AddressingMode::Absolute, [INFO] [stderr] 1109 | | }]; [INFO] [stderr] | |____________________________________^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rs6502`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "21b28bdbfb678011e9c500e7c48fad5e9d6ad38f9e2af443382f971cf0137273"` [INFO] running `"docker" "rm" "-f" "21b28bdbfb678011e9c500e7c48fad5e9d6ad38f9e2af443382f971cf0137273"` [INFO] [stdout] 21b28bdbfb678011e9c500e7c48fad5e9d6ad38f9e2af443382f971cf0137273