[INFO] updating cached repository bwhetherington/rust-lisp [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/bwhetherington/rust-lisp [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/bwhetherington/rust-lisp" "work/ex/clippy-test-run/sources/stable/gh/bwhetherington/rust-lisp"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/bwhetherington/rust-lisp'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/bwhetherington/rust-lisp" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/bwhetherington/rust-lisp"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/bwhetherington/rust-lisp'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 7807a8d7f06aed76468a3df13fd60274eb297d67 [INFO] sha for GitHub repo bwhetherington/rust-lisp: 7807a8d7f06aed76468a3df13fd60274eb297d67 [INFO] validating manifest of bwhetherington/rust-lisp 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 bwhetherington/rust-lisp 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 bwhetherington/rust-lisp [INFO] finished frobbing bwhetherington/rust-lisp [INFO] frobbed toml for bwhetherington/rust-lisp written to work/ex/clippy-test-run/sources/stable/gh/bwhetherington/rust-lisp/Cargo.toml [INFO] started frobbing bwhetherington/rust-lisp [INFO] finished frobbing bwhetherington/rust-lisp [INFO] frobbed toml for bwhetherington/rust-lisp written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/bwhetherington/rust-lisp/Cargo.toml [INFO] crate bwhetherington/rust-lisp 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 bwhetherington/rust-lisp 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-1/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/bwhetherington/rust-lisp:/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] a8f83a5815c0dcd8316fa95144c802931446b08de0b61df82118d4f07b2d49db [INFO] running `"docker" "start" "-a" "a8f83a5815c0dcd8316fa95144c802931446b08de0b61df82118d4f07b2d49db"` [INFO] [stderr] Checking rust-lisp v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `std::collections::HashMap` [INFO] [stderr] --> src/interpreter.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::HashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `parser::Parser` [INFO] [stderr] --> src/intrinsics.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use parser::Parser; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/intrinsics.rs:8:25 [INFO] [stderr] | [INFO] [stderr] 8 | const RESERVED_WORDS: [&'static str; 6] = [ [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/intrinsics.rs:17:28 [INFO] [stderr] | [INFO] [stderr] 17 | const FIELD_NAMES_FORMAT: &'static str = "{}-field-names"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unused import: `std::fs` [INFO] [stderr] --> src/utils.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::fs; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `environment::Environment` [INFO] [stderr] --> src/values.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use environment::Environment; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:26:14 [INFO] [stderr] | [INFO] [stderr] 26 | const NAME: &'static str = env!("CARGO_PKG_NAME"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:27:17 [INFO] [stderr] | [INFO] [stderr] 27 | const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/utils.rs:5:29 [INFO] [stderr] | [INFO] [stderr] 5 | if let Some(home_dir) = env::home_dir() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::collections::HashMap` [INFO] [stderr] --> src/interpreter.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use std::collections::HashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `parser::Parser` [INFO] [stderr] --> src/intrinsics.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use parser::Parser; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/intrinsics.rs:8:25 [INFO] [stderr] | [INFO] [stderr] 8 | const RESERVED_WORDS: [&'static str; 6] = [ [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/intrinsics.rs:17:28 [INFO] [stderr] | [INFO] [stderr] 17 | const FIELD_NAMES_FORMAT: &'static str = "{}-field-names"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unused import: `std::fs` [INFO] [stderr] --> src/utils.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::fs; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `environment::Environment` [INFO] [stderr] --> src/values.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use environment::Environment; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:26:14 [INFO] [stderr] | [INFO] [stderr] 26 | const NAME: &'static str = env!("CARGO_PKG_NAME"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/main.rs:27:17 [INFO] [stderr] | [INFO] [stderr] 27 | const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/utils.rs:5:29 [INFO] [stderr] | [INFO] [stderr] 5 | if let Some(home_dir) = env::home_dir() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `env` [INFO] [stderr] --> src/intrinsics.rs:174:20 [INFO] [stderr] | [INFO] [stderr] 174 | pub fn _lambda(env: Env, exprs: Exprs) -> Output { [INFO] [stderr] | ^^^ help: consider using `_env` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `num_values` [INFO] [stderr] --> src/intrinsics.rs:335:29 [INFO] [stderr] | [INFO] [stderr] 335 | let num_values = len - 1; [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_num_values` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `env` [INFO] [stderr] --> src/intrinsics.rs:174:20 [INFO] [stderr] | [INFO] [stderr] 174 | pub fn _lambda(env: Env, exprs: Exprs) -> Output { [INFO] [stderr] | ^^^ help: consider using `_env` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `num_values` [INFO] [stderr] --> src/intrinsics.rs:335:29 [INFO] [stderr] | [INFO] [stderr] 335 | let num_values = len - 1; [INFO] [stderr] | ^^^^^^^^^^ help: consider using `_num_values` instead [INFO] [stderr] [INFO] [stderr] warning: method is never used: `parse_from_str` [INFO] [stderr] --> src/parser.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn parse_from_str(&mut self, s: &str) -> Parse { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `peak_char` [INFO] [stderr] --> src/parser.rs:170:5 [INFO] [stderr] | [INFO] [stderr] 170 | fn peak_char(&mut self, r: &mut BufReader) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `FIELD_NAMES_FORMAT` [INFO] [stderr] --> src/intrinsics.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | const FIELD_NAMES_FORMAT: &'static str = "{}-field-names"; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `cur_scope` [INFO] [stderr] --> src/environment.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | fn cur_scope(&self) -> &HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `exps`. [INFO] [stderr] --> src/sexpr.rs:38:30 [INFO] [stderr] | [INFO] [stderr] 38 | for i in 0..len - 1 { [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] 38 | for in exps.iter().take(len - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:141:29 [INFO] [stderr] | [INFO] [stderr] 141 | Err(format!("Cannot redefine empty list.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Cannot redefine empty list.".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:185:21 [INFO] [stderr] | [INFO] [stderr] 185 | / match param { [INFO] [stderr] 186 | | &SExpr::Ident(ref s) => names.push(s.to_string()), [INFO] [stderr] 187 | | _ => return Err(not_an_identifier(param)) [INFO] [stderr] 188 | | } [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] 185 | match *param { [INFO] [stderr] 186 | SExpr::Ident(ref s) => names.push(s.to_string()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:366:37 [INFO] [stderr] | [INFO] [stderr] 366 | Err(format!("hi")) [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using .to_string(): `"hi".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:405:17 [INFO] [stderr] | [INFO] [stderr] 405 | / match code { [INFO] [stderr] 406 | | &Num(n) => n as i32, [INFO] [stderr] 407 | | _ => return Err(not_a_number(code)) [INFO] [stderr] 408 | | } [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] 405 | match *code { [INFO] [stderr] 406 | Num(n) => n as i32, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:445:13 [INFO] [stderr] | [INFO] [stderr] 445 | / match arg { [INFO] [stderr] 446 | | &Num(num) => sum += num, [INFO] [stderr] 447 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 448 | | } [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] 445 | match *arg { [INFO] [stderr] 446 | Num(num) => sum += num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:461:13 [INFO] [stderr] | [INFO] [stderr] 461 | / match first { [INFO] [stderr] 462 | | &Num(n) => { [INFO] [stderr] 463 | | if len == 1 { [INFO] [stderr] 464 | | Ok(Num(-n)) [INFO] [stderr] ... | [INFO] [stderr] 476 | | _ => Err(not_a_number(first)) [INFO] [stderr] 477 | | } [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] 461 | match *first { [INFO] [stderr] 462 | Num(n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:468:29 [INFO] [stderr] | [INFO] [stderr] 468 | / match arg { [INFO] [stderr] 469 | | &Num(num) => acc -= num, [INFO] [stderr] 470 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 471 | | } [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] 468 | match *arg { [INFO] [stderr] 469 | Num(num) => acc -= num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:489:13 [INFO] [stderr] | [INFO] [stderr] 489 | / match arg { [INFO] [stderr] 490 | | &Num(num) => prod *= num, [INFO] [stderr] 491 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 492 | | } [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] 489 | match *arg { [INFO] [stderr] 490 | Num(num) => prod *= num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:505:13 [INFO] [stderr] | [INFO] [stderr] 505 | / match first { [INFO] [stderr] 506 | | &Num(n) => { [INFO] [stderr] 507 | | if len == 1 { [INFO] [stderr] 508 | | Ok(Num(1.0 / n)) [INFO] [stderr] ... | [INFO] [stderr] 520 | | _ => Err(not_a_number(first)) [INFO] [stderr] 521 | | } [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] 505 | match *first { [INFO] [stderr] 506 | Num(n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:512:29 [INFO] [stderr] | [INFO] [stderr] 512 | / match arg { [INFO] [stderr] 513 | | &Num(num) => acc /= num, [INFO] [stderr] 514 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 515 | | } [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] 512 | match *arg { [INFO] [stderr] 513 | Num(num) => acc /= num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:536:22 [INFO] [stderr] | [INFO] [stderr] 536 | _ => Err(format!("\"modulo\" must be passed nums.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"modulo\" must be passed nums.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:547:9 [INFO] [stderr] | [INFO] [stderr] 547 | / match a { [INFO] [stderr] 548 | | &Num(a) => ok(f64::sqrt(a)), [INFO] [stderr] 549 | | _ => Err(format!("\"sqrt\" must be passed a num.")) [INFO] [stderr] 550 | | } [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] 547 | match *a { [INFO] [stderr] 548 | Num(a) => ok(f64::sqrt(a)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:549:22 [INFO] [stderr] | [INFO] [stderr] 549 | _ => Err(format!("\"sqrt\" must be passed a num.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"sqrt\" must be passed a num.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:563:22 [INFO] [stderr] | [INFO] [stderr] 563 | _ => Err(format!("\"pow\" must be passed nums.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"pow\" must be passed nums.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:574:9 [INFO] [stderr] | [INFO] [stderr] 574 | / match arg { [INFO] [stderr] 575 | | &Num(_) => ok(true), [INFO] [stderr] 576 | | _ => ok(false) [INFO] [stderr] 577 | | } [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] 574 | match *arg { [INFO] [stderr] 575 | Num(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:587:9 [INFO] [stderr] | [INFO] [stderr] 587 | / match arg { [INFO] [stderr] 588 | | &Bool(_) => ok(true), [INFO] [stderr] 589 | | _ => ok(false) [INFO] [stderr] 590 | | } [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] 587 | match *arg { [INFO] [stderr] 588 | Bool(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:600:9 [INFO] [stderr] | [INFO] [stderr] 600 | / match arg { [INFO] [stderr] 601 | | &Str(_) => ok(true), [INFO] [stderr] 602 | | _ => ok(false) [INFO] [stderr] 603 | | } [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] 600 | match *arg { [INFO] [stderr] 601 | Str(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:613:9 [INFO] [stderr] | [INFO] [stderr] 613 | / match arg { [INFO] [stderr] 614 | | &List(_) => ok(true), [INFO] [stderr] 615 | | _ => ok(false) [INFO] [stderr] 616 | | } [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] 613 | match *arg { [INFO] [stderr] 614 | List(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:626:9 [INFO] [stderr] | [INFO] [stderr] 626 | / match arg { [INFO] [stderr] 627 | | &Intrinsic(_) => ok(true), [INFO] [stderr] 628 | | &Func(_, _) => ok(true), [INFO] [stderr] 629 | | _ => ok(false) [INFO] [stderr] 630 | | } [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] 626 | match *arg { [INFO] [stderr] 627 | Intrinsic(_) => ok(true), [INFO] [stderr] 628 | Func(_, _) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:671:9 [INFO] [stderr] | [INFO] [stderr] 671 | / match list { [INFO] [stderr] 672 | | &List(ref vals) => { [INFO] [stderr] 673 | | let len = vals.len(); [INFO] [stderr] 674 | | if len == 0 { [INFO] [stderr] ... | [INFO] [stderr] 680 | | _ => Err(format!("{} is not a list.", list)) [INFO] [stderr] 681 | | } [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] 671 | match *list { [INFO] [stderr] 672 | List(ref vals) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:675:25 [INFO] [stderr] | [INFO] [stderr] 675 | Err(format!("Cannot call car on an empty list.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Cannot call car on an empty list.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:691:9 [INFO] [stderr] | [INFO] [stderr] 691 | / match list { [INFO] [stderr] 692 | | &List(ref vals) => { [INFO] [stderr] 693 | | let len = vals.len(); [INFO] [stderr] 694 | | if len == 0 { [INFO] [stderr] ... | [INFO] [stderr] 706 | | _ => Err(format!("{} is not a list.", list)) [INFO] [stderr] 707 | | } [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] 691 | match *list { [INFO] [stderr] 692 | List(ref vals) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:695:25 [INFO] [stderr] | [INFO] [stderr] 695 | Err(format!("Cannot call cdr on an empty list.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Cannot call cdr on an empty list.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:717:9 [INFO] [stderr] | [INFO] [stderr] 717 | / match list { [INFO] [stderr] 718 | | &List(ref vals) => ok(vals.len() as f64), [INFO] [stderr] 719 | | _ => Err(format!("{} is not a list.", list)) [INFO] [stderr] 720 | | } [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] 717 | match *list { [INFO] [stderr] 718 | List(ref vals) => ok(vals.len() as f64), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:802:22 [INFO] [stderr] | [INFO] [stderr] 802 | _ => Err(format!("\"or\" may only be called on bool values.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"or\" may only be called on bool values.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:814:22 [INFO] [stderr] | [INFO] [stderr] 814 | _ => Err(format!("\"and\" may only be called on bool values.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"and\" may only be called on bool values.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:840:9 [INFO] [stderr] | [INFO] [stderr] 840 | / match arg { [INFO] [stderr] 841 | | &Bool(b) => ok(!b), [INFO] [stderr] 842 | | _ => Err(format!("{} is not a bool.", arg)) [INFO] [stderr] 843 | | } [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] 840 | match *arg { [INFO] [stderr] 841 | Bool(b) => ok(!b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: method is never used: `parse_from_str` [INFO] [stderr] --> src/parser.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn parse_from_str(&mut self, s: &str) -> Parse { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `peak_char` [INFO] [stderr] --> src/parser.rs:170:5 [INFO] [stderr] | [INFO] [stderr] 170 | fn peak_char(&mut self, r: &mut BufReader) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `FIELD_NAMES_FORMAT` [INFO] [stderr] --> src/intrinsics.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | const FIELD_NAMES_FORMAT: &'static str = "{}-field-names"; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `cur_scope` [INFO] [stderr] --> src/environment.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | fn cur_scope(&self) -> &HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/values.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / match self { [INFO] [stderr] 23 | | // num [INFO] [stderr] 24 | | &Num(n) => write!(f, "{}", n), [INFO] [stderr] 25 | | [INFO] [stderr] ... | [INFO] [stderr] 93 | | } [INFO] [stderr] 94 | | } [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] 22 | match *self { [INFO] [stderr] 23 | // num [INFO] [stderr] 24 | Num(n) => write!(f, "{}", n), [INFO] [stderr] 25 | [INFO] [stderr] 26 | // #t | #f [INFO] [stderr] 27 | Bool(b) => if b { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `exps`. [INFO] [stderr] --> src/values.rs:41:30 [INFO] [stderr] | [INFO] [stderr] 41 | for i in 0..len - 1 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 41 | for in exps.iter().take(len - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `args`. [INFO] [stderr] --> src/values.rs:57:30 [INFO] [stderr] | [INFO] [stderr] 57 | for i in 0..args.len() - 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 57 | for in args.iter().take(args.len() - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `environment::Environment` [INFO] [stderr] --> src/environment.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new() -> Environment { [INFO] [stderr] 10 | | let mut env = Environment { [INFO] [stderr] 11 | | stack: vec![] [INFO] [stderr] 12 | | }; [INFO] [stderr] 13 | | env.enter_scope(); [INFO] [stderr] 14 | | env [INFO] [stderr] 15 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 4 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `exps`. [INFO] [stderr] --> src/sexpr.rs:38:30 [INFO] [stderr] | [INFO] [stderr] 38 | for i in 0..len - 1 { [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] 38 | for in exps.iter().take(len - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:85:43 [INFO] [stderr] | [INFO] [stderr] 85 | Value::List(ref l) if l.len() == 0 => continue, [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `l.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: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:141:29 [INFO] [stderr] | [INFO] [stderr] 141 | Err(format!("Cannot redefine empty list.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Cannot redefine empty list.".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:185:21 [INFO] [stderr] | [INFO] [stderr] 185 | / match param { [INFO] [stderr] 186 | | &SExpr::Ident(ref s) => names.push(s.to_string()), [INFO] [stderr] 187 | | _ => return Err(not_an_identifier(param)) [INFO] [stderr] 188 | | } [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] 185 | match *param { [INFO] [stderr] 186 | SExpr::Ident(ref s) => names.push(s.to_string()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:366:37 [INFO] [stderr] | [INFO] [stderr] 366 | Err(format!("hi")) [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using .to_string(): `"hi".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:405:17 [INFO] [stderr] | [INFO] [stderr] 405 | / match code { [INFO] [stderr] 406 | | &Num(n) => n as i32, [INFO] [stderr] 407 | | _ => return Err(not_a_number(code)) [INFO] [stderr] 408 | | } [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] 405 | match *code { [INFO] [stderr] 406 | Num(n) => n as i32, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:445:13 [INFO] [stderr] | [INFO] [stderr] 445 | / match arg { [INFO] [stderr] 446 | | &Num(num) => sum += num, [INFO] [stderr] 447 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 448 | | } [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] 445 | match *arg { [INFO] [stderr] 446 | Num(num) => sum += num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:461:13 [INFO] [stderr] | [INFO] [stderr] 461 | / match first { [INFO] [stderr] 462 | | &Num(n) => { [INFO] [stderr] 463 | | if len == 1 { [INFO] [stderr] 464 | | Ok(Num(-n)) [INFO] [stderr] ... | [INFO] [stderr] 476 | | _ => Err(not_a_number(first)) [INFO] [stderr] 477 | | } [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] 461 | match *first { [INFO] [stderr] 462 | Num(n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:468:29 [INFO] [stderr] | [INFO] [stderr] 468 | / match arg { [INFO] [stderr] 469 | | &Num(num) => acc -= num, [INFO] [stderr] 470 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 471 | | } [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] 468 | match *arg { [INFO] [stderr] 469 | Num(num) => acc -= num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:489:13 [INFO] [stderr] | [INFO] [stderr] 489 | / match arg { [INFO] [stderr] 490 | | &Num(num) => prod *= num, [INFO] [stderr] 491 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 492 | | } [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] 489 | match *arg { [INFO] [stderr] 490 | Num(num) => prod *= num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:505:13 [INFO] [stderr] | [INFO] [stderr] 505 | / match first { [INFO] [stderr] 506 | | &Num(n) => { [INFO] [stderr] 507 | | if len == 1 { [INFO] [stderr] 508 | | Ok(Num(1.0 / n)) [INFO] [stderr] ... | [INFO] [stderr] 520 | | _ => Err(not_a_number(first)) [INFO] [stderr] 521 | | } [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] 505 | match *first { [INFO] [stderr] 506 | Num(n) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:512:29 [INFO] [stderr] | [INFO] [stderr] 512 | / match arg { [INFO] [stderr] 513 | | &Num(num) => acc /= num, [INFO] [stderr] 514 | | _ => return Err(not_a_number(arg)) [INFO] [stderr] 515 | | } [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] 512 | match *arg { [INFO] [stderr] 513 | Num(num) => acc /= num, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:536:22 [INFO] [stderr] | [INFO] [stderr] 536 | _ => Err(format!("\"modulo\" must be passed nums.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"modulo\" must be passed nums.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:547:9 [INFO] [stderr] | [INFO] [stderr] 547 | / match a { [INFO] [stderr] 548 | | &Num(a) => ok(f64::sqrt(a)), [INFO] [stderr] 549 | | _ => Err(format!("\"sqrt\" must be passed a num.")) [INFO] [stderr] 550 | | } [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] 547 | match *a { [INFO] [stderr] 548 | Num(a) => ok(f64::sqrt(a)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:549:22 [INFO] [stderr] | [INFO] [stderr] 549 | _ => Err(format!("\"sqrt\" must be passed a num.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"sqrt\" must be passed a num.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:563:22 [INFO] [stderr] | [INFO] [stderr] 563 | _ => Err(format!("\"pow\" must be passed nums.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"pow\" must be passed nums.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:574:9 [INFO] [stderr] | [INFO] [stderr] 574 | / match arg { [INFO] [stderr] 575 | | &Num(_) => ok(true), [INFO] [stderr] 576 | | _ => ok(false) [INFO] [stderr] 577 | | } [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] 574 | match *arg { [INFO] [stderr] 575 | Num(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:587:9 [INFO] [stderr] | [INFO] [stderr] 587 | / match arg { [INFO] [stderr] 588 | | &Bool(_) => ok(true), [INFO] [stderr] 589 | | _ => ok(false) [INFO] [stderr] 590 | | } [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] 587 | match *arg { [INFO] [stderr] 588 | Bool(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:600:9 [INFO] [stderr] | [INFO] [stderr] 600 | / match arg { [INFO] [stderr] 601 | | &Str(_) => ok(true), [INFO] [stderr] 602 | | _ => ok(false) [INFO] [stderr] 603 | | } [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] 600 | match *arg { [INFO] [stderr] 601 | Str(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:613:9 [INFO] [stderr] | [INFO] [stderr] 613 | / match arg { [INFO] [stderr] 614 | | &List(_) => ok(true), [INFO] [stderr] 615 | | _ => ok(false) [INFO] [stderr] 616 | | } [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] 613 | match *arg { [INFO] [stderr] 614 | List(_) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:626:9 [INFO] [stderr] | [INFO] [stderr] 626 | / match arg { [INFO] [stderr] 627 | | &Intrinsic(_) => ok(true), [INFO] [stderr] 628 | | &Func(_, _) => ok(true), [INFO] [stderr] 629 | | _ => ok(false) [INFO] [stderr] 630 | | } [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] 626 | match *arg { [INFO] [stderr] 627 | Intrinsic(_) => ok(true), [INFO] [stderr] 628 | Func(_, _) => ok(true), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:671:9 [INFO] [stderr] | [INFO] [stderr] 671 | / match list { [INFO] [stderr] 672 | | &List(ref vals) => { [INFO] [stderr] 673 | | let len = vals.len(); [INFO] [stderr] 674 | | if len == 0 { [INFO] [stderr] ... | [INFO] [stderr] 680 | | _ => Err(format!("{} is not a list.", list)) [INFO] [stderr] 681 | | } [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] 671 | match *list { [INFO] [stderr] 672 | List(ref vals) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:675:25 [INFO] [stderr] | [INFO] [stderr] 675 | Err(format!("Cannot call car on an empty list.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Cannot call car on an empty list.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:691:9 [INFO] [stderr] | [INFO] [stderr] 691 | / match list { [INFO] [stderr] 692 | | &List(ref vals) => { [INFO] [stderr] 693 | | let len = vals.len(); [INFO] [stderr] 694 | | if len == 0 { [INFO] [stderr] ... | [INFO] [stderr] 706 | | _ => Err(format!("{} is not a list.", list)) [INFO] [stderr] 707 | | } [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] 691 | match *list { [INFO] [stderr] 692 | List(ref vals) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:695:25 [INFO] [stderr] | [INFO] [stderr] 695 | Err(format!("Cannot call cdr on an empty list.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Cannot call cdr on an empty list.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:717:9 [INFO] [stderr] | [INFO] [stderr] 717 | / match list { [INFO] [stderr] 718 | | &List(ref vals) => ok(vals.len() as f64), [INFO] [stderr] 719 | | _ => Err(format!("{} is not a list.", list)) [INFO] [stderr] 720 | | } [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] 717 | match *list { [INFO] [stderr] 718 | List(ref vals) => ok(vals.len() as f64), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:802:22 [INFO] [stderr] | [INFO] [stderr] 802 | _ => Err(format!("\"or\" may only be called on bool values.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"or\" may only be called on bool values.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/intrinsics.rs:814:22 [INFO] [stderr] | [INFO] [stderr] 814 | _ => Err(format!("\"and\" may only be called on bool values.")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"\"and\" may only be called on bool values.".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/intrinsics.rs:840:9 [INFO] [stderr] | [INFO] [stderr] 840 | / match arg { [INFO] [stderr] 841 | | &Bool(b) => ok(!b), [INFO] [stderr] 842 | | _ => Err(format!("{} is not a bool.", arg)) [INFO] [stderr] 843 | | } [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] 840 | match *arg { [INFO] [stderr] 841 | Bool(b) => ok(!b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/values.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / match self { [INFO] [stderr] 23 | | // num [INFO] [stderr] 24 | | &Num(n) => write!(f, "{}", n), [INFO] [stderr] 25 | | [INFO] [stderr] ... | [INFO] [stderr] 93 | | } [INFO] [stderr] 94 | | } [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] 22 | match *self { [INFO] [stderr] 23 | // num [INFO] [stderr] 24 | Num(n) => write!(f, "{}", n), [INFO] [stderr] 25 | [INFO] [stderr] 26 | // #t | #f [INFO] [stderr] 27 | Bool(b) => if b { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `exps`. [INFO] [stderr] --> src/values.rs:41:30 [INFO] [stderr] | [INFO] [stderr] 41 | for i in 0..len - 1 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 41 | for in exps.iter().take(len - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `args`. [INFO] [stderr] --> src/values.rs:57:30 [INFO] [stderr] | [INFO] [stderr] 57 | for i in 0..args.len() - 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 57 | for in args.iter().take(args.len() - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `environment::Environment` [INFO] [stderr] --> src/environment.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | / pub fn new() -> Environment { [INFO] [stderr] 10 | | let mut env = Environment { [INFO] [stderr] 11 | | stack: vec![] [INFO] [stderr] 12 | | }; [INFO] [stderr] 13 | | env.enter_scope(); [INFO] [stderr] 14 | | env [INFO] [stderr] 15 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 4 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:85:43 [INFO] [stderr] | [INFO] [stderr] 85 | Value::List(ref l) if l.len() == 0 => continue, [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `l.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] Finished dev [unoptimized + debuginfo] target(s) in 1.19s [INFO] running `"docker" "inspect" "a8f83a5815c0dcd8316fa95144c802931446b08de0b61df82118d4f07b2d49db"` [INFO] running `"docker" "rm" "-f" "a8f83a5815c0dcd8316fa95144c802931446b08de0b61df82118d4f07b2d49db"` [INFO] [stdout] a8f83a5815c0dcd8316fa95144c802931446b08de0b61df82118d4f07b2d49db