[INFO] updating cached repository patallen/SlangVM [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/patallen/SlangVM [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/patallen/SlangVM" "work/ex/clippy-test-run/sources/stable/gh/patallen/SlangVM"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/patallen/SlangVM'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/patallen/SlangVM" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/patallen/SlangVM"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/patallen/SlangVM'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 7660c5494308d811895b859bbd512253f72ba01d [INFO] sha for GitHub repo patallen/SlangVM: 7660c5494308d811895b859bbd512253f72ba01d [INFO] validating manifest of patallen/SlangVM 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 patallen/SlangVM 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 patallen/SlangVM [INFO] finished frobbing patallen/SlangVM [INFO] frobbed toml for patallen/SlangVM written to work/ex/clippy-test-run/sources/stable/gh/patallen/SlangVM/Cargo.toml [INFO] started frobbing patallen/SlangVM [INFO] finished frobbing patallen/SlangVM [INFO] frobbed toml for patallen/SlangVM written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/patallen/SlangVM/Cargo.toml [INFO] crate patallen/SlangVM has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting patallen/SlangVM against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/patallen/SlangVM:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 6e3411010f6e4794f05619de5669c60172baee2f7f8bfbbba9d4e7146c03f6b4 [INFO] running `"docker" "start" "-a" "6e3411010f6e4794f05619de5669c60172baee2f7f8bfbbba9d4e7146c03f6b4"` [INFO] [stderr] Checking serde v1.0.4 [INFO] [stderr] Checking quick-error v1.2.0 [INFO] [stderr] Compiling miniz-sys v0.1.9 [INFO] [stderr] Checking thread-id v3.1.0 [INFO] [stderr] Checking itertools v0.6.0 [INFO] [stderr] Compiling serde_derive_internals v0.15.0 [INFO] [stderr] Checking thread_local v0.3.3 [INFO] [stderr] Checking humantime v1.0.0 [INFO] [stderr] Checking regex v0.2.1 [INFO] [stderr] Checking flate2 v0.2.19 [INFO] [stderr] Compiling serde_derive v1.0.4 [INFO] [stderr] Checking serde_yaml v0.7.0 [INFO] [stderr] Checking serde-value v0.5.0 [INFO] [stderr] Checking serde_json v1.0.2 [INFO] [stderr] Checking log4rs v0.7.0 [INFO] [stderr] Checking slang v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/vm.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | program: program, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `program` [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/stack.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | ret: ret, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ret` [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/assembler/lexer.rs:87:13 [INFO] [stderr] | [INFO] [stderr] 87 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `source` [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/assembler/mod.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `source` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/instruction.rs:15:13 [INFO] [stderr] | [INFO] [stderr] 15 | code: code, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `code` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/instruction.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | value: value, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [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/vm.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | program: program, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `program` [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/stack.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | ret: ret, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `ret` [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/assembler/lexer.rs:87:13 [INFO] [stderr] | [INFO] [stderr] 87 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `source` [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/assembler/mod.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `source` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/instruction.rs:15:13 [INFO] [stderr] | [INFO] [stderr] 15 | code: code, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `code` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/instruction.rs:17:13 [INFO] [stderr] | [INFO] [stderr] 17 | value: value, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `value` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/vm.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / return VirtualMachine { [INFO] [stderr] 23 | | stack: Stack::new(), [INFO] [stderr] 24 | | callstack: CallStack::new(), [INFO] [stderr] 25 | | program: program, [INFO] [stderr] 26 | | mem: [0; 0xFFFF], [INFO] [stderr] 27 | | current_frame: CallFrame::new(0), [INFO] [stderr] 28 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 22 | VirtualMachine { [INFO] [stderr] 23 | stack: Stack::new(), [INFO] [stderr] 24 | callstack: CallStack::new(), [INFO] [stderr] 25 | program: program, [INFO] [stderr] 26 | mem: [0; 0xFFFF], [INFO] [stderr] 27 | current_frame: CallFrame::new(0), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/assembler/lexer.rs:117:9 [INFO] [stderr] | [INFO] [stderr] 117 | return rv [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `rv` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/assembler/mod.rs:242:24 [INFO] [stderr] | [INFO] [stderr] 242 | let val = (value & 0xFFFFFFFF) as i32; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFFFF_FFFF` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `assembler::lexer::Lexer` [INFO] [stderr] --> src/main.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | use assembler::lexer::Lexer; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Tokenizer`, `shunting_yard` [INFO] [stderr] --> src/main.rs:24:21 [INFO] [stderr] | [INFO] [stderr] 24 | use compiler::lex::{Tokenizer, shunting_yard}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/vm.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / return VirtualMachine { [INFO] [stderr] 23 | | stack: Stack::new(), [INFO] [stderr] 24 | | callstack: CallStack::new(), [INFO] [stderr] 25 | | program: program, [INFO] [stderr] 26 | | mem: [0; 0xFFFF], [INFO] [stderr] 27 | | current_frame: CallFrame::new(0), [INFO] [stderr] 28 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 22 | VirtualMachine { [INFO] [stderr] 23 | stack: Stack::new(), [INFO] [stderr] 24 | callstack: CallStack::new(), [INFO] [stderr] 25 | program: program, [INFO] [stderr] 26 | mem: [0; 0xFFFF], [INFO] [stderr] 27 | current_frame: CallFrame::new(0), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/vm.rs:247:36 [INFO] [stderr] | [INFO] [stderr] 247 | assert!(inst.value.unwrap() == 0xFFFFFFFF); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFFFF_FFFF` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/assembler/lexer.rs:117:9 [INFO] [stderr] | [INFO] [stderr] 117 | return rv [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `rv` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/assembler/mod.rs:242:24 [INFO] [stderr] | [INFO] [stderr] 242 | let val = (value & 0xFFFFFFFF) as i32; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFFFF_FFFF` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/assembler/mod.rs:262:17 [INFO] [stderr] | [INFO] [stderr] 262 | let value = 999999; [INFO] [stderr] | ^^^^^^ help: consider: `999_999` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused import: `assembler::lexer::Lexer` [INFO] [stderr] --> src/main.rs:23:5 [INFO] [stderr] | [INFO] [stderr] 23 | use assembler::lexer::Lexer; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Tokenizer`, `shunting_yard` [INFO] [stderr] --> src/main.rs:24:21 [INFO] [stderr] | [INFO] [stderr] 24 | use compiler::lex::{Tokenizer, shunting_yard}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `next_code` [INFO] [stderr] --> src/program.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | pub fn next_code(&mut self) -> u16 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `reset` [INFO] [stderr] --> src/program.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn reset(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `Token` [INFO] [stderr] --> src/compiler/lex.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | pub enum Token { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `ConsumeType` [INFO] [stderr] --> src/compiler/lex.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | enum ConsumeType { Ident, Number } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Tokenizer` [INFO] [stderr] --> src/compiler/lex.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | pub struct Tokenizer<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/compiler/lex.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn new(input: &'a str) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `tokenize` [INFO] [stderr] --> src/compiler/lex.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn tokenize(&mut self) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `consume_ident` [INFO] [stderr] --> src/compiler/lex.rs:48:1 [INFO] [stderr] | [INFO] [stderr] 48 | fn consume_ident(peekable: &mut Peekable) -> Token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `consume_number` [INFO] [stderr] --> src/compiler/lex.rs:53:1 [INFO] [stderr] | [INFO] [stderr] 53 | fn consume_number(peekable: &mut Peekable) -> Token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `valid_token_char` [INFO] [stderr] --> src/compiler/lex.rs:58:1 [INFO] [stderr] | [INFO] [stderr] 58 | fn valid_token_char(ch: &char, tt: ConsumeType) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `shunting_yard` [INFO] [stderr] --> src/compiler/lex.rs:71:1 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn shunting_yard(tokens: Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `current_line` [INFO] [stderr] --> src/assembler/mod.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | current_line: usize, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `errors` [INFO] [stderr] --> src/assembler/mod.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | errors: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `Token` [INFO] [stderr] --> src/compiler/lex.rs:7:1 [INFO] [stderr] | [INFO] [stderr] 7 | pub enum Token { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `ConsumeType` [INFO] [stderr] --> src/compiler/lex.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | enum ConsumeType { Ident, Number } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Tokenizer` [INFO] [stderr] --> src/compiler/lex.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | pub struct Tokenizer<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/compiler/lex.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn new(input: &'a str) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `tokenize` [INFO] [stderr] --> src/compiler/lex.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn tokenize(&mut self) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `consume_ident` [INFO] [stderr] --> src/compiler/lex.rs:48:1 [INFO] [stderr] | [INFO] [stderr] 48 | fn consume_ident(peekable: &mut Peekable) -> Token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `consume_number` [INFO] [stderr] --> src/compiler/lex.rs:53:1 [INFO] [stderr] | [INFO] [stderr] 53 | fn consume_number(peekable: &mut Peekable) -> Token { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `valid_token_char` [INFO] [stderr] --> src/compiler/lex.rs:58:1 [INFO] [stderr] | [INFO] [stderr] 58 | fn valid_token_char(ch: &char, tt: ConsumeType) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `shunting_yard` [INFO] [stderr] --> src/compiler/lex.rs:71:1 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn shunting_yard(tokens: Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/stack.rs:49:10 [INFO] [stderr] | [INFO] [stderr] 49 | *self.locals.get(&addr).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.locals[&addr]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/stack.rs:49:10 [INFO] [stderr] | [INFO] [stderr] 49 | *self.locals.get(&addr).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.locals[&addr]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/stack.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | assert!(stack.space.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stack.space.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/stack.rs:92:13 [INFO] [stderr] | [INFO] [stderr] 92 | assert!(stack.space.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `stack.space.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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/program.rs:21:18 [INFO] [stderr] | [INFO] [stderr] 21 | let rv = (self.next_byte() as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.next_byte())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/program.rs:22:14 [INFO] [stderr] | [INFO] [stderr] 22 | rv | self.next_byte() as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.next_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 u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/program.rs:25:18 [INFO] [stderr] | [INFO] [stderr] 25 | let rv = (self.next_halfword() as u32) << 16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.next_halfword())` [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/program.rs:26:14 [INFO] [stderr] | [INFO] [stderr] 26 | rv | self.next_halfword() as u32 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.next_halfword())` [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/program.rs:21:18 [INFO] [stderr] | [INFO] [stderr] 21 | let rv = (self.next_byte() as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.next_byte())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/program.rs:22:14 [INFO] [stderr] | [INFO] [stderr] 22 | rv | self.next_byte() as u16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(self.next_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 u16 to u32 may become silently lossy if types change [INFO] [stderr] --> src/program.rs:25:18 [INFO] [stderr] | [INFO] [stderr] 25 | let rv = (self.next_halfword() as u32) << 16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.next_halfword())` [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/program.rs:26:14 [INFO] [stderr] | [INFO] [stderr] 26 | rv | self.next_halfword() as u32 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.next_halfword())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::iter::Iterator::collect` that must be used [INFO] [stderr] --> src/compiler/lex.rs:38:73 [INFO] [stderr] | [INFO] [stderr] 38 | ')' => {tokens.push(Token::RightParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead [INFO] [stderr] [INFO] [stderr] warning: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator [INFO] [stderr] --> src/compiler/lex.rs:38:73 [INFO] [stderr] | [INFO] [stderr] 38 | ')' => {tokens.push(Token::RightParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_collect [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::iter::Iterator::collect` that must be used [INFO] [stderr] --> src/compiler/lex.rs:39:72 [INFO] [stderr] | [INFO] [stderr] 39 | '(' => {tokens.push(Token::LeftParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead [INFO] [stderr] [INFO] [stderr] warning: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator [INFO] [stderr] --> src/compiler/lex.rs:39:72 [INFO] [stderr] | [INFO] [stderr] 39 | '(' => {tokens.push(Token::LeftParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_collect [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::iter::Iterator::collect` that must be used [INFO] [stderr] --> src/compiler/lex.rs:40:42 [INFO] [stderr] | [INFO] [stderr] 40 | ' ' => { chars.take(1).collect::(); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead [INFO] [stderr] [INFO] [stderr] warning: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator [INFO] [stderr] --> src/compiler/lex.rs:40:42 [INFO] [stderr] | [INFO] [stderr] 40 | ' ' => { chars.take(1).collect::(); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_collect [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/compiler/lex.rs:58:25 [INFO] [stderr] | [INFO] [stderr] 58 | fn valid_token_char(ch: &char, tt: ConsumeType) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/compiler/lex.rs:79:17 [INFO] [stderr] | [INFO] [stderr] 79 | / match operators.last() { [INFO] [stderr] 80 | | Some(&Token::Operator(_, lp)) => { [INFO] [stderr] 81 | | if cp > lp { output.push(operators.pop().unwrap()); } [INFO] [stderr] 82 | | }, _ => {} [INFO] [stderr] 83 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 79 | if let Some(&Token::Operator(_, lp)) = operators.last() { [INFO] [stderr] 80 | if cp > lp { output.push(operators.pop().unwrap()); } [INFO] [stderr] 81 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::iter::Iterator::collect` that must be used [INFO] [stderr] --> src/compiler/lex.rs:38:73 [INFO] [stderr] | [INFO] [stderr] 38 | ')' => {tokens.push(Token::RightParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead [INFO] [stderr] [INFO] [stderr] warning: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator [INFO] [stderr] --> src/compiler/lex.rs:38:73 [INFO] [stderr] | [INFO] [stderr] 38 | ')' => {tokens.push(Token::RightParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_collect [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::iter::Iterator::collect` that must be used [INFO] [stderr] --> src/compiler/lex.rs:39:72 [INFO] [stderr] | [INFO] [stderr] 39 | '(' => {tokens.push(Token::LeftParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead [INFO] [stderr] [INFO] [stderr] warning: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator [INFO] [stderr] --> src/compiler/lex.rs:39:72 [INFO] [stderr] | [INFO] [stderr] 39 | '(' => {tokens.push(Token::LeftParen); chars.take(1).collect::();}, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_collect [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::iter::Iterator::collect` that must be used [INFO] [stderr] --> src/compiler/lex.rs:40:42 [INFO] [stderr] | [INFO] [stderr] 40 | ' ' => { chars.take(1).collect::(); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead [INFO] [stderr] [INFO] [stderr] warning: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator [INFO] [stderr] --> src/compiler/lex.rs:40:42 [INFO] [stderr] | [INFO] [stderr] 40 | ' ' => { chars.take(1).collect::(); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_collect [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/compiler/lex.rs:58:25 [INFO] [stderr] | [INFO] [stderr] 58 | fn valid_token_char(ch: &char, tt: ConsumeType) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `char` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/compiler/lex.rs:79:17 [INFO] [stderr] | [INFO] [stderr] 79 | / match operators.last() { [INFO] [stderr] 80 | | Some(&Token::Operator(_, lp)) => { [INFO] [stderr] 81 | | if cp > lp { output.push(operators.pop().unwrap()); } [INFO] [stderr] 82 | | }, _ => {} [INFO] [stderr] 83 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 79 | if let Some(&Token::Operator(_, lp)) = operators.last() { [INFO] [stderr] 80 | if cp > lp { output.push(operators.pop().unwrap()); } [INFO] [stderr] 81 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: trivial regex [INFO] [stderr] --> src/assembler/lexer.rs:11:50 [INFO] [stderr] | [INFO] [stderr] 11 | static ref REGEX_NEWLINE: Regex = Regex::new(r"^\n$").unwrap(); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivial_regex)] on by default [INFO] [stderr] = help: consider using `==` on `str`s [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivial_regex [INFO] [stderr] [INFO] [stderr] warning: trivial regex [INFO] [stderr] --> src/assembler/lexer.rs:11:50 [INFO] [stderr] | [INFO] [stderr] 11 | static ref REGEX_NEWLINE: Regex = Regex::new(r"^\n$").unwrap(); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivial_regex)] on by default [INFO] [stderr] = help: consider using `==` on `str`s [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivial_regex [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/lexer.rs:75:67 [INFO] [stderr] | [INFO] [stderr] 75 | Err(format!("{} did not match any tokens during lexing.", string.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] 75 | Err(format!("{} did not match any tokens during lexing.", &(*string).clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 75 | Err(format!("{} did not match any tokens during lexing.", &str::clone(string))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/assembler/lexer.rs:85:24 [INFO] [stderr] | [INFO] [stderr] 85 | pub fn new(source: &'a String) -> Self { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/assembler/lexer.rs:94:40 [INFO] [stderr] | [INFO] [stderr] 94 | let mut current = &self.source[self.base_index..self.base_index+1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index..=self.base_index` [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: an inclusive range would be more readable [INFO] [stderr] --> src/assembler/lexer.rs:97:36 [INFO] [stderr] | [INFO] [stderr] 97 | current = &self.source[self.base_index..self.base_index+1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index..=self.base_index` [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/assembler/lexer.rs:101:37 [INFO] [stderr] | [INFO] [stderr] 101 | let mut temp = &self.source[self.base_index + self.offset..self.base_index + self.offset + 1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index + self.offset..=self.base_index + self.offset` [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/assembler/lexer.rs:105:37 [INFO] [stderr] | [INFO] [stderr] 105 | temp = &self.source[self.base_index + self.offset..self.base_index + self.offset + 1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index + self.offset..=self.base_index + self.offset` [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/assembler/lexer.rs:111:37 [INFO] [stderr] | [INFO] [stderr] 111 | temp = &self.source[self.base_index + self.offset..self.base_index + self.offset + 1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index + self.offset..=self.base_index + self.offset` [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: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/assembler/lexer.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | Err(_) => panic!("Invalid token '{}'", string), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:38:13 [INFO] [stderr] | [INFO] [stderr] 38 | / match token { [INFO] [stderr] 39 | | &&Token::Label(LabelType::Local, ref label) => { [INFO] [stderr] 40 | | self.locals.insert(label.clone(), count); [INFO] [stderr] 41 | | }, [INFO] [stderr] ... | [INFO] [stderr] 44 | | _ => {} [INFO] [stderr] 45 | | } [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] 38 | match *token { [INFO] [stderr] 39 | &Token::Label(LabelType::Local, ref label) => { [INFO] [stderr] 40 | self.locals.insert(label.clone(), count); [INFO] [stderr] 41 | }, [INFO] [stderr] 42 | &Token::Reference(_, _) | &Token::Constant(_) => { count += 4; }, [INFO] [stderr] 43 | &Token::Instruction(_) => { count += 1; }, [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/lexer.rs:75:67 [INFO] [stderr] | [INFO] [stderr] 75 | Err(format!("{} did not match any tokens during lexing.", string.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] 75 | Err(format!("{} did not match any tokens during lexing.", &(*string).clone())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 75 | Err(format!("{} did not match any tokens during lexing.", &str::clone(string))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/assembler/lexer.rs:85:24 [INFO] [stderr] | [INFO] [stderr] 85 | pub fn new(source: &'a String) -> Self { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/assembler/lexer.rs:94:40 [INFO] [stderr] | [INFO] [stderr] 94 | let mut current = &self.source[self.base_index..self.base_index+1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index..=self.base_index` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:75:17 [INFO] [stderr] | [INFO] [stderr] 75 | if let &Token::Constant(_) = token { datasize += 4 }; [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] 75 | if let Token::Constant(_) = *token { datasize += 4 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:97:17 [INFO] [stderr] | [INFO] [stderr] 97 | / match tok { [INFO] [stderr] 98 | | &&Token::Reference(LabelType::Global, ref label) => { [INFO] [stderr] 99 | | if let Some(addr) = globals.get(&label.clone()) { [INFO] [stderr] 100 | | bytecodes.append(&mut to_bytes_32(*addr as i64)) [INFO] [stderr] ... | [INFO] [stderr] 113 | | _ => {} [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 97 | match *tok { [INFO] [stderr] 98 | &Token::Reference(LabelType::Global, ref label) => { [INFO] [stderr] 99 | if let Some(addr) = globals.get(&label.clone()) { [INFO] [stderr] 100 | bytecodes.append(&mut to_bytes_32(*addr as i64)) [INFO] [stderr] 101 | } else { panic!("{} is not a known label.", label)} [INFO] [stderr] 102 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | / match token { [INFO] [stderr] 126 | | &Token::NewLine => { newline = true }, [INFO] [stderr] 127 | | &Token::Reference(_, _) => { panic!("References my not appear in the data section.") }, [INFO] [stderr] 128 | | &Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] ... | [INFO] [stderr] 137 | | _ => panic!("NOPE") [INFO] [stderr] 138 | | } [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] 125 | match *token { [INFO] [stderr] 126 | Token::NewLine => { newline = true }, [INFO] [stderr] 127 | Token::Reference(_, _) => { panic!("References my not appear in the data section.") }, [INFO] [stderr] 128 | Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] 129 | if !newline { panic!("Global labels must be the first on the line.")}; [INFO] [stderr] 130 | self.globals.insert(label.clone(), total_bytes); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/assembler/mod.rs:149:21 [INFO] [stderr] | [INFO] [stderr] 149 | / match curdir { [INFO] [stderr] 150 | | Some(directive) => { self.directives.insert(directive, curvec.clone()); }, [INFO] [stderr] 151 | | None => {} [INFO] [stderr] 152 | | }; [INFO] [stderr] | |_____________________^ help: try this: `if let Some(directive) = curdir { self.directives.insert(directive, curvec.clone()); }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/assembler/mod.rs:157:21 [INFO] [stderr] | [INFO] [stderr] 157 | / match curdir { [INFO] [stderr] 158 | | Some(directive) => { self.directives.insert(directive, curvec.clone()); }, [INFO] [stderr] 159 | | None => {} [INFO] [stderr] 160 | | }; [INFO] [stderr] | |_____________________^ help: try this: `if let Some(directive) = curdir { self.directives.insert(directive, curvec.clone()); }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/assembler/lexer.rs:97:36 [INFO] [stderr] | [INFO] [stderr] 97 | current = &self.source[self.base_index..self.base_index+1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index..=self.base_index` [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/assembler/lexer.rs:101:37 [INFO] [stderr] | [INFO] [stderr] 101 | let mut temp = &self.source[self.base_index + self.offset..self.base_index + self.offset + 1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index + self.offset..=self.base_index + self.offset` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/assembler/mod.rs:172:5 [INFO] [stderr] | [INFO] [stderr] 172 | / fn make_global_sections<'a>(&'a self) -> HashMap { [INFO] [stderr] 173 | | let tokens = match self.directives.get(&Directive::Code) { [INFO] [stderr] 174 | | Some(token_vec) => token_vec, [INFO] [stderr] 175 | | None => panic!("NO TOKENS IN @CODE!!!!"), [INFO] [stderr] ... | [INFO] [stderr] 197 | | sections [INFO] [stderr] 198 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/assembler/lexer.rs:105:37 [INFO] [stderr] | [INFO] [stderr] 105 | temp = &self.source[self.base_index + self.offset..self.base_index + self.offset + 1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index + self.offset..=self.base_index + self.offset` [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/assembler/lexer.rs:111:37 [INFO] [stderr] | [INFO] [stderr] 111 | temp = &self.source[self.base_index + self.offset..self.base_index + self.offset + 1]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `self.base_index + self.offset..=self.base_index + self.offset` [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: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/assembler/lexer.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | Err(_) => panic!("Invalid token '{}'", string), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:181:13 [INFO] [stderr] | [INFO] [stderr] 181 | / match token { [INFO] [stderr] 182 | | &Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] 183 | | match current_label.clone() { [INFO] [stderr] 184 | | None => { current_label = Some(label.clone()); }, [INFO] [stderr] ... | [INFO] [stderr] 193 | | _ => { section.tokens.push(token); } [INFO] [stderr] 194 | | } [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] 181 | match *token { [INFO] [stderr] 182 | Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] 183 | match current_label.clone() { [INFO] [stderr] 184 | None => { current_label = Some(label.clone()); }, [INFO] [stderr] 185 | Some(clabel) => { [INFO] [stderr] 186 | sections.insert(clabel, section); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:38:13 [INFO] [stderr] | [INFO] [stderr] 38 | / match token { [INFO] [stderr] 39 | | &&Token::Label(LabelType::Local, ref label) => { [INFO] [stderr] 40 | | self.locals.insert(label.clone(), count); [INFO] [stderr] 41 | | }, [INFO] [stderr] ... | [INFO] [stderr] 44 | | _ => {} [INFO] [stderr] 45 | | } [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] 38 | match *token { [INFO] [stderr] 39 | &Token::Label(LabelType::Local, ref label) => { [INFO] [stderr] 40 | self.locals.insert(label.clone(), count); [INFO] [stderr] 41 | }, [INFO] [stderr] 42 | &Token::Reference(_, _) | &Token::Constant(_) => { count += 4; }, [INFO] [stderr] 43 | &Token::Instruction(_) => { count += 1; }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/assembler/mod.rs:256:13 [INFO] [stderr] | [INFO] [stderr] 256 | assert!(assembler.errors.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `assembler.errors.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: length comparison to zero [INFO] [stderr] --> src/assembler/mod.rs:257:13 [INFO] [stderr] | [INFO] [stderr] 257 | assert!(assembler.globals.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `assembler.globals.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 don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:75:17 [INFO] [stderr] | [INFO] [stderr] 75 | if let &Token::Constant(_) = token { datasize += 4 }; [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] 75 | if let Token::Constant(_) = *token { datasize += 4 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:97:17 [INFO] [stderr] | [INFO] [stderr] 97 | / match tok { [INFO] [stderr] 98 | | &&Token::Reference(LabelType::Global, ref label) => { [INFO] [stderr] 99 | | if let Some(addr) = globals.get(&label.clone()) { [INFO] [stderr] 100 | | bytecodes.append(&mut to_bytes_32(*addr as i64)) [INFO] [stderr] ... | [INFO] [stderr] 113 | | _ => {} [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 97 | match *tok { [INFO] [stderr] 98 | &Token::Reference(LabelType::Global, ref label) => { [INFO] [stderr] 99 | if let Some(addr) = globals.get(&label.clone()) { [INFO] [stderr] 100 | bytecodes.append(&mut to_bytes_32(*addr as i64)) [INFO] [stderr] 101 | } else { panic!("{} is not a known label.", label)} [INFO] [stderr] 102 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:125:17 [INFO] [stderr] | [INFO] [stderr] 125 | / match token { [INFO] [stderr] 126 | | &Token::NewLine => { newline = true }, [INFO] [stderr] 127 | | &Token::Reference(_, _) => { panic!("References my not appear in the data section.") }, [INFO] [stderr] 128 | | &Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] ... | [INFO] [stderr] 137 | | _ => panic!("NOPE") [INFO] [stderr] 138 | | } [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] 125 | match *token { [INFO] [stderr] 126 | Token::NewLine => { newline = true }, [INFO] [stderr] 127 | Token::Reference(_, _) => { panic!("References my not appear in the data section.") }, [INFO] [stderr] 128 | Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] 129 | if !newline { panic!("Global labels must be the first on the line.")}; [INFO] [stderr] 130 | self.globals.insert(label.clone(), total_bytes); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/instruction.rs:23:21 [INFO] [stderr] | [INFO] [stderr] 23 | None => format!(""), [INFO] [stderr] | ^^^^^^^^^^^ help: consider using .to_string(): `"".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: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:25:55 [INFO] [stderr] | [INFO] [stderr] 25 | debug!("{:04X}: {:04X} -> {:?} {}\t{:?}", pc, self.code as i32, self.opcode, value, stack); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `i32::from(self.code)` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/assembler/mod.rs:149:21 [INFO] [stderr] | [INFO] [stderr] 149 | / match curdir { [INFO] [stderr] 150 | | Some(directive) => { self.directives.insert(directive, curvec.clone()); }, [INFO] [stderr] 151 | | None => {} [INFO] [stderr] 152 | | }; [INFO] [stderr] | |_____________________^ help: try this: `if let Some(directive) = curdir { self.directives.insert(directive, curvec.clone()); }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/assembler/mod.rs:157:21 [INFO] [stderr] | [INFO] [stderr] 157 | / match curdir { [INFO] [stderr] 158 | | Some(directive) => { self.directives.insert(directive, curvec.clone()); }, [INFO] [stderr] 159 | | None => {} [INFO] [stderr] 160 | | }; [INFO] [stderr] | |_____________________^ help: try this: `if let Some(directive) = curdir { self.directives.insert(directive, curvec.clone()); }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/assembler/mod.rs:172:5 [INFO] [stderr] | [INFO] [stderr] 172 | / fn make_global_sections<'a>(&'a self) -> HashMap { [INFO] [stderr] 173 | | let tokens = match self.directives.get(&Directive::Code) { [INFO] [stderr] 174 | | Some(token_vec) => token_vec, [INFO] [stderr] 175 | | None => panic!("NO TOKENS IN @CODE!!!!"), [INFO] [stderr] ... | [INFO] [stderr] 197 | | sections [INFO] [stderr] 198 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/assembler/mod.rs:181:13 [INFO] [stderr] | [INFO] [stderr] 181 | / match token { [INFO] [stderr] 182 | | &Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] 183 | | match current_label.clone() { [INFO] [stderr] 184 | | None => { current_label = Some(label.clone()); }, [INFO] [stderr] ... | [INFO] [stderr] 193 | | _ => { section.tokens.push(token); } [INFO] [stderr] 194 | | } [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] 181 | match *token { [INFO] [stderr] 182 | Token::Label(LabelType::Global, ref label) => { [INFO] [stderr] 183 | match current_label.clone() { [INFO] [stderr] 184 | None => { current_label = Some(label.clone()); }, [INFO] [stderr] 185 | Some(clabel) => { [INFO] [stderr] 186 | sections.insert(clabel, section); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/instruction.rs:23:21 [INFO] [stderr] | [INFO] [stderr] 23 | None => format!(""), [INFO] [stderr] | ^^^^^^^^^^^ help: consider using .to_string(): `"".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: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/instruction.rs:25:55 [INFO] [stderr] | [INFO] [stderr] 25 | debug!("{:04X}: {:04X} -> {:?} {}\t{:?}", pc, self.code as i32, self.opcode, value, stack); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `i32::from(self.code)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: Could not compile `slang`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `slang`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "6e3411010f6e4794f05619de5669c60172baee2f7f8bfbbba9d4e7146c03f6b4"` [INFO] running `"docker" "rm" "-f" "6e3411010f6e4794f05619de5669c60172baee2f7f8bfbbba9d4e7146c03f6b4"` [INFO] [stdout] 6e3411010f6e4794f05619de5669c60172baee2f7f8bfbbba9d4e7146c03f6b4