[INFO] updating cached repository qnnnnez/rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/qnnnnez/rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/qnnnnez/rs" "work/ex/clippy-test-run/sources/stable/gh/qnnnnez/rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/qnnnnez/rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/qnnnnez/rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/qnnnnez/rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/qnnnnez/rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] c060239da32ca20a9d77c5ac2bf12f2d1c62f77e [INFO] sha for GitHub repo qnnnnez/rs: c060239da32ca20a9d77c5ac2bf12f2d1c62f77e [INFO] validating manifest of qnnnnez/rs 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 qnnnnez/rs 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 qnnnnez/rs [INFO] finished frobbing qnnnnez/rs [INFO] frobbed toml for qnnnnez/rs written to work/ex/clippy-test-run/sources/stable/gh/qnnnnez/rs/Cargo.toml [INFO] started frobbing qnnnnez/rs [INFO] finished frobbing qnnnnez/rs [INFO] frobbed toml for qnnnnez/rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/qnnnnez/rs/Cargo.toml [INFO] crate qnnnnez/rs 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 qnnnnez/rs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/qnnnnez/rs:/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] 4fb966942b484b7698f34e72a48d981f500f7d2e21a6468f04b8c80fd033fb7a [INFO] running `"docker" "start" "-a" "4fb966942b484b7698f34e72a48d981f500f7d2e21a6468f04b8c80fd033fb7a"` [INFO] [stderr] Checking rs v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/interpreter.rs:185:13 [INFO] [stderr] | [INFO] [stderr] 185 | or: or, [INFO] [stderr] | ^^^^^^ help: replace it with: `or` [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/interpreter.rs:230:49 [INFO] [stderr] | [INFO] [stderr] 230 | let result = Ok(ASTNode::CreateBinding {bindings: bindings, body: body}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `bindings` [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:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | let result = Ok(ASTNode::CreateBinding {bindings: bindings, body: body}); [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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:271:48 [INFO] [stderr] | [INFO] [stderr] 271 | let result = Ok(ASTNode::CreateLambda {args: args, body: body, closure: closure_list}); [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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:271:60 [INFO] [stderr] | [INFO] [stderr] 271 | let result = Ok(ASTNode::CreateLambda {args: args, body: body, closure: closure_list}); [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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:185:13 [INFO] [stderr] | [INFO] [stderr] 185 | or: or, [INFO] [stderr] | ^^^^^^ help: replace it with: `or` [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/interpreter.rs:230:49 [INFO] [stderr] | [INFO] [stderr] 230 | let result = Ok(ASTNode::CreateBinding {bindings: bindings, body: body}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `bindings` [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:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | let result = Ok(ASTNode::CreateBinding {bindings: bindings, body: body}); [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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:271:48 [INFO] [stderr] | [INFO] [stderr] 271 | let result = Ok(ASTNode::CreateLambda {args: args, body: body, closure: closure_list}); [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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:271:60 [INFO] [stderr] | [INFO] [stderr] 271 | let result = Ok(ASTNode::CreateLambda {args: args, body: body, closure: closure_list}); [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `body` [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: unused import: `BTreeMap` [INFO] [stderr] --> src/main.rs:1:24 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::{BTreeMap, BTreeSet}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `BTreeMap` [INFO] [stderr] --> src/main.rs:1:24 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::{BTreeMap, BTreeSet}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/sexpr.rs:109:44 [INFO] [stderr] | [INFO] [stderr] 109 | result = result * 10 + d as i64; [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(d)` [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: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/sexpr.rs:133:24 [INFO] [stderr] | [INFO] [stderr] 133 | if let None = ch { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 134 | | return Some(Err("excepting #t, #f or char, found eof".to_string())); [INFO] [stderr] 135 | | } [INFO] [stderr] | |_________________- help: try this: `if ch.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/sexpr.rs:168:16 [INFO] [stderr] | [INFO] [stderr] 168 | if let None = self.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 169 | | true [INFO] [stderr] 170 | | } else { [INFO] [stderr] 171 | | false [INFO] [stderr] 172 | | } [INFO] [stderr] | |_________- help: try this: `if self.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/interpreter.rs:56:12 [INFO] [stderr] | [INFO] [stderr] 56 | if value == true { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try simplifying it as shown: `value` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/sexpr.rs:109:44 [INFO] [stderr] | [INFO] [stderr] 109 | result = result * 10 + d as i64; [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(d)` [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: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/sexpr.rs:133:24 [INFO] [stderr] | [INFO] [stderr] 133 | if let None = ch { [INFO] [stderr] | _________________- ^^^^ [INFO] [stderr] 134 | | return Some(Err("excepting #t, #f or char, found eof".to_string())); [INFO] [stderr] 135 | | } [INFO] [stderr] | |_________________- help: try this: `if ch.is_none()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/sexpr.rs:168:16 [INFO] [stderr] | [INFO] [stderr] 168 | if let None = self.peek() { [INFO] [stderr] | _________- ^^^^ [INFO] [stderr] 169 | | true [INFO] [stderr] 170 | | } else { [INFO] [stderr] 171 | | false [INFO] [stderr] 172 | | } [INFO] [stderr] | |_________- help: try this: `if self.peek().is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:149:42 [INFO] [stderr] | [INFO] [stderr] 149 | fn parse_sexpr_list(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/interpreter.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / match &list[0] { [INFO] [stderr] 155 | | SExpr::Atom(SAtom::Symbol(sym)) => { [INFO] [stderr] 156 | | match sym.as_ref() { [INFO] [stderr] 157 | | "if" => {return self.parse_sexpr_if(list, closure)}, [INFO] [stderr] ... | [INFO] [stderr] 163 | | _ => { } [INFO] [stderr] 164 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 154 | if let SExpr::Atom(SAtom::Symbol(sym)) = &list[0] { [INFO] [stderr] 155 | match sym.as_ref() { [INFO] [stderr] 156 | "if" => {return self.parse_sexpr_if(list, closure)}, [INFO] [stderr] 157 | "let" => {return self.parse_sexpr_let(list, closure)}, [INFO] [stderr] 158 | "lambda" => {return self.parse_sexpr_lambda(list, closure)}, [INFO] [stderr] 159 | _ => { } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:167:27 [INFO] [stderr] | [INFO] [stderr] 167 | for sexpr in list.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [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:173:40 [INFO] [stderr] | [INFO] [stderr] 173 | fn parse_sexpr_if(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: equality checks against true are unnecessary [INFO] [stderr] --> src/interpreter.rs:56:12 [INFO] [stderr] | [INFO] [stderr] 56 | if value == true { [INFO] [stderr] | ^^^^^^^^^^^^^ help: try simplifying it as shown: `value` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [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:189:41 [INFO] [stderr] | [INFO] [stderr] 189 | fn parse_sexpr_let(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:198:42 [INFO] [stderr] | [INFO] [stderr] 198 | for binding in sbindings.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:223:27 [INFO] [stderr] | [INFO] [stderr] 223 | let mut it = list.into_iter(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [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:239:44 [INFO] [stderr] | [INFO] [stderr] 239 | fn parse_sexpr_lambda(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:149:42 [INFO] [stderr] | [INFO] [stderr] 149 | fn parse_sexpr_list(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:247:30 [INFO] [stderr] | [INFO] [stderr] 247 | for arg in sargs.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:260:27 [INFO] [stderr] | [INFO] [stderr] 260 | let mut it = list.into_iter(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/interpreter.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | / match &list[0] { [INFO] [stderr] 155 | | SExpr::Atom(SAtom::Symbol(sym)) => { [INFO] [stderr] 156 | | match sym.as_ref() { [INFO] [stderr] 157 | | "if" => {return self.parse_sexpr_if(list, closure)}, [INFO] [stderr] ... | [INFO] [stderr] 163 | | _ => { } [INFO] [stderr] 164 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/interpreter.rs:290:47 [INFO] [stderr] | [INFO] [stderr] 290 | let stack = self.name_map.entry(name).or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 154 | if let SExpr::Atom(SAtom::Symbol(sym)) = &list[0] { [INFO] [stderr] 155 | match sym.as_ref() { [INFO] [stderr] 156 | "if" => {return self.parse_sexpr_if(list, closure)}, [INFO] [stderr] 157 | "let" => {return self.parse_sexpr_let(list, closure)}, [INFO] [stderr] 158 | "lambda" => {return self.parse_sexpr_lambda(list, closure)}, [INFO] [stderr] 159 | _ => { } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:167:27 [INFO] [stderr] | [INFO] [stderr] 167 | for sexpr in list.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [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:173:40 [INFO] [stderr] | [INFO] [stderr] 173 | fn parse_sexpr_if(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:189:41 [INFO] [stderr] | [INFO] [stderr] 189 | fn parse_sexpr_let(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter.rs:315:24 [INFO] [stderr] | [INFO] [stderr] 315 | Ok(self.locals.get(index).unwrap().clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.locals[index]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:335:39 [INFO] [stderr] | [INFO] [stderr] 335 | let mut it = call.into_iter(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:198:42 [INFO] [stderr] | [INFO] [stderr] 198 | for binding in sbindings.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:350:46 [INFO] [stderr] | [INFO] [stderr] 350 | for (index, ast) in bindings.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:356:33 [INFO] [stderr] | [INFO] [stderr] 356 | for ast in body.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:360:44 [INFO] [stderr] | [INFO] [stderr] 360 | for (index, _) in bindings.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:223:27 [INFO] [stderr] | [INFO] [stderr] 223 | let mut it = list.into_iter(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [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:239:44 [INFO] [stderr] | [INFO] [stderr] 239 | fn parse_sexpr_lambda(&mut self, list: &Vec, closure: &mut BTreeSet) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[SExpr]` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:373:39 [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &[u32], body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] help: change `args.clone()` to [INFO] [stderr] | [INFO] [stderr] 432 | args: args.to_owned(), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:373:56 [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &[ASTNode], closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] help: change `body.clone()` to [INFO] [stderr] | [INFO] [stderr] 433 | body: body.to_owned(), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:373:80 [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[u32]` [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 used to index `arg_values` [INFO] [stderr] --> src/interpreter.rs:391:26 [INFO] [stderr] | [INFO] [stderr] 391 | for i in 0..self.args.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] 391 | for (i, ) in arg_values.iter().enumerate().take(self.args.len()) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/interpreter.rs:398:28 [INFO] [stderr] | [INFO] [stderr] 398 | if let None = interpreter.locals.get(index) { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 399 | | interpreter.locals.insert(*index, value_ref.clone()); [INFO] [stderr] 400 | | injected_closure.push(*index); [INFO] [stderr] 401 | | } [INFO] [stderr] | |_____________________- help: try this: `if interpreter.locals.get(index).is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter.rs:440:23 [INFO] [stderr] | [INFO] [stderr] 440 | callable: Box) -> Result>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] --> src/interpreter.rs:247:30 [INFO] [stderr] | [INFO] [stderr] 247 | for arg in sargs.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:260:27 [INFO] [stderr] | [INFO] [stderr] 260 | let mut it = list.into_iter(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter.rs:469:42 [INFO] [stderr] | [INFO] [stderr] 469 | let mut inject = |name: &str, f: Box) -> Result>| { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/interpreter.rs:290:47 [INFO] [stderr] | [INFO] [stderr] 290 | let stack = self.name_map.entry(name).or_insert(vec![]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/interpreter.rs:315:24 [INFO] [stderr] | [INFO] [stderr] 315 | Ok(self.locals.get(index).unwrap().clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.locals[index]` [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: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:335:39 [INFO] [stderr] | [INFO] [stderr] 335 | let mut it = call.into_iter(); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:350:46 [INFO] [stderr] | [INFO] [stderr] 350 | for (index, ast) in bindings.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:356:33 [INFO] [stderr] | [INFO] [stderr] 356 | for ast in body.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/interpreter.rs:360:44 [INFO] [stderr] | [INFO] [stderr] 360 | for (index, _) in bindings.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [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:373:39 [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &[u32], body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] help: change `args.clone()` to [INFO] [stderr] | [INFO] [stderr] 432 | args: args.to_owned(), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:373:56 [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &[ASTNode], closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] help: change `body.clone()` to [INFO] [stderr] | [INFO] [stderr] 433 | body: body.to_owned(), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/interpreter.rs:373:80 [INFO] [stderr] | [INFO] [stderr] 373 | fn create_lambda(&mut self, args: &Vec, body: &Vec, closure: &Vec) -> Box { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[u32]` [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 used to index `arg_values` [INFO] [stderr] --> src/interpreter.rs:391:26 [INFO] [stderr] | [INFO] [stderr] 391 | for i in 0..self.args.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] 391 | for (i, ) in arg_values.iter().enumerate().take(self.args.len()) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_none()` [INFO] [stderr] --> src/interpreter.rs:398:28 [INFO] [stderr] | [INFO] [stderr] 398 | if let None = interpreter.locals.get(index) { [INFO] [stderr] | _____________________- ^^^^ [INFO] [stderr] 399 | | interpreter.locals.insert(*index, value_ref.clone()); [INFO] [stderr] 400 | | injected_closure.push(*index); [INFO] [stderr] 401 | | } [INFO] [stderr] | |_____________________- help: try this: `if interpreter.locals.get(index).is_none()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter.rs:440:23 [INFO] [stderr] | [INFO] [stderr] 440 | callable: Box) -> Result>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/interpreter.rs:469:42 [INFO] [stderr] | [INFO] [stderr] 469 | let mut inject = |name: &str, f: Box) -> Result>| { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 0.92s [INFO] running `"docker" "inspect" "4fb966942b484b7698f34e72a48d981f500f7d2e21a6468f04b8c80fd033fb7a"` [INFO] running `"docker" "rm" "-f" "4fb966942b484b7698f34e72a48d981f500f7d2e21a6468f04b8c80fd033fb7a"` [INFO] [stdout] 4fb966942b484b7698f34e72a48d981f500f7d2e21a6468f04b8c80fd033fb7a