[INFO] updating cached repository nilq/ketchup [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/nilq/ketchup [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/nilq/ketchup" "work/ex/clippy-test-run/sources/stable/gh/nilq/ketchup"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/nilq/ketchup'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/nilq/ketchup" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/ketchup"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/ketchup'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] a7015cf97d074264852cf4941843d1bc058d2501 [INFO] sha for GitHub repo nilq/ketchup: a7015cf97d074264852cf4941843d1bc058d2501 [INFO] validating manifest of nilq/ketchup 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 nilq/ketchup 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 nilq/ketchup [INFO] finished frobbing nilq/ketchup [INFO] frobbed toml for nilq/ketchup written to work/ex/clippy-test-run/sources/stable/gh/nilq/ketchup/Cargo.toml [INFO] started frobbing nilq/ketchup [INFO] finished frobbing nilq/ketchup [INFO] frobbed toml for nilq/ketchup written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/ketchup/Cargo.toml [INFO] crate nilq/ketchup 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 nilq/ketchup against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/nilq/ketchup:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] e97615bbce5aec5a47800af8f87ef321e65e3c8c99fb41b6fe55e3918ed793df [INFO] running `"docker" "start" "-a" "e97615bbce5aec5a47800af8f87ef321e65e3c8c99fb41b6fe55e3918ed793df"` [INFO] [stderr] Checking ketchup v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/language/syntax/lexer/token.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/language/syntax/lexer/token.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | col: col, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `col` [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/language/syntax/lexer/token.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [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/language/syntax/lexer/token.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | pos: pos, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `pos` [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/language/syntax/lexer/token.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | content: content, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `content` [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/language/syntax/lexer/tokenizer.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [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/language/syntax/lexer/tokenizer.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/language/syntax/lexer/matcher.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [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/language/syntax/lexer/matcher.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | constants: constants, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `constants` [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/language/syntax/lexer/block_tree.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | 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/language/syntax/lexer/block_tree.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | 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/language/syntax/lexer/lexer.rs:123:13 [INFO] [stderr] | [INFO] [stderr] 123 | tokenizer: tokenizer, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tokenizer` [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/language/syntax/parser/traveler.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | tokens: tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [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/language/syntax/parser/mod.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | traveler: traveler, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `traveler` [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/language/syntax/lexer/token.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/language/syntax/lexer/token.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | col: col, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `col` [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/language/syntax/lexer/token.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [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/language/syntax/lexer/token.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | pos: pos, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: replace it with: `pos` [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/language/syntax/lexer/token.rs:54:13 [INFO] [stderr] | [INFO] [stderr] 54 | content: content, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `content` [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/language/syntax/lexer/tokenizer.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | index: index, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `index` [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/language/syntax/lexer/tokenizer.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/language/syntax/lexer/matcher.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | token_type: token_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `token_type` [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/language/syntax/lexer/matcher.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | constants: constants, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `constants` [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/language/syntax/lexer/block_tree.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | 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/language/syntax/lexer/block_tree.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | 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/language/syntax/lexer/lexer.rs:123:13 [INFO] [stderr] | [INFO] [stderr] 123 | tokenizer: tokenizer, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tokenizer` [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/language/syntax/parser/traveler.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | tokens: tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [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/language/syntax/parser/mod.rs:20:13 [INFO] [stderr] | [INFO] [stderr] 20 | traveler: traveler, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `traveler` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:116:20 [INFO] [stderr] | [INFO] [stderr] 116 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 117 | | if found_escape { [INFO] [stderr] 118 | | string.push( [INFO] [stderr] 119 | | match tokenizer.next().unwrap() { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } [INFO] [stderr] 138 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 116 | } else if found_escape { [INFO] [stderr] 117 | string.push( [INFO] [stderr] 118 | match tokenizer.next().unwrap() { [INFO] [stderr] 119 | c @ '\\' | c @ '\'' | c @ '"' => c, [INFO] [stderr] 120 | 'n' => '\n', [INFO] [stderr] 121 | 'r' => '\r', [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/language/syntax/lexer/mod.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | mod lexer; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused import: `Op` [INFO] [stderr] --> src/language/mod.rs:11:14 [INFO] [stderr] | [INFO] [stderr] 11 | use vm::{Op, Value, Object, Native}; [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:116:20 [INFO] [stderr] | [INFO] [stderr] 116 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 117 | | if found_escape { [INFO] [stderr] 118 | | string.push( [INFO] [stderr] 119 | | match tokenizer.next().unwrap() { [INFO] [stderr] ... | [INFO] [stderr] 137 | | } [INFO] [stderr] 138 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 116 | } else if found_escape { [INFO] [stderr] 117 | string.push( [INFO] [stderr] 118 | match tokenizer.next().unwrap() { [INFO] [stderr] 119 | c @ '\\' | c @ '\'' | c @ '"' => c, [INFO] [stderr] 120 | 'n' => '\n', [INFO] [stderr] 121 | 'r' => '\r', [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/language/syntax/lexer/mod.rs:6:1 [INFO] [stderr] | [INFO] [stderr] 6 | mod lexer; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: unused import: `Op` [INFO] [stderr] --> src/language/mod.rs:11:14 [INFO] [stderr] | [INFO] [stderr] 11 | use vm::{Op, Value, Object, Native}; [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/language/mod.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | Value::Nil [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/language/mod.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | Value::Nil [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/mod.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | _ => panic!("unimplemented expression!") , [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/mod.rs:157:17 [INFO] [stderr] | [INFO] [stderr] 157 | _ => panic!("unstable/unimplemented statement!?") [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/vm/mod.rs:63:17 [INFO] [stderr] | [INFO] [stderr] 63 | Op::Name(ref n) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/vm/mod.rs:129:17 [INFO] [stderr] | [INFO] [stderr] 129 | _ => panic!("angery, not covered!?!"), [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `body` is never read [INFO] [stderr] --> src/language/syntax/parser/mod.rs:186:29 [INFO] [stderr] | [INFO] [stderr] 186 | let mut body: Option> = None; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `t` [INFO] [stderr] --> src/language/syntax/parser/mod.rs:215:25 [INFO] [stderr] | [INFO] [stderr] 215 | t => body = Some(vec!(Statement::Expression(Box::new(self.expression())))), [INFO] [stderr] | ^ help: consider using `_t` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | let mut test = r#" [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Block` [INFO] [stderr] --> src/language/syntax/lexer/token.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | Block(Vec), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Tokens` [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | Tokens(Vec), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `value` [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | pub fn value(&self) -> &ChunkValue { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `lex_branch` [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:80:1 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn lex_branch(branch: &Branch) -> Branch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `flatten_branch` [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:98:1 [INFO] [stderr] | [INFO] [stderr] 98 | pub fn flatten_branch(branch: &Branch) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `process_branch` [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:110:1 [INFO] [stderr] | [INFO] [stderr] 110 | pub fn process_branch(branch: &Branch) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Block` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | Block(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Jump` [INFO] [stderr] --> src/language/vm/op.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | Jump(i32), [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `test` [INFO] [stderr] --> src/main.rs:61:1 [INFO] [stderr] | [INFO] [stderr] 61 | fn test() { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/language/syntax/lexer/token.rs:72:5 [INFO] [stderr] | [INFO] [stderr] 72 | / fn ne(&self, other: &Token) -> bool { [INFO] [stderr] 73 | | self.token_type != other.token_type [INFO] [stderr] 74 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/mod.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | _ => panic!("unimplemented expression!") , [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/mod.rs:157:17 [INFO] [stderr] | [INFO] [stderr] 157 | _ => panic!("unstable/unimplemented statement!?") [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/vm/mod.rs:63:17 [INFO] [stderr] | [INFO] [stderr] 63 | Op::Name(ref n) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/language/vm/mod.rs:129:17 [INFO] [stderr] | [INFO] [stderr] 129 | _ => panic!("angery, not covered!?!"), [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `body` is never read [INFO] [stderr] --> src/language/syntax/parser/mod.rs:186:29 [INFO] [stderr] | [INFO] [stderr] 186 | let mut body: Option> = None; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:93:26 [INFO] [stderr] | [INFO] [stderr] 93 | let delimeter = match tokenizer.peek().unwrap() { [INFO] [stderr] | __________________________^ [INFO] [stderr] 94 | | &'"' => Some('"'), [INFO] [stderr] 95 | | &'\'' => Some('\''), [INFO] [stderr] 96 | | &'r' if tokenizer.peek_n(1) == Some(&'"') => { [INFO] [stderr] ... | [INFO] [stderr] 102 | | _ => return None, [INFO] [stderr] 103 | | }; [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] warning: unused variable: `t` [INFO] [stderr] --> src/language/syntax/parser/mod.rs:215:25 [INFO] [stderr] | [INFO] [stderr] 215 | t => body = Some(vec!(Statement::Expression(Box::new(self.expression())))), [INFO] [stderr] | ^ help: consider using `_t` instead [INFO] [stderr] | [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 93 | let delimeter = match *tokenizer.peek().unwrap() { [INFO] [stderr] 94 | '"' => Some('"'), [INFO] [stderr] 95 | '\'' => Some('\''), [INFO] [stderr] 96 | 'r' if tokenizer.peek_n(1) == Some(&'"') => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:129:21 [INFO] [stderr] | [INFO] [stderr] 129 | / match tokenizer.peek().unwrap() { [INFO] [stderr] 130 | | &'\\' => { [INFO] [stderr] 131 | | tokenizer.next(); [INFO] [stderr] 132 | | found_escape = true [INFO] [stderr] ... | [INFO] [stderr] 135 | | _ => string.push(tokenizer.next().unwrap()), [INFO] [stderr] 136 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 129 | match *tokenizer.peek().unwrap() { [INFO] [stderr] 130 | '\\' => { [INFO] [stderr] 131 | tokenizer.next(); [INFO] [stderr] 132 | found_escape = true [INFO] [stderr] 133 | }, [INFO] [stderr] 134 | c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:134:31 [INFO] [stderr] | [INFO] [stderr] 134 | &c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 134 | &c if c == delimeter.unwrap() => break, [INFO] [stderr] | ^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:58:32 [INFO] [stderr] | [INFO] [stderr] 58 | while let Some(line) = lines.next() { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `for line in lines { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:59:47 [INFO] [stderr] | [INFO] [stderr] 59 | let parts: Vec<&str> = line.split("#").collect(); [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: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:60:22 [INFO] [stderr] | [INFO] [stderr] 60 | let ln = parts.get(0).unwrap().trim(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[0]` [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/language/syntax/lexer/block_tree.rs:62:16 [INFO] [stderr] | [INFO] [stderr] 62 | if ln.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ln.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:83:37 [INFO] [stderr] | [INFO] [stderr] 83 | pub fn tree(&mut self, indents: &Vec<(usize, &'a str)>) -> Branch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(usize, &'a 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: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:65:9 [INFO] [stderr] | [INFO] [stderr] 65 | let mut test = r#" [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | / match c.value() { [INFO] [stderr] 84 | | &ChunkValue::Source(ref s) => { [INFO] [stderr] 85 | | let chunk = ChunkValue::Tokens(lexer(&mut s.clone().chars()).collect()); [INFO] [stderr] 86 | | lexed_branch.value.push(Chunk::new(chunk)) [INFO] [stderr] ... | [INFO] [stderr] 92 | | _ => (), [INFO] [stderr] 93 | | } [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] 83 | match *c.value() { [INFO] [stderr] 84 | ChunkValue::Source(ref s) => { [INFO] [stderr] 85 | let chunk = ChunkValue::Tokens(lexer(&mut s.clone().chars()).collect()); [INFO] [stderr] 86 | lexed_branch.value.push(Chunk::new(chunk)) [INFO] [stderr] 87 | }, [INFO] [stderr] 88 | ChunkValue::Block(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match c.value() { [INFO] [stderr] 102 | | &ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 103 | | &ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] 104 | | _ => continue, [INFO] [stderr] 105 | | } [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] 101 | match *c.value() { [INFO] [stderr] 102 | ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 103 | ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/language/syntax/parser/traveler.rs:63:12 [INFO] [stderr] | [INFO] [stderr] 63 | if &self.current_content() == content { [INFO] [stderr] | -----------------------^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `self.current_content()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `accum` is used as a loop counter. Consider using `for (accum, item) in sequence.enumerate()` or similar iterators [INFO] [stderr] --> src/language/syntax/parser/traveler.rs:75:18 [INFO] [stderr] | [INFO] [stderr] 75 | for c in sequence { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:8:10 [INFO] [stderr] | [INFO] [stderr] 8 | Call(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::box_vec)] on by default [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:15:11 [INFO] [stderr] | [INFO] [stderr] 15 | Block(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:19:25 [INFO] [stderr] | [INFO] [stderr] 19 | If(Box, Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:20:29 [INFO] [stderr] | [INFO] [stderr] 20 | IfElse(Box, Box>, Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:20:50 [INFO] [stderr] | [INFO] [stderr] 20 | IfElse(Box, Box>, Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/language/syntax/parser/mod.rs:133:77 [INFO] [stderr] | [INFO] [stderr] 133 | TokenType::CharLiteral => Expression::Atom(Value::CharLiteral(self.traveler.current_content().chars().nth(0).unwrap().clone())), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.traveler.current_content().chars().nth(0).unwrap()` [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: length comparison to zero [INFO] [stderr] --> src/language/vm/value.rs:71:44 [INFO] [stderr] | [INFO] [stderr] 71 | Value::StringLiteral(ref v) => v.len() > 0, [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/language/vm/mod.rs:59:36 [INFO] [stderr] | [INFO] [stderr] 59 | Op::Name(ref n) => match scopes.get(n) { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 60 | | Some(v) => self.stack.push(v.clone()), [INFO] [stderr] 61 | | None => (), [INFO] [stderr] 62 | | }, [INFO] [stderr] | |_________________^ help: try this: `if let Some(v) = scopes.get(n) { self.stack.push(v.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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/language/vm/mod.rs:64:21 [INFO] [stderr] | [INFO] [stderr] 64 | / match scopes.get(n) { [INFO] [stderr] 65 | | Some(v) => self.stack.push(v.clone()), [INFO] [stderr] 66 | | None => (), [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____________________^ help: try this: `if let Some(v) = scopes.get(n) { self.stack.push(v.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/language/vm/mod.rs:108:37 [INFO] [stderr] | [INFO] [stderr] 108 | / match try!(frame.run(scopes)) { [INFO] [stderr] 109 | | Some(result) => self.stack.push(result), [INFO] [stderr] 110 | | None => (), [INFO] [stderr] 111 | | } [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] 108 | if let Some(result) = match $ expr { [INFO] [stderr] 109 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 110 | :: Err ( err ) => { [INFO] [stderr] 111 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 112 | $ crate :: convert :: From :: from ( err ) ) } } { self.stack.push(result) } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/mod.rs:87:28 [INFO] [stderr] | [INFO] [stderr] 87 | let body = match body { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 88 | | &Some(ref b) => statements(b.clone()), [INFO] [stderr] 89 | | &None => vec!(Op::Value(Value::Nil)), // xd this is good haha [INFO] [stderr] 90 | | }; [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] 87 | let body = match *body { [INFO] [stderr] 88 | Some(ref b) => statements(b.clone()), [INFO] [stderr] 89 | None => vec!(Op::Value(Value::Nil)), // xd this is good haha [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/language/mod.rs:98:17 [INFO] [stderr] | [INFO] [stderr] 98 | / match *name { [INFO] [stderr] 99 | | Some(ref n) => { [INFO] [stderr] 100 | | script.push(Op::Value(Value::StringLiteral(n.clone()))); [INFO] [stderr] 101 | | script.push(Op::Define) [INFO] [stderr] 102 | | }, [INFO] [stderr] 103 | | None => (), [INFO] [stderr] 104 | | } [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] 98 | if let Some(ref n) = *name { [INFO] [stderr] 99 | script.push(Op::Value(Value::StringLiteral(n.clone()))); [INFO] [stderr] 100 | script.push(Op::Define) [INFO] [stderr] 101 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:53:17 [INFO] [stderr] | [INFO] [stderr] 53 | vm.run(&mut scopes); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:92:5 [INFO] [stderr] | [INFO] [stderr] 92 | vm.run(&mut scopes); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Block` [INFO] [stderr] --> src/language/syntax/lexer/token.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | Block(Vec), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Tokens` [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | Tokens(Vec), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `value` [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | pub fn value(&self) -> &ChunkValue { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `lex_branch` [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:80:1 [INFO] [stderr] | [INFO] [stderr] 80 | pub fn lex_branch(branch: &Branch) -> Branch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `flatten_branch` [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:98:1 [INFO] [stderr] | [INFO] [stderr] 98 | pub fn flatten_branch(branch: &Branch) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `process_branch` [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:110:1 [INFO] [stderr] | [INFO] [stderr] 110 | pub fn process_branch(branch: &Branch) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Block` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | Block(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Jump` [INFO] [stderr] --> src/language/vm/op.rs:21:5 [INFO] [stderr] | [INFO] [stderr] 21 | Jump(i32), [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `test` [INFO] [stderr] --> src/main.rs:61:1 [INFO] [stderr] | [INFO] [stderr] 61 | fn test() { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/language/syntax/lexer/token.rs:72:5 [INFO] [stderr] | [INFO] [stderr] 72 | / fn ne(&self, other: &Token) -> bool { [INFO] [stderr] 73 | | self.token_type != other.token_type [INFO] [stderr] 74 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:93:26 [INFO] [stderr] | [INFO] [stderr] 93 | let delimeter = match tokenizer.peek().unwrap() { [INFO] [stderr] | __________________________^ [INFO] [stderr] 94 | | &'"' => Some('"'), [INFO] [stderr] 95 | | &'\'' => Some('\''), [INFO] [stderr] 96 | | &'r' if tokenizer.peek_n(1) == Some(&'"') => { [INFO] [stderr] ... | [INFO] [stderr] 102 | | _ => return None, [INFO] [stderr] 103 | | }; [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] 93 | let delimeter = match *tokenizer.peek().unwrap() { [INFO] [stderr] 94 | '"' => Some('"'), [INFO] [stderr] 95 | '\'' => Some('\''), [INFO] [stderr] 96 | 'r' if tokenizer.peek_n(1) == Some(&'"') => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:129:21 [INFO] [stderr] | [INFO] [stderr] 129 | / match tokenizer.peek().unwrap() { [INFO] [stderr] 130 | | &'\\' => { [INFO] [stderr] 131 | | tokenizer.next(); [INFO] [stderr] 132 | | found_escape = true [INFO] [stderr] ... | [INFO] [stderr] 135 | | _ => string.push(tokenizer.next().unwrap()), [INFO] [stderr] 136 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 129 | match *tokenizer.peek().unwrap() { [INFO] [stderr] 130 | '\\' => { [INFO] [stderr] 131 | tokenizer.next(); [INFO] [stderr] 132 | found_escape = true [INFO] [stderr] 133 | }, [INFO] [stderr] 134 | c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/language/syntax/lexer/matcher.rs:134:31 [INFO] [stderr] | [INFO] [stderr] 134 | &c if &c == &delimeter.unwrap() => break, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 134 | &c if c == delimeter.unwrap() => break, [INFO] [stderr] | ^ ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `for` loop [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:58:32 [INFO] [stderr] | [INFO] [stderr] 58 | while let Some(line) = lines.next() { [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `for line in lines { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_on_iterator)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:59:47 [INFO] [stderr] | [INFO] [stderr] 59 | let parts: Vec<&str> = line.split("#").collect(); [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: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:60:22 [INFO] [stderr] | [INFO] [stderr] 60 | let ln = parts.get(0).unwrap().trim(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `&parts[0]` [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/language/syntax/lexer/block_tree.rs:62:16 [INFO] [stderr] | [INFO] [stderr] 62 | if ln.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!ln.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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/language/syntax/lexer/block_tree.rs:83:37 [INFO] [stderr] | [INFO] [stderr] 83 | pub fn tree(&mut self, indents: &Vec<(usize, &'a str)>) -> Branch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(usize, &'a 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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | / match c.value() { [INFO] [stderr] 84 | | &ChunkValue::Source(ref s) => { [INFO] [stderr] 85 | | let chunk = ChunkValue::Tokens(lexer(&mut s.clone().chars()).collect()); [INFO] [stderr] 86 | | lexed_branch.value.push(Chunk::new(chunk)) [INFO] [stderr] ... | [INFO] [stderr] 92 | | _ => (), [INFO] [stderr] 93 | | } [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] 83 | match *c.value() { [INFO] [stderr] 84 | ChunkValue::Source(ref s) => { [INFO] [stderr] 85 | let chunk = ChunkValue::Tokens(lexer(&mut s.clone().chars()).collect()); [INFO] [stderr] 86 | lexed_branch.value.push(Chunk::new(chunk)) [INFO] [stderr] 87 | }, [INFO] [stderr] 88 | ChunkValue::Block(ref b) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/syntax/lexer/lexer.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match c.value() { [INFO] [stderr] 102 | | &ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 103 | | &ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] 104 | | _ => continue, [INFO] [stderr] 105 | | } [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] 101 | match *c.value() { [INFO] [stderr] 102 | ChunkValue::Tokens(ref t) => flat.append(&mut t.clone()), [INFO] [stderr] 103 | ChunkValue::Block(ref b) => flat.push(Token::new(TokenType::Block(flatten_branch(b)), TokenPosition::new(0, 0), "".to_string())), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of left operand [INFO] [stderr] --> src/language/syntax/parser/traveler.rs:63:12 [INFO] [stderr] | [INFO] [stderr] 63 | if &self.current_content() == content { [INFO] [stderr] | -----------------------^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: use the left value directly: `self.current_content()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: the variable `accum` is used as a loop counter. Consider using `for (accum, item) in sequence.enumerate()` or similar iterators [INFO] [stderr] --> src/language/syntax/parser/traveler.rs:75:18 [INFO] [stderr] | [INFO] [stderr] 75 | for c in sequence { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:8:10 [INFO] [stderr] | [INFO] [stderr] 8 | Call(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::box_vec)] on by default [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:15:11 [INFO] [stderr] | [INFO] [stderr] 15 | Block(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:19:25 [INFO] [stderr] | [INFO] [stderr] 19 | If(Box, Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:20:29 [INFO] [stderr] | [INFO] [stderr] 20 | IfElse(Box, Box>, Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `Box>`. Consider using just `Vec` [INFO] [stderr] --> src/language/syntax/parser/ast.rs:20:50 [INFO] [stderr] | [INFO] [stderr] 20 | IfElse(Box, Box>, Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: `Vec` is already on the heap, `Box>` makes an extra allocation. [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#box_vec [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/language/syntax/parser/mod.rs:133:77 [INFO] [stderr] | [INFO] [stderr] 133 | TokenType::CharLiteral => Expression::Atom(Value::CharLiteral(self.traveler.current_content().chars().nth(0).unwrap().clone())), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.traveler.current_content().chars().nth(0).unwrap()` [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: length comparison to zero [INFO] [stderr] --> src/language/vm/value.rs:71:44 [INFO] [stderr] | [INFO] [stderr] 71 | Value::StringLiteral(ref v) => v.len() > 0, [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!v.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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/language/vm/mod.rs:59:36 [INFO] [stderr] | [INFO] [stderr] 59 | Op::Name(ref n) => match scopes.get(n) { [INFO] [stderr] | ____________________________________^ [INFO] [stderr] 60 | | Some(v) => self.stack.push(v.clone()), [INFO] [stderr] 61 | | None => (), [INFO] [stderr] 62 | | }, [INFO] [stderr] | |_________________^ help: try this: `if let Some(v) = scopes.get(n) { self.stack.push(v.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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/language/vm/mod.rs:64:21 [INFO] [stderr] | [INFO] [stderr] 64 | / match scopes.get(n) { [INFO] [stderr] 65 | | Some(v) => self.stack.push(v.clone()), [INFO] [stderr] 66 | | None => (), [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____________________^ help: try this: `if let Some(v) = scopes.get(n) { self.stack.push(v.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/language/vm/mod.rs:108:37 [INFO] [stderr] | [INFO] [stderr] 108 | / match try!(frame.run(scopes)) { [INFO] [stderr] 109 | | Some(result) => self.stack.push(result), [INFO] [stderr] 110 | | None => (), [INFO] [stderr] 111 | | } [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] 108 | if let Some(result) = match $ expr { [INFO] [stderr] 109 | $ crate :: result :: Result :: Ok ( val ) => val , $ crate :: result :: Result [INFO] [stderr] 110 | :: Err ( err ) => { [INFO] [stderr] 111 | return $ crate :: result :: Result :: Err ( [INFO] [stderr] 112 | $ crate :: convert :: From :: from ( err ) ) } } { self.stack.push(result) } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/language/mod.rs:87:28 [INFO] [stderr] | [INFO] [stderr] 87 | let body = match body { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 88 | | &Some(ref b) => statements(b.clone()), [INFO] [stderr] 89 | | &None => vec!(Op::Value(Value::Nil)), // xd this is good haha [INFO] [stderr] 90 | | }; [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] 87 | let body = match *body { [INFO] [stderr] 88 | Some(ref b) => statements(b.clone()), [INFO] [stderr] 89 | None => vec!(Op::Value(Value::Nil)), // xd this is good haha [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/language/mod.rs:98:17 [INFO] [stderr] | [INFO] [stderr] 98 | / match *name { [INFO] [stderr] 99 | | Some(ref n) => { [INFO] [stderr] 100 | | script.push(Op::Value(Value::StringLiteral(n.clone()))); [INFO] [stderr] 101 | | script.push(Op::Define) [INFO] [stderr] 102 | | }, [INFO] [stderr] 103 | | None => (), [INFO] [stderr] 104 | | } [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] 98 | if let Some(ref n) = *name { [INFO] [stderr] 99 | script.push(Op::Value(Value::StringLiteral(n.clone()))); [INFO] [stderr] 100 | script.push(Op::Define) [INFO] [stderr] 101 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:53:17 [INFO] [stderr] | [INFO] [stderr] 53 | vm.run(&mut scopes); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:92:5 [INFO] [stderr] | [INFO] [stderr] 92 | vm.run(&mut scopes); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1.93s [INFO] running `"docker" "inspect" "e97615bbce5aec5a47800af8f87ef321e65e3c8c99fb41b6fe55e3918ed793df"` [INFO] running `"docker" "rm" "-f" "e97615bbce5aec5a47800af8f87ef321e65e3c8c99fb41b6fe55e3918ed793df"` [INFO] [stdout] e97615bbce5aec5a47800af8f87ef321e65e3c8c99fb41b6fe55e3918ed793df