[INFO] updating cached repository samdoiron/lithp [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/samdoiron/lithp [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/samdoiron/lithp" "work/ex/clippy-test-run/sources/stable/gh/samdoiron/lithp"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/samdoiron/lithp'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/samdoiron/lithp" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/samdoiron/lithp"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/samdoiron/lithp'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] c3230eaacd3a82327960d1a244213fa1535f9dc7 [INFO] sha for GitHub repo samdoiron/lithp: c3230eaacd3a82327960d1a244213fa1535f9dc7 [INFO] validating manifest of samdoiron/lithp 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 samdoiron/lithp 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 samdoiron/lithp [INFO] finished frobbing samdoiron/lithp [INFO] frobbed toml for samdoiron/lithp written to work/ex/clippy-test-run/sources/stable/gh/samdoiron/lithp/Cargo.toml [INFO] started frobbing samdoiron/lithp [INFO] finished frobbing samdoiron/lithp [INFO] frobbed toml for samdoiron/lithp written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/samdoiron/lithp/Cargo.toml [INFO] crate samdoiron/lithp 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 samdoiron/lithp 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-2/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/samdoiron/lithp:/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] b089bdaf5214b6ca441942dc1f70f97ec64a11e76c63c9280862ef47e896e2a6 [INFO] running `"docker" "start" "-a" "b089bdaf5214b6ca441942dc1f70f97ec64a11e76c63c9280862ef47e896e2a6"` [INFO] [stderr] Checking lithp v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/parser.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | tokens: tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [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/parser.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | tokens: tokens, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `tokens` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/eval.rs:6:20 [INFO] [stderr] | [INFO] [stderr] 6 | const BUILT_INS: [&'static str; 18] = ["define", "+", "-", "*", "/", "cons", [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/eval.rs:40:5 [INFO] [stderr] | [INFO] [stderr] 40 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/eval.rs:6:20 [INFO] [stderr] | [INFO] [stderr] 6 | const BUILT_INS: [&'static str; 18] = ["define", "+", "-", "*", "/", "cons", [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/eval.rs:40:5 [INFO] [stderr] | [INFO] [stderr] 40 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/eval.rs:27:18 [INFO] [stderr] | [INFO] [stderr] 27 | let result = match atom { [INFO] [stderr] | __________________^ [INFO] [stderr] 28 | | Atom::List(atoms) => { [INFO] [stderr] 29 | | let mut evaluated = Vec::with_capacity(atoms.len()); [INFO] [stderr] 30 | | for atom in atoms { [INFO] [stderr] ... | [INFO] [stderr] 38 | | _ => Err("eval_atoms must be called with atom list") [INFO] [stderr] 39 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/eval.rs:91:5 [INFO] [stderr] | [INFO] [stderr] 91 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/eval.rs:90:18 [INFO] [stderr] | [INFO] [stderr] 90 | let result = eval_atoms(new_scope, Atom::List(expressions.to_vec())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/eval.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/eval.rs:27:18 [INFO] [stderr] | [INFO] [stderr] 27 | let result = match atom { [INFO] [stderr] | __________________^ [INFO] [stderr] 28 | | Atom::List(atoms) => { [INFO] [stderr] 29 | | let mut evaluated = Vec::with_capacity(atoms.len()); [INFO] [stderr] 30 | | for atom in atoms { [INFO] [stderr] ... | [INFO] [stderr] 38 | | _ => Err("eval_atoms must be called with atom list") [INFO] [stderr] 39 | | }; [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/eval.rs:91:5 [INFO] [stderr] | [INFO] [stderr] 91 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/eval.rs:90:18 [INFO] [stderr] | [INFO] [stderr] 90 | let result = eval_atoms(new_scope, Atom::List(expressions.to_vec())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/eval.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | result [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/eval.rs:104:18 [INFO] [stderr] | [INFO] [stderr] 104 | let result = eval_atoms(new_scope, Atom::List(expressions.to_vec())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eval.rs:263:5 [INFO] [stderr] | [INFO] [stderr] 263 | return eval_atoms(call_scope, *closure.body.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `eval_atoms(call_scope, *closure.body.clone())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/eval.rs:104:18 [INFO] [stderr] | [INFO] [stderr] 104 | let result = eval_atoms(new_scope, Atom::List(expressions.to_vec())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eval.rs:263:5 [INFO] [stderr] | [INFO] [stderr] 263 | return eval_atoms(call_scope, *closure.body.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `eval_atoms(call_scope, *closure.body.clone())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/scope.rs:34:23 [INFO] [stderr] | [INFO] [stderr] 34 | None => { self.parent.as_ref().map(|p| (*p).borrow_mut().set_inherited(name, value)); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(p) = self.parent.as_ref() { (*p).borrow_mut().set_inherited(name, value) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/scope.rs:34:23 [INFO] [stderr] | [INFO] [stderr] 34 | None => { self.parent.as_ref().map(|p| (*p).borrow_mut().set_inherited(name, value)); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- [INFO] [stderr] | | [INFO] [stderr] | help: try this: `if let Some(p) = self.parent.as_ref() { (*p).borrow_mut().set_inherited(name, value) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/eval.rs:74:5 [INFO] [stderr] | [INFO] [stderr] 74 | / if let &Ok(ref evaluated) = &result { [INFO] [stderr] 75 | | println!("eval( {} ) -> {}", original, evaluated) [INFO] [stderr] 76 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 74 | if let Ok(ref evaluated) = result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/eval.rs:74:5 [INFO] [stderr] | [INFO] [stderr] 74 | / if let &Ok(ref evaluated) = &result { [INFO] [stderr] 75 | | println!("eval( {} ) -> {}", original, evaluated) [INFO] [stderr] 76 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 74 | if let Ok(ref evaluated) = result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | / match atom { [INFO] [stderr] 146 | | &$t(ref val) => result.push(val.clone()), [INFO] [stderr] 147 | | _ => return Err("invalid format") [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 158 | let param_names = extract!(Atom::Identifier, params); [INFO] [stderr] | ---------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:186:9 [INFO] [stderr] | [INFO] [stderr] 186 | / match arg { [INFO] [stderr] 187 | | &Atom::List(ref items) if items.len() == 2 => { [INFO] [stderr] 188 | | let evaluated_condition = try!(eval_atom(scope.clone(), [INFO] [stderr] 189 | | items[0].clone())); [INFO] [stderr] ... | [INFO] [stderr] 194 | | _ => return Err("cond elements must be pairs") [INFO] [stderr] 195 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 186 | match *arg { [INFO] [stderr] 187 | Atom::List(ref items) if items.len() == 2 => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | / match atom { [INFO] [stderr] 146 | | &$t(ref val) => result.push(val.clone()), [INFO] [stderr] 147 | | _ => return Err("invalid format") [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] 158 | let param_names = extract!(Atom::Identifier, params); [INFO] [stderr] --> src/eval.rs:229:5 [INFO] [stderr] | ---------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] 229 | / match func { [INFO] [stderr] 230 | | &Atom::Identifier(ref name) => { [INFO] [stderr] 231 | | let name_ref: &str = name; [INFO] [stderr] 232 | | match name_ref { [INFO] [stderr] ... | [INFO] [stderr] 250 | | _ => Err("cannot apply value of given type") [INFO] [stderr] 251 | | } [INFO] [stderr] | |_____^ [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: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *func { [INFO] [stderr] 230 | Atom::Identifier(ref name) => { [INFO] [stderr] 231 | let name_ref: &str = name; [INFO] [stderr] 232 | match name_ref { [INFO] [stderr] 233 | "+" => math(0, &|a, &b| a + b, args), [INFO] [stderr] 234 | "*" => math(1, &|a, &b| a * b, args), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:186:9 [INFO] [stderr] | [INFO] [stderr] 186 | / match arg { [INFO] [stderr] 187 | | &Atom::List(ref items) if items.len() == 2 => { [INFO] [stderr] 188 | | let evaluated_condition = try!(eval_atom(scope.clone(), [INFO] [stderr] 189 | | items[0].clone())); [INFO] [stderr] ... | [INFO] [stderr] 194 | | _ => return Err("cond elements must be pairs") [INFO] [stderr] 195 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 186 | match *arg { [INFO] [stderr] 187 | Atom::List(ref items) if items.len() == 2 => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/eval.rs:268:5 [INFO] [stderr] | [INFO] [stderr] 268 | / match &cdr[0] { [INFO] [stderr] 269 | | &Atom::List(ref atoms) => Ok(atoms[0].clone()), [INFO] [stderr] 270 | | _ => Err("invalid argument to car") [INFO] [stderr] 271 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 268 | match cdr[0] { [INFO] [stderr] 269 | Atom::List(ref atoms) => Ok(atoms[0].clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | / match func { [INFO] [stderr] 230 | | &Atom::Identifier(ref name) => { [INFO] [stderr] 231 | | let name_ref: &str = name; [INFO] [stderr] 232 | | match name_ref { [INFO] [stderr] ... | [INFO] [stderr] 250 | | _ => Err("cannot apply value of given type") [INFO] [stderr] 251 | | } [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] 229 | match *func { [INFO] [stderr] 230 | Atom::Identifier(ref name) => { [INFO] [stderr] 231 | let name_ref: &str = name; [INFO] [stderr] 232 | match name_ref { [INFO] [stderr] 233 | "+" => math(0, &|a, &b| a + b, args), [INFO] [stderr] 234 | "*" => math(1, &|a, &b| a * b, args), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/eval.rs:285:5 [INFO] [stderr] | [INFO] [stderr] 285 | / match &cdr[1] { [INFO] [stderr] 286 | | &Atom::List(ref vals) => Ok(Atom::List(prepend(cdr[0].clone(), &mut vals.clone()))), [INFO] [stderr] 287 | | _ => Err("invalid type to cons() onto") [INFO] [stderr] 288 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 285 | match cdr[1] { [INFO] [stderr] 286 | Atom::List(ref vals) => Ok(Atom::List(prepend(cdr[0].clone(), &mut vals.clone()))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eval.rs:297:8 [INFO] [stderr] | [INFO] [stderr] 297 | if cdr.len() == 0 { return Err("attempted math on empty list") } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cdr.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | / match atom { [INFO] [stderr] 146 | | &$t(ref val) => result.push(val.clone()), [INFO] [stderr] 147 | | _ => return Err("invalid format") [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 298 | let ints = extract!(Atom::Integer, cdr); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/eval.rs:268:5 [INFO] [stderr] | [INFO] [stderr] 268 | / match &cdr[0] { [INFO] [stderr] 269 | | &Atom::List(ref atoms) => Ok(atoms[0].clone()), [INFO] [stderr] 270 | | _ => Err("invalid argument to car") [INFO] [stderr] 271 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 268 | match cdr[0] { [INFO] [stderr] 269 | Atom::List(ref atoms) => Ok(atoms[0].clone()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | / match atom { [INFO] [stderr] 146 | | &$t(ref val) => result.push(val.clone()), [INFO] [stderr] 147 | | _ => return Err("invalid format") [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 304 | let ints = extract!(Atom::Integer, cdr); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/eval.rs:285:5 [INFO] [stderr] | [INFO] [stderr] 285 | / match &cdr[1] { [INFO] [stderr] 286 | | &Atom::List(ref vals) => Ok(Atom::List(prepend(cdr[0].clone(), &mut vals.clone()))), [INFO] [stderr] 287 | | _ => Err("invalid type to cons() onto") [INFO] [stderr] 288 | | } [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: try [INFO] [stderr] | [INFO] [stderr] 285 | match cdr[1] { [INFO] [stderr] 286 | Atom::List(ref vals) => Ok(Atom::List(prepend(cdr[0].clone(), &mut vals.clone()))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eval.rs:297:8 [INFO] [stderr] | [INFO] [stderr] 297 | if cdr.len() == 0 { return Err("attempted math on empty list") } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cdr.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | / match atom { [INFO] [stderr] 146 | | &$t(ref val) => result.push(val.clone()), [INFO] [stderr] 147 | | _ => return Err("invalid format") [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 298 | let ints = extract!(Atom::Integer, cdr); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eval.rs:145:13 [INFO] [stderr] | [INFO] [stderr] 145 | / match atom { [INFO] [stderr] 146 | | &$t(ref val) => result.push(val.clone()), [INFO] [stderr] 147 | | _ => return Err("invalid format") [INFO] [stderr] 148 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 304 | let ints = extract!(Atom::Integer, cdr); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/eval.rs:379:16 [INFO] [stderr] | [INFO] [stderr] 379 | if expressions.len() >= 1 => Ok((binding_list, expressions)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!expressions.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | / match self { [INFO] [stderr] 18 | | &Atom::List(ref atoms) => { [INFO] [stderr] 19 | | try!(fmt.write_str("( ")); [INFO] [stderr] 20 | | for atom in atoms { [INFO] [stderr] ... | [INFO] [stderr] 33 | | }, [INFO] [stderr] 34 | | } [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] 17 | match *self { [INFO] [stderr] 18 | Atom::List(ref atoms) => { [INFO] [stderr] 19 | try!(fmt.write_str("( ")); [INFO] [stderr] 20 | for atom in atoms { [INFO] [stderr] 21 | try!(atom.fmt(fmt)); [INFO] [stderr] 22 | try!(fmt.write_char(' ')); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:51:20 [INFO] [stderr] | [INFO] [stderr] 51 | if self.tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.tokens.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:62:12 [INFO] [stderr] | [INFO] [stderr] 62 | if self.tokens.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.tokens.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/eval.rs:379:16 [INFO] [stderr] | [INFO] [stderr] 379 | if expressions.len() >= 1 => Ok((binding_list, expressions)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!expressions.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:17:9 [INFO] [stderr] | [INFO] [stderr] 17 | / match self { [INFO] [stderr] 18 | | &Atom::List(ref atoms) => { [INFO] [stderr] 19 | | try!(fmt.write_str("( ")); [INFO] [stderr] 20 | | for atom in atoms { [INFO] [stderr] ... | [INFO] [stderr] 33 | | }, [INFO] [stderr] 34 | | } [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] 17 | match *self { [INFO] [stderr] 18 | Atom::List(ref atoms) => { [INFO] [stderr] 19 | try!(fmt.write_str("( ")); [INFO] [stderr] 20 | for atom in atoms { [INFO] [stderr] 21 | try!(atom.fmt(fmt)); [INFO] [stderr] 22 | try!(fmt.write_char(' ')); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | / match result { [INFO] [stderr] 26 | | Err(msg) => println!("Evaluation Error: {}", msg), [INFO] [stderr] 27 | | Ok(_) => () [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(msg) = result { println!("Evaluation Error: {}", msg) }` [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: length comparison to zero [INFO] [stderr] --> src/parser.rs:51:20 [INFO] [stderr] | [INFO] [stderr] 51 | if self.tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.tokens.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:62:12 [INFO] [stderr] | [INFO] [stderr] 62 | if self.tokens.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.tokens.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/main.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | / match result { [INFO] [stderr] 26 | | Err(msg) => println!("Evaluation Error: {}", msg), [INFO] [stderr] 27 | | Ok(_) => () [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(msg) = result { println!("Evaluation Error: {}", msg) }` [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] Finished dev [unoptimized + debuginfo] target(s) in 1.23s [INFO] running `"docker" "inspect" "b089bdaf5214b6ca441942dc1f70f97ec64a11e76c63c9280862ef47e896e2a6"` [INFO] running `"docker" "rm" "-f" "b089bdaf5214b6ca441942dc1f70f97ec64a11e76c63c9280862ef47e896e2a6"` [INFO] [stdout] b089bdaf5214b6ca441942dc1f70f97ec64a11e76c63c9280862ef47e896e2a6