[INFO] crate zapper 0.9.1 is already in cache [INFO] extracting crate zapper 0.9.1 into work/ex/clippy-test-run/sources/stable/reg/zapper/0.9.1 [INFO] extracting crate zapper 0.9.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/zapper/0.9.1 [INFO] validating manifest of zapper-0.9.1 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 zapper-0.9.1 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 zapper-0.9.1 [INFO] finished frobbing zapper-0.9.1 [INFO] frobbed toml for zapper-0.9.1 written to work/ex/clippy-test-run/sources/stable/reg/zapper/0.9.1/Cargo.toml [INFO] started frobbing zapper-0.9.1 [INFO] finished frobbing zapper-0.9.1 [INFO] frobbed toml for zapper-0.9.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/zapper/0.9.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting zapper-0.9.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/zapper/0.9.1:/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] d6242afa2d57a83254602860467b1f367cce019debbdafaa58fa63d32ca33c30 [INFO] running `"docker" "start" "-a" "d6242afa2d57a83254602860467b1f367cce019debbdafaa58fa63d32ca33c30"` [INFO] [stderr] Checking rand_core v0.4.0 [INFO] [stderr] Compiling syn v0.13.11 [INFO] [stderr] Checking criterion-plot v0.3.0 [INFO] [stderr] Checking csv-core v0.1.5 [INFO] [stderr] Checking tinytemplate v1.0.1 [INFO] [stderr] Checking handlebars v0.32.4 [INFO] [stderr] Checking rand_core v0.3.1 [INFO] [stderr] Checking rand_xoshiro v0.1.0 [INFO] [stderr] Checking rand_os v0.1.1 [INFO] [stderr] Checking csv v1.0.5 [INFO] [stderr] Checking criterion v0.2.9 [INFO] [stderr] Compiling zapper_derive v0.9.0 [INFO] [stderr] Checking zapper v0.9.1 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokenizer.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | return Some(Ok(OpeningBrace)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Ok(OpeningBrace))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokenizer.rs:75:17 [INFO] [stderr] | [INFO] [stderr] 75 | return Some(Ok(Raw(next))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Ok(Raw(next)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokenizer.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | return Some(Ok(OpeningBrace)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Ok(OpeningBrace))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tokenizer.rs:75:17 [INFO] [stderr] | [INFO] [stderr] 75 | return Some(Ok(Raw(next))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Ok(Raw(next)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:141:13 [INFO] [stderr] | [INFO] [stderr] 141 | / match peek!(tokenizer, UNEXPECTED_EOB) { [INFO] [stderr] 142 | | &Token::ClosingBrace | &Token::Op(Operator::Pipe) => return Ok(args), [INFO] [stderr] 143 | | _ => args.push(Literal::parse(tokenizer)?), [INFO] [stderr] 144 | | } [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] 64 | *(match $tokenizer.peek().ok_or_else(|| String::from($err))? { [INFO] [stderr] 65 | &Err(_) => Err(String::from($err))?, [INFO] [stderr] 66 | &Ok(ref val) => val, [INFO] [stderr] 67 | }) [INFO] [stderr] 68 | }; [INFO] [stderr] 69 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | / match $tokenizer.peek().ok_or_else(|| String::from($err))? { [INFO] [stderr] 65 | | &Err(_) => Err(String::from($err))?, [INFO] [stderr] 66 | | &Ok(ref val) => val, [INFO] [stderr] 67 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 141 | match peek!(tokenizer, UNEXPECTED_EOB) { [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/bytecode.rs:260:31 [INFO] [stderr] | [INFO] [stderr] 260 | } else if let Some(_) = Env::str_var(id) { [INFO] [stderr] | ________________________- ^^^^^^^ [INFO] [stderr] 261 | | return Err(format!("{:?} is a string, numeric value was expected!", id)); [INFO] [stderr] 262 | | } else { [INFO] [stderr] 263 | | return Err(format!("Unknown identifier {:?}", id)); [INFO] [stderr] 264 | | } [INFO] [stderr] | |_________________- help: try this: `if Env::str_var(id).is_some()` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tokenizer.rs:24:18 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn value(&self) -> u32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/tokenizer.rs:60:12 [INFO] [stderr] | [INFO] [stderr] 60 | if self.source.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.source.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/ast.rs:141:13 [INFO] [stderr] | [INFO] [stderr] 141 | / match peek!(tokenizer, UNEXPECTED_EOB) { [INFO] [stderr] 142 | | &Token::ClosingBrace | &Token::Op(Operator::Pipe) => return Ok(args), [INFO] [stderr] 143 | | _ => args.push(Literal::parse(tokenizer)?), [INFO] [stderr] 144 | | } [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] 64 | *(match $tokenizer.peek().ok_or_else(|| String::from($err))? { [INFO] [stderr] 65 | &Err(_) => Err(String::from($err))?, [INFO] [stderr] 66 | &Ok(ref val) => val, [INFO] [stderr] 67 | }) [INFO] [stderr] 68 | }; [INFO] [stderr] 69 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/ast.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | / match $tokenizer.peek().ok_or_else(|| String::from($err))? { [INFO] [stderr] 65 | | &Err(_) => Err(String::from($err))?, [INFO] [stderr] 66 | | &Ok(ref val) => val, [INFO] [stderr] 67 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 141 | match peek!(tokenizer, UNEXPECTED_EOB) { [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/bytecode.rs:260:31 [INFO] [stderr] | [INFO] [stderr] 260 | } else if let Some(_) = Env::str_var(id) { [INFO] [stderr] | ________________________- ^^^^^^^ [INFO] [stderr] 261 | | return Err(format!("{:?} is a string, numeric value was expected!", id)); [INFO] [stderr] 262 | | } else { [INFO] [stderr] 263 | | return Err(format!("Unknown identifier {:?}", id)); [INFO] [stderr] 264 | | } [INFO] [stderr] | |_________________- help: try this: `if Env::str_var(id).is_some()` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tokenizer.rs:24:18 [INFO] [stderr] | [INFO] [stderr] 24 | pub fn value(&self) -> u32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/tokenizer.rs:60:12 [INFO] [stderr] | [INFO] [stderr] 60 | if self.source.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.source.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: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> examples/example.rs:35:18 [INFO] [stderr] | [INFO] [stderr] 35 | let factor = 10u32.pow(digits as u32) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(10u32.pow(digits as u32))` [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: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> examples/manual_example.rs:43:37 [INFO] [stderr] | [INFO] [stderr] 43 | "provider_code" => Some(self.provider_code as f64), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.provider_code)` [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: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> examples/manual_example.rs:85:32 [INFO] [stderr] | [INFO] [stderr] 85 | PersonNums::Age => self.age as f64, [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `f64::from(self.age)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> examples/manual_example.rs:104:30 [INFO] [stderr] | [INFO] [stderr] 104 | let factor = 10u32.pow(digits as u32) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(10u32.pow(digits as u32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> benches/benchmark.rs:41:18 [INFO] [stderr] | [INFO] [stderr] 41 | let factor = 10u32.pow(digits as u32) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(10u32.pow(digits as u32))` [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] Finished dev [unoptimized + debuginfo] target(s) in 23.82s [INFO] running `"docker" "inspect" "d6242afa2d57a83254602860467b1f367cce019debbdafaa58fa63d32ca33c30"` [INFO] running `"docker" "rm" "-f" "d6242afa2d57a83254602860467b1f367cce019debbdafaa58fa63d32ca33c30"` [INFO] [stdout] d6242afa2d57a83254602860467b1f367cce019debbdafaa58fa63d32ca33c30