[INFO] crate retrobasic 0.1.0 is already in cache [INFO] extracting crate retrobasic 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/retrobasic/0.1.0 [INFO] extracting crate retrobasic 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/retrobasic/0.1.0 [INFO] validating manifest of retrobasic-0.1.0 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 retrobasic-0.1.0 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 retrobasic-0.1.0 [INFO] finished frobbing retrobasic-0.1.0 [INFO] frobbed toml for retrobasic-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/retrobasic/0.1.0/Cargo.toml [INFO] started frobbing retrobasic-0.1.0 [INFO] finished frobbing retrobasic-0.1.0 [INFO] frobbed toml for retrobasic-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/retrobasic/0.1.0/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 retrobasic-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/retrobasic/0.1.0:/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] b5034db9367cd8f0e6bb807f2e46ad399502b1efd64360dfc85be594050fa204 [INFO] running `"docker" "start" "-a" "b5034db9367cd8f0e6bb807f2e46ad399502b1efd64360dfc85be594050fa204"` [INFO] [stderr] Checking dimsum v0.1.0 [INFO] [stderr] Checking retrobasic v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [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/fetcher.rs:36:19 [INFO] [stderr] | [INFO] [stderr] 36 | Fetcher { sources: sources } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `sources` [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/interpreter.rs:364:13 [INFO] [stderr] | [INFO] [stderr] 364 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [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/interpreter.rs:365:13 [INFO] [stderr] | [INFO] [stderr] 365 | step: step, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `step` [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/interpreter.rs:367:13 [INFO] [stderr] | [INFO] [stderr] 367 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/interpreter.rs:470:13 [INFO] [stderr] | [INFO] [stderr] 470 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/ast.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | token: token, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `token` [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/fetcher.rs:36:19 [INFO] [stderr] | [INFO] [stderr] 36 | Fetcher { sources: sources } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `sources` [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/interpreter.rs:364:13 [INFO] [stderr] | [INFO] [stderr] 364 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [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/interpreter.rs:365:13 [INFO] [stderr] | [INFO] [stderr] 365 | step: step, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `step` [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/interpreter.rs:367:13 [INFO] [stderr] | [INFO] [stderr] 367 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/interpreter.rs:470:13 [INFO] [stderr] | [INFO] [stderr] 470 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:642:9 [INFO] [stderr] | [INFO] [stderr] 642 | return Ok(a); [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(a)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/parser.rs:642:9 [INFO] [stderr] | [INFO] [stderr] 642 | return Ok(a); [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(a)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `children`. [INFO] [stderr] --> src/ast.rs:51:18 [INFO] [stderr] | [INFO] [stderr] 51 | for i in 0..children.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] 51 | for in &children { [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/ast.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match child { [INFO] [stderr] 60 | | Some(c) => self.children.push(c.clone()), [INFO] [stderr] 61 | | None => (), [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(c) = child { self.children.push(c.clone()) }` [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] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/ast.rs:72:23 [INFO] [stderr] | [INFO] [stderr] 72 | line_num: self.line_num.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.line_num` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / match self { [INFO] [stderr] 16 | | &Error::SyntaxError(l, ref e) => write!(f, "SYNTAX ERROR AT LINE {}: {}", l, e), [INFO] [stderr] 17 | | &Error::RuntimeError(l, ref e) => write!(f, "RUNTIME ERROR AT LINE {}: {}", l, e), [INFO] [stderr] 18 | | } [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] 15 | match *self { [INFO] [stderr] 16 | Error::SyntaxError(l, ref e) => write!(f, "SYNTAX ERROR AT LINE {}: {}", l, e), [INFO] [stderr] 17 | Error::RuntimeError(l, ref e) => write!(f, "RUNTIME ERROR AT LINE {}: {}", l, e), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &Error::SyntaxError(_, _) => "Syntax Error", [INFO] [stderr] 26 | | &Error::RuntimeError(_, _) => "Runtime Error", [INFO] [stderr] 27 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | Error::SyntaxError(_, _) => "Syntax Error", [INFO] [stderr] 26 | Error::RuntimeError(_, _) => "Runtime Error", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/interpreter.rs:22:31 [INFO] [stderr] | [INFO] [stderr] 22 | MV::Str(ref s) => format!("{}", s), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `s.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] = 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: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:172:13 [INFO] [stderr] | [INFO] [stderr] 172 | self.curr_data = self.curr_data + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.curr_data += 1` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:199:35 [INFO] [stderr] | [INFO] [stderr] 199 | fn into_dim(&mut self, nodes: &Vec) -> Result> { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [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: methods called `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/interpreter.rs:199:17 [INFO] [stderr] | [INFO] [stderr] 199 | fn into_dim(&mut self, nodes: &Vec) -> Result> { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:206:35 [INFO] [stderr] | [INFO] [stderr] 206 | fn exec_dim(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `nodes`. [INFO] [stderr] --> src/interpreter.rs:207:18 [INFO] [stderr] | [INFO] [stderr] 207 | for i in 0..nodes.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 207 | for in &nodes { [INFO] [stderr] | ^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:210:37 [INFO] [stderr] | [INFO] [stderr] 210 | let mv = if id.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:231:37 [INFO] [stderr] | [INFO] [stderr] 231 | fn exec_input(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:246:47 [INFO] [stderr] | [INFO] [stderr] 246 | let split: Vec<&str> = line.split(",").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [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/interpreter.rs:256:17 [INFO] [stderr] | [INFO] [stderr] 256 | / match nodes[i + start].token.val { [INFO] [stderr] 257 | | Some(ref s) => { [INFO] [stderr] 258 | | if s.contains("$") { [INFO] [stderr] 259 | | let val = MV::Str(split[i].trim().to_string().to_uppercase()); [INFO] [stderr] ... | [INFO] [stderr] 274 | | None => (), [INFO] [stderr] 275 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 256 | if let Some(ref s) = nodes[i + start].token.val { [INFO] [stderr] 257 | if s.contains("$") { [INFO] [stderr] 258 | let val = MV::Str(split[i].trim().to_string().to_uppercase()); [INFO] [stderr] 259 | self.do_assign(&nodes[i + start], val)?; [INFO] [stderr] 260 | } else { [INFO] [stderr] 261 | match split[i].trim().parse::() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:258:39 [INFO] [stderr] | [INFO] [stderr] 258 | if s.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:308:45 [INFO] [stderr] | [INFO] [stderr] 308 | let mv_def = if id.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `children`. [INFO] [stderr] --> src/ast.rs:51:18 [INFO] [stderr] | [INFO] [stderr] 51 | for i in 0..children.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] 51 | for in &children { [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/ast.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match child { [INFO] [stderr] 60 | | Some(c) => self.children.push(c.clone()), [INFO] [stderr] 61 | | None => (), [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(c) = child { self.children.push(c.clone()) }` [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] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/ast.rs:72:23 [INFO] [stderr] | [INFO] [stderr] 72 | line_num: self.line_num.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.line_num` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:400:36 [INFO] [stderr] | [INFO] [stderr] 400 | fn exec_next(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / match self { [INFO] [stderr] 16 | | &Error::SyntaxError(l, ref e) => write!(f, "SYNTAX ERROR AT LINE {}: {}", l, e), [INFO] [stderr] 17 | | &Error::RuntimeError(l, ref e) => write!(f, "RUNTIME ERROR AT LINE {}: {}", l, e), [INFO] [stderr] 18 | | } [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] 15 | match *self { [INFO] [stderr] 16 | Error::SyntaxError(l, ref e) => write!(f, "SYNTAX ERROR AT LINE {}: {}", l, e), [INFO] [stderr] 17 | Error::RuntimeError(l, ref e) => write!(f, "RUNTIME ERROR AT LINE {}: {}", l, e), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &Error::SyntaxError(_, _) => "Syntax Error", [INFO] [stderr] 26 | | &Error::RuntimeError(_, _) => "Runtime Error", [INFO] [stderr] 27 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | Error::SyntaxError(_, _) => "Syntax Error", [INFO] [stderr] 26 | Error::RuntimeError(_, _) => "Runtime Error", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:435:21 [INFO] [stderr] | [INFO] [stderr] 435 | curr_idx = curr_idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `curr_idx += 1` [INFO] [stderr] | [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:448:37 [INFO] [stderr] | [INFO] [stderr] 448 | fn exec_print(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `nodes`. [INFO] [stderr] --> src/interpreter.rs:450:18 [INFO] [stderr] | [INFO] [stderr] 450 | for i in 0..nodes.len() as usize { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 450 | for in nodes.iter().take(nodes.len() as usize) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter.rs:555:22 [INFO] [stderr] | [INFO] [stderr] 555 | let fn_def = self.fn_defs.get(&fn_id).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fn_defs[&fn_id]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:591:32 [INFO] [stderr] | [INFO] [stderr] 591 | if id.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/interpreter.rs:605:20 [INFO] [stderr] | [INFO] [stderr] 605 | Ok(MV::Num(self.eval(ast)?.to_str().as_bytes()[0] as f32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(self.eval(ast)?.to_str().as_bytes()[0])` [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: useless use of `format!` [INFO] [stderr] --> src/interpreter.rs:22:31 [INFO] [stderr] | [INFO] [stderr] 22 | MV::Str(ref s) => format!("{}", s), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `s.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] = 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: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:172:13 [INFO] [stderr] | [INFO] [stderr] 172 | self.curr_data = self.curr_data + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.curr_data += 1` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:199:35 [INFO] [stderr] | [INFO] [stderr] 199 | fn into_dim(&mut self, nodes: &Vec) -> Result> { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [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: methods called `into_*` usually take self by value; consider choosing a less ambiguous name [INFO] [stderr] --> src/interpreter.rs:199:17 [INFO] [stderr] | [INFO] [stderr] 199 | fn into_dim(&mut self, nodes: &Vec) -> Result> { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:206:35 [INFO] [stderr] | [INFO] [stderr] 206 | fn exec_dim(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `nodes`. [INFO] [stderr] --> src/interpreter.rs:207:18 [INFO] [stderr] | [INFO] [stderr] 207 | for i in 0..nodes.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 207 | for in &nodes { [INFO] [stderr] | ^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:210:37 [INFO] [stderr] | [INFO] [stderr] 210 | let mv = if id.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:231:37 [INFO] [stderr] | [INFO] [stderr] 231 | fn exec_input(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:246:47 [INFO] [stderr] | [INFO] [stderr] 246 | let split: Vec<&str> = line.split(",").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [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/interpreter.rs:256:17 [INFO] [stderr] | [INFO] [stderr] 256 | / match nodes[i + start].token.val { [INFO] [stderr] 257 | | Some(ref s) => { [INFO] [stderr] 258 | | if s.contains("$") { [INFO] [stderr] 259 | | let val = MV::Str(split[i].trim().to_string().to_uppercase()); [INFO] [stderr] ... | [INFO] [stderr] 274 | | None => (), [INFO] [stderr] 275 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [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] 256 | if let Some(ref s) = nodes[i + start].token.val { [INFO] [stderr] 257 | if s.contains("$") { [INFO] [stderr] 258 | let val = MV::Str(split[i].trim().to_string().to_uppercase()); [INFO] [stderr] 259 | self.do_assign(&nodes[i + start], val)?; [INFO] [stderr] 260 | } else { [INFO] [stderr] 261 | match split[i].trim().parse::() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:258:39 [INFO] [stderr] | [INFO] [stderr] 258 | if s.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:308:45 [INFO] [stderr] | [INFO] [stderr] 308 | let mv_def = if id.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [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/interpreter.rs:860:13 [INFO] [stderr] | [INFO] [stderr] 860 | / match ast.children[i].line_num { [INFO] [stderr] 861 | | Some(n) => { [INFO] [stderr] 862 | | target_map.insert(n, i as u32); [INFO] [stderr] 863 | | } [INFO] [stderr] 864 | | None => (), [INFO] [stderr] 865 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 860 | if let Some(n) = ast.children[i].line_num { [INFO] [stderr] 861 | target_map.insert(n, i as u32); [INFO] [stderr] 862 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:880:34 [INFO] [stderr] | [INFO] [stderr] 880 | Execute::Next => curr = curr + 1, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `curr += 1` [INFO] [stderr] | [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: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:882:21 [INFO] [stderr] | [INFO] [stderr] 882 | curr = curr + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `curr += 1` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/interpreter.rs:883:21 [INFO] [stderr] | [INFO] [stderr] 883 | / match ast.children[curr].line_num { [INFO] [stderr] 884 | | Some(_) => break, [INFO] [stderr] 885 | | None => (), [INFO] [stderr] 886 | | } [INFO] [stderr] | |_____________________^ help: try this: `if let Some(_) = ast.children[curr].line_num { break }` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter.rs:890:30 [INFO] [stderr] | [INFO] [stderr] 890 | let ix = target_map.get(&n).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&target_map[&n]` [INFO] [stderr] | [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/lexer.rs:46:12 [INFO] [stderr] | [INFO] [stderr] 46 | if l.buf.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!l.buf.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: manual implementation of an assign operation [INFO] [stderr] --> src/lexer.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | self.curr = self.curr + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.curr += 1` [INFO] [stderr] | [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:400:36 [INFO] [stderr] | [INFO] [stderr] 400 | fn exec_next(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:435:21 [INFO] [stderr] | [INFO] [stderr] 435 | curr_idx = curr_idx + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `curr_idx += 1` [INFO] [stderr] | [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:448:37 [INFO] [stderr] | [INFO] [stderr] 448 | fn exec_print(&mut self, nodes: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[AST]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `nodes`. [INFO] [stderr] --> src/interpreter.rs:450:18 [INFO] [stderr] | [INFO] [stderr] 450 | for i in 0..nodes.len() as usize { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 450 | for in nodes.iter().take(nodes.len() as usize) { [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/parser.rs:79:9 [INFO] [stderr] | [INFO] [stderr] 79 | / match tid { [INFO] [stderr] 80 | | TID::LBRK => { [INFO] [stderr] 81 | | self.consume(); [INFO] [stderr] 82 | | a.token.id = TID::MDID; [INFO] [stderr] ... | [INFO] [stderr] 86 | | _ => (), [INFO] [stderr] 87 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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 TID::LBRK = tid { [INFO] [stderr] 80 | self.consume(); [INFO] [stderr] 81 | a.token.id = TID::MDID; [INFO] [stderr] 82 | a.add_children(self.parse_expression_list()?); [INFO] [stderr] 83 | self.match_token(TID::RBRK)?; [INFO] [stderr] 84 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter.rs:555:22 [INFO] [stderr] | [INFO] [stderr] 555 | let fn_def = self.fn_defs.get(&fn_id).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.fn_defs[&fn_id]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/interpreter.rs:591:32 [INFO] [stderr] | [INFO] [stderr] 591 | if id.contains("$") { [INFO] [stderr] | ^^^ help: try using a char instead: `'$'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f32 may become silently lossy if types change [INFO] [stderr] --> src/interpreter.rs:605:20 [INFO] [stderr] | [INFO] [stderr] 605 | Ok(MV::Num(self.eval(ast)?.to_str().as_bytes()[0] as f32)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(self.eval(ast)?.to_str().as_bytes()[0])` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/interpreter.rs:860:13 [INFO] [stderr] | [INFO] [stderr] 860 | / match ast.children[i].line_num { [INFO] [stderr] 861 | | Some(n) => { [INFO] [stderr] 862 | | target_map.insert(n, i as u32); [INFO] [stderr] 863 | | } [INFO] [stderr] 864 | | None => (), [INFO] [stderr] 865 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [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] 860 | if let Some(n) = ast.children[i].line_num { [INFO] [stderr] 861 | target_map.insert(n, i as u32); [INFO] [stderr] 862 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:880:34 [INFO] [stderr] | [INFO] [stderr] 880 | Execute::Next => curr = curr + 1, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `curr += 1` [INFO] [stderr] | [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: manual implementation of an assign operation [INFO] [stderr] --> src/interpreter.rs:882:21 [INFO] [stderr] | [INFO] [stderr] 882 | curr = curr + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `curr += 1` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/interpreter.rs:883:21 [INFO] [stderr] | [INFO] [stderr] 883 | / match ast.children[curr].line_num { [INFO] [stderr] 884 | | Some(_) => break, [INFO] [stderr] 885 | | None => (), [INFO] [stderr] 886 | | } [INFO] [stderr] | |_____________________^ help: try this: `if let Some(_) = ast.children[curr].line_num { break }` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter.rs:890:30 [INFO] [stderr] | [INFO] [stderr] 890 | let ix = target_map.get(&n).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&target_map[&n]` [INFO] [stderr] | [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/lexer.rs:46:12 [INFO] [stderr] | [INFO] [stderr] 46 | if l.buf.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!l.buf.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: manual implementation of an assign operation [INFO] [stderr] --> src/lexer.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | self.curr = self.curr + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.curr += 1` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:96:9 [INFO] [stderr] | [INFO] [stderr] 96 | / match file.read_to_string(&mut b) { [INFO] [stderr] 97 | | Err(why) => { [INFO] [stderr] 98 | | println!("couldn't read {}: {}", filename, why.description()); [INFO] [stderr] 99 | | std::process::exit(1); [INFO] [stderr] 100 | | } [INFO] [stderr] 101 | | Ok(_) => {} [INFO] [stderr] 102 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 96 | if let Err(why) = file.read_to_string(&mut b) { [INFO] [stderr] 97 | println!("couldn't read {}: {}", filename, why.description()); [INFO] [stderr] 98 | std::process::exit(1); [INFO] [stderr] 99 | }; [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/parser.rs:79:9 [INFO] [stderr] | [INFO] [stderr] 79 | / match tid { [INFO] [stderr] 80 | | TID::LBRK => { [INFO] [stderr] 81 | | self.consume(); [INFO] [stderr] 82 | | a.token.id = TID::MDID; [INFO] [stderr] ... | [INFO] [stderr] 86 | | _ => (), [INFO] [stderr] 87 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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 TID::LBRK = tid { [INFO] [stderr] 80 | self.consume(); [INFO] [stderr] 81 | a.token.id = TID::MDID; [INFO] [stderr] 82 | a.add_children(self.parse_expression_list()?); [INFO] [stderr] 83 | self.match_token(TID::RBRK)?; [INFO] [stderr] 84 | } [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/main.rs:96:9 [INFO] [stderr] | [INFO] [stderr] 96 | / match file.read_to_string(&mut b) { [INFO] [stderr] 97 | | Err(why) => { [INFO] [stderr] 98 | | println!("couldn't read {}: {}", filename, why.description()); [INFO] [stderr] 99 | | std::process::exit(1); [INFO] [stderr] 100 | | } [INFO] [stderr] 101 | | Ok(_) => {} [INFO] [stderr] 102 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 96 | if let Err(why) = file.read_to_string(&mut b) { [INFO] [stderr] 97 | println!("couldn't read {}: {}", filename, why.description()); [INFO] [stderr] 98 | std::process::exit(1); [INFO] [stderr] 99 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 9.07s [INFO] running `"docker" "inspect" "b5034db9367cd8f0e6bb807f2e46ad399502b1efd64360dfc85be594050fa204"` [INFO] running `"docker" "rm" "-f" "b5034db9367cd8f0e6bb807f2e46ad399502b1efd64360dfc85be594050fa204"` [INFO] [stdout] b5034db9367cd8f0e6bb807f2e46ad399502b1efd64360dfc85be594050fa204